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