lowlevel_init.S 6.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371
  1. /*
  2. * Copyright (C) 2007,2008 Nobuhiro Iwamatsu
  3. *
  4. * u-boot/board/r7780mp/lowlevel_init.S
  5. *
  6. * This program is free software; you can redistribute it and/or
  7. * modify it under the terms of the GNU General Public License as
  8. * published by the Free Software Foundation; either version 2 of
  9. * the License, or (at your option) any later version.
  10. *
  11. * This program is distributed in the hope that it will be useful,
  12. * but WITHOUT ANY WARRANTY; without even the implied warranty of
  13. * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
  14. * GNU General Public License for more details.
  15. *
  16. * You should have received a copy of the GNU General Public License
  17. * along with this program; if not, write to the Free Software
  18. * Foundation, Inc., 59 Temple Place, Suite 330, Boston,
  19. * MA 02111-1307 USA
  20. */
  21. #include <config.h>
  22. #include <version.h>
  23. #include <asm/processor.h>
  24. #include <asm/macro.h>
  25. /*
  26. * Board specific low level init code, called _very_ early in the
  27. * startup sequence. Relocation to SDRAM has not happened yet, no
  28. * stack is available, bss section has not been initialised, etc.
  29. *
  30. * (Note: As no stack is available, no subroutines can be called...).
  31. */
  32. .global lowlevel_init
  33. .text
  34. .align 2
  35. lowlevel_init:
  36. write32 CCR_A, CCR_D /* Address of Cache Control Register */
  37. /* Instruction Cache Invalidate */
  38. write32 FRQCR_A, FRQCR_D /* Frequency control register */
  39. /* pin_multi_setting */
  40. write32 BBG_PMMR_A, BBG_PMMR_D_PMSR1
  41. write32 BBG_PMSR1_A, BBG_PMSR1_D
  42. write32 BBG_PMMR_A, BBG_PMMR_D_PMSR2
  43. write32 BBG_PMSR2_A, BBG_PMSR2_D
  44. write32 BBG_PMMR_A, BBG_PMMR_D_PMSR3
  45. write32 BBG_PMSR3_A, BBG_PMSR3_D
  46. write32 BBG_PMMR_A, BBG_PMMR_D_PMSR4
  47. write32 BBG_PMSR4_A, BBG_PMSR4_D
  48. write32 BBG_PMMR_A, BBG_PMMR_D_PMSRG
  49. write32 BBG_PMSRG_A, BBG_PMSRG_D
  50. /* cpg_setting */
  51. write32 FRQCR_A, FRQCR_D
  52. write32 DLLCSR_A, DLLCSR_D
  53. nop
  54. nop
  55. nop
  56. nop
  57. nop
  58. nop
  59. nop
  60. nop
  61. nop
  62. nop
  63. /* wait 200us */
  64. mov.l REPEAT0_R3, r3
  65. mov #0, r2
  66. repeat0:
  67. add #1, r2
  68. cmp/hs r3, r2
  69. bf repeat0
  70. nop
  71. /* bsc_setting */
  72. write32 MMSELR_A, MMSELR_D
  73. write32 BCR_A, BCR_D
  74. write32 CS0BCR_A, CS0BCR_D
  75. write32 CS1BCR_A, CS1BCR_D
  76. write32 CS2BCR_A, CS2BCR_D
  77. write32 CS4BCR_A, CS4BCR_D
  78. write32 CS5BCR_A, CS5BCR_D
  79. write32 CS6BCR_A, CS6BCR_D
  80. write32 CS0WCR_A, CS0WCR_D
  81. write32 CS1WCR_A, CS1WCR_D
  82. write32 CS2WCR_A, CS2WCR_D
  83. write32 CS4WCR_A, CS4WCR_D
  84. write32 CS5WCR_A, CS5WCR_D
  85. write32 CS6WCR_A, CS6WCR_D
  86. write32 CS5PCR_A, CS5PCR_D
  87. write32 CS6PCR_A, CS6PCR_D
  88. /* ddr_setting */
  89. /* wait 200us */
  90. mov.l REPEAT0_R3, r3
  91. mov #0, r2
  92. repeat1:
  93. add #1, r2
  94. cmp/hs r3, r2
  95. bf repeat1
  96. nop
  97. mov.l MIM_U_A, r0
  98. mov.l MIM_U_D, r1
  99. synco
  100. mov.l r1, @r0
  101. synco
  102. mov.l MIM_L_A, r0
  103. mov.l MIM_L_D0, r1
  104. synco
  105. mov.l r1, @r0
  106. synco
  107. mov.l STR_L_A, r0
  108. mov.l STR_L_D, r1
  109. synco
  110. mov.l r1, @r0
  111. synco
  112. mov.l SDR_L_A, r0
  113. mov.l SDR_L_D, r1
  114. synco
  115. mov.l r1, @r0
  116. synco
  117. nop
  118. nop
  119. nop
  120. nop
  121. mov.l SCR_L_A, r0
  122. mov.l SCR_L_D0, r1
  123. synco
  124. mov.l r1, @r0
  125. synco
  126. mov.l SCR_L_A, r0
  127. mov.l SCR_L_D1, r1
  128. synco
  129. mov.l r1, @r0
  130. synco
  131. nop
  132. nop
  133. nop
  134. mov.l EMRS_A, r0
  135. mov.l EMRS_D, r1
  136. synco
  137. mov.l r1, @r0
  138. synco
  139. nop
  140. nop
  141. nop
  142. mov.l MRS1_A, r0
  143. mov.l MRS1_D, r1
  144. synco
  145. mov.l r1, @r0
  146. synco
  147. nop
  148. nop
  149. nop
  150. mov.l SCR_L_A, r0
  151. mov.l SCR_L_D2, r1
  152. synco
  153. mov.l r1, @r0
  154. synco
  155. nop
  156. nop
  157. nop
  158. mov.l SCR_L_A, r0
  159. mov.l SCR_L_D3, r1
  160. synco
  161. mov.l r1, @r0
  162. synco
  163. nop
  164. nop
  165. nop
  166. mov.l SCR_L_A, r0
  167. mov.l SCR_L_D4, r1
  168. synco
  169. mov.l r1, @r0
  170. synco
  171. nop
  172. nop
  173. nop
  174. mov.l MRS2_A, r0
  175. mov.l MRS2_D, r1
  176. synco
  177. mov.l r1, @r0
  178. synco
  179. nop
  180. nop
  181. nop
  182. mov.l SCR_L_A, r0
  183. mov.l SCR_L_D5, r1
  184. synco
  185. mov.l r1, @r0
  186. synco
  187. /* wait 200us */
  188. mov.l REPEAT0_R1, r3
  189. mov #0, r2
  190. repeat2:
  191. add #1, r2
  192. cmp/hs r3, r2
  193. bf repeat2
  194. synco
  195. mov.l MIM_L_A, r0
  196. mov.l MIM_L_D1, r1
  197. synco
  198. mov.l r1, @r0
  199. synco
  200. rts
  201. nop
  202. .align 4
  203. RWTCSR_D_1: .word 0xA507
  204. RWTCSR_D_2: .word 0xA507
  205. RWTCNT_D: .word 0x5A00
  206. .align 2
  207. BBG_PMMR_A: .long 0xFF800010
  208. BBG_PMSR1_A: .long 0xFF800014
  209. BBG_PMSR2_A: .long 0xFF800018
  210. BBG_PMSR3_A: .long 0xFF80001C
  211. BBG_PMSR4_A: .long 0xFF800020
  212. BBG_PMSRG_A: .long 0xFF800024
  213. BBG_PMMR_D_PMSR1: .long 0xffffbffd
  214. BBG_PMSR1_D: .long 0x00004002
  215. BBG_PMMR_D_PMSR2: .long 0xfc21a7ff
  216. BBG_PMSR2_D: .long 0x03de5800
  217. BBG_PMMR_D_PMSR3: .long 0xfffffff8
  218. BBG_PMSR3_D: .long 0x00000007
  219. BBG_PMMR_D_PMSR4: .long 0xdffdfff9
  220. BBG_PMSR4_D: .long 0x20020006
  221. BBG_PMMR_D_PMSRG: .long 0xffffffff
  222. BBG_PMSRG_D: .long 0x00000000
  223. FRQCR_A: .long FRQCR
  224. DLLCSR_A: .long 0xffc40010
  225. FRQCR_D: .long 0x40233035
  226. DLLCSR_D: .long 0x00000000
  227. /* for DDR-SDRAM */
  228. MIM_U_A: .long MIM_1
  229. MIM_L_A: .long MIM_2
  230. SCR_U_A: .long SCR_1
  231. SCR_L_A: .long SCR_2
  232. STR_U_A: .long STR_1
  233. STR_L_A: .long STR_2
  234. SDR_U_A: .long SDR_1
  235. SDR_L_A: .long SDR_2
  236. EMRS_A: .long 0xFEC02000
  237. MRS1_A: .long 0xFEC00B08
  238. MRS2_A: .long 0xFEC00308
  239. MIM_U_D: .long 0x00004000
  240. MIM_L_D0: .long 0x03e80009
  241. MIM_L_D1: .long 0x03e80209
  242. SCR_L_D0: .long 0x3
  243. SCR_L_D1: .long 0x2
  244. SCR_L_D2: .long 0x2
  245. SCR_L_D3: .long 0x4
  246. SCR_L_D4: .long 0x4
  247. SCR_L_D5: .long 0x0
  248. STR_L_D: .long 0x000f0000
  249. SDR_L_D: .long 0x00000400
  250. EMRS_D: .long 0x0
  251. MRS1_D: .long 0x0
  252. MRS2_D: .long 0x0
  253. /* Cache Controller */
  254. CCR_A: .long CCR
  255. MMUCR_A: .long MMUCR
  256. RWTCNT_A: .long WTCNT
  257. CCR_D: .long 0x0000090b
  258. CCR_D_2: .long 0x00000103
  259. MMUCR_D: .long 0x00000004
  260. MSTPCR0_D: .long 0x00001001
  261. MSTPCR2_D: .long 0xffffffff
  262. /* local Bus State Controller */
  263. MMSELR_A: .long MMSELR
  264. BCR_A: .long BCR
  265. CS0BCR_A: .long CS0BCR
  266. CS1BCR_A: .long CS1BCR
  267. CS2BCR_A: .long CS2BCR
  268. CS4BCR_A: .long CS4BCR
  269. CS5BCR_A: .long CS5BCR
  270. CS6BCR_A: .long CS6BCR
  271. CS0WCR_A: .long CS0WCR
  272. CS1WCR_A: .long CS1WCR
  273. CS2WCR_A: .long CS2WCR
  274. CS4WCR_A: .long CS4WCR
  275. CS5WCR_A: .long CS5WCR
  276. CS6WCR_A: .long CS6WCR
  277. CS5PCR_A: .long CS5PCR
  278. CS6PCR_A: .long CS6PCR
  279. MMSELR_D: .long 0xA5A50003
  280. BCR_D: .long 0x00000000
  281. CS0BCR_D: .long 0x77777770
  282. CS1BCR_D: .long 0x77777670
  283. CS2BCR_D: .long 0x77777770
  284. CS4BCR_D: .long 0x77777770
  285. CS5BCR_D: .long 0x77777670
  286. CS6BCR_D: .long 0x77777770
  287. CS0WCR_D: .long 0x00020006
  288. CS1WCR_D: .long 0x00232304
  289. CS2WCR_D: .long 0x7777770F
  290. CS4WCR_D: .long 0x7777770F
  291. CS5WCR_D: .long 0x00101006
  292. CS6WCR_D: .long 0x77777703
  293. CS5PCR_D: .long 0x77000000
  294. CS6PCR_D: .long 0x77000000
  295. REPEAT0_R3: .long 0x00002000
  296. REPEAT0_R1: .long 0x0000200