platform.S 6.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340
  1. /*
  2. * Board specific setup info
  3. *
  4. * (C) Copyright 2005
  5. * STMicrolelctronics, <www.st.com>
  6. *
  7. * (C) Copyright 2004, ARM Ltd.
  8. * Philippe Robin, <philippe.robin@arm.com>
  9. *
  10. * See file CREDITS for list of people who contributed to this
  11. * project.
  12. *
  13. * This program is free software; you can redistribute it and/or
  14. * modify it under the terms of the GNU General Public License as
  15. * published by the Free Software Foundation; either version 2 of
  16. * the License, or (at your option) any later version.
  17. *
  18. * This program is distributed in the hope that it will be useful,
  19. * but WITHOUT ANY WARRANTY; without even the implied warranty of
  20. * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
  21. * GNU General Public License for more details.
  22. *
  23. * You should have received a copy of the GNU General Public License
  24. * along with this program; if not, write to the Free Software
  25. * Foundation, Inc., 59 Temple Place, Suite 330, Boston,
  26. * MA 02111-1307 USA
  27. */
  28. #include <config.h>
  29. #include <version.h>
  30. .globl lowlevel_init
  31. lowlevel_init:
  32. /* Jump to the flash address */
  33. ldr r0, =CFG_ONENAND_BASE
  34. /*
  35. * Make it independent whether we boot from 0x0 or 0x30000000.
  36. * Non-portable: it relies on the knowledge that ip has to be updated
  37. */
  38. orr ip, ip, r0 /* adjust return address of cpu_init_crit */
  39. orr lr, lr, r0 /* adjust return address */
  40. orr pc, pc, r0 /* jump to the normal address */
  41. nop
  42. /* Initialize PLL, Remap clear, FSMC, MPMC here! */
  43. /* What about GPIO, CLCD and UART */
  44. /* PLL Initialization */
  45. /* Prog the PLL1 @ 266 MHz ==> SDRAM Clock = 100.8 MHz */
  46. ldr r0, =NOMADIK_SRC_BASE
  47. ldr r1, =0x2B013502
  48. str r1, [r0, #0x14]
  49. /* Used to set all the timers clock to 2.4MHZ */
  50. ldr r1, =0x2AAAA004
  51. str r1, [r0]
  52. ldr r1, =0x10000000
  53. str r1, [r0, #0x10]
  54. /* FSMC setup ---- */
  55. ldr r0, =NOMADIK_FSMC_BASE
  56. ldr r1, =0x10DB /* For 16-bit NOR flash */
  57. str r1, [r0, #0x08]
  58. ldr r1, =0x03333333 /* For 16-bit NOR flash */
  59. str r1, [r0, #0xc]
  60. /* oneNAND setting */
  61. ldr r1, =0x0000105B /* BCR0 Prog control register */
  62. str r1, [r0]
  63. ldr r1, =0x0A200551 /* BTR0 Prog timing register */
  64. str r1, [r0, #0x04]
  65. /* preload the instructions into icache */
  66. add r0, pc, #0x1F
  67. bic r0, r0, #0x1F
  68. mcr p15, 0, r0, c7, c13, 1
  69. add r0, r0, #0x20
  70. mcr p15, 0, r0, c7, c13, 1
  71. /* Now Clear Remap */
  72. ldr r0, =NOMADIK_SRC_BASE
  73. ldr r1, =0x2004
  74. str r1, [r0]
  75. ldr r1, =0x10000000
  76. str r1, [r0, #0x10]
  77. ldr r0, =0x101E9000
  78. ldr r1, =0x2004
  79. str r1, [r0]
  80. ldr r0, =NOMADIK_SRC_BASE
  81. ldr r1, =0x2104
  82. str r1, [r0]
  83. /* FSMC setup -- */
  84. mov r0, #(NOMADIK_FSMC_BASE & 0x10000000)
  85. orr r0, r0, #(NOMADIK_FSMC_BASE & 0x0FFFFFFF)
  86. ldr r1, =0x10DB /* For 16-bit NOR flash */
  87. str r1, [r0, #0x8]
  88. ldr r1, =0x03333333 /* For 16-bit NOR flash */
  89. str r1, [r0, #0xc]
  90. /* MPMC Setup */
  91. ldr r0, =NOMADIK_MPMC_BASE
  92. ldr r1, =0xF00003
  93. str r1, [r0] /* Enable the MPMC and the DLL */
  94. ldr r1, =0x183
  95. str r1, [r0, #0x20]
  96. ldr r2, =NOMADIK_PMU_BASE
  97. ldr r1, =0x1111
  98. str r1, [r2]
  99. ldr r1, =0x1111 /* Prog the, mand delay strategy */
  100. str r1, [r0, #0x28]
  101. ldr r1, =0x103 /* NOP ,mand */
  102. str r1, [r0, #0x20]
  103. /* FIXME -- Wait required here */
  104. ldr r1, =0x103 /* PALL ,mand*/
  105. str r1, [r0, #0x20]
  106. ldr r1, =0x1
  107. str r1, [r0, #0x24] /* To do at least two auto-refresh */
  108. /* FIXME -- Wait required here */
  109. /* Auto-refresh period = 7.8us @ SDRAM Clock = 100.8 MHz */
  110. ldr r1, =0x31
  111. str r1, [r0, #0x24]
  112. /* Prog Little Endian, Not defined in 8800 board */
  113. ldr r1, =0x0
  114. str r1, [r0, #0x8]
  115. ldr r1, =0x2
  116. str r1, [r0, #0x30] /* Prog tRP timing */
  117. ldr r1, =0x4 /* Change for 8815 */
  118. str r1, [r0, #0x34] /* Prog tRAS timing */
  119. ldr r1, =0xB
  120. str r1, [r0, #0x38] /* Prog tSREX timing */
  121. ldr r1, =0x1
  122. str r1, [r0, #0x44] /* Prog tWR timing */
  123. ldr r1, =0x8
  124. str r1, [r0, #0x48] /* Prog tRC timing */
  125. ldr r1, =0xA
  126. str r1, [r0, #0x4C] /* Prog tRFC timing */
  127. ldr r1, =0xB
  128. str r1, [r0, #0x50] /* Prog tXSR timing */
  129. ldr r1, =0x1
  130. str r1, [r0, #0x54] /* Prog tRRD timing */
  131. ldr r1, =0x1
  132. str r1, [r0, #0x58] /* Prog tMRD timing */
  133. ldr r1, =0x1
  134. str r1, [r0, #0x5C] /* Prog tCDLR timing */
  135. /* DDR-SDRAM MEMORY IS ON BANK0 8815 */
  136. ldr r1, =0x304 /* Prog RAS and CAS for CS 0 */
  137. str r1, [r0, #0x104]
  138. /* SDR-SDRAM MEMORY IS ON BANK1 8815 */
  139. ldr r1, =0x304 /* Prog RAS and CAS for CS 1 */
  140. str r1, [r0, #0x124]
  141. /* THE DATA BUS WIDE IS PROGRAM FOR 16-BITS */
  142. /* DDR-SDRAM MEMORY IS ON BANK0*/
  143. ldr r1, =0x884 /* 8815 : config reg in BRC for CS0 */
  144. str r1, [r0, #0x100]
  145. /*SDR-SDRAM MEMORY IS ON BANK1*/
  146. ldr r1, =0x884 /* 8815 : config reg in BRC for CS1 */
  147. str r1, [r0, #0x120]
  148. ldr r1, =0x83 /*MODE Mand*/
  149. str r1, [r0, #0x20]
  150. /* LOAD MODE REGISTER FOR 2 bursts of 16b, with DDR mem ON BANK0 */
  151. ldr r1, =0x62000 /*Data in*/
  152. ldr r1, [r1]
  153. /* LOAD MODE REGISTER FOR 2 bursts of 16b, with DDR mem ON BANK1 */
  154. ldr r1, =0x8062000
  155. ldr r1, [r1]
  156. ldr r1, =0x003
  157. str r1, [r0, #0x20]
  158. /* ENABLE ALL THE BUFFER FOR EACH AHB PORT*/
  159. ldr r1, =0x01 /* Enable buffer 0 */
  160. str r1, [r0, #0x400]
  161. ldr r1, =0x01 /* Enable buffer 1 */
  162. str r1, [r0, #0x420]
  163. ldr r1, =0x01 /* Enable buffer 2 */
  164. str r1, [r0, #0x440]
  165. ldr r1, =0x01 /* Enable buffer 3 */
  166. str r1, [r0, #0x460]
  167. ldr r1, =0x01 /* Enable buffer 4 */
  168. str r1, [r0, #0x480]
  169. ldr r1, =0x01 /* Enable buffer 5 */
  170. str r1, [r0, #0x4A0]
  171. /* GPIO settings */
  172. ldr r0, =NOMADIK_GPIO1_BASE
  173. ldr r1, =0xC0600000
  174. str r1, [r0, #0x20]
  175. ldr r1, =0x3F9FFFFF /* ABHI change this for uart1 */
  176. str r1, [r0, #0x24]
  177. ldr r1, =0x3F9FFFFF /* ABHI change this for uart1 */
  178. str r1, [r0, #0x28]
  179. ldr r0, =NOMADIK_GPIO0_BASE
  180. ldr r1, =0xFFFFFFFF
  181. str r1, [r0, #0x20]
  182. ldr r1, =0x00
  183. str r1, [r0, #0x24]
  184. ldr r1, =0x00
  185. str r1, [r0, #0x28]
  186. /* Configure CPLD_CTRL register for enabling MUX logic for UART0/UART2 */
  187. ldr r0, =NOMADIK_FSMC_BASE
  188. ldr r1, =0x10DB /* INIT FSMC bank 0 */
  189. str r1, [r0, #0x00]
  190. ldr r1, =0x0FFFFFFF
  191. str r1, [r0, #0x04]
  192. ldr r1, =0x010DB /* INIT FSMC bank 1 */
  193. str r1, [r0, #0x08]
  194. ldr r1, =0x00FFFFFFF
  195. str r1, [r0, #0x0C]
  196. ldr r0, =NOMADIK_UART0_BASE
  197. ldr r1, =0x00000000
  198. str r1, [r0, #0x30]
  199. ldr r1, =0x0000004e
  200. str r1, [r0, #0x24]
  201. ldr r1, =0x00000008
  202. str r1, [r0, #0x28]
  203. ldr r1, =0x00000060
  204. str r1, [r0, #0x2C]
  205. ldr r1, =0x00000301
  206. str r1, [r0, #0x30]
  207. ldr r1, =0x00000066
  208. str r1, [r0]
  209. ldr r0, =NOMADIK_UART1_BASE
  210. ldr r1, =0x00000000
  211. str r1, [r0, #0x30]
  212. ldr r1, =0x0000004e
  213. str r1, [r0, #0x24]
  214. ldr r1, =0x00000008
  215. str r1, [r0, #0x28]
  216. ldr r1, =0x00000060
  217. str r1, [r0, #0x2C]
  218. ldr r1, =0x00000301
  219. str r1, [r0, #0x30]
  220. ldr r1, =0x00000066
  221. str r1, [r0]
  222. ldr r0, =NOMADIK_UART2_BASE
  223. ldr r1, =0x00000000
  224. str r1, [r0, #0x30]
  225. ldr r1, =0x0000004e
  226. str r1, [r0, #0x24]
  227. ldr r1, =0x00000008
  228. str r1, [r0, #0x28]
  229. ldr r1, =0x00000060
  230. str r1, [r0, #0x2C]
  231. ldr r1, =0x00000301
  232. str r1, [r0, #0x30]
  233. ldr r1, =0x00000066
  234. str r1, [r0]
  235. /* Configure CPLD to enable UART0 */
  236. mov pc, lr