lowlevel_init.S 5.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274
  1. /*
  2. * Copyright (C) 2008 Renesas Solutions Corp.
  3. * Copyright (C) 2008 Nobuhiro Iwamatsu <iwamatsu.nobuhiro@renesas.com>
  4. * Copyright (C) 2007 Kenati Technologies, Inc.
  5. *
  6. * board/sh7763rdp/lowlevel_init.S
  7. *
  8. * This program is free software; you can redistribute it and/or
  9. * modify it under the terms of the GNU General Public License as
  10. * published by the Free Software Foundation; either version 2 of
  11. * the License, or (at your option) any later version.
  12. *
  13. * This program is distributed in the hope that it will be useful,
  14. * but WITHOUT ANY WARRANTY; without even the implied warranty of
  15. * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
  16. * GNU General Public License for more details.
  17. *
  18. * You should have received a copy of the GNU General Public License
  19. * along with this program; if not, write to the Free Software
  20. * Foundation, Inc., 59 Temple Place, Suite 330, Boston,
  21. * MA 02111-1307 USA
  22. */
  23. #include <config.h>
  24. #include <version.h>
  25. #include <asm/processor.h>
  26. #include <asm/macro.h>
  27. .global lowlevel_init
  28. .text
  29. .align 2
  30. lowlevel_init:
  31. write32 WDTCSR_A, WDTCSR_D /* Watchdog Control / Status Register */
  32. write32 WDTST_A, WDTST_D /* Watchdog Stop Time Register */
  33. write32 WDTBST_A, WDTBST_D /*
  34. * 0xFFCC0008
  35. * Watchdog Base Stop Time Register
  36. */
  37. write32 CCR_A, CCR_CACHE_ICI_D /* Address of Cache Control Register */
  38. /* Instruction Cache Invalidate */
  39. write32 MMUCR_A, MMU_CONTROL_TI_D /* MMU Control Register */
  40. /* TI == TLB Invalidate bit */
  41. write32 MSTPCR0_A, MSTPCR0_D /* Address of Power Control Register 0 */
  42. write32 MSTPCR1_A, MSTPCR1_D /* Address of Power Control Register 1 */
  43. write32 RAMCR_A, RAMCR_D
  44. mov.l MMSELR_A, r1
  45. mov.l MMSELR_D, r0
  46. synco
  47. mov.l r0, @r1
  48. mov.l @r1, r2 /* execute two reads after setting MMSELR */
  49. mov.l @r1, r2
  50. synco
  51. /* issue memory read */
  52. mov.l DDRSD_START_A, r1 /* memory address to read*/
  53. mov.l @r1, r0
  54. synco
  55. write32 MIM8_A, MIM8_D
  56. write32 MIMC_A, MIMC_D1
  57. write32 STRC_A, STRC_D
  58. write32 SDR4_A, SDR4_D
  59. write32 MIMC_A, MIMC_D2
  60. nop
  61. nop
  62. nop
  63. write32 SCR4_A, SCR4_D3
  64. write32 SCR4_A, SCR4_D2
  65. write32 SDMR02000_A, SDMR02000_D
  66. write32 SDMR00B08_A, SDMR00B08_D
  67. write32 SCR4_A, SCR4_D2
  68. write32 SCR4_A, SCR4_D4
  69. nop
  70. nop
  71. nop
  72. nop
  73. write32 SCR4_A, SCR4_D4
  74. nop
  75. nop
  76. nop
  77. nop
  78. write32 SDMR00308_A, SDMR00308_D
  79. write32 MIMC_A, MIMC_D3
  80. mov.l SCR4_A, r1
  81. mov.l SCR4_D1, r0
  82. mov.l DELAY60_D, r3
  83. delay_loop_60:
  84. mov.l r0, @r1
  85. dt r3
  86. bf delay_loop_60
  87. nop
  88. write32 CCR_A, CCR_CACHE_D_2 /* Address of Cache Control Register */
  89. bsc_init:
  90. write32 BCR_A, BCR_D
  91. write32 CS0BCR_A, CS0BCR_D
  92. write32 CS1BCR_A, CS1BCR_D
  93. write32 CS2BCR_A, CS2BCR_D
  94. write32 CS4BCR_A, CS4BCR_D
  95. write32 CS5BCR_A, CS5BCR_D
  96. write32 CS6BCR_A, CS6BCR_D
  97. write32 CS0WCR_A, CS0WCR_D
  98. write32 CS1WCR_A, CS1WCR_D
  99. write32 CS2WCR_A, CS2WCR_D
  100. write32 CS4WCR_A, CS4WCR_D
  101. write32 CS5WCR_A, CS5WCR_D
  102. write32 CS6WCR_A, CS6WCR_D
  103. write32 CS5PCR_A, CS5PCR_D
  104. write32 CS6PCR_A, CS6PCR_D
  105. mov.l DELAY200_D, r3
  106. delay_loop_200:
  107. dt r3
  108. bf delay_loop_200
  109. nop
  110. write16 PSEL0_A, PSEL0_D
  111. write16 PSEL1_A, PSEL1_D
  112. write32 ICR0_A, ICR0_D
  113. stc sr, r0 /* BL bit off(init=ON) */
  114. mov.l SR_MASK_D, r1
  115. and r1, r0
  116. ldc r0, sr
  117. rts
  118. nop
  119. .align 2
  120. DELAY60_D: .long 60
  121. DELAY200_D: .long 17800
  122. CCR_A: .long 0xFF00001C
  123. MMUCR_A: .long 0xFF000010
  124. RAMCR_A: .long 0xFF000074
  125. /* Low power mode control */
  126. MSTPCR0_A: .long 0xFFC80030
  127. MSTPCR1_A: .long 0xFFC80038
  128. /* RWBT */
  129. WDTST_A: .long 0xFFCC0000
  130. WDTCSR_A: .long 0xFFCC0004
  131. WDTBST_A: .long 0xFFCC0008
  132. /* BSC */
  133. MMSELR_A: .long 0xFE600020
  134. BCR_A: .long 0xFF801000
  135. CS0BCR_A: .long 0xFF802000
  136. CS1BCR_A: .long 0xFF802010
  137. CS2BCR_A: .long 0xFF802020
  138. CS4BCR_A: .long 0xFF802040
  139. CS5BCR_A: .long 0xFF802050
  140. CS6BCR_A: .long 0xFF802060
  141. CS0WCR_A: .long 0xFF802008
  142. CS1WCR_A: .long 0xFF802018
  143. CS2WCR_A: .long 0xFF802028
  144. CS4WCR_A: .long 0xFF802048
  145. CS5WCR_A: .long 0xFF802058
  146. CS6WCR_A: .long 0xFF802068
  147. CS5PCR_A: .long 0xFF802070
  148. CS6PCR_A: .long 0xFF802080
  149. DDRSD_START_A: .long 0xAC000000
  150. /* INTC */
  151. ICR0_A: .long 0xFFD00000
  152. /* DDR I/F */
  153. MIM8_A: .long 0xFE800008
  154. MIMC_A: .long 0xFE80000C
  155. SCR4_A: .long 0xFE800014
  156. STRC_A: .long 0xFE80001C
  157. SDR4_A: .long 0xFE800034
  158. SDMR00308_A: .long 0xFE900308
  159. SDMR00B08_A: .long 0xFE900B08
  160. SDMR02000_A: .long 0xFE902000
  161. /* GPIO */
  162. PSEL0_A: .long 0xFFEF0070
  163. PSEL1_A: .long 0xFFEF0072
  164. CCR_CACHE_ICI_D:.long 0x00000800
  165. CCR_CACHE_D_2: .long 0x00000103
  166. MMU_CONTROL_TI_D:.long 0x00000004
  167. RAMCR_D: .long 0x00000200
  168. MSTPCR0_D: .long 0x00000000
  169. MSTPCR1_D: .long 0x00000000
  170. MMSELR_D: .long 0xa5a50000
  171. BCR_D: .long 0x00000000
  172. CS0BCR_D: .long 0x77777770
  173. CS1BCR_D: .long 0x77777670
  174. CS2BCR_D: .long 0x77777670
  175. CS4BCR_D: .long 0x77777670
  176. CS5BCR_D: .long 0x77777670
  177. CS6BCR_D: .long 0x77777670
  178. CS0WCR_D: .long 0x7777770F
  179. CS1WCR_D: .long 0x22000002
  180. CS2WCR_D: .long 0x7777770F
  181. CS4WCR_D: .long 0x7777770F
  182. CS5WCR_D: .long 0x7777770F
  183. CS6WCR_D: .long 0x7777770F
  184. CS5PCR_D: .long 0x77000000
  185. CS6PCR_D: .long 0x77000000
  186. ICR0_D: .long 0x00E00000
  187. MIM8_D: .long 0x00000000
  188. MIMC_D1: .long 0x01d10008
  189. MIMC_D2: .long 0x01d10009
  190. MIMC_D3: .long 0x01d10209
  191. SCR4_D1: .long 0x00000001
  192. SCR4_D2: .long 0x00000002
  193. SCR4_D3: .long 0x00000003
  194. SCR4_D4: .long 0x00000004
  195. STRC_D: .long 0x000f3980
  196. SDR4_D: .long 0x00000300
  197. SDMR00308_D: .long 0x00000000
  198. SDMR00B08_D: .long 0x00000000
  199. SDMR02000_D: .long 0x00000000
  200. PSEL0_D: .long 0x00000001
  201. PSEL1_D: .long 0x00000244
  202. SR_MASK_D: .long 0xEFFFFF0F
  203. WDTST_D: .long 0x5A000FFF
  204. WDTCSR_D: .long 0xA5000000
  205. WDTBST_D: .long 0x55000000