1*4882a593Smuzhiyun /* SPDX-License-Identifier: GPL-2.0 */ 2*4882a593Smuzhiyun /** 3*4882a593Smuzhiyun * encx24j600_hw.h: Register definitions 4*4882a593Smuzhiyun * 5*4882a593Smuzhiyun */ 6*4882a593Smuzhiyun 7*4882a593Smuzhiyun #ifndef _ENCX24J600_HW_H 8*4882a593Smuzhiyun #define _ENCX24J600_HW_H 9*4882a593Smuzhiyun 10*4882a593Smuzhiyun struct encx24j600_context { 11*4882a593Smuzhiyun struct spi_device *spi; 12*4882a593Smuzhiyun struct regmap *regmap; 13*4882a593Smuzhiyun struct regmap *phymap; 14*4882a593Smuzhiyun struct mutex mutex; /* mutex to protect access to regmap */ 15*4882a593Smuzhiyun int bank; 16*4882a593Smuzhiyun }; 17*4882a593Smuzhiyun 18*4882a593Smuzhiyun int devm_regmap_init_encx24j600(struct device *dev, 19*4882a593Smuzhiyun struct encx24j600_context *ctx); 20*4882a593Smuzhiyun 21*4882a593Smuzhiyun /* Single-byte instructions */ 22*4882a593Smuzhiyun #define BANK_SELECT(bank) (0xC0 | ((bank & (BANK_MASK >> BANK_SHIFT)) << 1)) 23*4882a593Smuzhiyun #define B0SEL 0xC0 /* Bank 0 Select */ 24*4882a593Smuzhiyun #define B1SEL 0xC2 /* Bank 1 Select */ 25*4882a593Smuzhiyun #define B2SEL 0xC4 /* Bank 2 Select */ 26*4882a593Smuzhiyun #define B3SEL 0xC6 /* Bank 3 Select */ 27*4882a593Smuzhiyun #define SETETHRST 0xCA /* System Reset */ 28*4882a593Smuzhiyun #define FCDISABLE 0xE0 /* Flow Control Disable */ 29*4882a593Smuzhiyun #define FCSINGLE 0xE2 /* Flow Control Single */ 30*4882a593Smuzhiyun #define FCMULTIPLE 0xE4 /* Flow Control Multiple */ 31*4882a593Smuzhiyun #define FCCLEAR 0xE6 /* Flow Control Clear */ 32*4882a593Smuzhiyun #define SETPKTDEC 0xCC /* Decrement Packet Counter */ 33*4882a593Smuzhiyun #define DMASTOP 0xD2 /* DMA Stop */ 34*4882a593Smuzhiyun #define DMACKSUM 0xD8 /* DMA Start Checksum */ 35*4882a593Smuzhiyun #define DMACKSUMS 0xDA /* DMA Start Checksum with Seed */ 36*4882a593Smuzhiyun #define DMACOPY 0xDC /* DMA Start Copy */ 37*4882a593Smuzhiyun #define DMACOPYS 0xDE /* DMA Start Copy and Checksum with Seed */ 38*4882a593Smuzhiyun #define SETTXRTS 0xD4 /* Request Packet Transmission */ 39*4882a593Smuzhiyun #define ENABLERX 0xE8 /* Enable RX */ 40*4882a593Smuzhiyun #define DISABLERX 0xEA /* Disable RX */ 41*4882a593Smuzhiyun #define SETEIE 0xEC /* Enable Interrupts */ 42*4882a593Smuzhiyun #define CLREIE 0xEE /* Disable Interrupts */ 43*4882a593Smuzhiyun 44*4882a593Smuzhiyun /* Two byte instructions */ 45*4882a593Smuzhiyun #define RBSEL 0xC8 /* Read Bank Select */ 46*4882a593Smuzhiyun 47*4882a593Smuzhiyun /* Three byte instructions */ 48*4882a593Smuzhiyun #define WGPRDPT 0x60 /* Write EGPRDPT */ 49*4882a593Smuzhiyun #define RGPRDPT 0x62 /* Read EGPRDPT */ 50*4882a593Smuzhiyun #define WRXRDPT 0x64 /* Write ERXRDPT */ 51*4882a593Smuzhiyun #define RRXRDPT 0x66 /* Read ERXRDPT */ 52*4882a593Smuzhiyun #define WUDARDPT 0x68 /* Write EUDARDPT */ 53*4882a593Smuzhiyun #define RUDARDPT 0x6A /* Read EUDARDPT */ 54*4882a593Smuzhiyun #define WGPWRPT 0x6C /* Write EGPWRPT */ 55*4882a593Smuzhiyun #define RGPWRPT 0x6E /* Read EGPWRPT */ 56*4882a593Smuzhiyun #define WRXWRPT 0x70 /* Write ERXWRPT */ 57*4882a593Smuzhiyun #define RRXWRPT 0x72 /* Read ERXWRPT */ 58*4882a593Smuzhiyun #define WUDAWRPT 0x74 /* Write EUDAWRPT */ 59*4882a593Smuzhiyun #define RUDAWRPT 0x76 /* Read EUDAWRPT */ 60*4882a593Smuzhiyun 61*4882a593Smuzhiyun /* n byte instructions */ 62*4882a593Smuzhiyun #define RCRCODE 0x00 63*4882a593Smuzhiyun #define WCRCODE 0x40 64*4882a593Smuzhiyun #define BFSCODE 0x80 65*4882a593Smuzhiyun #define BFCCODE 0xA0 66*4882a593Smuzhiyun #define RCR(addr) (RCRCODE | (addr & ADDR_MASK)) /* Read Control Register */ 67*4882a593Smuzhiyun #define WCR(addr) (WCRCODE | (addr & ADDR_MASK)) /* Write Control Register */ 68*4882a593Smuzhiyun #define RCRU 0x20 /* Read Control Register Unbanked */ 69*4882a593Smuzhiyun #define WCRU 0x22 /* Write Control Register Unbanked */ 70*4882a593Smuzhiyun #define BFS(addr) (BFSCODE | (addr & ADDR_MASK)) /* Bit Field Set */ 71*4882a593Smuzhiyun #define BFC(addr) (BFCCODE | (addr & ADDR_MASK)) /* Bit Field Clear */ 72*4882a593Smuzhiyun #define BFSU 0x24 /* Bit Field Set Unbanked */ 73*4882a593Smuzhiyun #define BFCU 0x26 /* Bit Field Clear Unbanked */ 74*4882a593Smuzhiyun #define RGPDATA 0x28 /* Read EGPDATA */ 75*4882a593Smuzhiyun #define WGPDATA 0x2A /* Write EGPDATA */ 76*4882a593Smuzhiyun #define RRXDATA 0x2C /* Read ERXDATA */ 77*4882a593Smuzhiyun #define WRXDATA 0x2E /* Write ERXDATA */ 78*4882a593Smuzhiyun #define RUDADATA 0x30 /* Read EUDADATA */ 79*4882a593Smuzhiyun #define WUDADATA 0x32 /* Write EUDADATA */ 80*4882a593Smuzhiyun 81*4882a593Smuzhiyun #define SFR_REG_COUNT 0xA0 82*4882a593Smuzhiyun 83*4882a593Smuzhiyun /* ENC424J600 Control Registers 84*4882a593Smuzhiyun * Control register definitions are a combination of address 85*4882a593Smuzhiyun * and bank number 86*4882a593Smuzhiyun * - Register address (bits 0-4) 87*4882a593Smuzhiyun * - Bank number (bits 5-6) 88*4882a593Smuzhiyun */ 89*4882a593Smuzhiyun #define ADDR_MASK 0x1F 90*4882a593Smuzhiyun #define BANK_MASK 0x60 91*4882a593Smuzhiyun #define BANK_SHIFT 5 92*4882a593Smuzhiyun 93*4882a593Smuzhiyun /* All-bank registers */ 94*4882a593Smuzhiyun #define EUDAST 0x16 95*4882a593Smuzhiyun #define EUDAND 0x18 96*4882a593Smuzhiyun #define ESTAT 0x1A 97*4882a593Smuzhiyun #define EIR 0x1C 98*4882a593Smuzhiyun #define ECON1 0x1E 99*4882a593Smuzhiyun 100*4882a593Smuzhiyun /* Bank 0 registers */ 101*4882a593Smuzhiyun #define ETXST (0x00 | 0x00) 102*4882a593Smuzhiyun #define ETXLEN (0x02 | 0x00) 103*4882a593Smuzhiyun #define ERXST (0x04 | 0x00) 104*4882a593Smuzhiyun #define ERXTAIL (0x06 | 0x00) 105*4882a593Smuzhiyun #define ERXHEAD (0x08 | 0x00) 106*4882a593Smuzhiyun #define EDMAST (0x0A | 0x00) 107*4882a593Smuzhiyun #define EDMALEN (0x0C | 0x00) 108*4882a593Smuzhiyun #define EDMADST (0x0E | 0x00) 109*4882a593Smuzhiyun #define EDMACS (0x10 | 0x00) 110*4882a593Smuzhiyun #define ETXSTAT (0x12 | 0x00) 111*4882a593Smuzhiyun #define ETXWIRE (0x14 | 0x00) 112*4882a593Smuzhiyun 113*4882a593Smuzhiyun /* Bank 1 registers */ 114*4882a593Smuzhiyun #define EHT1 (0x00 | 0x20) 115*4882a593Smuzhiyun #define EHT2 (0x02 | 0x20) 116*4882a593Smuzhiyun #define EHT3 (0x04 | 0x20) 117*4882a593Smuzhiyun #define EHT4 (0x06 | 0x20) 118*4882a593Smuzhiyun #define EPMM1 (0x08 | 0x20) 119*4882a593Smuzhiyun #define EPMM2 (0x0A | 0x20) 120*4882a593Smuzhiyun #define EPMM3 (0x0C | 0x20) 121*4882a593Smuzhiyun #define EPMM4 (0x0E | 0x20) 122*4882a593Smuzhiyun #define EPMCS (0x10 | 0x20) 123*4882a593Smuzhiyun #define EPMO (0x12 | 0x20) 124*4882a593Smuzhiyun #define ERXFCON (0x14 | 0x20) 125*4882a593Smuzhiyun 126*4882a593Smuzhiyun /* Bank 2 registers */ 127*4882a593Smuzhiyun #define MACON1 (0x00 | 0x40) 128*4882a593Smuzhiyun #define MACON2 (0x02 | 0x40) 129*4882a593Smuzhiyun #define MABBIPG (0x04 | 0x40) 130*4882a593Smuzhiyun #define MAIPG (0x06 | 0x40) 131*4882a593Smuzhiyun #define MACLCON (0x08 | 0x40) 132*4882a593Smuzhiyun #define MAMXFL (0x0A | 0x40) 133*4882a593Smuzhiyun #define MICMD (0x12 | 0x40) 134*4882a593Smuzhiyun #define MIREGADR (0x14 | 0x40) 135*4882a593Smuzhiyun 136*4882a593Smuzhiyun /* Bank 3 registers */ 137*4882a593Smuzhiyun #define MAADR3 (0x00 | 0x60) 138*4882a593Smuzhiyun #define MAADR2 (0x02 | 0x60) 139*4882a593Smuzhiyun #define MAADR1 (0x04 | 0x60) 140*4882a593Smuzhiyun #define MIWR (0x06 | 0x60) 141*4882a593Smuzhiyun #define MIRD (0x08 | 0x60) 142*4882a593Smuzhiyun #define MISTAT (0x0A | 0x60) 143*4882a593Smuzhiyun #define EPAUS (0x0C | 0x60) 144*4882a593Smuzhiyun #define ECON2 (0x0E | 0x60) 145*4882a593Smuzhiyun #define ERXWM (0x10 | 0x60) 146*4882a593Smuzhiyun #define EIE (0x12 | 0x60) 147*4882a593Smuzhiyun #define EIDLED (0x14 | 0x60) 148*4882a593Smuzhiyun 149*4882a593Smuzhiyun /* Unbanked registers */ 150*4882a593Smuzhiyun #define EGPDATA (0x00 | 0x80) 151*4882a593Smuzhiyun #define ERXDATA (0x02 | 0x80) 152*4882a593Smuzhiyun #define EUDADATA (0x04 | 0x80) 153*4882a593Smuzhiyun #define EGPRDPT (0x06 | 0x80) 154*4882a593Smuzhiyun #define EGPWRPT (0x08 | 0x80) 155*4882a593Smuzhiyun #define ERXRDPT (0x0A | 0x80) 156*4882a593Smuzhiyun #define ERXWRPT (0x0C | 0x80) 157*4882a593Smuzhiyun #define EUDARDPT (0x0E | 0x80) 158*4882a593Smuzhiyun #define EUDAWRPT (0x10 | 0x80) 159*4882a593Smuzhiyun 160*4882a593Smuzhiyun 161*4882a593Smuzhiyun /* Register bit definitions */ 162*4882a593Smuzhiyun /* ESTAT */ 163*4882a593Smuzhiyun #define INT (1 << 15) 164*4882a593Smuzhiyun #define FCIDLE (1 << 14) 165*4882a593Smuzhiyun #define RXBUSY (1 << 13) 166*4882a593Smuzhiyun #define CLKRDY (1 << 12) 167*4882a593Smuzhiyun #define PHYDPX (1 << 10) 168*4882a593Smuzhiyun #define PHYLNK (1 << 8) 169*4882a593Smuzhiyun 170*4882a593Smuzhiyun /* EIR */ 171*4882a593Smuzhiyun #define CRYPTEN (1 << 15) 172*4882a593Smuzhiyun #define MODEXIF (1 << 14) 173*4882a593Smuzhiyun #define HASHIF (1 << 13) 174*4882a593Smuzhiyun #define AESIF (1 << 12) 175*4882a593Smuzhiyun #define LINKIF (1 << 11) 176*4882a593Smuzhiyun #define PKTIF (1 << 6) 177*4882a593Smuzhiyun #define DMAIF (1 << 5) 178*4882a593Smuzhiyun #define TXIF (1 << 3) 179*4882a593Smuzhiyun #define TXABTIF (1 << 2) 180*4882a593Smuzhiyun #define RXABTIF (1 << 1) 181*4882a593Smuzhiyun #define PCFULIF (1 << 0) 182*4882a593Smuzhiyun 183*4882a593Smuzhiyun /* ECON1 */ 184*4882a593Smuzhiyun #define MODEXST (1 << 15) 185*4882a593Smuzhiyun #define HASHEN (1 << 14) 186*4882a593Smuzhiyun #define HASHOP (1 << 13) 187*4882a593Smuzhiyun #define HASHLST (1 << 12) 188*4882a593Smuzhiyun #define AESST (1 << 11) 189*4882a593Smuzhiyun #define AESOP1 (1 << 10) 190*4882a593Smuzhiyun #define AESOP0 (1 << 9) 191*4882a593Smuzhiyun #define PKTDEC (1 << 8) 192*4882a593Smuzhiyun #define FCOP1 (1 << 7) 193*4882a593Smuzhiyun #define FCOP0 (1 << 6) 194*4882a593Smuzhiyun #define DMAST (1 << 5) 195*4882a593Smuzhiyun #define DMACPY (1 << 4) 196*4882a593Smuzhiyun #define DMACSSD (1 << 3) 197*4882a593Smuzhiyun #define DMANOCS (1 << 2) 198*4882a593Smuzhiyun #define TXRTS (1 << 1) 199*4882a593Smuzhiyun #define RXEN (1 << 0) 200*4882a593Smuzhiyun 201*4882a593Smuzhiyun /* ETXSTAT */ 202*4882a593Smuzhiyun #define LATECOL (1 << 10) 203*4882a593Smuzhiyun #define MAXCOL (1 << 9) 204*4882a593Smuzhiyun #define EXDEFER (1 << 8) 205*4882a593Smuzhiyun #define ETXSTATL_DEFER (1 << 7) 206*4882a593Smuzhiyun #define CRCBAD (1 << 4) 207*4882a593Smuzhiyun #define COLCNT_MASK 0xF 208*4882a593Smuzhiyun 209*4882a593Smuzhiyun /* ERXFCON */ 210*4882a593Smuzhiyun #define HTEN (1 << 15) 211*4882a593Smuzhiyun #define MPEN (1 << 14) 212*4882a593Smuzhiyun #define NOTPM (1 << 12) 213*4882a593Smuzhiyun #define PMEN3 (1 << 11) 214*4882a593Smuzhiyun #define PMEN2 (1 << 10) 215*4882a593Smuzhiyun #define PMEN1 (1 << 9) 216*4882a593Smuzhiyun #define PMEN0 (1 << 8) 217*4882a593Smuzhiyun #define CRCEEN (1 << 7) 218*4882a593Smuzhiyun #define CRCEN (1 << 6) 219*4882a593Smuzhiyun #define RUNTEEN (1 << 5) 220*4882a593Smuzhiyun #define RUNTEN (1 << 4) 221*4882a593Smuzhiyun #define UCEN (1 << 3) 222*4882a593Smuzhiyun #define NOTMEEN (1 << 2) 223*4882a593Smuzhiyun #define MCEN (1 << 1) 224*4882a593Smuzhiyun #define BCEN (1 << 0) 225*4882a593Smuzhiyun 226*4882a593Smuzhiyun /* MACON1 */ 227*4882a593Smuzhiyun #define LOOPBK (1 << 4) 228*4882a593Smuzhiyun #define RXPAUS (1 << 2) 229*4882a593Smuzhiyun #define PASSALL (1 << 1) 230*4882a593Smuzhiyun 231*4882a593Smuzhiyun /* MACON2 */ 232*4882a593Smuzhiyun #define MACON2_DEFER (1 << 14) 233*4882a593Smuzhiyun #define BPEN (1 << 13) 234*4882a593Smuzhiyun #define NOBKOFF (1 << 12) 235*4882a593Smuzhiyun #define PADCFG2 (1 << 7) 236*4882a593Smuzhiyun #define PADCFG1 (1 << 6) 237*4882a593Smuzhiyun #define PADCFG0 (1 << 5) 238*4882a593Smuzhiyun #define TXCRCEN (1 << 4) 239*4882a593Smuzhiyun #define PHDREN (1 << 3) 240*4882a593Smuzhiyun #define HFRMEN (1 << 2) 241*4882a593Smuzhiyun #define MACON2_RSV1 (1 << 1) 242*4882a593Smuzhiyun #define FULDPX (1 << 0) 243*4882a593Smuzhiyun 244*4882a593Smuzhiyun /* MAIPG */ 245*4882a593Smuzhiyun /* value of the high byte is given by the reserved bits, 246*4882a593Smuzhiyun * value of the low byte is recomended setting of the 247*4882a593Smuzhiyun * IPG parameter. 248*4882a593Smuzhiyun */ 249*4882a593Smuzhiyun #define MAIPGH_VAL 0x0C 250*4882a593Smuzhiyun #define MAIPGL_VAL 0x12 251*4882a593Smuzhiyun 252*4882a593Smuzhiyun /* MIREGADRH */ 253*4882a593Smuzhiyun #define MIREGADR_VAL (1 << 8) 254*4882a593Smuzhiyun 255*4882a593Smuzhiyun /* MIREGADRL */ 256*4882a593Smuzhiyun #define PHREG_MASK 0x1F 257*4882a593Smuzhiyun 258*4882a593Smuzhiyun /* MICMD */ 259*4882a593Smuzhiyun #define MIISCAN (1 << 1) 260*4882a593Smuzhiyun #define MIIRD (1 << 0) 261*4882a593Smuzhiyun 262*4882a593Smuzhiyun /* MISTAT */ 263*4882a593Smuzhiyun #define NVALID (1 << 2) 264*4882a593Smuzhiyun #define SCAN (1 << 1) 265*4882a593Smuzhiyun #define BUSY (1 << 0) 266*4882a593Smuzhiyun 267*4882a593Smuzhiyun /* ECON2 */ 268*4882a593Smuzhiyun #define ETHEN (1 << 15) 269*4882a593Smuzhiyun #define STRCH (1 << 14) 270*4882a593Smuzhiyun #define TXMAC (1 << 13) 271*4882a593Smuzhiyun #define SHA1MD5 (1 << 12) 272*4882a593Smuzhiyun #define COCON3 (1 << 11) 273*4882a593Smuzhiyun #define COCON2 (1 << 10) 274*4882a593Smuzhiyun #define COCON1 (1 << 9) 275*4882a593Smuzhiyun #define COCON0 (1 << 8) 276*4882a593Smuzhiyun #define AUTOFC (1 << 7) 277*4882a593Smuzhiyun #define TXRST (1 << 6) 278*4882a593Smuzhiyun #define RXRST (1 << 5) 279*4882a593Smuzhiyun #define ETHRST (1 << 4) 280*4882a593Smuzhiyun #define MODLEN1 (1 << 3) 281*4882a593Smuzhiyun #define MODLEN0 (1 << 2) 282*4882a593Smuzhiyun #define AESLEN1 (1 << 1) 283*4882a593Smuzhiyun #define AESLEN0 (1 << 0) 284*4882a593Smuzhiyun 285*4882a593Smuzhiyun /* EIE */ 286*4882a593Smuzhiyun #define INTIE (1 << 15) 287*4882a593Smuzhiyun #define MODEXIE (1 << 14) 288*4882a593Smuzhiyun #define HASHIE (1 << 13) 289*4882a593Smuzhiyun #define AESIE (1 << 12) 290*4882a593Smuzhiyun #define LINKIE (1 << 11) 291*4882a593Smuzhiyun #define PKTIE (1 << 6) 292*4882a593Smuzhiyun #define DMAIE (1 << 5) 293*4882a593Smuzhiyun #define TXIE (1 << 3) 294*4882a593Smuzhiyun #define TXABTIE (1 << 2) 295*4882a593Smuzhiyun #define RXABTIE (1 << 1) 296*4882a593Smuzhiyun #define PCFULIE (1 << 0) 297*4882a593Smuzhiyun 298*4882a593Smuzhiyun /* EIDLED */ 299*4882a593Smuzhiyun #define LACFG3 (1 << 15) 300*4882a593Smuzhiyun #define LACFG2 (1 << 14) 301*4882a593Smuzhiyun #define LACFG1 (1 << 13) 302*4882a593Smuzhiyun #define LACFG0 (1 << 12) 303*4882a593Smuzhiyun #define LBCFG3 (1 << 11) 304*4882a593Smuzhiyun #define LBCFG2 (1 << 10) 305*4882a593Smuzhiyun #define LBCFG1 (1 << 9) 306*4882a593Smuzhiyun #define LBCFG0 (1 << 8) 307*4882a593Smuzhiyun #define DEVID_SHIFT 5 308*4882a593Smuzhiyun #define DEVID_MASK (0x7 << DEVID_SHIFT) 309*4882a593Smuzhiyun #define REVID_SHIFT 0 310*4882a593Smuzhiyun #define REVID_MASK (0x1F << REVID_SHIFT) 311*4882a593Smuzhiyun 312*4882a593Smuzhiyun /* PHY registers */ 313*4882a593Smuzhiyun #define PHCON1 0x00 314*4882a593Smuzhiyun #define PHSTAT1 0x01 315*4882a593Smuzhiyun #define PHANA 0x04 316*4882a593Smuzhiyun #define PHANLPA 0x05 317*4882a593Smuzhiyun #define PHANE 0x06 318*4882a593Smuzhiyun #define PHCON2 0x11 319*4882a593Smuzhiyun #define PHSTAT2 0x1B 320*4882a593Smuzhiyun #define PHSTAT3 0x1F 321*4882a593Smuzhiyun 322*4882a593Smuzhiyun /* PHCON1 */ 323*4882a593Smuzhiyun #define PRST (1 << 15) 324*4882a593Smuzhiyun #define PLOOPBK (1 << 14) 325*4882a593Smuzhiyun #define SPD100 (1 << 13) 326*4882a593Smuzhiyun #define ANEN (1 << 12) 327*4882a593Smuzhiyun #define PSLEEP (1 << 11) 328*4882a593Smuzhiyun #define RENEG (1 << 9) 329*4882a593Smuzhiyun #define PFULDPX (1 << 8) 330*4882a593Smuzhiyun 331*4882a593Smuzhiyun /* PHSTAT1 */ 332*4882a593Smuzhiyun #define FULL100 (1 << 14) 333*4882a593Smuzhiyun #define HALF100 (1 << 13) 334*4882a593Smuzhiyun #define FULL10 (1 << 12) 335*4882a593Smuzhiyun #define HALF10 (1 << 11) 336*4882a593Smuzhiyun #define ANDONE (1 << 5) 337*4882a593Smuzhiyun #define LRFAULT (1 << 4) 338*4882a593Smuzhiyun #define ANABLE (1 << 3) 339*4882a593Smuzhiyun #define LLSTAT (1 << 2) 340*4882a593Smuzhiyun #define EXTREGS (1 << 0) 341*4882a593Smuzhiyun 342*4882a593Smuzhiyun /* PHSTAT2 */ 343*4882a593Smuzhiyun #define PLRITY (1 << 4) 344*4882a593Smuzhiyun 345*4882a593Smuzhiyun /* PHSTAT3 */ 346*4882a593Smuzhiyun #define PHY3SPD100 (1 << 3) 347*4882a593Smuzhiyun #define PHY3DPX (1 << 4) 348*4882a593Smuzhiyun #define SPDDPX_SHIFT 2 349*4882a593Smuzhiyun #define SPDDPX_MASK (0x7 << SPDDPX_SHIFT) 350*4882a593Smuzhiyun 351*4882a593Smuzhiyun /* PHANA */ 352*4882a593Smuzhiyun /* Default value for PHY initialization*/ 353*4882a593Smuzhiyun #define PHANA_DEFAULT 0x05E1 354*4882a593Smuzhiyun 355*4882a593Smuzhiyun /* PHANE */ 356*4882a593Smuzhiyun #define PDFLT (1 << 4) 357*4882a593Smuzhiyun #define LPARCD (1 << 1) 358*4882a593Smuzhiyun #define LPANABL (1 << 0) 359*4882a593Smuzhiyun 360*4882a593Smuzhiyun #define EUDAST_TEST_VAL 0x1234 361*4882a593Smuzhiyun 362*4882a593Smuzhiyun #define TSV_SIZE 7 363*4882a593Smuzhiyun 364*4882a593Smuzhiyun #define ENCX24J600_DEV_ID 0x1 365*4882a593Smuzhiyun 366*4882a593Smuzhiyun /* Configuration */ 367*4882a593Smuzhiyun 368*4882a593Smuzhiyun /* Led is on when the link is present and driven low 369*4882a593Smuzhiyun * temporarily when packet is TX'd or RX'd 370*4882a593Smuzhiyun */ 371*4882a593Smuzhiyun #define LED_A_SETTINGS 0xC 372*4882a593Smuzhiyun 373*4882a593Smuzhiyun /* Led is on if the link is in 100 Mbps mode */ 374*4882a593Smuzhiyun #define LED_B_SETTINGS 0x8 375*4882a593Smuzhiyun 376*4882a593Smuzhiyun /* maximum ethernet frame length 377*4882a593Smuzhiyun * Currently not used as a limit anywhere 378*4882a593Smuzhiyun * (we're using the "huge frame enable" feature of 379*4882a593Smuzhiyun * enc424j600). 380*4882a593Smuzhiyun */ 381*4882a593Smuzhiyun #define MAX_FRAMELEN 1518 382*4882a593Smuzhiyun 383*4882a593Smuzhiyun /* Size in bytes of the receive buffer in enc424j600. 384*4882a593Smuzhiyun * Must be word aligned (even). 385*4882a593Smuzhiyun */ 386*4882a593Smuzhiyun #define RX_BUFFER_SIZE (15 * MAX_FRAMELEN) 387*4882a593Smuzhiyun 388*4882a593Smuzhiyun /* Start of the general purpose area in sram */ 389*4882a593Smuzhiyun #define SRAM_GP_START 0x0 390*4882a593Smuzhiyun 391*4882a593Smuzhiyun /* SRAM size */ 392*4882a593Smuzhiyun #define SRAM_SIZE 0x6000 393*4882a593Smuzhiyun 394*4882a593Smuzhiyun /* Start of the receive buffer */ 395*4882a593Smuzhiyun #define ERXST_VAL (SRAM_SIZE - RX_BUFFER_SIZE) 396*4882a593Smuzhiyun 397*4882a593Smuzhiyun #define RSV_RXLONGEVDROPEV 16 398*4882a593Smuzhiyun #define RSV_CARRIEREV 18 399*4882a593Smuzhiyun #define RSV_CRCERROR 20 400*4882a593Smuzhiyun #define RSV_LENCHECKERR 21 401*4882a593Smuzhiyun #define RSV_LENOUTOFRANGE 22 402*4882a593Smuzhiyun #define RSV_RXOK 23 403*4882a593Smuzhiyun #define RSV_RXMULTICAST 24 404*4882a593Smuzhiyun #define RSV_RXBROADCAST 25 405*4882a593Smuzhiyun #define RSV_DRIBBLENIBBLE 26 406*4882a593Smuzhiyun #define RSV_RXCONTROLFRAME 27 407*4882a593Smuzhiyun #define RSV_RXPAUSEFRAME 28 408*4882a593Smuzhiyun #define RSV_RXUNKNOWNOPCODE 29 409*4882a593Smuzhiyun #define RSV_RXTYPEVLAN 30 410*4882a593Smuzhiyun 411*4882a593Smuzhiyun #define RSV_RUNTFILTERMATCH 31 412*4882a593Smuzhiyun #define RSV_NOTMEFILTERMATCH 32 413*4882a593Smuzhiyun #define RSV_HASHFILTERMATCH 33 414*4882a593Smuzhiyun #define RSV_MAGICPKTFILTERMATCH 34 415*4882a593Smuzhiyun #define RSV_PTRNMTCHFILTERMATCH 35 416*4882a593Smuzhiyun #define RSV_UNICASTFILTERMATCH 36 417*4882a593Smuzhiyun 418*4882a593Smuzhiyun #define RSV_SIZE 8 419*4882a593Smuzhiyun #define RSV_BITMASK(x) (1 << ((x) - 16)) 420*4882a593Smuzhiyun #define RSV_GETBIT(x, y) (((x) & RSV_BITMASK(y)) ? 1 : 0) 421*4882a593Smuzhiyun 422*4882a593Smuzhiyun struct rsv { 423*4882a593Smuzhiyun u16 next_packet; 424*4882a593Smuzhiyun u16 len; 425*4882a593Smuzhiyun u32 rxstat; 426*4882a593Smuzhiyun }; 427*4882a593Smuzhiyun 428*4882a593Smuzhiyun /* Put RX buffer at 0 as suggested by the Errata datasheet */ 429*4882a593Smuzhiyun 430*4882a593Smuzhiyun #define RXSTART_INIT ERXST_VAL 431*4882a593Smuzhiyun #define RXEND_INIT 0x5FFF 432*4882a593Smuzhiyun 433*4882a593Smuzhiyun int regmap_encx24j600_spi_write(void *context, u8 reg, const u8 *data, 434*4882a593Smuzhiyun size_t count); 435*4882a593Smuzhiyun int regmap_encx24j600_spi_read(void *context, u8 reg, u8 *data, size_t count); 436*4882a593Smuzhiyun 437*4882a593Smuzhiyun 438*4882a593Smuzhiyun #endif 439