1*4882a593Smuzhiyun /* SPDX-License-Identifier: GPL-2.0 */ 2*4882a593Smuzhiyun /****************************************************************************/ 3*4882a593Smuzhiyun 4*4882a593Smuzhiyun /* 5*4882a593Smuzhiyun * m525xsim.h -- ColdFire 525x System Integration Module support. 6*4882a593Smuzhiyun * 7*4882a593Smuzhiyun * (C) Copyright 2012, Steven king <sfking@fdwdc.com> 8*4882a593Smuzhiyun * (C) Copyright 2002, Greg Ungerer (gerg@snapgear.com) 9*4882a593Smuzhiyun */ 10*4882a593Smuzhiyun 11*4882a593Smuzhiyun /****************************************************************************/ 12*4882a593Smuzhiyun #ifndef m525xsim_h 13*4882a593Smuzhiyun #define m525xsim_h 14*4882a593Smuzhiyun /****************************************************************************/ 15*4882a593Smuzhiyun 16*4882a593Smuzhiyun /* 17*4882a593Smuzhiyun * This header supports ColdFire 5249, 5251 and 5253. There are a few 18*4882a593Smuzhiyun * little differences between them, but most of the peripheral support 19*4882a593Smuzhiyun * can be used by all of them. 20*4882a593Smuzhiyun */ 21*4882a593Smuzhiyun #define CPU_NAME "COLDFIRE(m525x)" 22*4882a593Smuzhiyun #define CPU_INSTR_PER_JIFFY 3 23*4882a593Smuzhiyun #define MCF_BUSCLK (MCF_CLK / 2) 24*4882a593Smuzhiyun 25*4882a593Smuzhiyun #include <asm/m52xxacr.h> 26*4882a593Smuzhiyun 27*4882a593Smuzhiyun /* 28*4882a593Smuzhiyun * The 525x has a second MBAR region, define its address. 29*4882a593Smuzhiyun */ 30*4882a593Smuzhiyun #define MCF_MBAR2 0x80000000 31*4882a593Smuzhiyun 32*4882a593Smuzhiyun /* 33*4882a593Smuzhiyun * Define the 525x SIM register set addresses. 34*4882a593Smuzhiyun */ 35*4882a593Smuzhiyun #define MCFSIM_RSR (MCF_MBAR + 0x00) /* Reset Status */ 36*4882a593Smuzhiyun #define MCFSIM_SYPCR (MCF_MBAR + 0x01) /* System Protection */ 37*4882a593Smuzhiyun #define MCFSIM_SWIVR (MCF_MBAR + 0x02) /* SW Watchdog intr */ 38*4882a593Smuzhiyun #define MCFSIM_SWSR (MCF_MBAR + 0x03) /* SW Watchdog srv */ 39*4882a593Smuzhiyun #define MCFSIM_MPARK (MCF_MBAR + 0x0C) /* BUS Master Ctrl */ 40*4882a593Smuzhiyun #define MCFSIM_IPR (MCF_MBAR + 0x40) /* Interrupt Pending */ 41*4882a593Smuzhiyun #define MCFSIM_IMR (MCF_MBAR + 0x44) /* Interrupt Mask */ 42*4882a593Smuzhiyun #define MCFSIM_ICR0 (MCF_MBAR + 0x4c) /* Intr Ctrl reg 0 */ 43*4882a593Smuzhiyun #define MCFSIM_ICR1 (MCF_MBAR + 0x4d) /* Intr Ctrl reg 1 */ 44*4882a593Smuzhiyun #define MCFSIM_ICR2 (MCF_MBAR + 0x4e) /* Intr Ctrl reg 2 */ 45*4882a593Smuzhiyun #define MCFSIM_ICR3 (MCF_MBAR + 0x4f) /* Intr Ctrl reg 3 */ 46*4882a593Smuzhiyun #define MCFSIM_ICR4 (MCF_MBAR + 0x50) /* Intr Ctrl reg 4 */ 47*4882a593Smuzhiyun #define MCFSIM_ICR5 (MCF_MBAR + 0x51) /* Intr Ctrl reg 5 */ 48*4882a593Smuzhiyun #define MCFSIM_ICR6 (MCF_MBAR + 0x52) /* Intr Ctrl reg 6 */ 49*4882a593Smuzhiyun #define MCFSIM_ICR7 (MCF_MBAR + 0x53) /* Intr Ctrl reg 7 */ 50*4882a593Smuzhiyun #define MCFSIM_ICR8 (MCF_MBAR + 0x54) /* Intr Ctrl reg 8 */ 51*4882a593Smuzhiyun #define MCFSIM_ICR9 (MCF_MBAR + 0x55) /* Intr Ctrl reg 9 */ 52*4882a593Smuzhiyun #define MCFSIM_ICR10 (MCF_MBAR + 0x56) /* Intr Ctrl reg 10 */ 53*4882a593Smuzhiyun #define MCFSIM_ICR11 (MCF_MBAR + 0x57) /* Intr Ctrl reg 11 */ 54*4882a593Smuzhiyun 55*4882a593Smuzhiyun #define MCFSIM_CSAR0 (MCF_MBAR + 0x80) /* CS 0 Address reg */ 56*4882a593Smuzhiyun #define MCFSIM_CSMR0 (MCF_MBAR + 0x84) /* CS 0 Mask reg */ 57*4882a593Smuzhiyun #define MCFSIM_CSCR0 (MCF_MBAR + 0x8a) /* CS 0 Control reg */ 58*4882a593Smuzhiyun #define MCFSIM_CSAR1 (MCF_MBAR + 0x8c) /* CS 1 Address reg */ 59*4882a593Smuzhiyun #define MCFSIM_CSMR1 (MCF_MBAR + 0x90) /* CS 1 Mask reg */ 60*4882a593Smuzhiyun #define MCFSIM_CSCR1 (MCF_MBAR + 0x96) /* CS 1 Control reg */ 61*4882a593Smuzhiyun #define MCFSIM_CSAR2 (MCF_MBAR + 0x98) /* CS 2 Address reg */ 62*4882a593Smuzhiyun #define MCFSIM_CSMR2 (MCF_MBAR + 0x9c) /* CS 2 Mask reg */ 63*4882a593Smuzhiyun #define MCFSIM_CSCR2 (MCF_MBAR + 0xa2) /* CS 2 Control reg */ 64*4882a593Smuzhiyun #define MCFSIM_CSAR3 (MCF_MBAR + 0xa4) /* CS 3 Address reg */ 65*4882a593Smuzhiyun #define MCFSIM_CSMR3 (MCF_MBAR + 0xa8) /* CS 3 Mask reg */ 66*4882a593Smuzhiyun #define MCFSIM_CSCR3 (MCF_MBAR + 0xae) /* CS 3 Control reg */ 67*4882a593Smuzhiyun #define MCFSIM_CSAR4 (MCF_MBAR + 0xb0) /* CS 4 Address reg */ 68*4882a593Smuzhiyun #define MCFSIM_CSMR4 (MCF_MBAR + 0xb4) /* CS 4 Mask reg */ 69*4882a593Smuzhiyun #define MCFSIM_CSCR4 (MCF_MBAR + 0xba) /* CS 4 Control reg */ 70*4882a593Smuzhiyun 71*4882a593Smuzhiyun #define MCFSIM_DCR (MCF_MBAR + 0x100) /* DRAM Control */ 72*4882a593Smuzhiyun #define MCFSIM_DACR0 (MCF_MBAR + 0x108) /* DRAM 0 Addr/Ctrl */ 73*4882a593Smuzhiyun #define MCFSIM_DMR0 (MCF_MBAR + 0x10c) /* DRAM 0 Mask */ 74*4882a593Smuzhiyun #define MCFSIM_DACR1 (MCF_MBAR + 0x110) /* DRAM 1 Addr/Ctrl */ 75*4882a593Smuzhiyun #define MCFSIM_DMR1 (MCF_MBAR + 0x114) /* DRAM 1 Mask */ 76*4882a593Smuzhiyun 77*4882a593Smuzhiyun /* 78*4882a593Smuzhiyun * Secondary Interrupt Controller (in MBAR2) 79*4882a593Smuzhiyun */ 80*4882a593Smuzhiyun #define MCFINTC2_INTBASE (MCF_MBAR2 + 0x168) /* Base Vector Reg */ 81*4882a593Smuzhiyun #define MCFINTC2_INTPRI1 (MCF_MBAR2 + 0x140) /* 0-7 priority */ 82*4882a593Smuzhiyun #define MCFINTC2_INTPRI2 (MCF_MBAR2 + 0x144) /* 8-15 priority */ 83*4882a593Smuzhiyun #define MCFINTC2_INTPRI3 (MCF_MBAR2 + 0x148) /* 16-23 priority */ 84*4882a593Smuzhiyun #define MCFINTC2_INTPRI4 (MCF_MBAR2 + 0x14c) /* 24-31 priority */ 85*4882a593Smuzhiyun #define MCFINTC2_INTPRI5 (MCF_MBAR2 + 0x150) /* 32-39 priority */ 86*4882a593Smuzhiyun #define MCFINTC2_INTPRI6 (MCF_MBAR2 + 0x154) /* 40-47 priority */ 87*4882a593Smuzhiyun #define MCFINTC2_INTPRI7 (MCF_MBAR2 + 0x158) /* 48-55 priority */ 88*4882a593Smuzhiyun #define MCFINTC2_INTPRI8 (MCF_MBAR2 + 0x15c) /* 56-63 priority */ 89*4882a593Smuzhiyun 90*4882a593Smuzhiyun #define MCFINTC2_INTPRI_REG(i) (MCFINTC2_INTPRI1 + \ 91*4882a593Smuzhiyun ((((i) - MCFINTC2_VECBASE) / 8) * 4)) 92*4882a593Smuzhiyun #define MCFINTC2_INTPRI_BITS(b, i) ((b) << (((i) % 8) * 4)) 93*4882a593Smuzhiyun 94*4882a593Smuzhiyun /* 95*4882a593Smuzhiyun * Timer module. 96*4882a593Smuzhiyun */ 97*4882a593Smuzhiyun #define MCFTIMER_BASE1 (MCF_MBAR + 0x140) /* Base of TIMER1 */ 98*4882a593Smuzhiyun #define MCFTIMER_BASE2 (MCF_MBAR + 0x180) /* Base of TIMER2 */ 99*4882a593Smuzhiyun 100*4882a593Smuzhiyun /* 101*4882a593Smuzhiyun * UART module. 102*4882a593Smuzhiyun */ 103*4882a593Smuzhiyun #define MCFUART_BASE0 (MCF_MBAR + 0x1c0) /* Base address UART0 */ 104*4882a593Smuzhiyun #define MCFUART_BASE1 (MCF_MBAR + 0x200) /* Base address UART1 */ 105*4882a593Smuzhiyun 106*4882a593Smuzhiyun /* 107*4882a593Smuzhiyun * QSPI module. 108*4882a593Smuzhiyun */ 109*4882a593Smuzhiyun #define MCFQSPI_BASE (MCF_MBAR + 0x400) /* Base address QSPI */ 110*4882a593Smuzhiyun #define MCFQSPI_SIZE 0x40 /* Register set size */ 111*4882a593Smuzhiyun 112*4882a593Smuzhiyun #ifdef CONFIG_M5249 113*4882a593Smuzhiyun #define MCFQSPI_CS0 29 114*4882a593Smuzhiyun #define MCFQSPI_CS1 24 115*4882a593Smuzhiyun #define MCFQSPI_CS2 21 116*4882a593Smuzhiyun #define MCFQSPI_CS3 22 117*4882a593Smuzhiyun #else 118*4882a593Smuzhiyun #define MCFQSPI_CS0 15 119*4882a593Smuzhiyun #define MCFQSPI_CS1 16 120*4882a593Smuzhiyun #define MCFQSPI_CS2 24 121*4882a593Smuzhiyun #define MCFQSPI_CS3 28 122*4882a593Smuzhiyun #endif 123*4882a593Smuzhiyun 124*4882a593Smuzhiyun /* 125*4882a593Smuzhiyun * I2C module. 126*4882a593Smuzhiyun */ 127*4882a593Smuzhiyun #define MCFI2C_BASE0 (MCF_MBAR + 0x280) /* Base address I2C0 */ 128*4882a593Smuzhiyun #define MCFI2C_SIZE0 0x20 /* Register set size */ 129*4882a593Smuzhiyun 130*4882a593Smuzhiyun #define MCFI2C_BASE1 (MCF_MBAR2 + 0x440) /* Base address I2C1 */ 131*4882a593Smuzhiyun #define MCFI2C_SIZE1 0x20 /* Register set size */ 132*4882a593Smuzhiyun 133*4882a593Smuzhiyun /* 134*4882a593Smuzhiyun * DMA unit base addresses. 135*4882a593Smuzhiyun */ 136*4882a593Smuzhiyun #define MCFDMA_BASE0 (MCF_MBAR + 0x300) /* Base address DMA 0 */ 137*4882a593Smuzhiyun #define MCFDMA_BASE1 (MCF_MBAR + 0x340) /* Base address DMA 1 */ 138*4882a593Smuzhiyun #define MCFDMA_BASE2 (MCF_MBAR + 0x380) /* Base address DMA 2 */ 139*4882a593Smuzhiyun #define MCFDMA_BASE3 (MCF_MBAR + 0x3C0) /* Base address DMA 3 */ 140*4882a593Smuzhiyun 141*4882a593Smuzhiyun /* 142*4882a593Smuzhiyun * Some symbol defines for the above... 143*4882a593Smuzhiyun */ 144*4882a593Smuzhiyun #define MCFSIM_SWDICR MCFSIM_ICR0 /* Watchdog timer ICR */ 145*4882a593Smuzhiyun #define MCFSIM_TIMER1ICR MCFSIM_ICR1 /* Timer 1 ICR */ 146*4882a593Smuzhiyun #define MCFSIM_TIMER2ICR MCFSIM_ICR2 /* Timer 2 ICR */ 147*4882a593Smuzhiyun #define MCFSIM_I2CICR MCFSIM_ICR3 /* I2C ICR */ 148*4882a593Smuzhiyun #define MCFSIM_UART1ICR MCFSIM_ICR4 /* UART 1 ICR */ 149*4882a593Smuzhiyun #define MCFSIM_UART2ICR MCFSIM_ICR5 /* UART 2 ICR */ 150*4882a593Smuzhiyun #define MCFSIM_DMA0ICR MCFSIM_ICR6 /* DMA 0 ICR */ 151*4882a593Smuzhiyun #define MCFSIM_DMA1ICR MCFSIM_ICR7 /* DMA 1 ICR */ 152*4882a593Smuzhiyun #define MCFSIM_DMA2ICR MCFSIM_ICR8 /* DMA 2 ICR */ 153*4882a593Smuzhiyun #define MCFSIM_DMA3ICR MCFSIM_ICR9 /* DMA 3 ICR */ 154*4882a593Smuzhiyun #define MCFSIM_QSPIICR MCFSIM_ICR10 /* QSPI ICR */ 155*4882a593Smuzhiyun 156*4882a593Smuzhiyun /* 157*4882a593Smuzhiyun * Define system peripheral IRQ usage. 158*4882a593Smuzhiyun */ 159*4882a593Smuzhiyun #define MCF_IRQ_QSPI 28 /* QSPI, Level 4 */ 160*4882a593Smuzhiyun #define MCF_IRQ_I2C0 29 161*4882a593Smuzhiyun #define MCF_IRQ_TIMER 30 /* Timer0, Level 6 */ 162*4882a593Smuzhiyun #define MCF_IRQ_PROFILER 31 /* Timer1, Level 7 */ 163*4882a593Smuzhiyun 164*4882a593Smuzhiyun #define MCF_IRQ_UART0 73 /* UART0 */ 165*4882a593Smuzhiyun #define MCF_IRQ_UART1 74 /* UART1 */ 166*4882a593Smuzhiyun 167*4882a593Smuzhiyun /* 168*4882a593Smuzhiyun * Define the base interrupt for the second interrupt controller. 169*4882a593Smuzhiyun * We set it to 128, out of the way of the base interrupts, and plenty 170*4882a593Smuzhiyun * of room for its 64 interrupts. 171*4882a593Smuzhiyun */ 172*4882a593Smuzhiyun #define MCFINTC2_VECBASE 128 173*4882a593Smuzhiyun 174*4882a593Smuzhiyun #define MCF_IRQ_GPIO0 (MCFINTC2_VECBASE + 32) 175*4882a593Smuzhiyun #define MCF_IRQ_GPIO1 (MCFINTC2_VECBASE + 33) 176*4882a593Smuzhiyun #define MCF_IRQ_GPIO2 (MCFINTC2_VECBASE + 34) 177*4882a593Smuzhiyun #define MCF_IRQ_GPIO3 (MCFINTC2_VECBASE + 35) 178*4882a593Smuzhiyun #define MCF_IRQ_GPIO4 (MCFINTC2_VECBASE + 36) 179*4882a593Smuzhiyun #define MCF_IRQ_GPIO5 (MCFINTC2_VECBASE + 37) 180*4882a593Smuzhiyun #define MCF_IRQ_GPIO6 (MCFINTC2_VECBASE + 38) 181*4882a593Smuzhiyun #define MCF_IRQ_GPIO7 (MCFINTC2_VECBASE + 39) 182*4882a593Smuzhiyun 183*4882a593Smuzhiyun #define MCF_IRQ_USBWUP (MCFINTC2_VECBASE + 40) 184*4882a593Smuzhiyun #define MCF_IRQ_I2C1 (MCFINTC2_VECBASE + 62) 185*4882a593Smuzhiyun 186*4882a593Smuzhiyun /* 187*4882a593Smuzhiyun * General purpose IO registers (in MBAR2). 188*4882a593Smuzhiyun */ 189*4882a593Smuzhiyun #define MCFSIM2_GPIOREAD (MCF_MBAR2 + 0x000) /* GPIO read values */ 190*4882a593Smuzhiyun #define MCFSIM2_GPIOWRITE (MCF_MBAR2 + 0x004) /* GPIO write values */ 191*4882a593Smuzhiyun #define MCFSIM2_GPIOENABLE (MCF_MBAR2 + 0x008) /* GPIO enabled */ 192*4882a593Smuzhiyun #define MCFSIM2_GPIOFUNC (MCF_MBAR2 + 0x00C) /* GPIO function */ 193*4882a593Smuzhiyun #define MCFSIM2_GPIO1READ (MCF_MBAR2 + 0x0B0) /* GPIO1 read values */ 194*4882a593Smuzhiyun #define MCFSIM2_GPIO1WRITE (MCF_MBAR2 + 0x0B4) /* GPIO1 write values */ 195*4882a593Smuzhiyun #define MCFSIM2_GPIO1ENABLE (MCF_MBAR2 + 0x0B8) /* GPIO1 enabled */ 196*4882a593Smuzhiyun #define MCFSIM2_GPIO1FUNC (MCF_MBAR2 + 0x0BC) /* GPIO1 function */ 197*4882a593Smuzhiyun 198*4882a593Smuzhiyun #define MCFSIM2_GPIOINTSTAT (MCF_MBAR2 + 0xc0) /* GPIO intr status */ 199*4882a593Smuzhiyun #define MCFSIM2_GPIOINTCLEAR (MCF_MBAR2 + 0xc0) /* GPIO intr clear */ 200*4882a593Smuzhiyun #define MCFSIM2_GPIOINTENABLE (MCF_MBAR2 + 0xc4) /* GPIO intr enable */ 201*4882a593Smuzhiyun 202*4882a593Smuzhiyun #define MCFSIM2_DMAROUTE (MCF_MBAR2 + 0x188) /* DMA routing */ 203*4882a593Smuzhiyun #define MCFSIM2_IDECONFIG1 (MCF_MBAR2 + 0x18c) /* IDEconfig1 */ 204*4882a593Smuzhiyun #define MCFSIM2_IDECONFIG2 (MCF_MBAR2 + 0x190) /* IDEconfig2 */ 205*4882a593Smuzhiyun 206*4882a593Smuzhiyun /* 207*4882a593Smuzhiyun * Generic GPIO support 208*4882a593Smuzhiyun */ 209*4882a593Smuzhiyun #define MCFGPIO_PIN_MAX 64 210*4882a593Smuzhiyun #ifdef CONFIG_M5249 211*4882a593Smuzhiyun #define MCFGPIO_IRQ_MAX -1 212*4882a593Smuzhiyun #define MCFGPIO_IRQ_VECBASE -1 213*4882a593Smuzhiyun #else 214*4882a593Smuzhiyun #define MCFGPIO_IRQ_MAX 7 215*4882a593Smuzhiyun #define MCFGPIO_IRQ_VECBASE MCF_IRQ_GPIO0 216*4882a593Smuzhiyun #endif 217*4882a593Smuzhiyun 218*4882a593Smuzhiyun /****************************************************************************/ 219*4882a593Smuzhiyun 220*4882a593Smuzhiyun #ifdef __ASSEMBLER__ 221*4882a593Smuzhiyun #ifdef CONFIG_M5249C3 222*4882a593Smuzhiyun /* 223*4882a593Smuzhiyun * The M5249C3 board needs a little help getting all its SIM devices 224*4882a593Smuzhiyun * initialized at kernel start time. dBUG doesn't set much up, so 225*4882a593Smuzhiyun * we need to do it manually. 226*4882a593Smuzhiyun */ 227*4882a593Smuzhiyun .macro m5249c3_setup 228*4882a593Smuzhiyun /* 229*4882a593Smuzhiyun * Set MBAR1 and MBAR2, just incase they are not set. 230*4882a593Smuzhiyun */ 231*4882a593Smuzhiyun movel #0x10000001,%a0 232*4882a593Smuzhiyun movec %a0,%MBAR /* map MBAR region */ 233*4882a593Smuzhiyun subql #1,%a0 /* get MBAR address in a0 */ 234*4882a593Smuzhiyun 235*4882a593Smuzhiyun movel #0x80000001,%a1 236*4882a593Smuzhiyun movec %a1,#3086 /* map MBAR2 region */ 237*4882a593Smuzhiyun subql #1,%a1 /* get MBAR2 address in a1 */ 238*4882a593Smuzhiyun 239*4882a593Smuzhiyun /* 240*4882a593Smuzhiyun * Move secondary interrupts to their base (128). 241*4882a593Smuzhiyun */ 242*4882a593Smuzhiyun moveb #MCFINTC2_VECBASE,%d0 243*4882a593Smuzhiyun moveb %d0,0x16b(%a1) /* interrupt base register */ 244*4882a593Smuzhiyun 245*4882a593Smuzhiyun /* 246*4882a593Smuzhiyun * Work around broken CSMR0/DRAM vector problem. 247*4882a593Smuzhiyun */ 248*4882a593Smuzhiyun movel #0x001F0021,%d0 /* disable C/I bit */ 249*4882a593Smuzhiyun movel %d0,0x84(%a0) /* set CSMR0 */ 250*4882a593Smuzhiyun 251*4882a593Smuzhiyun /* 252*4882a593Smuzhiyun * Disable the PLL firstly. (Who knows what state it is 253*4882a593Smuzhiyun * in here!). 254*4882a593Smuzhiyun */ 255*4882a593Smuzhiyun movel 0x180(%a1),%d0 /* get current PLL value */ 256*4882a593Smuzhiyun andl #0xfffffffe,%d0 /* PLL bypass first */ 257*4882a593Smuzhiyun movel %d0,0x180(%a1) /* set PLL register */ 258*4882a593Smuzhiyun nop 259*4882a593Smuzhiyun 260*4882a593Smuzhiyun #if CONFIG_CLOCK_FREQ == 140000000 261*4882a593Smuzhiyun /* 262*4882a593Smuzhiyun * Set initial clock frequency. This assumes M5249C3 board 263*4882a593Smuzhiyun * is fitted with 11.2896MHz crystal. It will program the 264*4882a593Smuzhiyun * PLL for 140MHz. Lets go fast :-) 265*4882a593Smuzhiyun */ 266*4882a593Smuzhiyun movel #0x125a40f0,%d0 /* set for 140MHz */ 267*4882a593Smuzhiyun movel %d0,0x180(%a1) /* set PLL register */ 268*4882a593Smuzhiyun orl #0x1,%d0 269*4882a593Smuzhiyun movel %d0,0x180(%a1) /* set PLL register */ 270*4882a593Smuzhiyun #endif 271*4882a593Smuzhiyun 272*4882a593Smuzhiyun /* 273*4882a593Smuzhiyun * Setup CS1 for ethernet controller. 274*4882a593Smuzhiyun * (Setup as per M5249C3 doco). 275*4882a593Smuzhiyun */ 276*4882a593Smuzhiyun movel #0xe0000000,%d0 /* CS1 mapped at 0xe0000000 */ 277*4882a593Smuzhiyun movel %d0,0x8c(%a0) 278*4882a593Smuzhiyun movel #0x001f0021,%d0 /* CS1 size of 1Mb */ 279*4882a593Smuzhiyun movel %d0,0x90(%a0) 280*4882a593Smuzhiyun movew #0x0080,%d0 /* CS1 = 16bit port, AA */ 281*4882a593Smuzhiyun movew %d0,0x96(%a0) 282*4882a593Smuzhiyun 283*4882a593Smuzhiyun /* 284*4882a593Smuzhiyun * Setup CS2 for IDE interface. 285*4882a593Smuzhiyun */ 286*4882a593Smuzhiyun movel #0x50000000,%d0 /* CS2 mapped at 0x50000000 */ 287*4882a593Smuzhiyun movel %d0,0x98(%a0) 288*4882a593Smuzhiyun movel #0x001f0001,%d0 /* CS2 size of 1MB */ 289*4882a593Smuzhiyun movel %d0,0x9c(%a0) 290*4882a593Smuzhiyun movew #0x0080,%d0 /* CS2 = 16bit, TA */ 291*4882a593Smuzhiyun movew %d0,0xa2(%a0) 292*4882a593Smuzhiyun 293*4882a593Smuzhiyun movel #0x00107000,%d0 /* IDEconfig1 */ 294*4882a593Smuzhiyun movel %d0,0x18c(%a1) 295*4882a593Smuzhiyun movel #0x000c0400,%d0 /* IDEconfig2 */ 296*4882a593Smuzhiyun movel %d0,0x190(%a1) 297*4882a593Smuzhiyun 298*4882a593Smuzhiyun movel #0x00080000,%d0 /* GPIO19, IDE reset bit */ 299*4882a593Smuzhiyun orl %d0,0xc(%a1) /* function GPIO19 */ 300*4882a593Smuzhiyun orl %d0,0x8(%a1) /* enable GPIO19 as output */ 301*4882a593Smuzhiyun orl %d0,0x4(%a1) /* de-assert IDE reset */ 302*4882a593Smuzhiyun .endm 303*4882a593Smuzhiyun 304*4882a593Smuzhiyun #define PLATFORM_SETUP m5249c3_setup 305*4882a593Smuzhiyun 306*4882a593Smuzhiyun #endif /* CONFIG_M5249C3 */ 307*4882a593Smuzhiyun #endif /* __ASSEMBLER__ */ 308*4882a593Smuzhiyun /****************************************************************************/ 309*4882a593Smuzhiyun #endif /* m525xsim_h */ 310