lowlevel_init.S 3.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196
  1. /* SPDX-License-Identifier: GPL-2.0+ */
  2. /*
  3. * Copyright (C) 2011 Renesas Solutions Corp.
  4. * Copyright (C) 2011 Nobuhiro Iwamatsu <nobuhiro.Iwamatsu.yj@renesas.com>
  5. *
  6. * board/renesas/ecovec/lowlevel_init.S
  7. */
  8. #include <config.h>
  9. #include <asm/processor.h>
  10. #include <asm/macro.h>
  11. #include <configs/ecovec.h>
  12. .global lowlevel_init
  13. .text
  14. .align 2
  15. lowlevel_init:
  16. /* jump to CONFIG_ECOVEC_ROMIMAGE_ADDR if bit 1 of PVDR_A */
  17. mov.l PVDR_A, r1
  18. mov.l PVDR_D, r2
  19. mov.b @r1, r0
  20. tst r0, r2
  21. bt 1f
  22. mov.l JUMP_A, r1
  23. jmp @r1
  24. nop
  25. 1:
  26. /* Disable watchdog */
  27. write16 RWTCSR_A, RWTCSR_D
  28. /* MMU Disable */
  29. write32 MMUCR_A, MMUCR_D
  30. /* Setup clocks */
  31. write32 PLLCR_A, PLLCR_D
  32. write32 FRQCRA_A, FRQCRA_D
  33. write32 FRQCRB_A, FRQCRB_D
  34. wait_timer TIMER_D
  35. write32 MMSELR_A, MMSELR_D
  36. /* Srtup BSC */
  37. write32 CMNCR_A, CMNCR_D
  38. write32 CS0BCR_A, CS0BCR_D
  39. write32 CS0WCR_A, CS0WCR_D
  40. wait_timer TIMER_D
  41. /* Setup SDRAM */
  42. write32 DBPDCNT0_A, DBPDCNT0_D0
  43. write32 DBCONF_A, DBCONF_D
  44. write32 DBTR0_A, DBTR0_D
  45. write32 DBTR1_A, DBTR1_D
  46. write32 DBTR2_A, DBTR2_D
  47. write32 DBTR3_A, DBTR3_D
  48. write32 DBKIND_A, DBKIND_D
  49. write32 DBCKECNT_A, DBCKECNT_D
  50. wait_timer TIMER_D
  51. write32 DBCMDCNT_A, DBCMDCNT_D0
  52. write32 DBMRCNT_A, DBMRCNT_D0
  53. write32 DBMRCNT_A, DBMRCNT_D1
  54. write32 DBMRCNT_A, DBMRCNT_D2
  55. write32 DBMRCNT_A, DBMRCNT_D3
  56. write32 DBCMDCNT_A, DBCMDCNT_D0
  57. write32 DBCMDCNT_A, DBCMDCNT_D1
  58. write32 DBCMDCNT_A, DBCMDCNT_D1
  59. write32 DBMRCNT_A, DBMRCNT_D4
  60. write32 DBMRCNT_A, DBMRCNT_D5
  61. write32 DBMRCNT_A, DBMRCNT_D6
  62. wait_timer TIMER_D
  63. write32 DBEN_A, DBEN_D
  64. write32 DBRFPDN1_A, DBRFPDN1_D
  65. write32 DBRFPDN2_A, DBRFPDN2_D
  66. write32 DBCMDCNT_A, DBCMDCNT_D0
  67. /* Dummy read */
  68. mov.l DUMMY_A ,r1
  69. synco
  70. mov.l @r1, r0
  71. synco
  72. mov.l SDRAM_A ,r1
  73. synco
  74. mov.l @r1, r0
  75. synco
  76. wait_timer TIMER_D
  77. add #4, r1
  78. synco
  79. mov.l @r1, r0
  80. synco
  81. wait_timer TIMER_D
  82. add #4, r1
  83. synco
  84. mov.l @r1, r0
  85. synco
  86. wait_timer TIMER_D
  87. add #4, r1
  88. synco
  89. mov.l @r1, r0
  90. synco
  91. wait_timer TIMER_D
  92. write32 DBCMDCNT_A, DBCMDCNT_D0
  93. write32 DBCMDCNT_A, DBCMDCNT_D1
  94. write32 DBPDCNT0_A, DBPDCNT0_D1
  95. write32 DBRFPDN0_A, DBRFPDN0_D
  96. wait_timer TIMER_D
  97. write32 CCR_A, CCR_D
  98. stc sr, r0
  99. mov.l SR_MASK_D, r1
  100. and r1, r0
  101. ldc r0, sr
  102. rts
  103. .align 2
  104. PVDR_A: .long PVDR
  105. PVDR_D: .long 0x00000001
  106. JUMP_A: .long CONFIG_ECOVEC_ROMIMAGE_ADDR
  107. TIMER_D: .long 64
  108. RWTCSR_A: .long RWTCSR
  109. RWTCSR_D: .long 0x0000A507
  110. MMUCR_A: .long MMUCR
  111. MMUCR_D: .long 0x00000004
  112. PLLCR_A: .long PLLCR
  113. PLLCR_D: .long 0x00004000
  114. FRQCRA_A: .long FRQCRA
  115. FRQCRA_D: .long 0x8E003508
  116. FRQCRB_A: .long FRQCRB
  117. FRQCRB_D: .long 0x0
  118. MMSELR_A: .long MMSELR
  119. MMSELR_D: .long 0xA5A50000
  120. CMNCR_A: .long CMNCR
  121. CMNCR_D: .long 0x00000013
  122. CS0BCR_A: .long CS0BCR
  123. CS0BCR_D: .long 0x11110400
  124. CS0WCR_A: .long CS0WCR
  125. CS0WCR_D: .long 0x00000440
  126. DBPDCNT0_A: .long DBPDCNT0
  127. DBPDCNT0_D0: .long 0x00000181
  128. DBPDCNT0_D1: .long 0x00000080
  129. DBCONF_A: .long DBCONF
  130. DBCONF_D: .long 0x015B0002
  131. DBTR0_A: .long DBTR0
  132. DBTR0_D: .long 0x03061502
  133. DBTR1_A: .long DBTR1
  134. DBTR1_D: .long 0x02020102
  135. DBTR2_A: .long DBTR2
  136. DBTR2_D: .long 0x01090305
  137. DBTR3_A: .long DBTR3
  138. DBTR3_D: .long 0x00000002
  139. DBKIND_A: .long DBKIND
  140. DBKIND_D: .long 0x00000005
  141. DBCKECNT_A: .long DBCKECNT
  142. DBCKECNT_D: .long 0x00000001
  143. DBCMDCNT_A: .long DBCMDCNT
  144. DBCMDCNT_D0:.long 0x2
  145. DBCMDCNT_D1:.long 0x4
  146. DBMRCNT_A: .long DBMRCNT
  147. DBMRCNT_D0: .long 0x00020000
  148. DBMRCNT_D1: .long 0x00030000
  149. DBMRCNT_D2: .long 0x00010040
  150. DBMRCNT_D3: .long 0x00000532
  151. DBMRCNT_D4: .long 0x00000432
  152. DBMRCNT_D5: .long 0x000103C0
  153. DBMRCNT_D6: .long 0x00010040
  154. DBEN_A: .long DBEN
  155. DBEN_D: .long 0x01
  156. DBRFPDN0_A: .long DBRFPDN0
  157. DBRFPDN1_A: .long DBRFPDN1
  158. DBRFPDN2_A: .long DBRFPDN2
  159. DBRFPDN0_D: .long 0x00010000
  160. DBRFPDN1_D: .long 0x00000613
  161. DBRFPDN2_D: .long 0x238C003A
  162. SDRAM_A: .long 0xa8000000
  163. DUMMY_A: .long 0x0c400000
  164. CCR_A: .long CCR
  165. CCR_D: .long 0x0000090B
  166. SR_MASK_D: .long 0xEFFFFF0F