memsetup.S 5.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362
  1. /* Memory sub-system initialization code */
  2. #include <config.h>
  3. #include <version.h>
  4. #include <asm/regdef.h>
  5. #include <asm/au1x00.h>
  6. #include <asm/mipsregs.h>
  7. #define AU1500_SYS_ADDR 0xB1900000
  8. #define sys_endian 0x0038
  9. #define CP0_Config0 $16
  10. #define MEM_1MS ((396000000/1000000) * 1000)
  11. .text
  12. .set noreorder
  13. .set mips32
  14. .globl memsetup
  15. memsetup:
  16. /*
  17. * Step 1) Establish CPU endian mode.
  18. * Db1500-specific:
  19. * Switch S1.1 Off(bit7 reads 1) is Little Endian
  20. * Switch S1.1 On (bit7 reads 0) is Big Endian
  21. */
  22. li t0, MEM_STCFG1
  23. li t1, 0x00000080
  24. sw t1, 0(t0)
  25. li t0, MEM_STTIME1
  26. li t1, 0x22080a20
  27. sw t1, 0(t0)
  28. li t0, MEM_STADDR1
  29. li t1, 0x10c03f00
  30. sw t1, 0(t0)
  31. li t0, 0xAE000008
  32. lw t1,0(t0)
  33. andi t1,t1,0x80
  34. beq zero,t1,big_endian
  35. nop
  36. little_endian:
  37. /* Change Au1 core to little endian */
  38. li t0, AU1500_SYS_ADDR
  39. li t1, 1
  40. sw t1, sys_endian(t0)
  41. mfc0 t2, CP0_CONFIG
  42. mtc0 t2, CP0_CONFIG
  43. nop
  44. nop
  45. /* Big Endian is default so nothing to do but fall through */
  46. big_endian:
  47. /*
  48. * Step 2) Establish Status Register
  49. * (set BEV, clear ERL, clear EXL, clear IE)
  50. */
  51. li t1, 0x00400000
  52. mtc0 t1, CP0_STATUS
  53. /*
  54. * Step 3) Establish CP0 Config0
  55. * (set OD, set K0=3)
  56. */
  57. li t1, 0x00080003
  58. mtc0 t1, CP0_CONFIG
  59. /*
  60. * Step 4) Disable Watchpoint facilities
  61. */
  62. li t1, 0x00000000
  63. mtc0 t1, CP0_WATCHLO
  64. mtc0 t1, CP0_IWATCHLO
  65. /*
  66. * Step 5) Disable the performance counters
  67. */
  68. mtc0 zero, CP0_PERFORMANCE
  69. nop
  70. /*
  71. * Step 6) Establish EJTAG Debug register
  72. */
  73. mtc0 zero, CP0_DEBUG
  74. nop
  75. /*
  76. * Step 7) Establish Cause
  77. * (set IV bit)
  78. */
  79. li t1, 0x00800000
  80. mtc0 t1, CP0_CAUSE
  81. /* Establish Wired (and Random) */
  82. mtc0 zero, CP0_WIRED
  83. nop
  84. /* First setup pll:s to make serial work ok */
  85. /* We have a 12 MHz crystal */
  86. li t0, SYS_CPUPLL
  87. li t1, 0x21 /* 396 MHz */
  88. sw t1, 0(t0)
  89. sync
  90. nop
  91. nop
  92. /* wait 1mS for clocks to settle */
  93. li t1, MEM_1MS
  94. 1: add t1, -1
  95. bne t1, zero, 1b
  96. nop
  97. /* Setup AUX PLL */
  98. li t0, SYS_AUXPLL
  99. li t1, 0x20 /* 96 MHz */
  100. sw t1, 0(t0) /* aux pll */
  101. sync
  102. /* Static memory controller */
  103. /* RCE0 AMD 29LV640M MirrorBit Flash */
  104. li t0, MEM_STCFG0
  105. li t1, 0x00000013
  106. sw t1, 0(t0)
  107. li t0, MEM_STTIME0
  108. li t1, 0x040181D7
  109. sw t1, 0(t0)
  110. li t0, MEM_STADDR0
  111. li t1, 0x11E03F80
  112. sw t1, 0(t0)
  113. /* RCE1 CPLD Board Logic */
  114. li t0, MEM_STCFG1
  115. li t1, 0x00000080
  116. sw t1, 0(t0)
  117. li t0, MEM_STTIME1
  118. li t1, 0x22080a20
  119. sw t1, 0(t0)
  120. li t0, MEM_STADDR1
  121. li t1, 0x10c03f00
  122. sw t1, 0(t0)
  123. /* RCE2 CPLD Board Logic */
  124. li t0, MEM_STCFG2
  125. li t1, 0x00000000
  126. sw t1, 0(t0)
  127. li t0, MEM_STTIME2
  128. li t1, 0x00000000
  129. sw t1, 0(t0)
  130. li t0, MEM_STADDR2
  131. li t1, 0x00000000
  132. sw t1, 0(t0)
  133. /* RCE3 PCMCIA 250ns */
  134. li t0, MEM_STCFG3
  135. li t1, 0x00000002
  136. sw t1, 0(t0)
  137. li t0, MEM_STTIME3
  138. li t1, 0x280E3E07
  139. sw t1, 0(t0)
  140. li t0, MEM_STADDR3
  141. li t1, 0x10000000
  142. sw t1, 0(t0)
  143. sync
  144. /* Set peripherals to a known state */
  145. li t0, IC0_CFG0CLR
  146. li t1, 0xFFFFFFFF
  147. sw t1, 0(t0)
  148. li t0, IC0_CFG0CLR
  149. sw t1, 0(t0)
  150. li t0, IC0_CFG1CLR
  151. sw t1, 0(t0)
  152. li t0, IC0_CFG2CLR
  153. sw t1, 0(t0)
  154. li t0, IC0_SRCSET
  155. sw t1, 0(t0)
  156. li t0, IC0_ASSIGNSET
  157. sw t1, 0(t0)
  158. li t0, IC0_WAKECLR
  159. sw t1, 0(t0)
  160. li t0, IC0_RISINGCLR
  161. sw t1, 0(t0)
  162. li t0, IC0_FALLINGCLR
  163. sw t1, 0(t0)
  164. li t0, IC0_TESTBIT
  165. li t1, 0x00000000
  166. sw t1, 0(t0)
  167. sync
  168. li t0, IC1_CFG0CLR
  169. li t1, 0xFFFFFFFF
  170. sw t1, 0(t0)
  171. li t0, IC1_CFG0CLR
  172. sw t1, 0(t0)
  173. li t0, IC1_CFG1CLR
  174. sw t1, 0(t0)
  175. li t0, IC1_CFG2CLR
  176. sw t1, 0(t0)
  177. li t0, IC1_SRCSET
  178. sw t1, 0(t0)
  179. li t0, IC1_ASSIGNSET
  180. sw t1, 0(t0)
  181. li t0, IC1_WAKECLR
  182. sw t1, 0(t0)
  183. li t0, IC1_RISINGCLR
  184. sw t1, 0(t0)
  185. li t0, IC1_FALLINGCLR
  186. sw t1, 0(t0)
  187. li t0, IC1_TESTBIT
  188. li t1, 0x00000000
  189. sw t1, 0(t0)
  190. sync
  191. li t0, SYS_FREQCTRL0
  192. li t1, 0x00000000
  193. sw t1, 0(t0)
  194. li t0, SYS_FREQCTRL1
  195. li t1, 0x00000000
  196. sw t1, 0(t0)
  197. li t0, SYS_CLKSRC
  198. li t1, 0x00000000
  199. sw t1, 0(t0)
  200. li t0, SYS_PININPUTEN
  201. li t1, 0x00000000
  202. sw t1, 0(t0)
  203. sync
  204. li t0, 0xB1100100
  205. li t1, 0x00000000
  206. sw t1, 0(t0)
  207. li t0, 0xB1400100
  208. li t1, 0x00000000
  209. sw t1, 0(t0)
  210. li t0, SYS_WAKEMSK
  211. li t1, 0x00000000
  212. sw t1, 0(t0)
  213. li t0, SYS_WAKESRC
  214. li t1, 0x00000000
  215. sw t1, 0(t0)
  216. /* wait 1mS before setup */
  217. li t1, MEM_1MS
  218. 1: add t1, -1
  219. bne t1, zero, 1b
  220. nop
  221. /* SDCS 0,1 SDRAM */
  222. li t0, MEM_SDMODE0
  223. li t1, 0x005522AA
  224. sw t1, 0(t0)
  225. li t0, MEM_SDMODE1
  226. li t1, 0x005522AA
  227. sw t1, 0(t0)
  228. li t0, MEM_SDMODE2
  229. li t1, 0x00000000
  230. sw t1, 0(t0)
  231. li t0, MEM_SDADDR0
  232. li t1, 0x001003F8
  233. sw t1, 0(t0)
  234. li t0, MEM_SDADDR1
  235. li t1, 0x001023F8
  236. sw t1, 0(t0)
  237. li t0, MEM_SDADDR2
  238. li t1, 0x00000000
  239. sw t1, 0(t0)
  240. sync
  241. li t0, MEM_SDREFCFG
  242. li t1, 0x64000C24 /* Disable */
  243. sw t1, 0(t0)
  244. sync
  245. li t0, MEM_SDPRECMD
  246. sw zero, 0(t0)
  247. sync
  248. li t0, MEM_SDAUTOREF
  249. sw zero, 0(t0)
  250. sync
  251. sw zero, 0(t0)
  252. sync
  253. li t0, MEM_SDREFCFG
  254. li t1, 0x66000C24 /* Enable */
  255. sw t1, 0(t0)
  256. sync
  257. li t0, MEM_SDWRMD0
  258. li t1, 0x00000033
  259. sw t1, 0(t0)
  260. sync
  261. li t0, MEM_SDWRMD1
  262. li t1, 0x00000033
  263. sw t1, 0(t0)
  264. sync
  265. /* wait 1mS after setup */
  266. li t1, MEM_1MS
  267. 1: add t1, -1
  268. bne t1, zero, 1b
  269. nop
  270. li t0, SYS_PINFUNC
  271. li t1, 0x00008080
  272. sw t1, 0(t0)
  273. li t0, SYS_TRIOUTCLR
  274. li t1, 0x00001FFF
  275. sw t1, 0(t0)
  276. li t0, SYS_OUTPUTCLR
  277. li t1, 0x00008000
  278. sw t1, 0(t0)
  279. sync
  280. j ra
  281. nop