1*4882a593Smuzhiyun /* 2*4882a593Smuzhiyun * Cirrus Logic EP93xx register definitions. 3*4882a593Smuzhiyun * 4*4882a593Smuzhiyun * Copyright (C) 2013 5*4882a593Smuzhiyun * Sergey Kostanbaev <sergey.kostanbaev <at> fairwaves.ru> 6*4882a593Smuzhiyun * 7*4882a593Smuzhiyun * Copyright (C) 2009 8*4882a593Smuzhiyun * Matthias Kaehlcke <matthias@kaehlcke.net> 9*4882a593Smuzhiyun * 10*4882a593Smuzhiyun * Copyright (C) 2006 11*4882a593Smuzhiyun * Dominic Rath <Dominic.Rath@gmx.de> 12*4882a593Smuzhiyun * 13*4882a593Smuzhiyun * Copyright (C) 2004, 2005 14*4882a593Smuzhiyun * Cory T. Tusar, Videon Central, Inc., <ctusar@videon-central.com> 15*4882a593Smuzhiyun * 16*4882a593Smuzhiyun * Based in large part on linux/include/asm-arm/arch-ep93xx/regmap.h, which is 17*4882a593Smuzhiyun * 18*4882a593Smuzhiyun * Copyright (C) 2004 Ray Lehtiniemi 19*4882a593Smuzhiyun * Copyright (C) 2003 Cirrus Logic, Inc 20*4882a593Smuzhiyun * Copyright (C) 1999 ARM Limited. 21*4882a593Smuzhiyun * 22*4882a593Smuzhiyun * SPDX-License-Identifier: GPL-2.0+ 23*4882a593Smuzhiyun */ 24*4882a593Smuzhiyun 25*4882a593Smuzhiyun #define EP93XX_AHB_BASE 0x80000000 26*4882a593Smuzhiyun #define EP93XX_APB_BASE 0x80800000 27*4882a593Smuzhiyun 28*4882a593Smuzhiyun /* 29*4882a593Smuzhiyun * 0x80000000 - 0x8000FFFF: DMA 30*4882a593Smuzhiyun */ 31*4882a593Smuzhiyun #define DMA_OFFSET 0x000000 32*4882a593Smuzhiyun #define DMA_BASE (EP93XX_AHB_BASE | DMA_OFFSET) 33*4882a593Smuzhiyun 34*4882a593Smuzhiyun #ifndef __ASSEMBLY__ 35*4882a593Smuzhiyun struct dma_channel { 36*4882a593Smuzhiyun uint32_t control; 37*4882a593Smuzhiyun uint32_t interrupt; 38*4882a593Smuzhiyun uint32_t ppalloc; 39*4882a593Smuzhiyun uint32_t status; 40*4882a593Smuzhiyun uint32_t reserved0; 41*4882a593Smuzhiyun uint32_t remain; 42*4882a593Smuzhiyun uint32_t reserved1[2]; 43*4882a593Smuzhiyun uint32_t maxcnt0; 44*4882a593Smuzhiyun uint32_t base0; 45*4882a593Smuzhiyun uint32_t current0; 46*4882a593Smuzhiyun uint32_t reserved2; 47*4882a593Smuzhiyun uint32_t maxcnt1; 48*4882a593Smuzhiyun uint32_t base1; 49*4882a593Smuzhiyun uint32_t current1; 50*4882a593Smuzhiyun uint32_t reserved3; 51*4882a593Smuzhiyun }; 52*4882a593Smuzhiyun 53*4882a593Smuzhiyun struct dma_regs { 54*4882a593Smuzhiyun struct dma_channel m2p_channel_0; 55*4882a593Smuzhiyun struct dma_channel m2p_channel_1; 56*4882a593Smuzhiyun struct dma_channel m2p_channel_2; 57*4882a593Smuzhiyun struct dma_channel m2p_channel_3; 58*4882a593Smuzhiyun struct dma_channel m2m_channel_0; 59*4882a593Smuzhiyun struct dma_channel m2m_channel_1; 60*4882a593Smuzhiyun struct dma_channel reserved0[2]; 61*4882a593Smuzhiyun struct dma_channel m2p_channel_5; 62*4882a593Smuzhiyun struct dma_channel m2p_channel_4; 63*4882a593Smuzhiyun struct dma_channel m2p_channel_7; 64*4882a593Smuzhiyun struct dma_channel m2p_channel_6; 65*4882a593Smuzhiyun struct dma_channel m2p_channel_9; 66*4882a593Smuzhiyun struct dma_channel m2p_channel_8; 67*4882a593Smuzhiyun uint32_t channel_arbitration; 68*4882a593Smuzhiyun uint32_t reserved[15]; 69*4882a593Smuzhiyun uint32_t global_interrupt; 70*4882a593Smuzhiyun }; 71*4882a593Smuzhiyun #endif 72*4882a593Smuzhiyun 73*4882a593Smuzhiyun /* 74*4882a593Smuzhiyun * 0x80010000 - 0x8001FFFF: Ethernet MAC 75*4882a593Smuzhiyun */ 76*4882a593Smuzhiyun #define MAC_OFFSET 0x010000 77*4882a593Smuzhiyun #define MAC_BASE (EP93XX_AHB_BASE | MAC_OFFSET) 78*4882a593Smuzhiyun 79*4882a593Smuzhiyun #ifndef __ASSEMBLY__ 80*4882a593Smuzhiyun struct mac_queue { 81*4882a593Smuzhiyun uint32_t badd; 82*4882a593Smuzhiyun union { /* deal with half-word aligned registers */ 83*4882a593Smuzhiyun uint32_t blen; 84*4882a593Smuzhiyun union { 85*4882a593Smuzhiyun uint16_t filler; 86*4882a593Smuzhiyun uint16_t curlen; 87*4882a593Smuzhiyun }; 88*4882a593Smuzhiyun }; 89*4882a593Smuzhiyun uint32_t curadd; 90*4882a593Smuzhiyun }; 91*4882a593Smuzhiyun 92*4882a593Smuzhiyun struct mac_regs { 93*4882a593Smuzhiyun uint32_t rxctl; 94*4882a593Smuzhiyun uint32_t txctl; 95*4882a593Smuzhiyun uint32_t testctl; 96*4882a593Smuzhiyun uint32_t reserved0; 97*4882a593Smuzhiyun uint32_t miicmd; 98*4882a593Smuzhiyun uint32_t miidata; 99*4882a593Smuzhiyun uint32_t miists; 100*4882a593Smuzhiyun uint32_t reserved1; 101*4882a593Smuzhiyun uint32_t selfctl; 102*4882a593Smuzhiyun uint32_t inten; 103*4882a593Smuzhiyun uint32_t intstsp; 104*4882a593Smuzhiyun uint32_t intstsc; 105*4882a593Smuzhiyun uint32_t reserved2[2]; 106*4882a593Smuzhiyun uint32_t diagad; 107*4882a593Smuzhiyun uint32_t diagdata; 108*4882a593Smuzhiyun uint32_t gt; 109*4882a593Smuzhiyun uint32_t fct; 110*4882a593Smuzhiyun uint32_t fcf; 111*4882a593Smuzhiyun uint32_t afp; 112*4882a593Smuzhiyun union { 113*4882a593Smuzhiyun struct { 114*4882a593Smuzhiyun uint32_t indad; 115*4882a593Smuzhiyun uint32_t indad_upper; 116*4882a593Smuzhiyun }; 117*4882a593Smuzhiyun uint32_t hashtbl; 118*4882a593Smuzhiyun }; 119*4882a593Smuzhiyun uint32_t reserved3[2]; 120*4882a593Smuzhiyun uint32_t giintsts; 121*4882a593Smuzhiyun uint32_t giintmsk; 122*4882a593Smuzhiyun uint32_t giintrosts; 123*4882a593Smuzhiyun uint32_t giintfrc; 124*4882a593Smuzhiyun uint32_t txcollcnt; 125*4882a593Smuzhiyun uint32_t rxmissnct; 126*4882a593Smuzhiyun uint32_t rxruntcnt; 127*4882a593Smuzhiyun uint32_t reserved4; 128*4882a593Smuzhiyun uint32_t bmctl; 129*4882a593Smuzhiyun uint32_t bmsts; 130*4882a593Smuzhiyun uint32_t rxbca; 131*4882a593Smuzhiyun uint32_t reserved5; 132*4882a593Smuzhiyun struct mac_queue rxdq; 133*4882a593Smuzhiyun uint32_t rxdqenq; 134*4882a593Smuzhiyun struct mac_queue rxstsq; 135*4882a593Smuzhiyun uint32_t rxstsqenq; 136*4882a593Smuzhiyun struct mac_queue txdq; 137*4882a593Smuzhiyun uint32_t txdqenq; 138*4882a593Smuzhiyun struct mac_queue txstsq; 139*4882a593Smuzhiyun uint32_t reserved6; 140*4882a593Smuzhiyun uint32_t rxbufthrshld; 141*4882a593Smuzhiyun uint32_t txbufthrshld; 142*4882a593Smuzhiyun uint32_t rxststhrshld; 143*4882a593Smuzhiyun uint32_t txststhrshld; 144*4882a593Smuzhiyun uint32_t rxdthrshld; 145*4882a593Smuzhiyun uint32_t txdthrshld; 146*4882a593Smuzhiyun uint32_t maxfrmlen; 147*4882a593Smuzhiyun uint32_t maxhdrlen; 148*4882a593Smuzhiyun }; 149*4882a593Smuzhiyun #endif 150*4882a593Smuzhiyun 151*4882a593Smuzhiyun #define SELFCTL_RWP (1 << 7) 152*4882a593Smuzhiyun #define SELFCTL_GPO0 (1 << 5) 153*4882a593Smuzhiyun #define SELFCTL_PUWE (1 << 4) 154*4882a593Smuzhiyun #define SELFCTL_PDWE (1 << 3) 155*4882a593Smuzhiyun #define SELFCTL_MIIL (1 << 2) 156*4882a593Smuzhiyun #define SELFCTL_RESET (1 << 0) 157*4882a593Smuzhiyun 158*4882a593Smuzhiyun #define INTSTS_RWI (1 << 30) 159*4882a593Smuzhiyun #define INTSTS_RXMI (1 << 29) 160*4882a593Smuzhiyun #define INTSTS_RXBI (1 << 28) 161*4882a593Smuzhiyun #define INTSTS_RXSQI (1 << 27) 162*4882a593Smuzhiyun #define INTSTS_TXLEI (1 << 26) 163*4882a593Smuzhiyun #define INTSTS_ECIE (1 << 25) 164*4882a593Smuzhiyun #define INTSTS_TXUHI (1 << 24) 165*4882a593Smuzhiyun #define INTSTS_MOI (1 << 18) 166*4882a593Smuzhiyun #define INTSTS_TXCOI (1 << 17) 167*4882a593Smuzhiyun #define INTSTS_RXROI (1 << 16) 168*4882a593Smuzhiyun #define INTSTS_MIII (1 << 12) 169*4882a593Smuzhiyun #define INTSTS_PHYI (1 << 11) 170*4882a593Smuzhiyun #define INTSTS_TI (1 << 10) 171*4882a593Smuzhiyun #define INTSTS_AHBE (1 << 8) 172*4882a593Smuzhiyun #define INTSTS_OTHER (1 << 4) 173*4882a593Smuzhiyun #define INTSTS_TXSQ (1 << 3) 174*4882a593Smuzhiyun #define INTSTS_RXSQ (1 << 2) 175*4882a593Smuzhiyun 176*4882a593Smuzhiyun #define BMCTL_MT (1 << 13) 177*4882a593Smuzhiyun #define BMCTL_TT (1 << 12) 178*4882a593Smuzhiyun #define BMCTL_UNH (1 << 11) 179*4882a593Smuzhiyun #define BMCTL_TXCHR (1 << 10) 180*4882a593Smuzhiyun #define BMCTL_TXDIS (1 << 9) 181*4882a593Smuzhiyun #define BMCTL_TXEN (1 << 8) 182*4882a593Smuzhiyun #define BMCTL_EH2 (1 << 6) 183*4882a593Smuzhiyun #define BMCTL_EH1 (1 << 5) 184*4882a593Smuzhiyun #define BMCTL_EEOB (1 << 4) 185*4882a593Smuzhiyun #define BMCTL_RXCHR (1 << 2) 186*4882a593Smuzhiyun #define BMCTL_RXDIS (1 << 1) 187*4882a593Smuzhiyun #define BMCTL_RXEN (1 << 0) 188*4882a593Smuzhiyun 189*4882a593Smuzhiyun #define BMSTS_TXACT (1 << 7) 190*4882a593Smuzhiyun #define BMSTS_TP (1 << 4) 191*4882a593Smuzhiyun #define BMSTS_RXACT (1 << 3) 192*4882a593Smuzhiyun #define BMSTS_QID_MASK 0x07 193*4882a593Smuzhiyun #define BMSTS_QID_RXDATA 0x00 194*4882a593Smuzhiyun #define BMSTS_QID_TXDATA 0x01 195*4882a593Smuzhiyun #define BMSTS_QID_RXSTS 0x02 196*4882a593Smuzhiyun #define BMSTS_QID_TXSTS 0x03 197*4882a593Smuzhiyun #define BMSTS_QID_RXDESC 0x04 198*4882a593Smuzhiyun #define BMSTS_QID_TXDESC 0x05 199*4882a593Smuzhiyun 200*4882a593Smuzhiyun #define AFP_MASK 0x07 201*4882a593Smuzhiyun #define AFP_IAPRIMARY 0x00 202*4882a593Smuzhiyun #define AFP_IASECONDARY1 0x01 203*4882a593Smuzhiyun #define AFP_IASECONDARY2 0x02 204*4882a593Smuzhiyun #define AFP_IASECONDARY3 0x03 205*4882a593Smuzhiyun #define AFP_TX 0x06 206*4882a593Smuzhiyun #define AFP_HASH 0x07 207*4882a593Smuzhiyun 208*4882a593Smuzhiyun #define RXCTL_PAUSEA (1 << 20) 209*4882a593Smuzhiyun #define RXCTL_RXFCE1 (1 << 19) 210*4882a593Smuzhiyun #define RXCTL_RXFCE0 (1 << 18) 211*4882a593Smuzhiyun #define RXCTL_BCRC (1 << 17) 212*4882a593Smuzhiyun #define RXCTL_SRXON (1 << 16) 213*4882a593Smuzhiyun #define RXCTL_RCRCA (1 << 13) 214*4882a593Smuzhiyun #define RXCTL_RA (1 << 12) 215*4882a593Smuzhiyun #define RXCTL_PA (1 << 11) 216*4882a593Smuzhiyun #define RXCTL_BA (1 << 10) 217*4882a593Smuzhiyun #define RXCTL_MA (1 << 9) 218*4882a593Smuzhiyun #define RXCTL_IAHA (1 << 8) 219*4882a593Smuzhiyun #define RXCTL_IA3 (1 << 3) 220*4882a593Smuzhiyun #define RXCTL_IA2 (1 << 2) 221*4882a593Smuzhiyun #define RXCTL_IA1 (1 << 1) 222*4882a593Smuzhiyun #define RXCTL_IA0 (1 << 0) 223*4882a593Smuzhiyun 224*4882a593Smuzhiyun #define TXCTL_DEFDIS (1 << 7) 225*4882a593Smuzhiyun #define TXCTL_MBE (1 << 6) 226*4882a593Smuzhiyun #define TXCTL_ICRC (1 << 5) 227*4882a593Smuzhiyun #define TXCTL_TPD (1 << 4) 228*4882a593Smuzhiyun #define TXCTL_OCOLL (1 << 3) 229*4882a593Smuzhiyun #define TXCTL_SP (1 << 2) 230*4882a593Smuzhiyun #define TXCTL_PB (1 << 1) 231*4882a593Smuzhiyun #define TXCTL_STXON (1 << 0) 232*4882a593Smuzhiyun 233*4882a593Smuzhiyun #define MIICMD_REGAD_MASK (0x001F) 234*4882a593Smuzhiyun #define MIICMD_PHYAD_MASK (0x03E0) 235*4882a593Smuzhiyun #define MIICMD_OPCODE_MASK (0xC000) 236*4882a593Smuzhiyun #define MIICMD_PHYAD_8950 (0x0000) 237*4882a593Smuzhiyun #define MIICMD_OPCODE_READ (0x8000) 238*4882a593Smuzhiyun #define MIICMD_OPCODE_WRITE (0x4000) 239*4882a593Smuzhiyun 240*4882a593Smuzhiyun #define MIISTS_BUSY (1 << 0) 241*4882a593Smuzhiyun 242*4882a593Smuzhiyun /* 243*4882a593Smuzhiyun * 0x80020000 - 0x8002FFFF: USB OHCI 244*4882a593Smuzhiyun */ 245*4882a593Smuzhiyun #define USB_OFFSET 0x020000 246*4882a593Smuzhiyun #define USB_BASE (EP93XX_AHB_BASE | USB_OFFSET) 247*4882a593Smuzhiyun 248*4882a593Smuzhiyun /* 249*4882a593Smuzhiyun * 0x80030000 - 0x8003FFFF: Raster engine 250*4882a593Smuzhiyun */ 251*4882a593Smuzhiyun #if (defined(CONFIG_EP9307) || defined(CONFIG_EP9312) || defined(CONFIG_EP9315)) 252*4882a593Smuzhiyun #define RASTER_OFFSET 0x030000 253*4882a593Smuzhiyun #define RASTER_BASE (EP93XX_AHB_BASE | RASTER_OFFSET) 254*4882a593Smuzhiyun #endif 255*4882a593Smuzhiyun 256*4882a593Smuzhiyun /* 257*4882a593Smuzhiyun * 0x80040000 - 0x8004FFFF: Graphics accelerator 258*4882a593Smuzhiyun */ 259*4882a593Smuzhiyun #if defined(CONFIG_EP9315) 260*4882a593Smuzhiyun #define GFX_OFFSET 0x040000 261*4882a593Smuzhiyun #define GFX_BASE (EP93XX_AHB_BASE | GFX_OFFSET) 262*4882a593Smuzhiyun #endif 263*4882a593Smuzhiyun 264*4882a593Smuzhiyun /* 265*4882a593Smuzhiyun * 0x80050000 - 0x8005FFFF: Reserved 266*4882a593Smuzhiyun */ 267*4882a593Smuzhiyun 268*4882a593Smuzhiyun /* 269*4882a593Smuzhiyun * 0x80060000 - 0x8006FFFF: SDRAM controller 270*4882a593Smuzhiyun */ 271*4882a593Smuzhiyun #define SDRAM_OFFSET 0x060000 272*4882a593Smuzhiyun #define SDRAM_BASE (EP93XX_AHB_BASE | SDRAM_OFFSET) 273*4882a593Smuzhiyun 274*4882a593Smuzhiyun #ifndef __ASSEMBLY__ 275*4882a593Smuzhiyun struct sdram_regs { 276*4882a593Smuzhiyun uint32_t reserved; 277*4882a593Smuzhiyun uint32_t glconfig; 278*4882a593Smuzhiyun uint32_t refrshtimr; 279*4882a593Smuzhiyun uint32_t bootsts; 280*4882a593Smuzhiyun uint32_t devcfg0; 281*4882a593Smuzhiyun uint32_t devcfg1; 282*4882a593Smuzhiyun uint32_t devcfg2; 283*4882a593Smuzhiyun uint32_t devcfg3; 284*4882a593Smuzhiyun }; 285*4882a593Smuzhiyun #endif 286*4882a593Smuzhiyun 287*4882a593Smuzhiyun #define SDRAM_DEVCFG_EXTBUSWIDTH (1 << 2) 288*4882a593Smuzhiyun #define SDRAM_DEVCFG_BANKCOUNT (1 << 3) 289*4882a593Smuzhiyun #define SDRAM_DEVCFG_SROMLL (1 << 5) 290*4882a593Smuzhiyun #define SDRAM_DEVCFG_CASLAT_2 0x00010000 291*4882a593Smuzhiyun #define SDRAM_DEVCFG_RASTOCAS_2 0x00200000 292*4882a593Smuzhiyun 293*4882a593Smuzhiyun #define SDRAM_OFF_GLCONFIG 0x0004 294*4882a593Smuzhiyun #define SDRAM_OFF_REFRSHTIMR 0x0008 295*4882a593Smuzhiyun 296*4882a593Smuzhiyun #define SDRAM_OFF_DEVCFG0 0x0010 297*4882a593Smuzhiyun #define SDRAM_OFF_DEVCFG1 0x0014 298*4882a593Smuzhiyun #define SDRAM_OFF_DEVCFG2 0x0018 299*4882a593Smuzhiyun #define SDRAM_OFF_DEVCFG3 0x001C 300*4882a593Smuzhiyun 301*4882a593Smuzhiyun #define SDRAM_DEVCFG0_BASE 0xC0000000 302*4882a593Smuzhiyun #define SDRAM_DEVCFG1_BASE 0xD0000000 303*4882a593Smuzhiyun #define SDRAM_DEVCFG2_BASE 0xE0000000 304*4882a593Smuzhiyun #define SDRAM_DEVCFG3_ASD0_BASE 0xF0000000 305*4882a593Smuzhiyun #define SDRAM_DEVCFG3_ASD1_BASE 0x00000000 306*4882a593Smuzhiyun 307*4882a593Smuzhiyun #define GLCONFIG_INIT (1 << 0) 308*4882a593Smuzhiyun #define GLCONFIG_MRS (1 << 1) 309*4882a593Smuzhiyun #define GLCONFIG_SMEMBUSY (1 << 5) 310*4882a593Smuzhiyun #define GLCONFIG_LCR (1 << 6) 311*4882a593Smuzhiyun #define GLCONFIG_REARBEN (1 << 7) 312*4882a593Smuzhiyun #define GLCONFIG_CLKSHUTDOWN (1 << 30) 313*4882a593Smuzhiyun #define GLCONFIG_CKE (1 << 31) 314*4882a593Smuzhiyun 315*4882a593Smuzhiyun #define EP93XX_SDRAMCTRL 0x80060000 316*4882a593Smuzhiyun #define EP93XX_SDRAMCTRL_GLOBALCFG_INIT 0x00000001 317*4882a593Smuzhiyun #define EP93XX_SDRAMCTRL_GLOBALCFG_MRS 0x00000002 318*4882a593Smuzhiyun #define EP93XX_SDRAMCTRL_GLOBALCFG_SMEMBUSY 0x00000020 319*4882a593Smuzhiyun #define EP93XX_SDRAMCTRL_GLOBALCFG_LCR 0x00000040 320*4882a593Smuzhiyun #define EP93XX_SDRAMCTRL_GLOBALCFG_REARBEN 0x00000080 321*4882a593Smuzhiyun #define EP93XX_SDRAMCTRL_GLOBALCFG_CLKSHUTDOWN 0x40000000 322*4882a593Smuzhiyun #define EP93XX_SDRAMCTRL_GLOBALCFG_CKE 0x80000000 323*4882a593Smuzhiyun 324*4882a593Smuzhiyun #define EP93XX_SDRAMCTRL_REFRESH_MASK 0x0000FFFF 325*4882a593Smuzhiyun 326*4882a593Smuzhiyun #define EP93XX_SDRAMCTRL_BOOTSTATUS_WIDTH_32 0x00000002 327*4882a593Smuzhiyun #define EP93XX_SDRAMCTRL_BOOTSTATUS_WIDTH_16 0x00000001 328*4882a593Smuzhiyun #define EP93XX_SDRAMCTRL_BOOTSTATUS_WIDTH_8 0x00000000 329*4882a593Smuzhiyun #define EP93XX_SDRAMCTRL_BOOTSTATUS_WIDTH_MASK 0x00000003 330*4882a593Smuzhiyun #define EP93XX_SDRAMCTRL_BOOTSTATUS_MEDIA 0x00000004 331*4882a593Smuzhiyun 332*4882a593Smuzhiyun #define EP93XX_SDRAMCTRL_DEVCFG_EXTBUSWIDTH 0x00000004 333*4882a593Smuzhiyun #define EP93XX_SDRAMCTRL_DEVCFG_BANKCOUNT 0x00000008 334*4882a593Smuzhiyun #define EP93XX_SDRAMCTRL_DEVCFG_SROM512 0x00000010 335*4882a593Smuzhiyun #define EP93XX_SDRAMCTRL_DEVCFG_SROMLL 0x00000020 336*4882a593Smuzhiyun #define EP93XX_SDRAMCTRL_DEVCFG_2KPAGE 0x00000040 337*4882a593Smuzhiyun #define EP93XX_SDRAMCTRL_DEVCFG_SFCONFIGADDR 0x00000080 338*4882a593Smuzhiyun #define EP93XX_SDRAMCTRL_DEVCFG_CASLAT_MASK 0x00070000 339*4882a593Smuzhiyun #define EP93XX_SDRAMCTRL_DEVCFG_CASLAT_2 0x00010000 340*4882a593Smuzhiyun #define EP93XX_SDRAMCTRL_DEVCFG_CASLAT_3 0x00020000 341*4882a593Smuzhiyun #define EP93XX_SDRAMCTRL_DEVCFG_CASLAT_4 0x00030000 342*4882a593Smuzhiyun #define EP93XX_SDRAMCTRL_DEVCFG_CASLAT_5 0x00040000 343*4882a593Smuzhiyun #define EP93XX_SDRAMCTRL_DEVCFG_CASLAT_6 0x00050000 344*4882a593Smuzhiyun #define EP93XX_SDRAMCTRL_DEVCFG_CASLAT_7 0x00060000 345*4882a593Smuzhiyun #define EP93XX_SDRAMCTRL_DEVCFG_CASLAT_8 0x00070000 346*4882a593Smuzhiyun #define EP93XX_SDRAMCTRL_DEVCFG_WBL 0x00080000 347*4882a593Smuzhiyun #define EP93XX_SDRAMCTRL_DEVCFG_RASTOCAS_MASK 0x00300000 348*4882a593Smuzhiyun #define EP93XX_SDRAMCTRL_DEVCFG_RASTOCAS_2 0x00200000 349*4882a593Smuzhiyun #define EP93XX_SDRAMCTRL_DEVCFG_RASTOCAS_3 0x00300000 350*4882a593Smuzhiyun #define EP93XX_SDRAMCTRL_DEVCFG_AUTOPRECHARGE 0x01000000 351*4882a593Smuzhiyun 352*4882a593Smuzhiyun /* 353*4882a593Smuzhiyun * 0x80070000 - 0x8007FFFF: Reserved 354*4882a593Smuzhiyun */ 355*4882a593Smuzhiyun 356*4882a593Smuzhiyun /* 357*4882a593Smuzhiyun * 0x80080000 - 0x8008FFFF: SRAM controller & PCMCIA 358*4882a593Smuzhiyun */ 359*4882a593Smuzhiyun #define SMC_OFFSET 0x080000 360*4882a593Smuzhiyun #define SMC_BASE (EP93XX_AHB_BASE | SMC_OFFSET) 361*4882a593Smuzhiyun 362*4882a593Smuzhiyun #ifndef __ASSEMBLY__ 363*4882a593Smuzhiyun struct smc_regs { 364*4882a593Smuzhiyun uint32_t bcr0; 365*4882a593Smuzhiyun uint32_t bcr1; 366*4882a593Smuzhiyun uint32_t bcr2; 367*4882a593Smuzhiyun uint32_t bcr3; 368*4882a593Smuzhiyun uint32_t reserved0[2]; 369*4882a593Smuzhiyun uint32_t bcr6; 370*4882a593Smuzhiyun uint32_t bcr7; 371*4882a593Smuzhiyun #if defined(CONFIG_EP9315) 372*4882a593Smuzhiyun uint32_t pcattribute; 373*4882a593Smuzhiyun uint32_t pccommon; 374*4882a593Smuzhiyun uint32_t pcio; 375*4882a593Smuzhiyun uint32_t reserved1[5]; 376*4882a593Smuzhiyun uint32_t pcmciactrl; 377*4882a593Smuzhiyun #endif 378*4882a593Smuzhiyun }; 379*4882a593Smuzhiyun #endif 380*4882a593Smuzhiyun 381*4882a593Smuzhiyun #define EP93XX_OFF_SMCBCR0 0x00 382*4882a593Smuzhiyun #define EP93XX_OFF_SMCBCR1 0x04 383*4882a593Smuzhiyun #define EP93XX_OFF_SMCBCR2 0x08 384*4882a593Smuzhiyun #define EP93XX_OFF_SMCBCR3 0x0C 385*4882a593Smuzhiyun #define EP93XX_OFF_SMCBCR6 0x18 386*4882a593Smuzhiyun #define EP93XX_OFF_SMCBCR7 0x1C 387*4882a593Smuzhiyun 388*4882a593Smuzhiyun #define SMC_BCR_IDCY_SHIFT 0 389*4882a593Smuzhiyun #define SMC_BCR_WST1_SHIFT 5 390*4882a593Smuzhiyun #define SMC_BCR_BLE (1 << 10) 391*4882a593Smuzhiyun #define SMC_BCR_WST2_SHIFT 11 392*4882a593Smuzhiyun #define SMC_BCR_MW_SHIFT 28 393*4882a593Smuzhiyun 394*4882a593Smuzhiyun /* 395*4882a593Smuzhiyun * 0x80090000 - 0x8009FFFF: Boot ROM 396*4882a593Smuzhiyun */ 397*4882a593Smuzhiyun 398*4882a593Smuzhiyun /* 399*4882a593Smuzhiyun * 0x800A0000 - 0x800AFFFF: IDE interface 400*4882a593Smuzhiyun */ 401*4882a593Smuzhiyun 402*4882a593Smuzhiyun /* 403*4882a593Smuzhiyun * 0x800B0000 - 0x800BFFFF: VIC1 404*4882a593Smuzhiyun */ 405*4882a593Smuzhiyun 406*4882a593Smuzhiyun /* 407*4882a593Smuzhiyun * 0x800C0000 - 0x800CFFFF: VIC2 408*4882a593Smuzhiyun */ 409*4882a593Smuzhiyun 410*4882a593Smuzhiyun /* 411*4882a593Smuzhiyun * 0x800D0000 - 0x800FFFFF: Reserved 412*4882a593Smuzhiyun */ 413*4882a593Smuzhiyun 414*4882a593Smuzhiyun /* 415*4882a593Smuzhiyun * 0x80800000 - 0x8080FFFF: Reserved 416*4882a593Smuzhiyun */ 417*4882a593Smuzhiyun 418*4882a593Smuzhiyun /* 419*4882a593Smuzhiyun * 0x80810000 - 0x8081FFFF: Timers 420*4882a593Smuzhiyun */ 421*4882a593Smuzhiyun #define TIMER_OFFSET 0x010000 422*4882a593Smuzhiyun #define TIMER_BASE (EP93XX_APB_BASE | TIMER_OFFSET) 423*4882a593Smuzhiyun 424*4882a593Smuzhiyun #ifndef __ASSEMBLY__ 425*4882a593Smuzhiyun struct timer { 426*4882a593Smuzhiyun uint32_t load; 427*4882a593Smuzhiyun uint32_t value; 428*4882a593Smuzhiyun uint32_t control; 429*4882a593Smuzhiyun uint32_t clear; 430*4882a593Smuzhiyun }; 431*4882a593Smuzhiyun 432*4882a593Smuzhiyun struct timer4 { 433*4882a593Smuzhiyun uint32_t value_low; 434*4882a593Smuzhiyun uint32_t value_high; 435*4882a593Smuzhiyun }; 436*4882a593Smuzhiyun 437*4882a593Smuzhiyun struct timer_regs { 438*4882a593Smuzhiyun struct timer timer1; 439*4882a593Smuzhiyun uint32_t reserved0[4]; 440*4882a593Smuzhiyun struct timer timer2; 441*4882a593Smuzhiyun uint32_t reserved1[12]; 442*4882a593Smuzhiyun struct timer4 timer4; 443*4882a593Smuzhiyun uint32_t reserved2[6]; 444*4882a593Smuzhiyun struct timer timer3; 445*4882a593Smuzhiyun }; 446*4882a593Smuzhiyun #endif 447*4882a593Smuzhiyun 448*4882a593Smuzhiyun /* 449*4882a593Smuzhiyun * 0x80820000 - 0x8082FFFF: I2S 450*4882a593Smuzhiyun */ 451*4882a593Smuzhiyun #define I2S_OFFSET 0x020000 452*4882a593Smuzhiyun #define I2S_BASE (EP93XX_APB_BASE | I2S_OFFSET) 453*4882a593Smuzhiyun 454*4882a593Smuzhiyun /* 455*4882a593Smuzhiyun * 0x80830000 - 0x8083FFFF: Security 456*4882a593Smuzhiyun */ 457*4882a593Smuzhiyun #define SECURITY_OFFSET 0x030000 458*4882a593Smuzhiyun #define SECURITY_BASE (EP93XX_APB_BASE | SECURITY_OFFSET) 459*4882a593Smuzhiyun 460*4882a593Smuzhiyun #define EXTENSIONID (SECURITY_BASE + 0x2714) 461*4882a593Smuzhiyun 462*4882a593Smuzhiyun /* 463*4882a593Smuzhiyun * 0x80840000 - 0x8084FFFF: GPIO 464*4882a593Smuzhiyun */ 465*4882a593Smuzhiyun #define GPIO_OFFSET 0x040000 466*4882a593Smuzhiyun #define GPIO_BASE (EP93XX_APB_BASE | GPIO_OFFSET) 467*4882a593Smuzhiyun 468*4882a593Smuzhiyun #ifndef __ASSEMBLY__ 469*4882a593Smuzhiyun struct gpio_int { 470*4882a593Smuzhiyun uint32_t inttype1; 471*4882a593Smuzhiyun uint32_t inttype2; 472*4882a593Smuzhiyun uint32_t eoi; 473*4882a593Smuzhiyun uint32_t inten; 474*4882a593Smuzhiyun uint32_t intsts; 475*4882a593Smuzhiyun uint32_t rawintsts; 476*4882a593Smuzhiyun uint32_t db; 477*4882a593Smuzhiyun }; 478*4882a593Smuzhiyun 479*4882a593Smuzhiyun struct gpio_regs { 480*4882a593Smuzhiyun uint32_t padr; 481*4882a593Smuzhiyun uint32_t pbdr; 482*4882a593Smuzhiyun uint32_t pcdr; 483*4882a593Smuzhiyun uint32_t pddr; 484*4882a593Smuzhiyun uint32_t paddr; 485*4882a593Smuzhiyun uint32_t pbddr; 486*4882a593Smuzhiyun uint32_t pcddr; 487*4882a593Smuzhiyun uint32_t pdddr; 488*4882a593Smuzhiyun uint32_t pedr; 489*4882a593Smuzhiyun uint32_t peddr; 490*4882a593Smuzhiyun uint32_t reserved0[2]; 491*4882a593Smuzhiyun uint32_t pfdr; 492*4882a593Smuzhiyun uint32_t pfddr; 493*4882a593Smuzhiyun uint32_t pgdr; 494*4882a593Smuzhiyun uint32_t pgddr; 495*4882a593Smuzhiyun uint32_t phdr; 496*4882a593Smuzhiyun uint32_t phddr; 497*4882a593Smuzhiyun uint32_t reserved1; 498*4882a593Smuzhiyun uint32_t finttype1; 499*4882a593Smuzhiyun uint32_t finttype2; 500*4882a593Smuzhiyun uint32_t reserved2; 501*4882a593Smuzhiyun struct gpio_int pfint; 502*4882a593Smuzhiyun uint32_t reserved3[10]; 503*4882a593Smuzhiyun struct gpio_int paint; 504*4882a593Smuzhiyun struct gpio_int pbint; 505*4882a593Smuzhiyun uint32_t eedrive; 506*4882a593Smuzhiyun }; 507*4882a593Smuzhiyun #endif 508*4882a593Smuzhiyun 509*4882a593Smuzhiyun #define EP93XX_LED_DATA 0x80840020 510*4882a593Smuzhiyun #define EP93XX_LED_GREEN_ON 0x0001 511*4882a593Smuzhiyun #define EP93XX_LED_RED_ON 0x0002 512*4882a593Smuzhiyun 513*4882a593Smuzhiyun #define EP93XX_LED_DDR 0x80840024 514*4882a593Smuzhiyun #define EP93XX_LED_GREEN_ENABLE 0x0001 515*4882a593Smuzhiyun #define EP93XX_LED_RED_ENABLE 0x00020000 516*4882a593Smuzhiyun 517*4882a593Smuzhiyun /* 518*4882a593Smuzhiyun * 0x80850000 - 0x8087FFFF: Reserved 519*4882a593Smuzhiyun */ 520*4882a593Smuzhiyun 521*4882a593Smuzhiyun /* 522*4882a593Smuzhiyun * 0x80880000 - 0x8088FFFF: AAC 523*4882a593Smuzhiyun */ 524*4882a593Smuzhiyun #define AAC_OFFSET 0x080000 525*4882a593Smuzhiyun #define AAC_BASE (EP93XX_APB_BASE | AAC_OFFSET) 526*4882a593Smuzhiyun 527*4882a593Smuzhiyun /* 528*4882a593Smuzhiyun * 0x80890000 - 0x8089FFFF: Reserved 529*4882a593Smuzhiyun */ 530*4882a593Smuzhiyun 531*4882a593Smuzhiyun /* 532*4882a593Smuzhiyun * 0x808A0000 - 0x808AFFFF: SPI 533*4882a593Smuzhiyun */ 534*4882a593Smuzhiyun #define SPI_OFFSET 0x0A0000 535*4882a593Smuzhiyun #define SPI_BASE (EP93XX_APB_BASE | SPI_OFFSET) 536*4882a593Smuzhiyun 537*4882a593Smuzhiyun /* 538*4882a593Smuzhiyun * 0x808B0000 - 0x808BFFFF: IrDA 539*4882a593Smuzhiyun */ 540*4882a593Smuzhiyun #define IRDA_OFFSET 0x0B0000 541*4882a593Smuzhiyun #define IRDA_BASE (EP93XX_APB_BASE | IRDA_OFFSET) 542*4882a593Smuzhiyun 543*4882a593Smuzhiyun /* 544*4882a593Smuzhiyun * 0x808C0000 - 0x808CFFFF: UART1 545*4882a593Smuzhiyun */ 546*4882a593Smuzhiyun #define UART1_OFFSET 0x0C0000 547*4882a593Smuzhiyun #define UART1_BASE (EP93XX_APB_BASE | UART1_OFFSET) 548*4882a593Smuzhiyun 549*4882a593Smuzhiyun /* 550*4882a593Smuzhiyun * 0x808D0000 - 0x808DFFFF: UART2 551*4882a593Smuzhiyun */ 552*4882a593Smuzhiyun #define UART2_OFFSET 0x0D0000 553*4882a593Smuzhiyun #define UART2_BASE (EP93XX_APB_BASE | UART2_OFFSET) 554*4882a593Smuzhiyun 555*4882a593Smuzhiyun /* 556*4882a593Smuzhiyun * 0x808E0000 - 0x808EFFFF: UART3 557*4882a593Smuzhiyun */ 558*4882a593Smuzhiyun #define UART3_OFFSET 0x0E0000 559*4882a593Smuzhiyun #define UART3_BASE (EP93XX_APB_BASE | UART3_OFFSET) 560*4882a593Smuzhiyun 561*4882a593Smuzhiyun /* 562*4882a593Smuzhiyun * 0x808F0000 - 0x808FFFFF: Key Matrix 563*4882a593Smuzhiyun */ 564*4882a593Smuzhiyun #define KEY_OFFSET 0x0F0000 565*4882a593Smuzhiyun #define KEY_BASE (EP93XX_APB_BASE | KEY_OFFSET) 566*4882a593Smuzhiyun 567*4882a593Smuzhiyun /* 568*4882a593Smuzhiyun * 0x80900000 - 0x8090FFFF: Touchscreen 569*4882a593Smuzhiyun */ 570*4882a593Smuzhiyun #define TOUCH_OFFSET 0x900000 571*4882a593Smuzhiyun #define TOUCH_BASE (EP93XX_APB_BASE | TOUCH_OFFSET) 572*4882a593Smuzhiyun 573*4882a593Smuzhiyun /* 574*4882a593Smuzhiyun * 0x80910000 - 0x8091FFFF: Pulse Width Modulation 575*4882a593Smuzhiyun */ 576*4882a593Smuzhiyun #define PWM_OFFSET 0x910000 577*4882a593Smuzhiyun #define PWM_BASE (EP93XX_APB_BASE | PWM_OFFSET) 578*4882a593Smuzhiyun 579*4882a593Smuzhiyun /* 580*4882a593Smuzhiyun * 0x80920000 - 0x8092FFFF: Real time clock 581*4882a593Smuzhiyun */ 582*4882a593Smuzhiyun #define RTC_OFFSET 0x920000 583*4882a593Smuzhiyun #define RTC_BASE (EP93XX_APB_BASE | RTC_OFFSET) 584*4882a593Smuzhiyun 585*4882a593Smuzhiyun /* 586*4882a593Smuzhiyun * 0x80930000 - 0x8093FFFF: Syscon 587*4882a593Smuzhiyun */ 588*4882a593Smuzhiyun #define SYSCON_OFFSET 0x930000 589*4882a593Smuzhiyun #define SYSCON_BASE (EP93XX_APB_BASE | SYSCON_OFFSET) 590*4882a593Smuzhiyun 591*4882a593Smuzhiyun /* Security */ 592*4882a593Smuzhiyun #define SECURITY_EXTENSIONID 0x80832714 593*4882a593Smuzhiyun 594*4882a593Smuzhiyun #ifndef __ASSEMBLY__ 595*4882a593Smuzhiyun struct syscon_regs { 596*4882a593Smuzhiyun uint32_t pwrsts; 597*4882a593Smuzhiyun uint32_t pwrcnt; 598*4882a593Smuzhiyun uint32_t halt; 599*4882a593Smuzhiyun uint32_t stby; 600*4882a593Smuzhiyun uint32_t reserved0[2]; 601*4882a593Smuzhiyun uint32_t teoi; 602*4882a593Smuzhiyun uint32_t stfclr; 603*4882a593Smuzhiyun uint32_t clkset1; 604*4882a593Smuzhiyun uint32_t clkset2; 605*4882a593Smuzhiyun uint32_t reserved1[6]; 606*4882a593Smuzhiyun uint32_t scratch0; 607*4882a593Smuzhiyun uint32_t scratch1; 608*4882a593Smuzhiyun uint32_t reserved2[2]; 609*4882a593Smuzhiyun uint32_t apbwait; 610*4882a593Smuzhiyun uint32_t bustmstrarb; 611*4882a593Smuzhiyun uint32_t bootmodeclr; 612*4882a593Smuzhiyun uint32_t reserved3[9]; 613*4882a593Smuzhiyun uint32_t devicecfg; 614*4882a593Smuzhiyun uint32_t vidclkdiv; 615*4882a593Smuzhiyun uint32_t mirclkdiv; 616*4882a593Smuzhiyun uint32_t i2sclkdiv; 617*4882a593Smuzhiyun uint32_t keytchclkdiv; 618*4882a593Smuzhiyun uint32_t chipid; 619*4882a593Smuzhiyun uint32_t reserved4; 620*4882a593Smuzhiyun uint32_t syscfg; 621*4882a593Smuzhiyun uint32_t reserved5[8]; 622*4882a593Smuzhiyun uint32_t sysswlock; 623*4882a593Smuzhiyun }; 624*4882a593Smuzhiyun #else 625*4882a593Smuzhiyun #define SYSCON_SCRATCH0 (SYSCON_BASE + 0x0040) 626*4882a593Smuzhiyun #endif 627*4882a593Smuzhiyun 628*4882a593Smuzhiyun #define SYSCON_OFF_CLKSET1 0x0020 629*4882a593Smuzhiyun #define SYSCON_OFF_SYSCFG 0x009c 630*4882a593Smuzhiyun 631*4882a593Smuzhiyun #define SYSCON_PWRCNT_UART_BAUD (1 << 29) 632*4882a593Smuzhiyun #define SYSCON_PWRCNT_USH_EN (1 << 28) 633*4882a593Smuzhiyun 634*4882a593Smuzhiyun #define SYSCON_CLKSET_PLL_X2IPD_SHIFT 0 635*4882a593Smuzhiyun #define SYSCON_CLKSET_PLL_X2FBD2_SHIFT 5 636*4882a593Smuzhiyun #define SYSCON_CLKSET_PLL_X1FBD1_SHIFT 11 637*4882a593Smuzhiyun #define SYSCON_CLKSET_PLL_PS_SHIFT 16 638*4882a593Smuzhiyun #define SYSCON_CLKSET1_PCLK_DIV_SHIFT 18 639*4882a593Smuzhiyun #define SYSCON_CLKSET1_HCLK_DIV_SHIFT 20 640*4882a593Smuzhiyun #define SYSCON_CLKSET1_NBYP1 (1 << 23) 641*4882a593Smuzhiyun #define SYSCON_CLKSET1_FCLK_DIV_SHIFT 25 642*4882a593Smuzhiyun 643*4882a593Smuzhiyun #define SYSCON_CLKSET2_PLL2_EN (1 << 18) 644*4882a593Smuzhiyun #define SYSCON_CLKSET2_NBYP2 (1 << 19) 645*4882a593Smuzhiyun #define SYSCON_CLKSET2_USB_DIV_SHIFT 28 646*4882a593Smuzhiyun 647*4882a593Smuzhiyun #define SYSCON_CHIPID_REV_MASK 0xF0000000 648*4882a593Smuzhiyun #define SYSCON_DEVICECFG_SWRST (1 << 31) 649*4882a593Smuzhiyun 650*4882a593Smuzhiyun #define SYSCON_SYSCFG_LASDO 0x00000020 651*4882a593Smuzhiyun 652*4882a593Smuzhiyun /* 653*4882a593Smuzhiyun * 0x80930000 - 0x8093FFFF: Watchdog Timer 654*4882a593Smuzhiyun */ 655*4882a593Smuzhiyun #define WATCHDOG_OFFSET 0x940000 656*4882a593Smuzhiyun #define WATCHDOG_BASE (EP93XX_APB_BASE | WATCHDOG_OFFSET) 657*4882a593Smuzhiyun 658*4882a593Smuzhiyun /* 659*4882a593Smuzhiyun * 0x80950000 - 0x9000FFFF: Reserved 660*4882a593Smuzhiyun */ 661*4882a593Smuzhiyun 662*4882a593Smuzhiyun /* 663*4882a593Smuzhiyun * During low_level init we store memory layout in memory at specific location 664*4882a593Smuzhiyun */ 665*4882a593Smuzhiyun #define UBOOT_MEMORYCNF_BANK_SIZE 0x2000 666*4882a593Smuzhiyun #define UBOOT_MEMORYCNF_BANK_MASK 0x2004 667*4882a593Smuzhiyun #define UBOOT_MEMORYCNF_BANK_COUNT 0x2008 668