1*69df3c4dSNobuhiro Iwamatsu/* 2*69df3c4dSNobuhiro Iwamatsu modified from SH-IPL+g 3*69df3c4dSNobuhiro Iwamatsu Renesaso SuperH Solution Enginge MS775x BSC setting 4*69df3c4dSNobuhiro Iwamatsu Coyright (c) 2007 Nobuhiro Iwamatsu 5*69df3c4dSNobuhiro Iwamatsu*/ 6*69df3c4dSNobuhiro Iwamatsu 7*69df3c4dSNobuhiro Iwamatsu#include <config.h> 8*69df3c4dSNobuhiro Iwamatsu#include <version.h> 9*69df3c4dSNobuhiro Iwamatsu 10*69df3c4dSNobuhiro Iwamatsu#include <asm/processor.h> 11*69df3c4dSNobuhiro Iwamatsu 12*69df3c4dSNobuhiro Iwamatsu#ifdef CONFIG_CPU_SUBTYPE_SH7751 13*69df3c4dSNobuhiro Iwamatsu#define BCR2_D_VALUE 0x2FFC /* Area 1-6 width: 32/32/32/32/32/16 */ 14*69df3c4dSNobuhiro Iwamatsu#define WCR1_D_VALUE 0x02770771 /* DMA:0 A6:2 A3:0 A0:1 Others:15 */ 15*69df3c4dSNobuhiro Iwamatsu#ifdef CONFIG_MRSHPC 16*69df3c4dSNobuhiro Iwamatsu#define WCR2_D_VALUE 0xFFFE4FE7 /* A6:15 A6B:7 A5:15 A5B:7 A4:15 17*69df3c4dSNobuhiro Iwamatsu A3:2 A2:15 A1:15 A0:6 A0B:7 */ 18*69df3c4dSNobuhiro Iwamatsu#else /* CONFIG_MRSHPC*/ 19*69df3c4dSNobuhiro Iwamatsu#define WCR2_D_VALUE 0x7FFE4FE7 /* A6:3 A6B:7 A5:15 A5B:7 A4:15 20*69df3c4dSNobuhiro Iwamatsu A3:2 A2:15 A1:15 A0:6 A0B:7 */ 21*69df3c4dSNobuhiro Iwamatsu#endif /* CONFIG_MRSHPC */ 22*69df3c4dSNobuhiro Iwamatsu#define WCR3_D_VALUE 0x01777771 /* A6: 0-1 A5: 1-3 A4: 1-3 A3: 1-3 23*69df3c4dSNobuhiro Iwamatsu A2: 1-3 A1: 1-3 A0: 0-1 */ 24*69df3c4dSNobuhiro Iwamatsu#define LED_ADDRESS 0xBA000000 /* Address of LED register */ 25*69df3c4dSNobuhiro Iwamatsu#define RTCOR_D_VALUE 0xA50D /* Write code A5, data 0D (~15us?) */ 26*69df3c4dSNobuhiro Iwamatsu#define SDMR3_ADDRESS 0xFF940088 /* SDMR3 address on 32-bit bus */ 27*69df3c4dSNobuhiro Iwamatsu#define MCR_D1_VALUE 0x100901B4 /* SDRAM 32-bit, CAS/RAS Refresh, ... */ 28*69df3c4dSNobuhiro Iwamatsu#define MCR_D2_VALUE 0x500901B4 /* Same w/MRSET now 1 (mode reg cmd) */ 29*69df3c4dSNobuhiro Iwamatsu#define SWITCH_ADDR 0xB9000000 /* Address of DIP switches */ 30*69df3c4dSNobuhiro Iwamatsu#else /* CONFIG_CPU_SUBTYPE_SH7751 */ 31*69df3c4dSNobuhiro Iwamatsu#define BCR2_D_VALUE 0x2E3C /* Area 1-6 width: 32/32/64/16/32/16 */ 32*69df3c4dSNobuhiro Iwamatsu#define WCR1_D_VALUE 0x02720777 /* DMA:0 A6:2 A4:2 A3:0 Others:15 */ 33*69df3c4dSNobuhiro Iwamatsu#define WCR2_D_VALUE 0xFFFE4FFF /* A6:15 A6B:7 A5:15 A5B:7 A4:15 34*69df3c4dSNobuhiro Iwamatsu A3:2 A2:15 A1:15 A0:15 A0B:7 */ 35*69df3c4dSNobuhiro Iwamatsu#define WCR3_D_VALUE 0x01717771 /* A6: 0-1 A5: 1-3 A4: 0-1 A3: 1-3 36*69df3c4dSNobuhiro Iwamatsu A2: 1-3 A1: 1-3 A0: 0-1 */ 37*69df3c4dSNobuhiro Iwamatsu#define LED_ADDRESS 0xB0C00000 /* Address of LED register */ 38*69df3c4dSNobuhiro Iwamatsu#define RTCOR_D_VALUE 0xA510 /* Write code A5, data 10 (~15us?) */ 39*69df3c4dSNobuhiro Iwamatsu#define SDMR3_ADDRESS 0xFF940110 /* SDMR3 address on 64-bit bus */ 40*69df3c4dSNobuhiro Iwamatsu#define MCR_D1_VALUE 0x8801001C /* SDRAM 64-bit, CAS/RAS Refresh, ... */ 41*69df3c4dSNobuhiro Iwamatsu#define MCR_D2_VALUE 0xC801001C /* Same w/MRSET now 1 (mode reg cmd) */ 42*69df3c4dSNobuhiro Iwamatsu#define SWITCH_ADDR 0xb0800000 /* Address of DIP switches */ 43*69df3c4dSNobuhiro Iwamatsu#endif /* CONFIG_CPU_SUBTYPE_SH7751 */ 44*69df3c4dSNobuhiro Iwamatsu 45*69df3c4dSNobuhiro Iwamatsu .global lowlevel_init 46*69df3c4dSNobuhiro Iwamatsu .text 47*69df3c4dSNobuhiro Iwamatsu .align 2 48*69df3c4dSNobuhiro Iwamatsu 49*69df3c4dSNobuhiro Iwamatsulowlevel_init: 50*69df3c4dSNobuhiro Iwamatsu 51*69df3c4dSNobuhiro Iwamatsu mov.l L_CCR, r1 ! CCR Address 52*69df3c4dSNobuhiro Iwamatsu mov.l L_CCR_DISABLE, r0 ! CCR Data 53*69df3c4dSNobuhiro Iwamatsu mov.l r0, @r1 54*69df3c4dSNobuhiro Iwamatsu 55*69df3c4dSNobuhiro Iwamatsuinit_bsc: 56*69df3c4dSNobuhiro Iwamatsu mov.l FRQCR_A,r1 /* FRQCR Address */ 57*69df3c4dSNobuhiro Iwamatsu mov.l FRQCR_D,r0 /* FRQCR Data */ 58*69df3c4dSNobuhiro Iwamatsu mov.w r0,@r1 59*69df3c4dSNobuhiro Iwamatsu 60*69df3c4dSNobuhiro Iwamatsu mov.l BCR1_A,r1 /* BCR1 Address */ 61*69df3c4dSNobuhiro Iwamatsu mov.l BCR1_D,r0 /* BCR1 Data */ 62*69df3c4dSNobuhiro Iwamatsu mov.l r0,@r1 63*69df3c4dSNobuhiro Iwamatsu 64*69df3c4dSNobuhiro Iwamatsu mov.l BCR2_A,r1 /* BCR2 Address */ 65*69df3c4dSNobuhiro Iwamatsu mov.l BCR2_D,r0 /* BCR2 Data */ 66*69df3c4dSNobuhiro Iwamatsu mov.w r0,@r1 67*69df3c4dSNobuhiro Iwamatsu 68*69df3c4dSNobuhiro Iwamatsu mov.l WCR1_A,r1 /* WCR1 Address */ 69*69df3c4dSNobuhiro Iwamatsu mov.l WCR1_D,r0 /* WCR1 Data */ 70*69df3c4dSNobuhiro Iwamatsu mov.l r0,@r1 71*69df3c4dSNobuhiro Iwamatsu 72*69df3c4dSNobuhiro Iwamatsu mov.l WCR2_A,r1 /* WCR2 Address */ 73*69df3c4dSNobuhiro Iwamatsu mov.l WCR2_D,r0 /* WCR2 Data */ 74*69df3c4dSNobuhiro Iwamatsu mov.l r0,@r1 75*69df3c4dSNobuhiro Iwamatsu 76*69df3c4dSNobuhiro Iwamatsu mov.l WCR3_A,r1 /* WCR3 Address */ 77*69df3c4dSNobuhiro Iwamatsu mov.l WCR3_D,r0 /* WCR3 Data */ 78*69df3c4dSNobuhiro Iwamatsu mov.l r0,@r1 79*69df3c4dSNobuhiro Iwamatsu 80*69df3c4dSNobuhiro Iwamatsu mov.l LED_A,r1 /* LED Address */ 81*69df3c4dSNobuhiro Iwamatsu mov #0xff,r0 /* LED ALL 'on' */ 82*69df3c4dSNobuhiro Iwamatsu shll8 r0 83*69df3c4dSNobuhiro Iwamatsu mov.w r0,@r1 84*69df3c4dSNobuhiro Iwamatsu 85*69df3c4dSNobuhiro Iwamatsu mov.l MCR_A,r1 /* MCR Address */ 86*69df3c4dSNobuhiro Iwamatsu mov.l MCR_D1,r0 /* MCR Data1 */ 87*69df3c4dSNobuhiro Iwamatsu mov.l r0,@r1 88*69df3c4dSNobuhiro Iwamatsu 89*69df3c4dSNobuhiro Iwamatsu mov.l SDMR3_A,r1 /* Set SDRAM mode */ 90*69df3c4dSNobuhiro Iwamatsu mov #0,r0 91*69df3c4dSNobuhiro Iwamatsu mov.b r0,@r1 92*69df3c4dSNobuhiro Iwamatsu 93*69df3c4dSNobuhiro Iwamatsu ! Do you need PCMCIA setting? 94*69df3c4dSNobuhiro Iwamatsu ! If so, please add the lines here... 95*69df3c4dSNobuhiro Iwamatsu 96*69df3c4dSNobuhiro Iwamatsu mov.l RTCNT_A,r1 /* RTCNT Address */ 97*69df3c4dSNobuhiro Iwamatsu mov.l RTCNT_D,r0 /* RTCNT Data */ 98*69df3c4dSNobuhiro Iwamatsu mov.w r0,@r1 99*69df3c4dSNobuhiro Iwamatsu 100*69df3c4dSNobuhiro Iwamatsu mov.l RTCOR_A,r1 /* RTCOR Address */ 101*69df3c4dSNobuhiro Iwamatsu mov.l RTCOR_D,r0 /* RTCOR Data */ 102*69df3c4dSNobuhiro Iwamatsu mov.w r0,@r1 103*69df3c4dSNobuhiro Iwamatsu 104*69df3c4dSNobuhiro Iwamatsu mov.l RTCSR_A,r1 /* RTCSR Address */ 105*69df3c4dSNobuhiro Iwamatsu mov.l RTCSR_D,r0 /* RTCSR Data */ 106*69df3c4dSNobuhiro Iwamatsu mov.w r0,@r1 107*69df3c4dSNobuhiro Iwamatsu 108*69df3c4dSNobuhiro Iwamatsu mov.l RFCR_A,r1 /* RFCR Address */ 109*69df3c4dSNobuhiro Iwamatsu mov.l RFCR_D,r0 /* RFCR Data */ 110*69df3c4dSNobuhiro Iwamatsu mov.w r0,@r1 /* Clear reflesh counter */ 111*69df3c4dSNobuhiro Iwamatsu /* Wait DRAM refresh 30 times */ 112*69df3c4dSNobuhiro Iwamatsu mov #30,r3 113*69df3c4dSNobuhiro Iwamatsu1: 114*69df3c4dSNobuhiro Iwamatsu mov.w @r1,r0 115*69df3c4dSNobuhiro Iwamatsu extu.w r0,r2 116*69df3c4dSNobuhiro Iwamatsu cmp/hi r3,r2 117*69df3c4dSNobuhiro Iwamatsu bf 1b 118*69df3c4dSNobuhiro Iwamatsu 119*69df3c4dSNobuhiro Iwamatsu mov.l MCR_A,r1 /* MCR Address */ 120*69df3c4dSNobuhiro Iwamatsu mov.l MCR_D2,r0 /* MCR Data2 */ 121*69df3c4dSNobuhiro Iwamatsu mov.l r0,@r1 122*69df3c4dSNobuhiro Iwamatsu 123*69df3c4dSNobuhiro Iwamatsu mov.l SDMR3_A,r1 /* Set SDRAM mode */ 124*69df3c4dSNobuhiro Iwamatsu mov #0,r0 125*69df3c4dSNobuhiro Iwamatsu mov.b r0,@r1 126*69df3c4dSNobuhiro Iwamatsu 127*69df3c4dSNobuhiro Iwamatsu rts 128*69df3c4dSNobuhiro Iwamatsu nop 129*69df3c4dSNobuhiro Iwamatsu 130*69df3c4dSNobuhiro Iwamatsu .align 2 131*69df3c4dSNobuhiro Iwamatsu 132*69df3c4dSNobuhiro IwamatsuL_CCR: .long CCR 133*69df3c4dSNobuhiro IwamatsuL_CCR_DISABLE: .long 0x0808 134*69df3c4dSNobuhiro IwamatsuFRQCR_A: .long FRQCR 135*69df3c4dSNobuhiro IwamatsuFRQCR_D: 136*69df3c4dSNobuhiro Iwamatsu#ifdef CONFIG_CPU_SUBTYPE_SH_R 137*69df3c4dSNobuhiro Iwamatsu .long 0x00000e1a /* 12:3:3 */ 138*69df3c4dSNobuhiro Iwamatsu#else 139*69df3c4dSNobuhiro Iwamatsu#ifdef CONFIG_GOOD_SESH4 140*69df3c4dSNobuhiro Iwamatsu .long 0x00000e13 /* 6:2:1 */ 141*69df3c4dSNobuhiro Iwamatsu#else 142*69df3c4dSNobuhiro Iwamatsu .long 0x00000e23 /* 6:1:1 */ 143*69df3c4dSNobuhiro Iwamatsu#endif 144*69df3c4dSNobuhiro Iwamatsu#endif /* CONFIG_CPU_SUBTYPE_SH_R */ 145*69df3c4dSNobuhiro Iwamatsu 146*69df3c4dSNobuhiro IwamatsuBCR1_A: .long BCR1 147*69df3c4dSNobuhiro IwamatsuBCR1_D: .long 0x00000008 /* Area 3 SDRAM */ 148*69df3c4dSNobuhiro IwamatsuBCR2_A: .long BCR2 149*69df3c4dSNobuhiro IwamatsuBCR2_D: .long BCR2_D_VALUE /* Bus width settings */ 150*69df3c4dSNobuhiro IwamatsuWCR1_A: .long WCR1 151*69df3c4dSNobuhiro IwamatsuWCR1_D: .long WCR1_D_VALUE /* Inter-area or turnaround wait states */ 152*69df3c4dSNobuhiro IwamatsuWCR2_A: .long WCR2 153*69df3c4dSNobuhiro IwamatsuWCR2_D: .long WCR2_D_VALUE /* Per-area access and burst wait states */ 154*69df3c4dSNobuhiro IwamatsuWCR3_A: .long WCR3 155*69df3c4dSNobuhiro IwamatsuWCR3_D: .long WCR3_D_VALUE /* Address setup and data hold cycles */ 156*69df3c4dSNobuhiro IwamatsuLED_A: .long LED_ADDRESS /* LED Address */ 157*69df3c4dSNobuhiro IwamatsuRTCSR_A: .long RTCSR 158*69df3c4dSNobuhiro IwamatsuRTCSR_D: .long 0xA518 /* RTCSR Write Code A5h Data 18h */ 159*69df3c4dSNobuhiro IwamatsuRTCNT_A: .long RTCNT 160*69df3c4dSNobuhiro IwamatsuRTCNT_D: .long 0xA500 /* RTCNT Write Code A5h Data 00h */ 161*69df3c4dSNobuhiro IwamatsuRTCOR_A: .long RTCOR 162*69df3c4dSNobuhiro IwamatsuRTCOR_D: .long RTCOR_D_VALUE /* Set refresh time (about 15us) */ 163*69df3c4dSNobuhiro IwamatsuSDMR3_A: .long SDMR3_ADDRESS 164*69df3c4dSNobuhiro IwamatsuMCR_A: .long MCR 165*69df3c4dSNobuhiro IwamatsuMCR_D1: .long MCR_D1_VALUE 166*69df3c4dSNobuhiro IwamatsuMCR_D2: .long MCR_D2_VALUE 167*69df3c4dSNobuhiro IwamatsuRFCR_A: .long RFCR 168*69df3c4dSNobuhiro IwamatsuRFCR_D: .long 0xA400 /* RFCR Write Code A4h Data 00h */ 169*69df3c4dSNobuhiro Iwamatsu 170