lowlevel_init.S 7.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429
  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. /*
  25. * Board specific low level init code, called _very_ early in the
  26. * startup sequence. Relocation to SDRAM has not happened yet, no
  27. * stack is available, bss section has not been initialised, etc.
  28. *
  29. * (Note: As no stack is available, no subroutines can be called...).
  30. */
  31. .global lowlevel_init
  32. .text
  33. .align 2
  34. lowlevel_init:
  35. mov.l CCR_A, r1 /* Address of Cache Control Register */
  36. mov.l CCR_D, r0 /* Instruction Cache Invalidate */
  37. mov.l r0, @r1
  38. mov.l FRQCR_A, r1 /* Frequency control register */
  39. mov.l FRQCR_D, r0
  40. mov.l r0, @r1
  41. /* pin_multi_setting */
  42. mov.l BBG_PMMR_A,r1
  43. mov.l BBG_PMMR_D_PMSR1,r0
  44. mov.l r0,@r1
  45. mov.l BBG_PMSR1_A,r1
  46. mov.l BBG_PMSR1_D,r0
  47. mov.l r0,@r1
  48. mov.l BBG_PMMR_A,r1
  49. mov.l BBG_PMMR_D_PMSR2,r0
  50. mov.l r0,@r1
  51. mov.l BBG_PMSR2_A,r1
  52. mov.l BBG_PMSR2_D,r0
  53. mov.l r0,@r1
  54. mov.l BBG_PMMR_A,r1
  55. mov.l BBG_PMMR_D_PMSR3,r0
  56. mov.l r0,@r1
  57. mov.l BBG_PMSR3_A,r1
  58. mov.l BBG_PMSR3_D,r0
  59. mov.l r0,@r1
  60. mov.l BBG_PMMR_A,r1
  61. mov.l BBG_PMMR_D_PMSR4,r0
  62. mov.l r0,@r1
  63. mov.l BBG_PMSR4_A,r1
  64. mov.l BBG_PMSR4_D,r0
  65. mov.l r0,@r1
  66. mov.l BBG_PMMR_A,r1
  67. mov.l BBG_PMMR_D_PMSRG,r0
  68. mov.l r0,@r1
  69. mov.l BBG_PMSRG_A,r1
  70. mov.l BBG_PMSRG_D,r0
  71. mov.l r0,@r1
  72. /* cpg_setting */
  73. mov.l FRQCR_A,r1
  74. mov.l FRQCR_D,r0
  75. mov.l r0,@r1
  76. mov.l DLLCSR_A,r1
  77. mov.l DLLCSR_D,r0
  78. mov.l r0,@r1
  79. nop
  80. nop
  81. nop
  82. nop
  83. nop
  84. nop
  85. nop
  86. nop
  87. nop
  88. nop
  89. /* wait 200us */
  90. mov.l REPEAT0_R3,r3
  91. mov #0,r2
  92. repeat0:
  93. add #1,r2
  94. cmp/hs r3,r2
  95. bf repeat0
  96. nop
  97. /* bsc_setting */
  98. mov.l MMSELR_A,r1
  99. mov.l MMSELR_D,r0
  100. mov.l r0,@r1
  101. mov.l BCR_A,r1
  102. mov.l BCR_D,r0
  103. mov.l r0,@r1
  104. mov.l CS0BCR_A,r1
  105. mov.l CS0BCR_D,r0
  106. mov.l r0,@r1
  107. mov.l CS1BCR_A,r1
  108. mov.l CS1BCR_D,r0
  109. mov.l r0,@r1
  110. mov.l CS2BCR_A,r1
  111. mov.l CS2BCR_D,r0
  112. mov.l r0,@r1
  113. mov.l CS4BCR_A,r1
  114. mov.l CS4BCR_D,r0
  115. mov.l r0,@r1
  116. mov.l CS5BCR_A,r1
  117. mov.l CS5BCR_D,r0
  118. mov.l r0,@r1
  119. mov.l CS6BCR_A,r1
  120. mov.l CS6BCR_D,r0
  121. mov.l r0,@r1
  122. mov.l CS0WCR_A,r1
  123. mov.l CS0WCR_D,r0
  124. mov.l r0,@r1
  125. mov.l CS1WCR_A,r1
  126. mov.l CS1WCR_D,r0
  127. mov.l r0,@r1
  128. mov.l CS2WCR_A,r1
  129. mov.l CS2WCR_D,r0
  130. mov.l r0,@r1
  131. mov.l CS4WCR_A,r1
  132. mov.l CS4WCR_D,r0
  133. mov.l r0,@r1
  134. mov.l CS5WCR_A,r1
  135. mov.l CS5WCR_D,r0
  136. mov.l r0,@r1
  137. mov.l CS6WCR_A,r1
  138. mov.l CS6WCR_D,r0
  139. mov.l r0,@r1
  140. mov.l CS5PCR_A,r1
  141. mov.l CS5PCR_D,r0
  142. mov.l r0,@r1
  143. mov.l CS6PCR_A,r1
  144. mov.l CS6PCR_D,r0
  145. mov.l r0,@r1
  146. /* ddr_setting */
  147. /* wait 200us */
  148. mov.l REPEAT0_R3,r3
  149. mov #0,r2
  150. repeat1:
  151. add #1,r2
  152. cmp/hs r3,r2
  153. bf repeat1
  154. nop
  155. mov.l MIM_U_A,r0
  156. mov.l MIM_U_D,r1
  157. synco
  158. mov.l r1,@r0
  159. synco
  160. mov.l MIM_L_A,r0
  161. mov.l MIM_L_D0,r1
  162. synco
  163. mov.l r1,@r0
  164. synco
  165. mov.l STR_L_A,r0
  166. mov.l STR_L_D,r1
  167. synco
  168. mov.l r1,@r0
  169. synco
  170. mov.l SDR_L_A,r0
  171. mov.l SDR_L_D,r1
  172. synco
  173. mov.l r1,@r0
  174. synco
  175. nop
  176. nop
  177. nop
  178. nop
  179. mov.l SCR_L_A,r0
  180. mov.l SCR_L_D0,r1
  181. synco
  182. mov.l r1,@r0
  183. synco
  184. mov.l SCR_L_A,r0
  185. mov.l SCR_L_D1,r1
  186. synco
  187. mov.l r1,@r0
  188. synco
  189. nop
  190. nop
  191. nop
  192. mov.l EMRS_A,r0
  193. mov.l EMRS_D,r1
  194. synco
  195. mov.l r1,@r0
  196. synco
  197. nop
  198. nop
  199. nop
  200. mov.l MRS1_A,r0
  201. mov.l MRS1_D,r1
  202. synco
  203. mov.l r1,@r0
  204. synco
  205. nop
  206. nop
  207. nop
  208. mov.l SCR_L_A,r0
  209. mov.l SCR_L_D2,r1
  210. synco
  211. mov.l r1,@r0
  212. synco
  213. nop
  214. nop
  215. nop
  216. mov.l SCR_L_A,r0
  217. mov.l SCR_L_D3,r1
  218. synco
  219. mov.l r1,@r0
  220. synco
  221. nop
  222. nop
  223. nop
  224. mov.l SCR_L_A,r0
  225. mov.l SCR_L_D4,r1
  226. synco
  227. mov.l r1,@r0
  228. synco
  229. nop
  230. nop
  231. nop
  232. mov.l MRS2_A,r0
  233. mov.l MRS2_D,r1
  234. synco
  235. mov.l r1,@r0
  236. synco
  237. nop
  238. nop
  239. nop
  240. mov.l SCR_L_A,r0
  241. mov.l SCR_L_D5,r1
  242. synco
  243. mov.l r1,@r0
  244. synco
  245. /* wait 200us */
  246. mov.l REPEAT0_R1,r3
  247. mov #0,r2
  248. repeat2:
  249. add #1,r2
  250. cmp/hs r3,r2
  251. bf repeat2
  252. synco
  253. mov.l MIM_L_A,r0
  254. mov.l MIM_L_D1,r1
  255. synco
  256. mov.l r1,@r0
  257. synco
  258. rts
  259. nop
  260. .align 4
  261. RWTCSR_D_1: .word 0xA507
  262. RWTCSR_D_2: .word 0xA507
  263. RWTCNT_D: .word 0x5A00
  264. .align 2
  265. BBG_PMMR_A: .long 0xFF800010
  266. BBG_PMSR1_A: .long 0xFF800014
  267. BBG_PMSR2_A: .long 0xFF800018
  268. BBG_PMSR3_A: .long 0xFF80001C
  269. BBG_PMSR4_A: .long 0xFF800020
  270. BBG_PMSRG_A: .long 0xFF800024
  271. BBG_PMMR_D_PMSR1: .long 0xffffbffd
  272. BBG_PMSR1_D: .long 0x00004002
  273. BBG_PMMR_D_PMSR2: .long 0xfc21a7ff
  274. BBG_PMSR2_D: .long 0x03de5800
  275. BBG_PMMR_D_PMSR3: .long 0xfffffff8
  276. BBG_PMSR3_D: .long 0x00000007
  277. BBG_PMMR_D_PMSR4: .long 0xdffdfff9
  278. BBG_PMSR4_D: .long 0x20020006
  279. BBG_PMMR_D_PMSRG: .long 0xffffffff
  280. BBG_PMSRG_D: .long 0x00000000
  281. FRQCR_A: .long FRQCR
  282. DLLCSR_A: .long 0xffc40010
  283. FRQCR_D: .long 0x40233035
  284. DLLCSR_D: .long 0x00000000
  285. /* for DDR-SDRAM */
  286. MIM_U_A: .long MIM_1
  287. MIM_L_A: .long MIM_2
  288. SCR_U_A: .long SCR_1
  289. SCR_L_A: .long SCR_2
  290. STR_U_A: .long STR_1
  291. STR_L_A: .long STR_2
  292. SDR_U_A: .long SDR_1
  293. SDR_L_A: .long SDR_2
  294. EMRS_A: .long 0xFEC02000
  295. MRS1_A: .long 0xFEC00B08
  296. MRS2_A: .long 0xFEC00308
  297. MIM_U_D: .long 0x00004000
  298. MIM_L_D0: .long 0x03e80009
  299. MIM_L_D1: .long 0x03e80209
  300. SCR_L_D0: .long 0x3
  301. SCR_L_D1: .long 0x2
  302. SCR_L_D2: .long 0x2
  303. SCR_L_D3: .long 0x4
  304. SCR_L_D4: .long 0x4
  305. SCR_L_D5: .long 0x0
  306. STR_L_D: .long 0x000f0000
  307. SDR_L_D: .long 0x00000400
  308. EMRS_D: .long 0x0
  309. MRS1_D: .long 0x0
  310. MRS2_D: .long 0x0
  311. /* Cache Controller */
  312. CCR_A: .long CCR
  313. MMUCR_A: .long MMUCR
  314. RWTCNT_A: .long WTCNT
  315. CCR_D: .long 0x0000090b
  316. CCR_D_2: .long 0x00000103
  317. MMUCR_D: .long 0x00000004
  318. MSTPCR0_D: .long 0x00001001
  319. MSTPCR2_D: .long 0xffffffff
  320. /* local Bus State Controller */
  321. MMSELR_A: .long MMSELR
  322. BCR_A: .long BCR
  323. CS0BCR_A: .long CS0BCR
  324. CS1BCR_A: .long CS1BCR
  325. CS2BCR_A: .long CS2BCR
  326. CS4BCR_A: .long CS4BCR
  327. CS5BCR_A: .long CS5BCR
  328. CS6BCR_A: .long CS6BCR
  329. CS0WCR_A: .long CS0WCR
  330. CS1WCR_A: .long CS1WCR
  331. CS2WCR_A: .long CS2WCR
  332. CS4WCR_A: .long CS4WCR
  333. CS5WCR_A: .long CS5WCR
  334. CS6WCR_A: .long CS6WCR
  335. CS5PCR_A: .long CS5PCR
  336. CS6PCR_A: .long CS6PCR
  337. MMSELR_D: .long 0xA5A50003
  338. BCR_D: .long 0x00000000
  339. CS0BCR_D: .long 0x77777770
  340. CS1BCR_D: .long 0x77777670
  341. CS2BCR_D: .long 0x77777770
  342. CS4BCR_D: .long 0x77777770
  343. CS5BCR_D: .long 0x77777670
  344. CS6BCR_D: .long 0x77777770
  345. CS0WCR_D: .long 0x00020006
  346. CS1WCR_D: .long 0x00232304
  347. CS2WCR_D: .long 0x7777770F
  348. CS4WCR_D: .long 0x7777770F
  349. CS5WCR_D: .long 0x00101006
  350. CS6WCR_D: .long 0x77777703
  351. CS5PCR_D: .long 0x77000000
  352. CS6PCR_D: .long 0x77000000
  353. REPEAT0_R3: .long 0x00002000
  354. REPEAT0_R1: .long 0x0000200