setup.S 4.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210
  1. /*
  2. * Memory Setup stuff - taken from blob memsetup.S
  3. *
  4. * Copyright (C) 1999 2000 2001 Erik Mouw (J.A.K.Mouw@its.tudelft.nl) and
  5. * Jan-Derk Bakker (J.D.Bakker@its.tudelft.nl)
  6. * 2004 (c) MontaVista Software, Inc.
  7. *
  8. * See file CREDITS for list of people who contributed to this
  9. * project.
  10. *
  11. * This program is free software; you can redistribute it and/or
  12. * modify it under the terms of the GNU General Public License as
  13. * published by the Free Software Foundation; either version 2 of
  14. * the License, or (at your option) any later version.
  15. *
  16. * This program is distributed in the hope that it will be useful,
  17. * but WITHOUT ANY WARRANTY; without even the implied warranty of
  18. * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
  19. * GNU General Public License for more details.
  20. *
  21. * You should have received a copy of the GNU General Public License
  22. * along with this program; if not, write to the Free Software
  23. * Foundation, Inc., 59 Temple Place, Suite 330, Boston,
  24. * MA 02111-1307 USA
  25. */
  26. #include "config.h"
  27. #include "version.h"
  28. /*-----------------------------------------------------------------------
  29. * Board defines:
  30. */
  31. #define MDCNFG 0x00
  32. #define MDCAS00 0x04
  33. #define MDCAS01 0x08
  34. #define MDCAS02 0x0C
  35. #define MSC0 0x10
  36. #define MSC1 0x14
  37. #define MECR 0x18
  38. #define MDREFR 0x1C
  39. #define MDCAS20 0x20
  40. #define MDCAS21 0x24
  41. #define MDCAS22 0x28
  42. #define MSC2 0x2C
  43. #define SMCNFG 0x30
  44. #define GPDR 0x04
  45. #define GPSR 0x08
  46. #define GPCR 0x0C
  47. #define GAFR 0x1C
  48. #define PPDR 0x00
  49. #define PPSR 0x04
  50. #define PPAR 0x08
  51. #define MDREFR_TRASR(n_) (n_ & (0x0000000f))
  52. #define MDREFR_DRI(n_) ((n_ & (0x00000fff)) << 4)
  53. #define MDREFR_K0DB2 (1 << 18)
  54. #define MDREFR_K1DB2 (1 << 22)
  55. #define MDREFR_K2DB2 (1 << 26)
  56. #define MDREFR_K0RUN (1 << 17)
  57. #define MDREFR_K1RUN (1 << 21)
  58. #define MDREFR_K2RUN (1 << 25)
  59. #define MDREFR_SLFRSH (1 << 31)
  60. #define MDREFR_E1PIN (1 << 20)
  61. #define PSSR 0x04
  62. #define PSSR_DH 0x00000008
  63. #define POSR 0x08
  64. #define RCSR 0x04
  65. /*-----------------------------------------------------------------------
  66. * Setup parameters for the board:
  67. */
  68. MEM_BASE: .long 0xa0000000
  69. MEM_START: .long 0xc0000000
  70. PWR_BASE: .word 0x90020000
  71. RST_BASE: .long 0x90030000
  72. PPC_BASE: .long 0x90060000
  73. GPIO_BASE: .long 0x90040000
  74. IC_BASE: .word 0x90050000
  75. cpuspeed: .word 0xa0
  76. /* calculated from old blob bootloader */
  77. mdcnfg: .long 0x00037267 /* mdcnfg 0x00037267 */
  78. mdcas00: .long 0x5555557f /* mdcas00 0x5555557f */
  79. mdcas01: .long 0x55555555 /* mdcas01 0x55555555 */
  80. mdcas02: .long 0x55555555 /* mdcas02 0x55555555 */
  81. msc0: .long 0xfff04f78 /* msc0 0xfff04f78 */
  82. msc1: .long 0xfff8fff0 /* msc1 0xfff8fff0 */
  83. mecr: .long 0x98c698c6 /* mecr 0x98c698c6 */
  84. mdrefr: .long 0x067600c7 /* mdrefr 0x04340327 */
  85. mdcas20: .long 0xd1284142 /* mdcas20 0xd1284142 */
  86. mdcas21: .long 0x72249529 /* mdcas21 0x72249529 */
  87. mdcas22: .long 0x78414351 /* mdcas22 0x78414351 */
  88. msc2: .long 0x201d2959 /* msc2 0x201d2959 */
  89. smcnfg: .long 0x00000000 /* smcnfg 0x00000000 */
  90. pin_set_out: .long 0x37ff70
  91. pin_set_dir: .long 0x11480
  92. gpdr_set: .long 0x0B3A0900
  93. gpsr_set: .long 0x02100800
  94. gpcr_set: .long 0x092A0100
  95. gafr_set: .long 0x08600000
  96. .globl lowlevel_init
  97. lowlevel_init:
  98. /* set output and direction of pins */
  99. ldr r0, PPC_BASE
  100. ldr r1, pin_set_out
  101. str r1, [r0, #PPSR]
  102. ldr r1, pin_set_dir
  103. str r1, [r0, #PPDR]
  104. /* Setting up the memory and stuff */
  105. /***********************************/
  106. ldr r0, MEM_BASE
  107. ldr r1, mdcnfg
  108. str r1, [r0, #MDCNFG]
  109. ldr r1, mdcas00
  110. str r1, [r0, #MDCAS00]
  111. ldr r1, mdcas01
  112. str r1, [r0, #MDCAS01]
  113. ldr r1, mdcas02
  114. str r1, [r0, #MDCAS02]
  115. ldr r1, mdcas20
  116. str r1, [r0, #MDCAS20]
  117. ldr r1, mdcas21
  118. str r1, [r0, #MDCAS21]
  119. ldr r1, mdcas22
  120. str r1, [r0, #MDCAS22]
  121. /* clear kxDB2 */
  122. ldr r2, [r0, #MDREFR]
  123. bic r2, r2, #MDREFR_K0DB2
  124. bic r2, r2, #MDREFR_K1DB2
  125. bic r2, r2, #MDREFR_K2DB2
  126. str r2, [r0, #MDREFR]
  127. ldr r2, [r0, #MDREFR]
  128. orr r2, r2, #MDREFR_TRASR(7)
  129. mov r4, #0x2000
  130. spin: subs r4, r4, #1
  131. bne spin
  132. ldr r1, PWR_BASE
  133. mov r2, #PSSR_DH
  134. str r2, [r1, #PSSR]
  135. ldr r2, [r0, #MDREFR]
  136. bic r2, r2, #MDREFR_K0DB2
  137. bic r2, r2, #MDREFR_K1DB2
  138. bic r2, r2, #MDREFR_K2DB2
  139. str r2, [r0, #MDREFR]
  140. ldr r2, [r0, #MDREFR]
  141. orr r2, r2, #MDREFR_TRASR(7)
  142. orr r2, r2, #MDREFR_DRI(12)
  143. orr r2, r2, #MDREFR_K0DB2
  144. orr r2, r2, #MDREFR_K1DB2
  145. orr r2, r2, #MDREFR_K2DB2
  146. str r2, [r0, #MDREFR]
  147. ldr r2, [r0, #MDREFR]
  148. orr r2, r2, #MDREFR_K0RUN
  149. orr r2, r2, #MDREFR_K1RUN
  150. orr r2, r2, #MDREFR_K2RUN
  151. str r2, [r0, #MDREFR]
  152. ldr r2, [r0, #MDREFR]
  153. bic r2, r2, #MDREFR_SLFRSH
  154. str r2, [r0, #MDREFR]
  155. ldr r2, [r0, #MDREFR]
  156. orr r2, r2, #MDREFR_E1PIN
  157. str r2, [r0, #MDREFR]
  158. ldr r2, MEM_START
  159. .rept 8
  160. ldr r3, [r2]
  161. .endr
  162. ldr r1, msc0
  163. str r1, [r0, #MSC0]
  164. ldr r1, msc1
  165. str r1, [r0, #MSC1]
  166. ldr r1, msc2
  167. str r1, [r0, #MSC2]
  168. ldr r1, smcnfg
  169. str r1, [r0, #SMCNFG]
  170. ldr r1, mdcnfg
  171. str r1, [r0, #MDCNFG]
  172. ldr r1, mecr
  173. str r1, [r0, #MECR]
  174. /* enable SDRAM */
  175. orr r1, r1, #0x00000001
  176. str r1, [r0, #MDCNFG]
  177. mov pc, lr