lowlevel_init.S 6.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351
  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. .global lowlevel_init
  27. .text
  28. .align 2
  29. lowlevel_init:
  30. mov.l WDTCSR_A, r1 /* Watchdog Control / Status Register */
  31. mov.l WDTCSR_D, r0
  32. mov.l r0, @r1
  33. mov.l WDTST_A, r1 /* Watchdog Stop Time Register */
  34. mov.l WDTST_D, r0
  35. mov.l r0, @r1
  36. mov.l WDTBST_A, r1 /* 0xFFCC0008 (Watchdog Base Stop Time Register */
  37. mov.l WDTBST_D, r0
  38. mov.l r0, @r1
  39. mov.l CCR_A, r1 /* Address of Cache Control Register */
  40. mov.l CCR_CACHE_ICI_D, r0 /* Instruction Cache Invalidate */
  41. mov.l r0, @r1
  42. mov.l MMUCR_A, r1 /* Address of MMU Control Register */
  43. mov.l MMU_CONTROL_TI_D, r0 /* TI == TLB Invalidate bit */
  44. mov.l r0, @r1
  45. mov.l MSTPCR0_A, r1 /* Address of Power Control Register 0 */
  46. mov.l MSTPCR0_D, r0
  47. mov.l r0, @r1
  48. mov.l MSTPCR1_A, r1 /*i Address of Power Control Register 1 */
  49. mov.l MSTPCR1_D, r0
  50. mov.l r0, @r1
  51. mov.l RAMCR_A,r1
  52. mov.l RAMCR_D,r0
  53. mov.l r0, @r1
  54. mov.l MMSELR_A,r1
  55. mov.l MMSELR_D,r0
  56. synco
  57. mov.l r0, @r1
  58. mov.l @r1,r2 /* execute two reads after setting MMSELR*/
  59. mov.l @r1,r2
  60. synco
  61. /* issue memory read */
  62. mov.l DDRSD_START_A,r1 /* memory address to read*/
  63. mov.l @r1,r0
  64. synco
  65. mov.l MIM8_A,r1
  66. mov.l MIM8_D,r0
  67. mov.l r0,@r1
  68. mov.l MIMC_A,r1
  69. mov.l MIMC_D1,r0
  70. mov.l r0,@r1
  71. mov.l STRC_A,r1
  72. mov.l STRC_D,r0
  73. mov.l r0,@r1
  74. mov.l SDR4_A,r1
  75. mov.l SDR4_D,r0
  76. mov.l r0,@r1
  77. mov.l MIMC_A,r1
  78. mov.l MIMC_D2,r0
  79. mov.l r0,@r1
  80. nop
  81. nop
  82. nop
  83. mov.l SCR4_A,r1
  84. mov.l SCR4_D3,r0
  85. mov.l r0,@r1
  86. mov.l SCR4_A,r1
  87. mov.l SCR4_D2,r0
  88. mov.l r0,@r1
  89. mov.l SDMR02000_A,r1
  90. mov.l SDMR02000_D,r0
  91. mov.l r0,@r1
  92. mov.l SDMR00B08_A,r1
  93. mov.l SDMR00B08_D,r0
  94. mov.l r0,@r1
  95. mov.l SCR4_A,r1
  96. mov.l SCR4_D2,r0
  97. mov.l r0,@r1
  98. mov.l SCR4_A,r1
  99. mov.l SCR4_D4,r0
  100. mov.l r0,@r1
  101. nop
  102. nop
  103. nop
  104. nop
  105. mov.l SCR4_A,r1
  106. mov.l SCR4_D4,r0
  107. mov.l r0,@r1
  108. nop
  109. nop
  110. nop
  111. nop
  112. mov.l SDMR00308_A,r1
  113. mov.l SDMR00308_D,r0
  114. mov.l r0,@r1
  115. mov.l MIMC_A,r1
  116. mov.l MIMC_D3,r0
  117. mov.l r0,@r1
  118. mov.l SCR4_A,r1
  119. mov.l SCR4_D1,r0
  120. mov.l DELAY60_D,r3
  121. delay_loop_60:
  122. mov.l r0,@r1
  123. dt r3
  124. bf delay_loop_60
  125. nop
  126. mov.l CCR_A, r1 /* Address of Cache Control Register */
  127. mov.l CCR_CACHE_D_2, r0
  128. mov.l r0, @r1
  129. bsc_init:
  130. mov.l BCR_A, r1
  131. mov.l BCR_D, r0
  132. mov.l r0, @r1
  133. mov.l CS0BCR_A, r1
  134. mov.l CS0BCR_D, r0
  135. mov.l r0, @r1
  136. mov.l CS1BCR_A,r1
  137. mov.l CS1BCR_D,r0
  138. mov.l r0,@r1
  139. mov.l CS2BCR_A, r1
  140. mov.l CS2BCR_D, r0
  141. mov.l r0, @r1
  142. mov.l CS4BCR_A, r1
  143. mov.l CS4BCR_D, r0
  144. mov.l r0, @r1
  145. mov.l CS5BCR_A, r1
  146. mov.l CS5BCR_D, r0
  147. mov.l r0, @r1
  148. mov.l CS6BCR_A, r1
  149. mov.l CS6BCR_D, r0
  150. mov.l r0, @r1
  151. mov.l CS0WCR_A, r1
  152. mov.l CS0WCR_D, r0
  153. mov.l r0, @r1
  154. mov.l CS1WCR_A, r1
  155. mov.l CS1WCR_D, r0
  156. mov.l r0, @r1
  157. mov.l CS2WCR_A, r1
  158. mov.l CS2WCR_D, r0
  159. mov.l r0, @r1
  160. mov.l CS4WCR_A, r1
  161. mov.l CS4WCR_D, r0
  162. mov.l r0, @r1
  163. mov.l CS5WCR_A, r1
  164. mov.l CS5WCR_D, r0
  165. mov.l r0, @r1
  166. mov.l CS6WCR_A, r1
  167. mov.l CS6WCR_D, r0
  168. mov.l r0, @r1
  169. mov.l CS5PCR_A, r1
  170. mov.l CS5PCR_D, r0
  171. mov.l r0, @r1
  172. mov.l CS6PCR_A, r1
  173. mov.l CS6PCR_D, r0
  174. mov.l r0, @r1
  175. mov.l DELAY200_D,r3
  176. delay_loop_200:
  177. dt r3
  178. bf delay_loop_200
  179. nop
  180. mov.l PSEL0_A,r1
  181. mov.l PSEL0_D,r0
  182. mov.w r0,@r1
  183. mov.l PSEL1_A,r1
  184. mov.l PSEL1_D,r0
  185. mov.w r0,@r1
  186. mov.l ICR0_A,r1
  187. mov.l ICR0_D,r0
  188. mov.l r0,@r1
  189. stc sr, r0 /* BL bit off(init=ON) */
  190. mov.l SR_MASK_D, r1
  191. and r1, r0
  192. ldc r0, sr
  193. rts
  194. nop
  195. .align 2
  196. DELAY60_D: .long 60
  197. DELAY200_D: .long 17800
  198. CCR_A: .long 0xFF00001C
  199. MMUCR_A: .long 0xFF000010
  200. RAMCR_A: .long 0xFF000074
  201. /* Low power mode control */
  202. MSTPCR0_A: .long 0xFFC80030
  203. MSTPCR1_A: .long 0xFFC80038
  204. /* RWBT */
  205. WDTST_A: .long 0xFFCC0000
  206. WDTCSR_A: .long 0xFFCC0004
  207. WDTBST_A: .long 0xFFCC0008
  208. /* BSC */
  209. MMSELR_A: .long 0xFE600020
  210. BCR_A: .long 0xFF801000
  211. CS0BCR_A: .long 0xFF802000
  212. CS1BCR_A: .long 0xFF802010
  213. CS2BCR_A: .long 0xFF802020
  214. CS4BCR_A: .long 0xFF802040
  215. CS5BCR_A: .long 0xFF802050
  216. CS6BCR_A: .long 0xFF802060
  217. CS0WCR_A: .long 0xFF802008
  218. CS1WCR_A: .long 0xFF802018
  219. CS2WCR_A: .long 0xFF802028
  220. CS4WCR_A: .long 0xFF802048
  221. CS5WCR_A: .long 0xFF802058
  222. CS6WCR_A: .long 0xFF802068
  223. CS5PCR_A: .long 0xFF802070
  224. CS6PCR_A: .long 0xFF802080
  225. DDRSD_START_A: .long 0xAC000000
  226. /* INTC */
  227. ICR0_A: .long 0xFFD00000
  228. /* DDR I/F */
  229. MIM8_A: .long 0xFE800008
  230. MIMC_A: .long 0xFE80000C
  231. SCR4_A: .long 0xFE800014
  232. STRC_A: .long 0xFE80001C
  233. SDR4_A: .long 0xFE800034
  234. SDMR00308_A: .long 0xFE900308
  235. SDMR00B08_A: .long 0xFE900B08
  236. SDMR02000_A: .long 0xFE902000
  237. /* GPIO */
  238. PSEL0_A: .long 0xFFEF0070
  239. PSEL1_A: .long 0xFFEF0072
  240. CCR_CACHE_ICI_D:.long 0x00000800
  241. CCR_CACHE_D_2: .long 0x00000103
  242. MMU_CONTROL_TI_D:.long 0x00000004
  243. RAMCR_D: .long 0x00000200
  244. MSTPCR0_D: .long 0x00000000
  245. MSTPCR1_D: .long 0x00000000
  246. MMSELR_D: .long 0xa5a50000
  247. BCR_D: .long 0x00000000
  248. CS0BCR_D: .long 0x77777770
  249. CS1BCR_D: .long 0x77777670
  250. CS2BCR_D: .long 0x77777670
  251. CS4BCR_D: .long 0x77777670
  252. CS5BCR_D: .long 0x77777670
  253. CS6BCR_D: .long 0x77777670
  254. CS0WCR_D: .long 0x7777770F
  255. CS1WCR_D: .long 0x22000002
  256. CS2WCR_D: .long 0x7777770F
  257. CS4WCR_D: .long 0x7777770F
  258. CS5WCR_D: .long 0x7777770F
  259. CS6WCR_D: .long 0x7777770F
  260. CS5PCR_D: .long 0x77000000
  261. CS6PCR_D: .long 0x77000000
  262. ICR0_D: .long 0x00E00000
  263. MIM8_D: .long 0x00000000
  264. MIMC_D1: .long 0x01d10008
  265. MIMC_D2: .long 0x01d10009
  266. MIMC_D3: .long 0x01d10209
  267. SCR4_D1: .long 0x00000001
  268. SCR4_D2: .long 0x00000002
  269. SCR4_D3: .long 0x00000003
  270. SCR4_D4: .long 0x00000004
  271. STRC_D: .long 0x000f3980
  272. SDR4_D: .long 0x00000300
  273. SDMR00308_D: .long 0x00000000
  274. SDMR00B08_D: .long 0x00000000
  275. SDMR02000_D: .long 0x00000000
  276. PSEL0_D: .long 0x00000001
  277. PSEL1_D: .long 0x00000244
  278. SR_MASK_D: .long 0xEFFFFF0F
  279. WDTST_D: .long 0x5A000FFF
  280. WDTCSR_D: .long 0xA5000000
  281. WDTBST_D: .long 0x55000000