icnova_imx53_sodimm.cfg 16 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450
  1. # SPDX-License-Identifier: GPL-2.0-or-later
  2. #################################################################################################
  3. # Author: Benjamin Tietz <benjamin.tietz@in-circuit.de> ;#
  4. # based on work from: Wjatscheslaw Stoljarski (Slawa) <wjatscheslaw.stoljarski@kiwigrid.com> ;#
  5. # Kiwigrid GmbH ;#
  6. # Generated for In-Circuit i.MX53 SO-Dimm ;#
  7. #################################################################################################
  8. # The In-Circuit ICnova IMX53SODIMM board has a single IMX53 chip
  9. source [find target/imx53.cfg]
  10. # Helper for common memory read/modify/write procedures
  11. source [find mem_helper.tcl]
  12. echo "i.MX53 SO-Dimm board lodaded."
  13. # Set reset type
  14. #reset_config srst_only
  15. adapter speed 3000
  16. # Slow speed to be sure it will work
  17. jtag_rclk 1000
  18. $_TARGETNAME configure -event "reset-start" { jtag_rclk 1000 }
  19. $_TARGETNAME configure -event "reset-assert" {
  20. echo "Resetting ...."
  21. #cortex_a dbginit
  22. }
  23. $_TARGETNAME configure -event reset-init { sodimm_init }
  24. global AIPS1_BASE_ADDR
  25. set AIPS1_BASE_ADDR 0x53F00000
  26. global AIPS2_BASE_ADDR
  27. set AIPS2_BASE_ADDR 0x63F00000
  28. proc sodimm_init { } {
  29. echo "Reset-init..."
  30. ; # halt the CPU
  31. halt
  32. echo "HW version [format %x [mrw 0x48]]"
  33. dap apsel 1
  34. DCD
  35. ; # ARM errata ID #468414
  36. set tR [arm mrc 15 0 1 0 1]
  37. arm mcr 15 0 1 0 1 [expr {$tR | (1<<5)}] ; # enable L1NEON bit
  38. init_l2cc
  39. init_aips
  40. init_clock
  41. dap apsel 0
  42. ; # Force ARM state
  43. ; #reg cpsr 0x000001D3
  44. arm core_state arm
  45. jtag_rclk 3000
  46. # adapter speed 3000
  47. }
  48. # L2CC Cache setup/invalidation/disable
  49. proc init_l2cc { } {
  50. ; #/* explicitly disable L2 cache */
  51. ; #mrc 15, 0, r0, c1, c0, 1
  52. set tR [arm mrc 15 0 1 0 1]
  53. ; #bic r0, r0, #0x2
  54. ; #mcr 15, 0, r0, c1, c0, 1
  55. arm mcr 15 0 1 0 1 [expr {$tR & ~(1 << 2)}]
  56. ; #/* reconfigure L2 cache aux control reg */
  57. ; #mov r0, #0xC0 /* tag RAM */
  58. ; #add r0, r0, #0x4 /* data RAM */
  59. ; #orr r0, r0, #(1 << 24) /* disable write allocate delay */
  60. ; #orr r0, r0, #(1 << 23) /* disable write allocate combine */
  61. ; #orr r0, r0, #(1 << 22) /* disable write allocate */
  62. ; #mcr 15, 1, r0, c9, c0, 2
  63. arm mcr 15 1 9 0 2 [expr {0xC4 | (1<<24) | (1<<23) | (1<<22)}]
  64. }
  65. # AIPS setup - Only setup MPROTx registers.
  66. # The PACR default values are good.
  67. proc init_aips { } {
  68. ; # Set all MPROTx to be non-bufferable, trusted for R/W,
  69. ; # not forced to user-mode.
  70. global AIPS1_BASE_ADDR
  71. global AIPS2_BASE_ADDR
  72. set VAL 0x77777777
  73. # dap apsel 1
  74. mww [expr {$AIPS1_BASE_ADDR + 0x0}] $VAL
  75. mww [expr {$AIPS1_BASE_ADDR + 0x4}] $VAL
  76. mww [expr {$AIPS2_BASE_ADDR + 0x0}] $VAL
  77. mww [expr {$AIPS2_BASE_ADDR + 0x4}] $VAL
  78. # dap apsel 0
  79. }
  80. proc init_clock { } {
  81. global AIPS1_BASE_ADDR
  82. global AIPS2_BASE_ADDR
  83. set CCM_BASE_ADDR [expr {$AIPS1_BASE_ADDR + 0x000D4000}]
  84. set CLKCTL_CCSR 0x0C
  85. set CLKCTL_CBCDR 0x14
  86. set CLKCTL_CBCMR 0x18
  87. set PLL1_BASE_ADDR [expr {$AIPS2_BASE_ADDR + 0x00080000}]
  88. set PLL2_BASE_ADDR [expr {$AIPS2_BASE_ADDR + 0x00084000}]
  89. set PLL3_BASE_ADDR [expr {$AIPS2_BASE_ADDR + 0x00088000}]
  90. set PLL4_BASE_ADDR [expr {$AIPS2_BASE_ADDR + 0x0008C000}]
  91. set CLKCTL_CSCMR1 0x1C
  92. set CLKCTL_CDHIPR 0x48
  93. set PLATFORM_BASE_ADDR [expr {$AIPS2_BASE_ADDR + 0x000A0000}]
  94. set CLKCTL_CSCDR1 0x24
  95. set CLKCTL_CCDR 0x04
  96. ; # Switch ARM to step clock
  97. mww [expr {$CCM_BASE_ADDR + $CLKCTL_CCSR}] 0x4
  98. return
  99. echo "not returned"
  100. setup_pll $PLL1_BASE_ADDR 800
  101. setup_pll $PLL3_BASE_ADDR 400
  102. ; # Switch peripheral to PLL3
  103. mww [expr {$CCM_BASE_ADDR + $CLKCTL_CBCMR}] 0x00015154
  104. mww [expr {$CCM_BASE_ADDR + $CLKCTL_CBCDR}] [expr {0x02888945 | (1<<16)}]
  105. while {[mrw [expr {$CCM_BASE_ADDR + $CLKCTL_CDHIPR}]] != 0} { sleep 1 }
  106. setup_pll $PLL2_BASE_ADDR 400
  107. ; # Switch peripheral to PLL2
  108. mww [expr {$CCM_BASE_ADDR + $CLKCTL_CBCDR}] [expr {0x00808145 | (2<<10) | (9<<16) | (1<<19)}]
  109. mww [expr {$CCM_BASE_ADDR + $CLKCTL_CBCMR}] 0x00016154
  110. ; # change uart clk parent to pll2
  111. mww [expr {$CCM_BASE_ADDR + $CLKCTL_CSCMR1}] [expr {[mrw [expr {$CCM_BASE_ADDR + $CLKCTL_CSCMR1}]] & 0xfcffffff | 0x01000000}]
  112. ; # make sure change is effective
  113. while {[mrw [expr {$CCM_BASE_ADDR + $CLKCTL_CDHIPR}]] != 0} { sleep 1 }
  114. setup_pll $PLL3_BASE_ADDR 216
  115. setup_pll $PLL4_BASE_ADDR 455
  116. ; # Set the platform clock dividers
  117. mww [expr {$PLATFORM_BASE_ADDR + 0x14}] 0x00000124
  118. mww [expr {$CCM_BASE_ADDR + 0x10}] 0
  119. ; # Switch ARM back to PLL 1.
  120. mww [expr {$CCM_BASE_ADDR + $CLKCTL_CCSR}] 0x0
  121. ; # make uart div=6
  122. mww [expr {$CCM_BASE_ADDR + $CLKCTL_CSCDR1}] [expr {[mrw [expr {$CCM_BASE_ADDR + $CLKCTL_CSCDR1}]] & 0xffffffc0 | 0x0a}]
  123. ; # Restore the default values in the Gate registers
  124. mww [expr {$CCM_BASE_ADDR + 0x68}] 0xFFFFFFFF
  125. mww [expr {$CCM_BASE_ADDR + 0x6C}] 0xFFFFFFFF
  126. mww [expr {$CCM_BASE_ADDR + 0x70}] 0xFFFFFFFF
  127. mww [expr {$CCM_BASE_ADDR + 0x74}] 0xFFFFFFFF
  128. mww [expr {$CCM_BASE_ADDR + 0x78}] 0xFFFFFFFF
  129. mww [expr {$CCM_BASE_ADDR + 0x7C}] 0xFFFFFFFF
  130. mww [expr {$CCM_BASE_ADDR + 0x80}] 0xFFFFFFFF
  131. mww [expr {$CCM_BASE_ADDR + 0x84}] 0xFFFFFFFF
  132. mww [expr {$CCM_BASE_ADDR + $CLKCTL_CCDR}] 0x00000
  133. ; # for cko - for ARM div by 8
  134. mww [expr {$CCM_BASE_ADDR + 0x60}] [expr {0x000A0000 & 0x00000F0}]
  135. }
  136. proc setup_pll { PLL_ADDR CLK } {
  137. set PLL_DP_CTL 0x00
  138. set PLL_DP_CONFIG 0x04
  139. set PLL_DP_OP 0x08
  140. set PLL_DP_HFS_OP 0x1C
  141. set PLL_DP_MFD 0x0C
  142. set PLL_DP_HFS_MFD 0x20
  143. set PLL_DP_MFN 0x10
  144. set PLL_DP_HFS_MFN 0x24
  145. if {$CLK == 1000} {
  146. set DP_OP [expr {(10 << 4) + ((1 - 1) << 0)}]
  147. set DP_MFD [expr {12 - 1}]
  148. set DP_MFN 5
  149. } elseif {$CLK == 850} {
  150. set DP_OP [expr {(8 << 4) + ((1 - 1) << 0)}]
  151. set DP_MFD [expr {48 - 1}]
  152. set DP_MFN 41
  153. } elseif {$CLK == 800} {
  154. set DP_OP [expr {(8 << 4) + ((1 - 1) << 0)}]
  155. set DP_MFD [expr {3 - 1}]
  156. set DP_MFN 1
  157. } elseif {$CLK == 700} {
  158. set DP_OP [expr {(7 << 4) + ((1 - 1) << 0)}]
  159. set DP_MFD [expr {24 - 1}]
  160. set DP_MFN 7
  161. } elseif {$CLK == 600} {
  162. set DP_OP [expr {(6 << 4) + ((1 - 1) << 0)}]
  163. set DP_MFD [expr {4 - 1}]
  164. set DP_MFN 1
  165. } elseif {$CLK == 665} {
  166. set DP_OP [expr {(6 << 4) + ((1 - 1) << 0)}]
  167. set DP_MFD [expr {96 - 1}]
  168. set DP_MFN 89
  169. } elseif {$CLK == 532} {
  170. set DP_OP [expr {(5 << 4) + ((1 - 1) << 0)}]
  171. set DP_MFD [expr {24 - 1}]
  172. set DP_MFN 13
  173. } elseif {$CLK == 455} {
  174. set DP_OP [expr {(8 << 4) + ((2 - 1) << 0)}]
  175. set DP_MFD [expr {48 - 1}]
  176. set DP_MFN 71
  177. } elseif {$CLK == 400} {
  178. set DP_OP [expr {(8 << 4) + ((2 - 1) << 0)}]
  179. set DP_MFD [expr {3 - 1}]
  180. set DP_MFN 1
  181. } elseif {$CLK == 216} {
  182. set DP_OP [expr {(6 << 4) + ((3 - 1) << 0)}]
  183. set DP_MFD [expr {4 - 1}]
  184. set DP_MFN 3
  185. } else {
  186. error "Error (setup_dll): clock not found!"
  187. }
  188. mww [expr {$PLL_ADDR + $PLL_DP_CTL}] 0x00001232
  189. mww [expr {$PLL_ADDR + $PLL_DP_CONFIG}] 0x2
  190. mww [expr {$PLL_ADDR + $PLL_DP_OP}] $DP_OP
  191. mww [expr {$PLL_ADDR + $PLL_DP_HFS_MFD}] $DP_OP
  192. mww [expr {$PLL_ADDR + $PLL_DP_MFD}] $DP_MFD
  193. mww [expr {$PLL_ADDR + $PLL_DP_HFS_MFD}] $DP_MFD
  194. mww [expr {$PLL_ADDR + $PLL_DP_MFN}] $DP_MFN
  195. mww [expr {$PLL_ADDR + $PLL_DP_HFS_MFN}] $DP_MFN
  196. mww [expr {$PLL_ADDR + $PLL_DP_CTL}] 0x00001232
  197. while {[expr {[mrw [expr {$PLL_ADDR + $PLL_DP_CTL}]] & 0x1}] == 0} { sleep 1 }
  198. }
  199. proc CPU_2_BE_32 { L } {
  200. return [expr {(($L & 0x000000FF) << 24) | (($L & 0x0000FF00) << 8) | (($L & 0x00FF0000) >> 8) | (($L & 0xFF000000) >> 24)}]
  201. }
  202. # Device Configuration Data
  203. proc DCD { } {
  204. # dap apsel 1
  205. #*========================================================================================== ======
  206. # Initialization script for 32 bit DDR3 (CS0+CS1)
  207. #*========================================================================================== ======
  208. # Remux D24/D25 to perform Flash-access
  209. mww 0x53fa818C 0x00000000 ; #EIM_RW
  210. mww 0x53fa8180 0x00000000 ; #EIM_CS0
  211. mww 0x53fa8188 0x00000000 ; #EIM_OE
  212. mww 0x53fa817C 0x00000000 ; #A16
  213. mww 0x53fa8178 0x00000000 ; #A17
  214. mww 0x53fa8174 0x00000000 ; #A18
  215. mww 0x53fa8170 0x00000000 ; #A19
  216. mww 0x53fa816C 0x00000000 ; #A20
  217. mww 0x53fa8168 0x00000000 ; #A21
  218. mww 0x53fa819C 0x00000000 ; #DA0
  219. mww 0x53fa81A0 0x00000000 ; #DA1
  220. mww 0x53fa81A4 0x00000000 ; #DA2
  221. mww 0x53fa81A8 0x00000000 ; #DA3
  222. mww 0x53fa81AC 0x00000000 ; #DA4
  223. mww 0x53fa81B0 0x00000000 ; #DA5
  224. mww 0x53fa81B4 0x00000000 ; #DA6
  225. mww 0x53fa81B8 0x00000000 ; #DA7
  226. mww 0x53fa81BC 0x00000000 ; #DA8
  227. mww 0x53fa81C0 0x00000000 ; #DA9
  228. mww 0x53fa81C4 0x00000000 ; #DA10
  229. mww 0x53fa81C8 0x00000000 ; #DA11
  230. mww 0x53fa81CC 0x00000000 ; #DA12
  231. mww 0x53fa81D0 0x00000000 ; #DA13
  232. mww 0x53fa81D4 0x00000000 ; #DA14
  233. mww 0x53fa81D8 0x00000000 ; #DA15
  234. mww 0x53fa8118 0x00000000 ; #D16
  235. mww 0x53fa811C 0x00000000 ; #D17
  236. mww 0x53fa8120 0x00000000 ; #D18
  237. mww 0x53fa8124 0x00000000 ; #D19
  238. mww 0x53fa8128 0x00000000 ; #D20
  239. mww 0x53fa812C 0x00000000 ; #D21
  240. mww 0x53fa8130 0x00000000 ; #D22
  241. mww 0x53fa8134 0x00000000 ; #D23
  242. mww 0x53fa813c 0x00000000 ; #IOMUXC_SW_PAD_CTL_PAD_EIM_D24
  243. mww 0x53fa8140 0x00000000 ; #IOMUXC_SW_PAD_CTL_PAD_EIM_D25
  244. mww 0x53fa8144 0x00000000 ; #D26
  245. mww 0x53fa8148 0x00000000 ; #D27
  246. mww 0x53fa814C 0x00000000 ; #D28
  247. mww 0x53fa8150 0x00000000 ; #D29
  248. mww 0x53fa8154 0x00000000 ; #D30
  249. mww 0x53fa8158 0x00000000 ; #D31
  250. # DDR3 IOMUX configuration
  251. #* Global pad control options */
  252. mww 0x53fa8554 0x00380000 ; #IOMUXC_SW_PAD_CTL_PAD_DRAM_DQM3
  253. mww 0x53fa8558 0x00380040 ; #IOMUXC_SW_PAD_CTL_PAD_DRAM_SDQS3
  254. mww 0x53fa8560 0x00380000 ; #IOMUXC_SW_PAD_CTL_PAD_DRAM_DQM2
  255. mww 0x53fa8564 0x00380040 ; #IOMUXC_SW_PAD_CTL_PAD_DRAM_SDODT1
  256. mww 0x53fa8568 0x00380040 ; #IOMUXC_SW_PAD_CTL_PAD_DRAM_SDQS2
  257. mww 0x53fa8570 0x00200000 ; #IOMUXC_SW_PAD_CTL_PAD_DRAM_SDCLK_1 - boazp: weaker sdclk EVK DDR max frequency
  258. mww 0x53fa8574 0x00380000 ; #IOMUXC_SW_PAD_CTL_PAD_DRAM_CAS
  259. mww 0x53fa8578 0x00200000 ; #IOMUXC_SW_PAD_CTL_PAD_DRAM_SDCLK_0 - boazp: weaker sdclk EVK DDR max frequency
  260. mww 0x53fa857c 0x00380040 ; #IOMUXC_SW_PAD_CTL_PAD_DRAM_SDQS0
  261. mww 0x53fa8580 0x00380040 ; #IOMUXC_SW_PAD_CTL_PAD_DRAM_SDODT0
  262. mww 0x53fa8584 0x00380000 ; #IOMUXC_SW_PAD_CTL_PAD_DRAM_DQM0
  263. mww 0x53fa8588 0x00380000 ; #IOMUXC_SW_PAD_CTL_PAD_DRAM_RAS
  264. mww 0x53fa8590 0x00380040 ; #IOMUXC_SW_PAD_CTL_PAD_DRAM_SDQS1
  265. mww 0x53fa8594 0x00380000 ; #IOMUXC_SW_PAD_CTL_PAD_DRAM_DQM1
  266. mww 0x53fa86f0 0x00380000 ; #IOMUXC_SW_PAD_CTL_GRP_ADDDS
  267. mww 0x53fa86f4 0x00000200 ; #IOMUXC_SW_PAD_CTL_GRP_DDRMODE_CTL
  268. mww 0x53fa86fc 0x00000000 ; #IOMUXC_SW_PAD_CTL_GRP_DDRPKE
  269. # mww 0x53fa8714 0x00000200 ; #IOMUXC_SW_PAD_CTL_GRP_DDRMODE - CMOS mode XXX
  270. mww 0x53fa8714 0x00000000 ; #IOMUXC_SW_PAD_CTL_GRP_DDRMODE - CMOS mode XXX
  271. mww 0x53fa8718 0x00380000 ; #IOMUXC_SW_PAD_CTL_GRP_B0DS
  272. mww 0x53fa871c 0x00380000 ; #IOMUXC_SW_PAD_CTL_GRP_B1DS
  273. mww 0x53fa8720 0x00380000 ; #IOMUXC_SW_PAD_CTL_GRP_CTLDS
  274. mww 0x53fa8724 0x00000000 ; #IOMUXC_SW_PAD_CTL_GRP_DDR_TYPE - DDR_SEL=0 XXX
  275. mww 0x53fa8728 0x00380000 ; #IOMUXC_SW_PAD_CTL_GRP_B2DS
  276. mww 0x53fa872c 0x00380000 ; #IOMUXC_SW_PAD_CTL_GRP_B3DS
  277. # mww 0x53fa86f4 0x00000000 ;IOMUXC_SW_PAD_CTL_GRP_DDRMODE_CTL for sDQS[3:0], 1=DDR2, 0=CMOS mode
  278. # mww 0x53fa8714 0x00000000 ;IOMUXC_SW_PAD_CTL_GRP_DDRMODE for D[31:0], 1=DDR2, 0=CMOS mode
  279. # mww 0x53fa86fc 0x00000000 ;IOMUXC_SW_PAD_CTL_GRP_DDRPKE
  280. # mww 0x53fa8724 0x00000000 ;IOMUXC_SW_PAD_CTL_GRP_DDR_TYPE - DDR_SEL=00
  281. #* Data bus byte lane pad drive strength control options */
  282. # mww 0x53fa872c 0x00300000 ;IOMUXC_SW_PAD_CTL_GRP_B3DS
  283. # mww 0x53fa8554 0x00300000 ;IOMUXC_SW_PAD_CTL_PAD_DRAM_DQM3
  284. # mww 0x53fa8558 0x00300040 ;IOMUXC_SW_PAD_CTL_PAD_DRAM_SDQS3
  285. # mww 0x53fa8728 0x00300000 ;IOMUXC_SW_PAD_CTL_GRP_B2DS
  286. # mww 0x53fa8560 0x00300000 ;IOMUXC_SW_PAD_CTL_PAD_DRAM_DQM2
  287. # mww 0x53fa8568 0x00300040 ;IOMUXC_SW_PAD_CTL_PAD_DRAM_SDQS2
  288. # mww 0x53fa871c 0x00300000 ;IOMUXC_SW_PAD_CTL_GRP_B1DS
  289. # mww 0x53fa8594 0x00300000 ;IOMUXC_SW_PAD_CTL_PAD_DRAM_DQM1
  290. # mww 0x53fa8590 0x00300040 ;IOMUXC_SW_PAD_CTL_PAD_DRAM_SDQS1
  291. # mww 0x53fa8718 0x00300000 ;IOMUXC_SW_PAD_CTL_GRP_B0DS
  292. # mww 0x53fa8584 0x00300000 ;IOMUXC_SW_PAD_CTL_PAD_DRAM_DQM0
  293. # mww 0x53fa857c 0x00300040 ;IOMUXC_SW_PAD_CTL_PAD_DRAM_SDQS0
  294. #* SDCLK pad drive strength control options */
  295. # mww 0x53fa8578 0x00300000 ;IOMUXC_SW_PAD_CTL_PAD_DRAM_SDCLK_0
  296. # mww 0x53fa8570 0x00300000 ;IOMUXC_SW_PAD_CTL_PAD_DRAM_SDCLK_1
  297. #* Control and addr bus pad drive strength control options */
  298. # mww 0x53fa8574 0x00300000 ;IOMUXC_SW_PAD_CTL_PAD_DRAM_CAS
  299. # mww 0x53fa8588 0x00300000 ;IOMUXC_SW_PAD_CTL_PAD_DRAM_RAS
  300. # mww 0x53fa86f0 0x00300000 ;IOMUXC_SW_PAD_CTL_GRP_ADDDS for DDR addr bus
  301. # mww 0x53fa8720 0x00300000 ;IOMUXC_SW_PAD_CTL_GRP_CTLDS for CSD0, CSD1, SDCKE0, SDCKE1, SDWE
  302. # mww 0x53fa8564 0x00300040 ;IOMUXC_SW_PAD_CTL_PAD_DRAM_SDODT1
  303. # mww 0x53fa8580 0x00300040 ;IOMUXC_SW_PAD_CTL_PAD_DRAM_SDODT0
  304. # Initialize DDR3 memory - Micron MT41J128M16-187Er
  305. #** Keep for now, same setting as CPU3 board **#
  306. mww 0x63fd901c 0x00008000
  307. # mww 0x63fd904c 0x01680172 ; #write leveling reg 0
  308. # mww 0x63fd9050 0x0021017f ; #write leveling reg 1
  309. mww 0x63fd9088 0x32383535 ; #read delay lines
  310. mww 0x63fd9090 0x40383538 ; #write delay lines
  311. # mww 0x63fd90F8 0x00000800 ; #Measure unit
  312. mww 0x63fd907c 0x0136014d ; #DQS gating 0
  313. mww 0x63fd9080 0x01510141 ; #DQS gating 1
  314. #* CPU3 Board settingr
  315. # Enable bank interleaving, Address mirror on, WALAT 0x1, RALAT = 0x5, DDR2_EN = 0
  316. # mww 0x63fd9018 0x00091740 ; #Misc register:
  317. #* Quick Silver board setting
  318. # Enable bank interleaving, Address mirror off, WALAT 0x1, RALAT = 0x5, DDR2_EN = 0
  319. mww 0x63fd9018 0x00011740 ; #Misc register
  320. # Enable CSD0 and CSD1, row width = 14, column width = 10, burst length = 8, data width = 32bit
  321. # mww 0x63fd9000 0xc3190000 ; #Main control register
  322. # Enable CSD0 and CSD1, row width = 14, column width = 10, burst length = 8, data width = 32bit
  323. mww 0x63fd9000 0x83190000 ; #Main control register
  324. # tRFC=64ck;tXS=68;tXP=3;tXPDLL=10;tFAW=15;CAS=6ck
  325. mww 0x63fd900C 0x555952E3 ; #timing configuration Reg 0
  326. # tRCD=6;tRP=6;tRC=21;tRAS=15;tRPA=1;tWR=6;tMRD=4;tCWL=5ck
  327. mww 0x63fd9010 0xb68e8b63 ; #timing configuration Reg 1
  328. # tDLLK(tXSRD)=512 cycles; tRTP=4;tWTR=4;tRRD=4
  329. mww 0x63fd9014 0x01ff00db ; #timing configuration Reg 2
  330. mww 0x63fd902c 0x000026d2 ; #command delay (default)
  331. mww 0x63fd9030 0x009f0e21 ; #out of reset delays
  332. # Keep tAOFPD, tAONPD, tANPD, and tAXPD as default since they are bigger than calc values
  333. mww 0x63fd9008 0x12273030 ; #ODT timings
  334. # tCKE=3; tCKSRX=5; tCKSRE=5
  335. mww 0x63fd9004 0x0002002d
  336. #Power down control
  337. #**********************************
  338. #DDR device configuration:
  339. #**********************************
  340. #**********************************
  341. # CS0:
  342. #**********************************
  343. mww 0x63fd901c 0x00008032 ; #write mode reg MR2 with cs0 (see below for settings)
  344. # Full array self refresh
  345. # Rtt_WR disabled (no ODT at IO CMOS operation)
  346. # Manual self refresh
  347. # CWS=5
  348. mww 0x63fd901c 0x00008033 ; #write mode reg MR3 with cs0.
  349. mww 0x63fd901c 0x00028031 ; #write mode reg MR1 with cs0. ODS=01: out buff= RZQ/7 (see below for settings)
  350. # out impedance = RZQ/7
  351. # Rtt_nom disabled (no ODT at IO CMOS operation)
  352. # Aditive latency off
  353. # write leveling disabled
  354. # tdqs (differential?) disabled
  355. mww 0x63fd901c 0x09208030 ; #write mode reg MR0 with cs0 , with dll_rst0
  356. mww 0x63fd901c 0x04008040 ; #ZQ calibration with cs0 (A10 high indicates ZQ cal long ZQCL)
  357. #**********************************
  358. # CS1:
  359. #**********************************
  360. # mww 0x63fd901c 0x0000803a ; #write mode reg MR2 with cs1.
  361. # mww 0x63fd901c 0x0000803b ; #write mode reg MR3 with cs1.
  362. # mww 0x63fd901c 0x00028039 ; #write mode reg MR1 with cs1. ODS=01: out buff= RZQ/7
  363. # mww 0x63fd901c 0x09208138 ; #write mode reg MR0 with cs1.
  364. # mww 0x63fd901c 0x04008048 ; #ZQ calibration with cs1(A10 high indicates ZQ cal long ZQCL)
  365. #**********************************
  366. mww 0x63fd9020 0x00001800 ; # Refresh control register
  367. mww 0x63fd9040 0x04b80003 ; # ZQ HW control
  368. mww 0x63fd9058 0x00022227 ; # ODT control register
  369. mww 0x63fd901c 0x00000000
  370. # CLKO muxing (comment out for now till needed to avoid conflicts with intended usage of signals)
  371. # mww 0x53FA8314 = 0
  372. # mww 0x53FA8320 0x4
  373. # mww 0x53FD4060 0x01e900f0
  374. # dap apsel 0
  375. }
  376. # IRAM
  377. $_TARGETNAME configure -work-area-phys 0xF8000000 -work-area-size 0x20000 -work-area-backup 1
  378. flash bank mx535_nor cfi 0xf0000000 0x800000 2 2 $_TARGETNAME
  379. # vim:filetype=tcl