dm355evm.cfg 5.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203
  1. # SPDX-License-Identifier: GPL-2.0-or-later
  2. # DM355 EVM board
  3. # http://focus.ti.com/docs/toolsw/folders/print/tmdsevm355.html
  4. # http://c6000.spectrumdigital.com/evmdm355/
  5. source [find target/ti_dm355.cfg]
  6. reset_config trst_and_srst separate
  7. # NOTE: disable or replace this call to dm355evm_init if you're
  8. # debugging new UBL code from SRAM.
  9. $_TARGETNAME configure -event reset-init { dm355evm_init }
  10. #
  11. # This post-reset init is called when the MMU isn't active, all IRQs
  12. # are disabled, etc. It should do most of what a UBL does, except for
  13. # loading code (like U-Boot) into DRAM and running it.
  14. #
  15. proc dm355evm_init {} {
  16. global dm355
  17. echo "Initialize DM355 EVM board"
  18. # CLKIN = 24 MHz ... can't talk quickly to ARM yet
  19. jtag_rclk 1500
  20. ########################
  21. # PLL1 = 432 MHz (/8, x144)
  22. # ...SYSCLK1 = 216 MHz (/2) ... ARM, MJCP
  23. # ...SYSCLK2 = 108 MHz (/4) ... Peripherals
  24. # ...SYSCLK3 = 27 MHz (/16) ... VPBE, DAC
  25. # ...SYSCLK4 = 108 MHz (/4) ... VPSS
  26. # pll1.{prediv,div1,div2} are fixed
  27. # pll1.postdiv set in MISC (for *this* speed grade)
  28. set addr [dict get $dm355 pllc1]
  29. set pll_divs [dict create]
  30. dict set pll_divs div3 16
  31. dict set pll_divs div4 4
  32. pll_v02_setup $addr 144 $pll_divs
  33. # ARM is now running at 216 MHz, so JTAG can go faster
  34. jtag_rclk 20000
  35. ########################
  36. # PLL2 = 342 MHz (/8, x114)
  37. # ....SYSCLK1 = 342 MHz (/1) ... DDR PHY at 171 MHz, 2x clock
  38. # pll2.{postdiv,div1} are fixed
  39. set addr [dict get $dm355 pllc2]
  40. set pll_divs [dict create]
  41. dict set pll_divs div1 1
  42. dict set pll_divs prediv 8
  43. pll_v02_setup $addr 114 $pll_divs
  44. ########################
  45. # PINMUX
  46. # All Video Inputs
  47. davinci_pinmux $dm355 0 0x00007f55
  48. # All Video Outputs
  49. davinci_pinmux $dm355 1 0x00145555
  50. # EMIFA (NOTE: more could be set up for use as GPIOs)
  51. davinci_pinmux $dm355 2 0x00000c08
  52. # SPI0, SPI1, UART1, I2C, SD0, SD1, McBSP0, CLKOUTs
  53. davinci_pinmux $dm355 3 0x1bff55ff
  54. # MMC/SD0 instead of MS; SPI0
  55. davinci_pinmux $dm355 4 0x00000000
  56. ########################
  57. # PSC setup (minimal)
  58. # DDR EMIF/13, AEMIF/14, UART0/19
  59. psc_enable 13
  60. psc_enable 14
  61. psc_enable 19
  62. psc_go
  63. ########################
  64. # DDR2 EMIF
  65. # VTPIOCR impedance calibration
  66. set addr [dict get $dm355 sysbase]
  67. set addr [expr {$addr + 0x70}]
  68. # clear CLR, LOCK, PWRDN; wait a clock; set CLR
  69. mmw $addr 0 0x20c0
  70. mmw $addr 0x2000 0
  71. # wait for READY
  72. while { [expr {[mrw $addr] & 0x8000}] == 0 } { sleep 1 }
  73. # set IO_READY; then LOCK and PWRSAVE; then PWRDN
  74. mmw $addr 0x4000 0
  75. mmw $addr 0x0180 0
  76. mmw $addr 0x0040 0
  77. # NOTE: this DDR2 initialization sequence borrows from
  78. # both UBL 1.50 and the SPRUEH7D DDR2 EMIF spec.
  79. # reset (then re-enable) DDR controller
  80. psc_reset 13
  81. psc_go
  82. psc_enable 13
  83. psc_go
  84. # now set it up for Micron MT47H64M16HR-37E @ 171 MHz
  85. set addr [dict get $dm355 ddr_emif]
  86. # DDRPHYCR1
  87. mww [expr {$addr + 0xe4}] 0x50006404
  88. # PBBPR -- burst priority
  89. mww [expr {$addr + 0x20}] 0xfe
  90. # SDCR -- unlock boot config; init for DDR2, relock, unlock SDTIM*
  91. mmw [expr {$addr + 0x08}] 0x00800000 0
  92. mmw [expr {$addr + 0x08}] 0x0013c632 0x03870fff
  93. # SDTIMR0, SDTIMR1
  94. mww [expr {$addr + 0x10}] 0x2a923249
  95. mww [expr {$addr + 0x14}] 0x4c17c763
  96. # SDCR -- relock SDTIM*
  97. mmw [expr {$addr + 0x08}] 0 0x00008000
  98. # SDRCR -- refresh rate (171 MHz * 7.8usec)
  99. mww [expr {$addr + 0x0c}] 1336
  100. ########################
  101. # ASYNC EMIF
  102. set addr [dict get $dm355 a_emif]
  103. # slow/pessimistic timings
  104. set nand_timings 0x40400204
  105. # fast (25% faster page reads)
  106. #set nand_timings 0x0400008c
  107. # AWCCR
  108. mww [expr {$addr + 0x04}] 0xff
  109. # CS0 == socketed NAND (default MT29F16G08FAA, 2GByte)
  110. mww [expr {$addr + 0x10}] $nand_timings
  111. # CS1 == dm9000 Ethernet
  112. mww [expr {$addr + 0x14}] 0x00a00505
  113. # NANDFCR -- only CS0 has NAND
  114. mww [expr {$addr + 0x60}] 0x01
  115. # default: both chipselects to the NAND socket are used
  116. nand probe 0
  117. nand probe 1
  118. ########################
  119. # UART0
  120. set addr [dict get $dm355 uart0]
  121. # PWREMU_MGNT -- rx + tx in reset
  122. mww [expr {$addr + 0x30}] 0
  123. # DLL, DLH -- 115200 baud
  124. mwb [expr {$addr + 0x20}] 0x0d
  125. mwb [expr {$addr + 0x24}] 0x00
  126. # FCR - clear and disable FIFOs
  127. mwb [expr {$addr + 0x08}] 0x07
  128. mwb [expr {$addr + 0x08}] 0x00
  129. # IER - disable IRQs
  130. mwb [expr {$addr + 0x04}] 0x00
  131. # LCR - 8-N-1
  132. mwb [expr {$addr + 0x0c}] 0x03
  133. # MCR - no flow control or loopback
  134. mwb [expr {$addr + 0x10}] 0x00
  135. # PWREMU_MGNT -- rx + tx normal, free running during JTAG halt
  136. mww [expr {$addr + 0x30}] 0xe001
  137. ########################
  138. # turn on icache - set I bit in cp15 register c1
  139. arm mcr 15 0 0 1 0 0x00051078
  140. }
  141. # NAND -- socket has two chipselects, MT29F16G08FAA puts 1GByte on each one.
  142. #
  143. # NOTE: "hwecc4" here presumes that if you're using the standard 2GB NAND
  144. # you either (a) have 'new' DM355 chips, with boot ROMs that don't need to
  145. # use "hwecc4_infix" for the UBL; or else (b) aren't updating anything that
  146. # needs infix layout ... like an old UBL, old U-Boot, old MVL kernel, etc.
  147. set _FLASHNAME $_CHIPNAME.boot
  148. nand device $_FLASHNAME davinci $_TARGETNAME 0x02000000 hwecc4 0x01e10000
  149. set _FLASHNAME $_CHIPNAME.flash
  150. nand device $_FLASHNAME davinci $_TARGETNAME 0x02004000 hwecc4 0x01e10000
  151. # FIXME
  152. # - support writing UBL with its header (new layout only with new ROMs)
  153. # - support writing ABL/U-Boot with its header (new layout)