lowlevel_init.S 3.8 KB

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