162306a36Sopenharmony_ci/* SPDX-License-Identifier: GPL-2.0 */ 262306a36Sopenharmony_ci/* 362306a36Sopenharmony_ci * encx24j600_hw.h: Register definitions 462306a36Sopenharmony_ci * 562306a36Sopenharmony_ci */ 662306a36Sopenharmony_ci 762306a36Sopenharmony_ci#ifndef _ENCX24J600_HW_H 862306a36Sopenharmony_ci#define _ENCX24J600_HW_H 962306a36Sopenharmony_ci 1062306a36Sopenharmony_cistruct encx24j600_context { 1162306a36Sopenharmony_ci struct spi_device *spi; 1262306a36Sopenharmony_ci struct regmap *regmap; 1362306a36Sopenharmony_ci struct regmap *phymap; 1462306a36Sopenharmony_ci struct mutex mutex; /* mutex to protect access to regmap */ 1562306a36Sopenharmony_ci int bank; 1662306a36Sopenharmony_ci}; 1762306a36Sopenharmony_ci 1862306a36Sopenharmony_ciint devm_regmap_init_encx24j600(struct device *dev, 1962306a36Sopenharmony_ci struct encx24j600_context *ctx); 2062306a36Sopenharmony_ci 2162306a36Sopenharmony_ci/* Single-byte instructions */ 2262306a36Sopenharmony_ci#define BANK_SELECT(bank) (0xC0 | ((bank & (BANK_MASK >> BANK_SHIFT)) << 1)) 2362306a36Sopenharmony_ci#define B0SEL 0xC0 /* Bank 0 Select */ 2462306a36Sopenharmony_ci#define B1SEL 0xC2 /* Bank 1 Select */ 2562306a36Sopenharmony_ci#define B2SEL 0xC4 /* Bank 2 Select */ 2662306a36Sopenharmony_ci#define B3SEL 0xC6 /* Bank 3 Select */ 2762306a36Sopenharmony_ci#define SETETHRST 0xCA /* System Reset */ 2862306a36Sopenharmony_ci#define FCDISABLE 0xE0 /* Flow Control Disable */ 2962306a36Sopenharmony_ci#define FCSINGLE 0xE2 /* Flow Control Single */ 3062306a36Sopenharmony_ci#define FCMULTIPLE 0xE4 /* Flow Control Multiple */ 3162306a36Sopenharmony_ci#define FCCLEAR 0xE6 /* Flow Control Clear */ 3262306a36Sopenharmony_ci#define SETPKTDEC 0xCC /* Decrement Packet Counter */ 3362306a36Sopenharmony_ci#define DMASTOP 0xD2 /* DMA Stop */ 3462306a36Sopenharmony_ci#define DMACKSUM 0xD8 /* DMA Start Checksum */ 3562306a36Sopenharmony_ci#define DMACKSUMS 0xDA /* DMA Start Checksum with Seed */ 3662306a36Sopenharmony_ci#define DMACOPY 0xDC /* DMA Start Copy */ 3762306a36Sopenharmony_ci#define DMACOPYS 0xDE /* DMA Start Copy and Checksum with Seed */ 3862306a36Sopenharmony_ci#define SETTXRTS 0xD4 /* Request Packet Transmission */ 3962306a36Sopenharmony_ci#define ENABLERX 0xE8 /* Enable RX */ 4062306a36Sopenharmony_ci#define DISABLERX 0xEA /* Disable RX */ 4162306a36Sopenharmony_ci#define SETEIE 0xEC /* Enable Interrupts */ 4262306a36Sopenharmony_ci#define CLREIE 0xEE /* Disable Interrupts */ 4362306a36Sopenharmony_ci 4462306a36Sopenharmony_ci/* Two byte instructions */ 4562306a36Sopenharmony_ci#define RBSEL 0xC8 /* Read Bank Select */ 4662306a36Sopenharmony_ci 4762306a36Sopenharmony_ci/* Three byte instructions */ 4862306a36Sopenharmony_ci#define WGPRDPT 0x60 /* Write EGPRDPT */ 4962306a36Sopenharmony_ci#define RGPRDPT 0x62 /* Read EGPRDPT */ 5062306a36Sopenharmony_ci#define WRXRDPT 0x64 /* Write ERXRDPT */ 5162306a36Sopenharmony_ci#define RRXRDPT 0x66 /* Read ERXRDPT */ 5262306a36Sopenharmony_ci#define WUDARDPT 0x68 /* Write EUDARDPT */ 5362306a36Sopenharmony_ci#define RUDARDPT 0x6A /* Read EUDARDPT */ 5462306a36Sopenharmony_ci#define WGPWRPT 0x6C /* Write EGPWRPT */ 5562306a36Sopenharmony_ci#define RGPWRPT 0x6E /* Read EGPWRPT */ 5662306a36Sopenharmony_ci#define WRXWRPT 0x70 /* Write ERXWRPT */ 5762306a36Sopenharmony_ci#define RRXWRPT 0x72 /* Read ERXWRPT */ 5862306a36Sopenharmony_ci#define WUDAWRPT 0x74 /* Write EUDAWRPT */ 5962306a36Sopenharmony_ci#define RUDAWRPT 0x76 /* Read EUDAWRPT */ 6062306a36Sopenharmony_ci 6162306a36Sopenharmony_ci/* n byte instructions */ 6262306a36Sopenharmony_ci#define RCRCODE 0x00 6362306a36Sopenharmony_ci#define WCRCODE 0x40 6462306a36Sopenharmony_ci#define BFSCODE 0x80 6562306a36Sopenharmony_ci#define BFCCODE 0xA0 6662306a36Sopenharmony_ci#define RCR(addr) (RCRCODE | (addr & ADDR_MASK)) /* Read Control Register */ 6762306a36Sopenharmony_ci#define WCR(addr) (WCRCODE | (addr & ADDR_MASK)) /* Write Control Register */ 6862306a36Sopenharmony_ci#define RCRU 0x20 /* Read Control Register Unbanked */ 6962306a36Sopenharmony_ci#define WCRU 0x22 /* Write Control Register Unbanked */ 7062306a36Sopenharmony_ci#define BFS(addr) (BFSCODE | (addr & ADDR_MASK)) /* Bit Field Set */ 7162306a36Sopenharmony_ci#define BFC(addr) (BFCCODE | (addr & ADDR_MASK)) /* Bit Field Clear */ 7262306a36Sopenharmony_ci#define BFSU 0x24 /* Bit Field Set Unbanked */ 7362306a36Sopenharmony_ci#define BFCU 0x26 /* Bit Field Clear Unbanked */ 7462306a36Sopenharmony_ci#define RGPDATA 0x28 /* Read EGPDATA */ 7562306a36Sopenharmony_ci#define WGPDATA 0x2A /* Write EGPDATA */ 7662306a36Sopenharmony_ci#define RRXDATA 0x2C /* Read ERXDATA */ 7762306a36Sopenharmony_ci#define WRXDATA 0x2E /* Write ERXDATA */ 7862306a36Sopenharmony_ci#define RUDADATA 0x30 /* Read EUDADATA */ 7962306a36Sopenharmony_ci#define WUDADATA 0x32 /* Write EUDADATA */ 8062306a36Sopenharmony_ci 8162306a36Sopenharmony_ci#define SFR_REG_COUNT 0xA0 8262306a36Sopenharmony_ci 8362306a36Sopenharmony_ci/* ENC424J600 Control Registers 8462306a36Sopenharmony_ci * Control register definitions are a combination of address 8562306a36Sopenharmony_ci * and bank number 8662306a36Sopenharmony_ci * - Register address (bits 0-4) 8762306a36Sopenharmony_ci * - Bank number (bits 5-6) 8862306a36Sopenharmony_ci */ 8962306a36Sopenharmony_ci#define ADDR_MASK 0x1F 9062306a36Sopenharmony_ci#define BANK_MASK 0x60 9162306a36Sopenharmony_ci#define BANK_SHIFT 5 9262306a36Sopenharmony_ci 9362306a36Sopenharmony_ci/* All-bank registers */ 9462306a36Sopenharmony_ci#define EUDAST 0x16 9562306a36Sopenharmony_ci#define EUDAND 0x18 9662306a36Sopenharmony_ci#define ESTAT 0x1A 9762306a36Sopenharmony_ci#define EIR 0x1C 9862306a36Sopenharmony_ci#define ECON1 0x1E 9962306a36Sopenharmony_ci 10062306a36Sopenharmony_ci/* Bank 0 registers */ 10162306a36Sopenharmony_ci#define ETXST (0x00 | 0x00) 10262306a36Sopenharmony_ci#define ETXLEN (0x02 | 0x00) 10362306a36Sopenharmony_ci#define ERXST (0x04 | 0x00) 10462306a36Sopenharmony_ci#define ERXTAIL (0x06 | 0x00) 10562306a36Sopenharmony_ci#define ERXHEAD (0x08 | 0x00) 10662306a36Sopenharmony_ci#define EDMAST (0x0A | 0x00) 10762306a36Sopenharmony_ci#define EDMALEN (0x0C | 0x00) 10862306a36Sopenharmony_ci#define EDMADST (0x0E | 0x00) 10962306a36Sopenharmony_ci#define EDMACS (0x10 | 0x00) 11062306a36Sopenharmony_ci#define ETXSTAT (0x12 | 0x00) 11162306a36Sopenharmony_ci#define ETXWIRE (0x14 | 0x00) 11262306a36Sopenharmony_ci 11362306a36Sopenharmony_ci/* Bank 1 registers */ 11462306a36Sopenharmony_ci#define EHT1 (0x00 | 0x20) 11562306a36Sopenharmony_ci#define EHT2 (0x02 | 0x20) 11662306a36Sopenharmony_ci#define EHT3 (0x04 | 0x20) 11762306a36Sopenharmony_ci#define EHT4 (0x06 | 0x20) 11862306a36Sopenharmony_ci#define EPMM1 (0x08 | 0x20) 11962306a36Sopenharmony_ci#define EPMM2 (0x0A | 0x20) 12062306a36Sopenharmony_ci#define EPMM3 (0x0C | 0x20) 12162306a36Sopenharmony_ci#define EPMM4 (0x0E | 0x20) 12262306a36Sopenharmony_ci#define EPMCS (0x10 | 0x20) 12362306a36Sopenharmony_ci#define EPMO (0x12 | 0x20) 12462306a36Sopenharmony_ci#define ERXFCON (0x14 | 0x20) 12562306a36Sopenharmony_ci 12662306a36Sopenharmony_ci/* Bank 2 registers */ 12762306a36Sopenharmony_ci#define MACON1 (0x00 | 0x40) 12862306a36Sopenharmony_ci#define MACON2 (0x02 | 0x40) 12962306a36Sopenharmony_ci#define MABBIPG (0x04 | 0x40) 13062306a36Sopenharmony_ci#define MAIPG (0x06 | 0x40) 13162306a36Sopenharmony_ci#define MACLCON (0x08 | 0x40) 13262306a36Sopenharmony_ci#define MAMXFL (0x0A | 0x40) 13362306a36Sopenharmony_ci#define MICMD (0x12 | 0x40) 13462306a36Sopenharmony_ci#define MIREGADR (0x14 | 0x40) 13562306a36Sopenharmony_ci 13662306a36Sopenharmony_ci/* Bank 3 registers */ 13762306a36Sopenharmony_ci#define MAADR3 (0x00 | 0x60) 13862306a36Sopenharmony_ci#define MAADR2 (0x02 | 0x60) 13962306a36Sopenharmony_ci#define MAADR1 (0x04 | 0x60) 14062306a36Sopenharmony_ci#define MIWR (0x06 | 0x60) 14162306a36Sopenharmony_ci#define MIRD (0x08 | 0x60) 14262306a36Sopenharmony_ci#define MISTAT (0x0A | 0x60) 14362306a36Sopenharmony_ci#define EPAUS (0x0C | 0x60) 14462306a36Sopenharmony_ci#define ECON2 (0x0E | 0x60) 14562306a36Sopenharmony_ci#define ERXWM (0x10 | 0x60) 14662306a36Sopenharmony_ci#define EIE (0x12 | 0x60) 14762306a36Sopenharmony_ci#define EIDLED (0x14 | 0x60) 14862306a36Sopenharmony_ci 14962306a36Sopenharmony_ci/* Unbanked registers */ 15062306a36Sopenharmony_ci#define EGPDATA (0x00 | 0x80) 15162306a36Sopenharmony_ci#define ERXDATA (0x02 | 0x80) 15262306a36Sopenharmony_ci#define EUDADATA (0x04 | 0x80) 15362306a36Sopenharmony_ci#define EGPRDPT (0x06 | 0x80) 15462306a36Sopenharmony_ci#define EGPWRPT (0x08 | 0x80) 15562306a36Sopenharmony_ci#define ERXRDPT (0x0A | 0x80) 15662306a36Sopenharmony_ci#define ERXWRPT (0x0C | 0x80) 15762306a36Sopenharmony_ci#define EUDARDPT (0x0E | 0x80) 15862306a36Sopenharmony_ci#define EUDAWRPT (0x10 | 0x80) 15962306a36Sopenharmony_ci 16062306a36Sopenharmony_ci 16162306a36Sopenharmony_ci/* Register bit definitions */ 16262306a36Sopenharmony_ci/* ESTAT */ 16362306a36Sopenharmony_ci#define INT (1 << 15) 16462306a36Sopenharmony_ci#define FCIDLE (1 << 14) 16562306a36Sopenharmony_ci#define RXBUSY (1 << 13) 16662306a36Sopenharmony_ci#define CLKRDY (1 << 12) 16762306a36Sopenharmony_ci#define PHYDPX (1 << 10) 16862306a36Sopenharmony_ci#define PHYLNK (1 << 8) 16962306a36Sopenharmony_ci 17062306a36Sopenharmony_ci/* EIR */ 17162306a36Sopenharmony_ci#define CRYPTEN (1 << 15) 17262306a36Sopenharmony_ci#define MODEXIF (1 << 14) 17362306a36Sopenharmony_ci#define HASHIF (1 << 13) 17462306a36Sopenharmony_ci#define AESIF (1 << 12) 17562306a36Sopenharmony_ci#define LINKIF (1 << 11) 17662306a36Sopenharmony_ci#define PKTIF (1 << 6) 17762306a36Sopenharmony_ci#define DMAIF (1 << 5) 17862306a36Sopenharmony_ci#define TXIF (1 << 3) 17962306a36Sopenharmony_ci#define TXABTIF (1 << 2) 18062306a36Sopenharmony_ci#define RXABTIF (1 << 1) 18162306a36Sopenharmony_ci#define PCFULIF (1 << 0) 18262306a36Sopenharmony_ci 18362306a36Sopenharmony_ci/* ECON1 */ 18462306a36Sopenharmony_ci#define MODEXST (1 << 15) 18562306a36Sopenharmony_ci#define HASHEN (1 << 14) 18662306a36Sopenharmony_ci#define HASHOP (1 << 13) 18762306a36Sopenharmony_ci#define HASHLST (1 << 12) 18862306a36Sopenharmony_ci#define AESST (1 << 11) 18962306a36Sopenharmony_ci#define AESOP1 (1 << 10) 19062306a36Sopenharmony_ci#define AESOP0 (1 << 9) 19162306a36Sopenharmony_ci#define PKTDEC (1 << 8) 19262306a36Sopenharmony_ci#define FCOP1 (1 << 7) 19362306a36Sopenharmony_ci#define FCOP0 (1 << 6) 19462306a36Sopenharmony_ci#define DMAST (1 << 5) 19562306a36Sopenharmony_ci#define DMACPY (1 << 4) 19662306a36Sopenharmony_ci#define DMACSSD (1 << 3) 19762306a36Sopenharmony_ci#define DMANOCS (1 << 2) 19862306a36Sopenharmony_ci#define TXRTS (1 << 1) 19962306a36Sopenharmony_ci#define RXEN (1 << 0) 20062306a36Sopenharmony_ci 20162306a36Sopenharmony_ci/* ETXSTAT */ 20262306a36Sopenharmony_ci#define LATECOL (1 << 10) 20362306a36Sopenharmony_ci#define MAXCOL (1 << 9) 20462306a36Sopenharmony_ci#define EXDEFER (1 << 8) 20562306a36Sopenharmony_ci#define ETXSTATL_DEFER (1 << 7) 20662306a36Sopenharmony_ci#define CRCBAD (1 << 4) 20762306a36Sopenharmony_ci#define COLCNT_MASK 0xF 20862306a36Sopenharmony_ci 20962306a36Sopenharmony_ci/* ERXFCON */ 21062306a36Sopenharmony_ci#define HTEN (1 << 15) 21162306a36Sopenharmony_ci#define MPEN (1 << 14) 21262306a36Sopenharmony_ci#define NOTPM (1 << 12) 21362306a36Sopenharmony_ci#define PMEN3 (1 << 11) 21462306a36Sopenharmony_ci#define PMEN2 (1 << 10) 21562306a36Sopenharmony_ci#define PMEN1 (1 << 9) 21662306a36Sopenharmony_ci#define PMEN0 (1 << 8) 21762306a36Sopenharmony_ci#define CRCEEN (1 << 7) 21862306a36Sopenharmony_ci#define CRCEN (1 << 6) 21962306a36Sopenharmony_ci#define RUNTEEN (1 << 5) 22062306a36Sopenharmony_ci#define RUNTEN (1 << 4) 22162306a36Sopenharmony_ci#define UCEN (1 << 3) 22262306a36Sopenharmony_ci#define NOTMEEN (1 << 2) 22362306a36Sopenharmony_ci#define MCEN (1 << 1) 22462306a36Sopenharmony_ci#define BCEN (1 << 0) 22562306a36Sopenharmony_ci 22662306a36Sopenharmony_ci/* MACON1 */ 22762306a36Sopenharmony_ci#define LOOPBK (1 << 4) 22862306a36Sopenharmony_ci#define RXPAUS (1 << 2) 22962306a36Sopenharmony_ci#define PASSALL (1 << 1) 23062306a36Sopenharmony_ci 23162306a36Sopenharmony_ci/* MACON2 */ 23262306a36Sopenharmony_ci#define MACON2_DEFER (1 << 14) 23362306a36Sopenharmony_ci#define BPEN (1 << 13) 23462306a36Sopenharmony_ci#define NOBKOFF (1 << 12) 23562306a36Sopenharmony_ci#define PADCFG2 (1 << 7) 23662306a36Sopenharmony_ci#define PADCFG1 (1 << 6) 23762306a36Sopenharmony_ci#define PADCFG0 (1 << 5) 23862306a36Sopenharmony_ci#define TXCRCEN (1 << 4) 23962306a36Sopenharmony_ci#define PHDREN (1 << 3) 24062306a36Sopenharmony_ci#define HFRMEN (1 << 2) 24162306a36Sopenharmony_ci#define MACON2_RSV1 (1 << 1) 24262306a36Sopenharmony_ci#define FULDPX (1 << 0) 24362306a36Sopenharmony_ci 24462306a36Sopenharmony_ci/* MAIPG */ 24562306a36Sopenharmony_ci/* value of the high byte is given by the reserved bits, 24662306a36Sopenharmony_ci * value of the low byte is recomended setting of the 24762306a36Sopenharmony_ci * IPG parameter. 24862306a36Sopenharmony_ci */ 24962306a36Sopenharmony_ci#define MAIPGH_VAL 0x0C 25062306a36Sopenharmony_ci#define MAIPGL_VAL 0x12 25162306a36Sopenharmony_ci 25262306a36Sopenharmony_ci/* MIREGADRH */ 25362306a36Sopenharmony_ci#define MIREGADR_VAL (1 << 8) 25462306a36Sopenharmony_ci 25562306a36Sopenharmony_ci/* MIREGADRL */ 25662306a36Sopenharmony_ci#define PHREG_MASK 0x1F 25762306a36Sopenharmony_ci 25862306a36Sopenharmony_ci/* MICMD */ 25962306a36Sopenharmony_ci#define MIISCAN (1 << 1) 26062306a36Sopenharmony_ci#define MIIRD (1 << 0) 26162306a36Sopenharmony_ci 26262306a36Sopenharmony_ci/* MISTAT */ 26362306a36Sopenharmony_ci#define NVALID (1 << 2) 26462306a36Sopenharmony_ci#define SCAN (1 << 1) 26562306a36Sopenharmony_ci#define BUSY (1 << 0) 26662306a36Sopenharmony_ci 26762306a36Sopenharmony_ci/* ECON2 */ 26862306a36Sopenharmony_ci#define ETHEN (1 << 15) 26962306a36Sopenharmony_ci#define STRCH (1 << 14) 27062306a36Sopenharmony_ci#define TXMAC (1 << 13) 27162306a36Sopenharmony_ci#define SHA1MD5 (1 << 12) 27262306a36Sopenharmony_ci#define COCON3 (1 << 11) 27362306a36Sopenharmony_ci#define COCON2 (1 << 10) 27462306a36Sopenharmony_ci#define COCON1 (1 << 9) 27562306a36Sopenharmony_ci#define COCON0 (1 << 8) 27662306a36Sopenharmony_ci#define AUTOFC (1 << 7) 27762306a36Sopenharmony_ci#define TXRST (1 << 6) 27862306a36Sopenharmony_ci#define RXRST (1 << 5) 27962306a36Sopenharmony_ci#define ETHRST (1 << 4) 28062306a36Sopenharmony_ci#define MODLEN1 (1 << 3) 28162306a36Sopenharmony_ci#define MODLEN0 (1 << 2) 28262306a36Sopenharmony_ci#define AESLEN1 (1 << 1) 28362306a36Sopenharmony_ci#define AESLEN0 (1 << 0) 28462306a36Sopenharmony_ci 28562306a36Sopenharmony_ci/* EIE */ 28662306a36Sopenharmony_ci#define INTIE (1 << 15) 28762306a36Sopenharmony_ci#define MODEXIE (1 << 14) 28862306a36Sopenharmony_ci#define HASHIE (1 << 13) 28962306a36Sopenharmony_ci#define AESIE (1 << 12) 29062306a36Sopenharmony_ci#define LINKIE (1 << 11) 29162306a36Sopenharmony_ci#define PKTIE (1 << 6) 29262306a36Sopenharmony_ci#define DMAIE (1 << 5) 29362306a36Sopenharmony_ci#define TXIE (1 << 3) 29462306a36Sopenharmony_ci#define TXABTIE (1 << 2) 29562306a36Sopenharmony_ci#define RXABTIE (1 << 1) 29662306a36Sopenharmony_ci#define PCFULIE (1 << 0) 29762306a36Sopenharmony_ci 29862306a36Sopenharmony_ci/* EIDLED */ 29962306a36Sopenharmony_ci#define LACFG3 (1 << 15) 30062306a36Sopenharmony_ci#define LACFG2 (1 << 14) 30162306a36Sopenharmony_ci#define LACFG1 (1 << 13) 30262306a36Sopenharmony_ci#define LACFG0 (1 << 12) 30362306a36Sopenharmony_ci#define LBCFG3 (1 << 11) 30462306a36Sopenharmony_ci#define LBCFG2 (1 << 10) 30562306a36Sopenharmony_ci#define LBCFG1 (1 << 9) 30662306a36Sopenharmony_ci#define LBCFG0 (1 << 8) 30762306a36Sopenharmony_ci#define DEVID_SHIFT 5 30862306a36Sopenharmony_ci#define DEVID_MASK (0x7 << DEVID_SHIFT) 30962306a36Sopenharmony_ci#define REVID_SHIFT 0 31062306a36Sopenharmony_ci#define REVID_MASK (0x1F << REVID_SHIFT) 31162306a36Sopenharmony_ci 31262306a36Sopenharmony_ci/* PHY registers */ 31362306a36Sopenharmony_ci#define PHCON1 0x00 31462306a36Sopenharmony_ci#define PHSTAT1 0x01 31562306a36Sopenharmony_ci#define PHANA 0x04 31662306a36Sopenharmony_ci#define PHANLPA 0x05 31762306a36Sopenharmony_ci#define PHANE 0x06 31862306a36Sopenharmony_ci#define PHCON2 0x11 31962306a36Sopenharmony_ci#define PHSTAT2 0x1B 32062306a36Sopenharmony_ci#define PHSTAT3 0x1F 32162306a36Sopenharmony_ci 32262306a36Sopenharmony_ci/* PHCON1 */ 32362306a36Sopenharmony_ci#define PRST (1 << 15) 32462306a36Sopenharmony_ci#define PLOOPBK (1 << 14) 32562306a36Sopenharmony_ci#define SPD100 (1 << 13) 32662306a36Sopenharmony_ci#define ANEN (1 << 12) 32762306a36Sopenharmony_ci#define PSLEEP (1 << 11) 32862306a36Sopenharmony_ci#define RENEG (1 << 9) 32962306a36Sopenharmony_ci#define PFULDPX (1 << 8) 33062306a36Sopenharmony_ci 33162306a36Sopenharmony_ci/* PHSTAT1 */ 33262306a36Sopenharmony_ci#define FULL100 (1 << 14) 33362306a36Sopenharmony_ci#define HALF100 (1 << 13) 33462306a36Sopenharmony_ci#define FULL10 (1 << 12) 33562306a36Sopenharmony_ci#define HALF10 (1 << 11) 33662306a36Sopenharmony_ci#define ANDONE (1 << 5) 33762306a36Sopenharmony_ci#define LRFAULT (1 << 4) 33862306a36Sopenharmony_ci#define ANABLE (1 << 3) 33962306a36Sopenharmony_ci#define LLSTAT (1 << 2) 34062306a36Sopenharmony_ci#define EXTREGS (1 << 0) 34162306a36Sopenharmony_ci 34262306a36Sopenharmony_ci/* PHSTAT2 */ 34362306a36Sopenharmony_ci#define PLRITY (1 << 4) 34462306a36Sopenharmony_ci 34562306a36Sopenharmony_ci/* PHSTAT3 */ 34662306a36Sopenharmony_ci#define PHY3SPD100 (1 << 3) 34762306a36Sopenharmony_ci#define PHY3DPX (1 << 4) 34862306a36Sopenharmony_ci#define SPDDPX_SHIFT 2 34962306a36Sopenharmony_ci#define SPDDPX_MASK (0x7 << SPDDPX_SHIFT) 35062306a36Sopenharmony_ci 35162306a36Sopenharmony_ci/* PHANA */ 35262306a36Sopenharmony_ci/* Default value for PHY initialization*/ 35362306a36Sopenharmony_ci#define PHANA_DEFAULT 0x05E1 35462306a36Sopenharmony_ci 35562306a36Sopenharmony_ci/* PHANE */ 35662306a36Sopenharmony_ci#define PDFLT (1 << 4) 35762306a36Sopenharmony_ci#define LPARCD (1 << 1) 35862306a36Sopenharmony_ci#define LPANABL (1 << 0) 35962306a36Sopenharmony_ci 36062306a36Sopenharmony_ci#define EUDAST_TEST_VAL 0x1234 36162306a36Sopenharmony_ci 36262306a36Sopenharmony_ci#define TSV_SIZE 7 36362306a36Sopenharmony_ci 36462306a36Sopenharmony_ci#define ENCX24J600_DEV_ID 0x1 36562306a36Sopenharmony_ci 36662306a36Sopenharmony_ci/* Configuration */ 36762306a36Sopenharmony_ci 36862306a36Sopenharmony_ci/* Led is on when the link is present and driven low 36962306a36Sopenharmony_ci * temporarily when packet is TX'd or RX'd 37062306a36Sopenharmony_ci */ 37162306a36Sopenharmony_ci#define LED_A_SETTINGS 0xC 37262306a36Sopenharmony_ci 37362306a36Sopenharmony_ci/* Led is on if the link is in 100 Mbps mode */ 37462306a36Sopenharmony_ci#define LED_B_SETTINGS 0x8 37562306a36Sopenharmony_ci 37662306a36Sopenharmony_ci/* maximum ethernet frame length 37762306a36Sopenharmony_ci * Currently not used as a limit anywhere 37862306a36Sopenharmony_ci * (we're using the "huge frame enable" feature of 37962306a36Sopenharmony_ci * enc424j600). 38062306a36Sopenharmony_ci */ 38162306a36Sopenharmony_ci#define MAX_FRAMELEN 1518 38262306a36Sopenharmony_ci 38362306a36Sopenharmony_ci/* Size in bytes of the receive buffer in enc424j600. 38462306a36Sopenharmony_ci * Must be word aligned (even). 38562306a36Sopenharmony_ci */ 38662306a36Sopenharmony_ci#define RX_BUFFER_SIZE (15 * MAX_FRAMELEN) 38762306a36Sopenharmony_ci 38862306a36Sopenharmony_ci/* Start of the general purpose area in sram */ 38962306a36Sopenharmony_ci#define SRAM_GP_START 0x0 39062306a36Sopenharmony_ci 39162306a36Sopenharmony_ci/* SRAM size */ 39262306a36Sopenharmony_ci#define SRAM_SIZE 0x6000 39362306a36Sopenharmony_ci 39462306a36Sopenharmony_ci/* Start of the receive buffer */ 39562306a36Sopenharmony_ci#define ERXST_VAL (SRAM_SIZE - RX_BUFFER_SIZE) 39662306a36Sopenharmony_ci 39762306a36Sopenharmony_ci#define RSV_RXLONGEVDROPEV 16 39862306a36Sopenharmony_ci#define RSV_CARRIEREV 18 39962306a36Sopenharmony_ci#define RSV_CRCERROR 20 40062306a36Sopenharmony_ci#define RSV_LENCHECKERR 21 40162306a36Sopenharmony_ci#define RSV_LENOUTOFRANGE 22 40262306a36Sopenharmony_ci#define RSV_RXOK 23 40362306a36Sopenharmony_ci#define RSV_RXMULTICAST 24 40462306a36Sopenharmony_ci#define RSV_RXBROADCAST 25 40562306a36Sopenharmony_ci#define RSV_DRIBBLENIBBLE 26 40662306a36Sopenharmony_ci#define RSV_RXCONTROLFRAME 27 40762306a36Sopenharmony_ci#define RSV_RXPAUSEFRAME 28 40862306a36Sopenharmony_ci#define RSV_RXUNKNOWNOPCODE 29 40962306a36Sopenharmony_ci#define RSV_RXTYPEVLAN 30 41062306a36Sopenharmony_ci 41162306a36Sopenharmony_ci#define RSV_RUNTFILTERMATCH 31 41262306a36Sopenharmony_ci#define RSV_NOTMEFILTERMATCH 32 41362306a36Sopenharmony_ci#define RSV_HASHFILTERMATCH 33 41462306a36Sopenharmony_ci#define RSV_MAGICPKTFILTERMATCH 34 41562306a36Sopenharmony_ci#define RSV_PTRNMTCHFILTERMATCH 35 41662306a36Sopenharmony_ci#define RSV_UNICASTFILTERMATCH 36 41762306a36Sopenharmony_ci 41862306a36Sopenharmony_ci#define RSV_SIZE 8 41962306a36Sopenharmony_ci#define RSV_BITMASK(x) (1 << ((x) - 16)) 42062306a36Sopenharmony_ci#define RSV_GETBIT(x, y) (((x) & RSV_BITMASK(y)) ? 1 : 0) 42162306a36Sopenharmony_ci 42262306a36Sopenharmony_cistruct rsv { 42362306a36Sopenharmony_ci u16 next_packet; 42462306a36Sopenharmony_ci u16 len; 42562306a36Sopenharmony_ci u32 rxstat; 42662306a36Sopenharmony_ci}; 42762306a36Sopenharmony_ci 42862306a36Sopenharmony_ci/* Put RX buffer at 0 as suggested by the Errata datasheet */ 42962306a36Sopenharmony_ci 43062306a36Sopenharmony_ci#define RXSTART_INIT ERXST_VAL 43162306a36Sopenharmony_ci#define RXEND_INIT 0x5FFF 43262306a36Sopenharmony_ci 43362306a36Sopenharmony_ciint regmap_encx24j600_spi_write(void *context, u8 reg, const u8 *data, 43462306a36Sopenharmony_ci size_t count); 43562306a36Sopenharmony_ciint regmap_encx24j600_spi_read(void *context, u8 reg, u8 *data, size_t count); 43662306a36Sopenharmony_ci 43762306a36Sopenharmony_ci 43862306a36Sopenharmony_ci#endif 439