1*5b1b1883SVipin KUMAR /* 2*5b1b1883SVipin KUMAR * (C) Copyright 2010 3*5b1b1883SVipin KUMAR * Vipin Kumar, ST Micoelectronics, vipin.kumar@st.com. 4*5b1b1883SVipin KUMAR * 5*5b1b1883SVipin KUMAR * See file CREDITS for list of people who contributed to this 6*5b1b1883SVipin KUMAR * project. 7*5b1b1883SVipin KUMAR * 8*5b1b1883SVipin KUMAR * This program is free software; you can redistribute it and/or 9*5b1b1883SVipin KUMAR * modify it under the terms of the GNU General Public License as 10*5b1b1883SVipin KUMAR * published by the Free Software Foundation; either version 2 of 11*5b1b1883SVipin KUMAR * the License, or (at your option) any later version. 12*5b1b1883SVipin KUMAR * 13*5b1b1883SVipin KUMAR * This program is distributed in the hope that it will be useful, 14*5b1b1883SVipin KUMAR * but WITHOUT ANY WARRANTY; without even the implied warranty of 15*5b1b1883SVipin KUMAR * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 16*5b1b1883SVipin KUMAR * GNU General Public License for more details. 17*5b1b1883SVipin KUMAR * 18*5b1b1883SVipin KUMAR * You should have received a copy of the GNU General Public License 19*5b1b1883SVipin KUMAR * along with this program; if not, write to the Free Software 20*5b1b1883SVipin KUMAR * Foundation, Inc., 59 Temple Place, Suite 330, Boston, 21*5b1b1883SVipin KUMAR * MA 02111-1307 USA 22*5b1b1883SVipin KUMAR */ 23*5b1b1883SVipin KUMAR 24*5b1b1883SVipin KUMAR #ifndef _DW_ETH_H 25*5b1b1883SVipin KUMAR #define _DW_ETH_H 26*5b1b1883SVipin KUMAR 27*5b1b1883SVipin KUMAR #define CONFIG_TX_DESCR_NUM 16 28*5b1b1883SVipin KUMAR #define CONFIG_RX_DESCR_NUM 16 29*5b1b1883SVipin KUMAR #define CONFIG_ETH_BUFSIZE 2048 30*5b1b1883SVipin KUMAR #define TX_TOTAL_BUFSIZE (CONFIG_ETH_BUFSIZE * CONFIG_TX_DESCR_NUM) 31*5b1b1883SVipin KUMAR #define RX_TOTAL_BUFSIZE (CONFIG_ETH_BUFSIZE * CONFIG_RX_DESCR_NUM) 32*5b1b1883SVipin KUMAR 33*5b1b1883SVipin KUMAR #define CONFIG_MACRESET_TIMEOUT (3 * CONFIG_SYS_HZ) 34*5b1b1883SVipin KUMAR #define CONFIG_MDIO_TIMEOUT (3 * CONFIG_SYS_HZ) 35*5b1b1883SVipin KUMAR #define CONFIG_PHYRESET_TIMEOUT (3 * CONFIG_SYS_HZ) 36*5b1b1883SVipin KUMAR #define CONFIG_AUTONEG_TIMEOUT (5 * CONFIG_SYS_HZ) 37*5b1b1883SVipin KUMAR 38*5b1b1883SVipin KUMAR struct eth_mac_regs { 39*5b1b1883SVipin KUMAR u32 conf; /* 0x00 */ 40*5b1b1883SVipin KUMAR u32 framefilt; /* 0x04 */ 41*5b1b1883SVipin KUMAR u32 hashtablehigh; /* 0x08 */ 42*5b1b1883SVipin KUMAR u32 hashtablelow; /* 0x0c */ 43*5b1b1883SVipin KUMAR u32 miiaddr; /* 0x10 */ 44*5b1b1883SVipin KUMAR u32 miidata; /* 0x14 */ 45*5b1b1883SVipin KUMAR u32 flowcontrol; /* 0x18 */ 46*5b1b1883SVipin KUMAR u32 vlantag; /* 0x1c */ 47*5b1b1883SVipin KUMAR u32 version; /* 0x20 */ 48*5b1b1883SVipin KUMAR u8 reserved_1[20]; 49*5b1b1883SVipin KUMAR u32 intreg; /* 0x38 */ 50*5b1b1883SVipin KUMAR u32 intmask; /* 0x3c */ 51*5b1b1883SVipin KUMAR u32 macaddr0hi; /* 0x40 */ 52*5b1b1883SVipin KUMAR u32 macaddr0lo; /* 0x44 */ 53*5b1b1883SVipin KUMAR }; 54*5b1b1883SVipin KUMAR 55*5b1b1883SVipin KUMAR /* MAC configuration register definitions */ 56*5b1b1883SVipin KUMAR #define FRAMEBURSTENABLE (1 << 21) 57*5b1b1883SVipin KUMAR #define MII_PORTSELECT (1 << 15) 58*5b1b1883SVipin KUMAR #define FES_100 (1 << 14) 59*5b1b1883SVipin KUMAR #define DISABLERXOWN (1 << 13) 60*5b1b1883SVipin KUMAR #define FULLDPLXMODE (1 << 11) 61*5b1b1883SVipin KUMAR #define RXENABLE (1 << 2) 62*5b1b1883SVipin KUMAR #define TXENABLE (1 << 3) 63*5b1b1883SVipin KUMAR 64*5b1b1883SVipin KUMAR /* MII address register definitions */ 65*5b1b1883SVipin KUMAR #define MII_BUSY (1 << 0) 66*5b1b1883SVipin KUMAR #define MII_WRITE (1 << 1) 67*5b1b1883SVipin KUMAR #define MII_CLKRANGE_60_100M (0) 68*5b1b1883SVipin KUMAR #define MII_CLKRANGE_100_150M (0x4) 69*5b1b1883SVipin KUMAR #define MII_CLKRANGE_20_35M (0x8) 70*5b1b1883SVipin KUMAR #define MII_CLKRANGE_35_60M (0xC) 71*5b1b1883SVipin KUMAR #define MII_CLKRANGE_150_250M (0x10) 72*5b1b1883SVipin KUMAR #define MII_CLKRANGE_250_300M (0x14) 73*5b1b1883SVipin KUMAR 74*5b1b1883SVipin KUMAR #define MIIADDRSHIFT (11) 75*5b1b1883SVipin KUMAR #define MIIREGSHIFT (6) 76*5b1b1883SVipin KUMAR #define MII_REGMSK (0x1F << 6) 77*5b1b1883SVipin KUMAR #define MII_ADDRMSK (0x1F << 11) 78*5b1b1883SVipin KUMAR 79*5b1b1883SVipin KUMAR 80*5b1b1883SVipin KUMAR struct eth_dma_regs { 81*5b1b1883SVipin KUMAR u32 busmode; /* 0x00 */ 82*5b1b1883SVipin KUMAR u32 txpolldemand; /* 0x04 */ 83*5b1b1883SVipin KUMAR u32 rxpolldemand; /* 0x08 */ 84*5b1b1883SVipin KUMAR u32 rxdesclistaddr; /* 0x0c */ 85*5b1b1883SVipin KUMAR u32 txdesclistaddr; /* 0x10 */ 86*5b1b1883SVipin KUMAR u32 status; /* 0x14 */ 87*5b1b1883SVipin KUMAR u32 opmode; /* 0x18 */ 88*5b1b1883SVipin KUMAR u32 intenable; /* 0x1c */ 89*5b1b1883SVipin KUMAR u8 reserved[40]; 90*5b1b1883SVipin KUMAR u32 currhosttxdesc; /* 0x48 */ 91*5b1b1883SVipin KUMAR u32 currhostrxdesc; /* 0x4c */ 92*5b1b1883SVipin KUMAR u32 currhosttxbuffaddr; /* 0x50 */ 93*5b1b1883SVipin KUMAR u32 currhostrxbuffaddr; /* 0x54 */ 94*5b1b1883SVipin KUMAR }; 95*5b1b1883SVipin KUMAR 96*5b1b1883SVipin KUMAR #define DW_DMA_BASE_OFFSET (0x1000) 97*5b1b1883SVipin KUMAR 98*5b1b1883SVipin KUMAR /* Bus mode register definitions */ 99*5b1b1883SVipin KUMAR #define FIXEDBURST (1 << 16) 100*5b1b1883SVipin KUMAR #define PRIORXTX_41 (3 << 14) 101*5b1b1883SVipin KUMAR #define PRIORXTX_31 (2 << 14) 102*5b1b1883SVipin KUMAR #define PRIORXTX_21 (1 << 14) 103*5b1b1883SVipin KUMAR #define PRIORXTX_11 (0 << 14) 104*5b1b1883SVipin KUMAR #define BURST_1 (1 << 8) 105*5b1b1883SVipin KUMAR #define BURST_2 (2 << 8) 106*5b1b1883SVipin KUMAR #define BURST_4 (4 << 8) 107*5b1b1883SVipin KUMAR #define BURST_8 (8 << 8) 108*5b1b1883SVipin KUMAR #define BURST_16 (16 << 8) 109*5b1b1883SVipin KUMAR #define BURST_32 (32 << 8) 110*5b1b1883SVipin KUMAR #define RXHIGHPRIO (1 << 1) 111*5b1b1883SVipin KUMAR #define DMAMAC_SRST (1 << 0) 112*5b1b1883SVipin KUMAR 113*5b1b1883SVipin KUMAR /* Poll demand definitions */ 114*5b1b1883SVipin KUMAR #define POLL_DATA (0xFFFFFFFF) 115*5b1b1883SVipin KUMAR 116*5b1b1883SVipin KUMAR /* Operation mode definitions */ 117*5b1b1883SVipin KUMAR #define STOREFORWARD (1 << 21) 118*5b1b1883SVipin KUMAR #define FLUSHTXFIFO (1 << 20) 119*5b1b1883SVipin KUMAR #define TXSTART (1 << 13) 120*5b1b1883SVipin KUMAR #define TXSECONDFRAME (1 << 2) 121*5b1b1883SVipin KUMAR #define RXSTART (1 << 1) 122*5b1b1883SVipin KUMAR 123*5b1b1883SVipin KUMAR /* Descriptior related definitions */ 124*5b1b1883SVipin KUMAR #define MAC_MAX_FRAME_SZ (2048) 125*5b1b1883SVipin KUMAR 126*5b1b1883SVipin KUMAR struct dmamacdescr { 127*5b1b1883SVipin KUMAR u32 txrx_status; 128*5b1b1883SVipin KUMAR u32 dmamac_cntl; 129*5b1b1883SVipin KUMAR void *dmamac_addr; 130*5b1b1883SVipin KUMAR struct dmamacdescr *dmamac_next; 131*5b1b1883SVipin KUMAR }; 132*5b1b1883SVipin KUMAR 133*5b1b1883SVipin KUMAR /* 134*5b1b1883SVipin KUMAR * txrx_status definitions 135*5b1b1883SVipin KUMAR */ 136*5b1b1883SVipin KUMAR 137*5b1b1883SVipin KUMAR /* tx status bits definitions */ 138*5b1b1883SVipin KUMAR #if defined(CONFIG_DW_ALTDESCRIPTOR) 139*5b1b1883SVipin KUMAR 140*5b1b1883SVipin KUMAR #define DESC_TXSTS_OWNBYDMA (1 << 31) 141*5b1b1883SVipin KUMAR #define DESC_TXSTS_TXINT (1 << 30) 142*5b1b1883SVipin KUMAR #define DESC_TXSTS_TXLAST (1 << 29) 143*5b1b1883SVipin KUMAR #define DESC_TXSTS_TXFIRST (1 << 28) 144*5b1b1883SVipin KUMAR #define DESC_TXSTS_TXCRCDIS (1 << 27) 145*5b1b1883SVipin KUMAR 146*5b1b1883SVipin KUMAR #define DESC_TXSTS_TXPADDIS (1 << 26) 147*5b1b1883SVipin KUMAR #define DESC_TXSTS_TXCHECKINSCTRL (3 << 22) 148*5b1b1883SVipin KUMAR #define DESC_TXSTS_TXRINGEND (1 << 21) 149*5b1b1883SVipin KUMAR #define DESC_TXSTS_TXCHAIN (1 << 20) 150*5b1b1883SVipin KUMAR #define DESC_TXSTS_MSK (0x1FFFF << 0) 151*5b1b1883SVipin KUMAR 152*5b1b1883SVipin KUMAR #else 153*5b1b1883SVipin KUMAR 154*5b1b1883SVipin KUMAR #define DESC_TXSTS_OWNBYDMA (1 << 31) 155*5b1b1883SVipin KUMAR #define DESC_TXSTS_MSK (0x1FFFF << 0) 156*5b1b1883SVipin KUMAR 157*5b1b1883SVipin KUMAR #endif 158*5b1b1883SVipin KUMAR 159*5b1b1883SVipin KUMAR /* rx status bits definitions */ 160*5b1b1883SVipin KUMAR #define DESC_RXSTS_OWNBYDMA (1 << 31) 161*5b1b1883SVipin KUMAR #define DESC_RXSTS_DAFILTERFAIL (1 << 30) 162*5b1b1883SVipin KUMAR #define DESC_RXSTS_FRMLENMSK (0x3FFF << 16) 163*5b1b1883SVipin KUMAR #define DESC_RXSTS_FRMLENSHFT (16) 164*5b1b1883SVipin KUMAR 165*5b1b1883SVipin KUMAR #define DESC_RXSTS_ERROR (1 << 15) 166*5b1b1883SVipin KUMAR #define DESC_RXSTS_RXTRUNCATED (1 << 14) 167*5b1b1883SVipin KUMAR #define DESC_RXSTS_SAFILTERFAIL (1 << 13) 168*5b1b1883SVipin KUMAR #define DESC_RXSTS_RXIPC_GIANTFRAME (1 << 12) 169*5b1b1883SVipin KUMAR #define DESC_RXSTS_RXDAMAGED (1 << 11) 170*5b1b1883SVipin KUMAR #define DESC_RXSTS_RXVLANTAG (1 << 10) 171*5b1b1883SVipin KUMAR #define DESC_RXSTS_RXFIRST (1 << 9) 172*5b1b1883SVipin KUMAR #define DESC_RXSTS_RXLAST (1 << 8) 173*5b1b1883SVipin KUMAR #define DESC_RXSTS_RXIPC_GIANT (1 << 7) 174*5b1b1883SVipin KUMAR #define DESC_RXSTS_RXCOLLISION (1 << 6) 175*5b1b1883SVipin KUMAR #define DESC_RXSTS_RXFRAMEETHER (1 << 5) 176*5b1b1883SVipin KUMAR #define DESC_RXSTS_RXWATCHDOG (1 << 4) 177*5b1b1883SVipin KUMAR #define DESC_RXSTS_RXMIIERROR (1 << 3) 178*5b1b1883SVipin KUMAR #define DESC_RXSTS_RXDRIBBLING (1 << 2) 179*5b1b1883SVipin KUMAR #define DESC_RXSTS_RXCRC (1 << 1) 180*5b1b1883SVipin KUMAR 181*5b1b1883SVipin KUMAR /* 182*5b1b1883SVipin KUMAR * dmamac_cntl definitions 183*5b1b1883SVipin KUMAR */ 184*5b1b1883SVipin KUMAR 185*5b1b1883SVipin KUMAR /* tx control bits definitions */ 186*5b1b1883SVipin KUMAR #if defined(CONFIG_DW_ALTDESCRIPTOR) 187*5b1b1883SVipin KUMAR 188*5b1b1883SVipin KUMAR #define DESC_TXCTRL_SIZE1MASK (0x1FFF << 0) 189*5b1b1883SVipin KUMAR #define DESC_TXCTRL_SIZE1SHFT (0) 190*5b1b1883SVipin KUMAR #define DESC_TXCTRL_SIZE2MASK (0x1FFF << 16) 191*5b1b1883SVipin KUMAR #define DESC_TXCTRL_SIZE2SHFT (16) 192*5b1b1883SVipin KUMAR 193*5b1b1883SVipin KUMAR #else 194*5b1b1883SVipin KUMAR 195*5b1b1883SVipin KUMAR #define DESC_TXCTRL_TXINT (1 << 31) 196*5b1b1883SVipin KUMAR #define DESC_TXCTRL_TXLAST (1 << 30) 197*5b1b1883SVipin KUMAR #define DESC_TXCTRL_TXFIRST (1 << 29) 198*5b1b1883SVipin KUMAR #define DESC_TXCTRL_TXCHECKINSCTRL (3 << 27) 199*5b1b1883SVipin KUMAR #define DESC_TXCTRL_TXCRCDIS (1 << 26) 200*5b1b1883SVipin KUMAR #define DESC_TXCTRL_TXRINGEND (1 << 25) 201*5b1b1883SVipin KUMAR #define DESC_TXCTRL_TXCHAIN (1 << 24) 202*5b1b1883SVipin KUMAR 203*5b1b1883SVipin KUMAR #define DESC_TXCTRL_SIZE1MASK (0x7FF << 0) 204*5b1b1883SVipin KUMAR #define DESC_TXCTRL_SIZE1SHFT (0) 205*5b1b1883SVipin KUMAR #define DESC_TXCTRL_SIZE2MASK (0x7FF << 11) 206*5b1b1883SVipin KUMAR #define DESC_TXCTRL_SIZE2SHFT (11) 207*5b1b1883SVipin KUMAR 208*5b1b1883SVipin KUMAR #endif 209*5b1b1883SVipin KUMAR 210*5b1b1883SVipin KUMAR /* rx control bits definitions */ 211*5b1b1883SVipin KUMAR #if defined(CONFIG_DW_ALTDESCRIPTOR) 212*5b1b1883SVipin KUMAR 213*5b1b1883SVipin KUMAR #define DESC_RXCTRL_RXINTDIS (1 << 31) 214*5b1b1883SVipin KUMAR #define DESC_RXCTRL_RXRINGEND (1 << 15) 215*5b1b1883SVipin KUMAR #define DESC_RXCTRL_RXCHAIN (1 << 14) 216*5b1b1883SVipin KUMAR 217*5b1b1883SVipin KUMAR #define DESC_RXCTRL_SIZE1MASK (0x1FFF << 0) 218*5b1b1883SVipin KUMAR #define DESC_RXCTRL_SIZE1SHFT (0) 219*5b1b1883SVipin KUMAR #define DESC_RXCTRL_SIZE2MASK (0x1FFF << 16) 220*5b1b1883SVipin KUMAR #define DESC_RXCTRL_SIZE2SHFT (16) 221*5b1b1883SVipin KUMAR 222*5b1b1883SVipin KUMAR #else 223*5b1b1883SVipin KUMAR 224*5b1b1883SVipin KUMAR #define DESC_RXCTRL_RXINTDIS (1 << 31) 225*5b1b1883SVipin KUMAR #define DESC_RXCTRL_RXRINGEND (1 << 25) 226*5b1b1883SVipin KUMAR #define DESC_RXCTRL_RXCHAIN (1 << 24) 227*5b1b1883SVipin KUMAR 228*5b1b1883SVipin KUMAR #define DESC_RXCTRL_SIZE1MASK (0x7FF << 0) 229*5b1b1883SVipin KUMAR #define DESC_RXCTRL_SIZE1SHFT (0) 230*5b1b1883SVipin KUMAR #define DESC_RXCTRL_SIZE2MASK (0x7FF << 11) 231*5b1b1883SVipin KUMAR #define DESC_RXCTRL_SIZE2SHFT (11) 232*5b1b1883SVipin KUMAR 233*5b1b1883SVipin KUMAR #endif 234*5b1b1883SVipin KUMAR 235*5b1b1883SVipin KUMAR struct dw_eth_dev { 236*5b1b1883SVipin KUMAR u32 address; 237*5b1b1883SVipin KUMAR u32 speed; 238*5b1b1883SVipin KUMAR u32 duplex; 239*5b1b1883SVipin KUMAR u32 tx_currdescnum; 240*5b1b1883SVipin KUMAR u32 rx_currdescnum; 241*5b1b1883SVipin KUMAR u32 padding; 242*5b1b1883SVipin KUMAR 243*5b1b1883SVipin KUMAR struct dmamacdescr tx_mac_descrtable[CONFIG_TX_DESCR_NUM]; 244*5b1b1883SVipin KUMAR struct dmamacdescr rx_mac_descrtable[CONFIG_RX_DESCR_NUM]; 245*5b1b1883SVipin KUMAR 246*5b1b1883SVipin KUMAR char txbuffs[TX_TOTAL_BUFSIZE]; 247*5b1b1883SVipin KUMAR char rxbuffs[RX_TOTAL_BUFSIZE]; 248*5b1b1883SVipin KUMAR 249*5b1b1883SVipin KUMAR struct eth_mac_regs *mac_regs_p; 250*5b1b1883SVipin KUMAR struct eth_dma_regs *dma_regs_p; 251*5b1b1883SVipin KUMAR 252*5b1b1883SVipin KUMAR struct eth_device *dev; 253*5b1b1883SVipin KUMAR } __attribute__ ((aligned(8))); 254*5b1b1883SVipin KUMAR 255*5b1b1883SVipin KUMAR /* Speed specific definitions */ 256*5b1b1883SVipin KUMAR #define SPEED_10M 1 257*5b1b1883SVipin KUMAR #define SPEED_100M 2 258*5b1b1883SVipin KUMAR #define SPEED_1000M 3 259*5b1b1883SVipin KUMAR 260*5b1b1883SVipin KUMAR /* Duplex mode specific definitions */ 261*5b1b1883SVipin KUMAR #define HALF_DUPLEX 1 262*5b1b1883SVipin KUMAR #define FULL_DUPLEX 2 263*5b1b1883SVipin KUMAR 264*5b1b1883SVipin KUMAR #endif 265