123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439 |
- /* SPDX-License-Identifier: GPL-2.0 */
- /**
- * encx24j600_hw.h: Register definitions
- *
- */
- #ifndef _ENCX24J600_HW_H
- #define _ENCX24J600_HW_H
- struct encx24j600_context {
- struct spi_device *spi;
- struct regmap *regmap;
- struct regmap *phymap;
- struct mutex mutex; /* mutex to protect access to regmap */
- int bank;
- };
- void devm_regmap_init_encx24j600(struct device *dev,
- struct encx24j600_context *ctx);
- /* Single-byte instructions */
- #define BANK_SELECT(bank) (0xC0 | ((bank & (BANK_MASK >> BANK_SHIFT)) << 1))
- #define B0SEL 0xC0 /* Bank 0 Select */
- #define B1SEL 0xC2 /* Bank 1 Select */
- #define B2SEL 0xC4 /* Bank 2 Select */
- #define B3SEL 0xC6 /* Bank 3 Select */
- #define SETETHRST 0xCA /* System Reset */
- #define FCDISABLE 0xE0 /* Flow Control Disable */
- #define FCSINGLE 0xE2 /* Flow Control Single */
- #define FCMULTIPLE 0xE4 /* Flow Control Multiple */
- #define FCCLEAR 0xE6 /* Flow Control Clear */
- #define SETPKTDEC 0xCC /* Decrement Packet Counter */
- #define DMASTOP 0xD2 /* DMA Stop */
- #define DMACKSUM 0xD8 /* DMA Start Checksum */
- #define DMACKSUMS 0xDA /* DMA Start Checksum with Seed */
- #define DMACOPY 0xDC /* DMA Start Copy */
- #define DMACOPYS 0xDE /* DMA Start Copy and Checksum with Seed */
- #define SETTXRTS 0xD4 /* Request Packet Transmission */
- #define ENABLERX 0xE8 /* Enable RX */
- #define DISABLERX 0xEA /* Disable RX */
- #define SETEIE 0xEC /* Enable Interrupts */
- #define CLREIE 0xEE /* Disable Interrupts */
- /* Two byte instructions */
- #define RBSEL 0xC8 /* Read Bank Select */
- /* Three byte instructions */
- #define WGPRDPT 0x60 /* Write EGPRDPT */
- #define RGPRDPT 0x62 /* Read EGPRDPT */
- #define WRXRDPT 0x64 /* Write ERXRDPT */
- #define RRXRDPT 0x66 /* Read ERXRDPT */
- #define WUDARDPT 0x68 /* Write EUDARDPT */
- #define RUDARDPT 0x6A /* Read EUDARDPT */
- #define WGPWRPT 0x6C /* Write EGPWRPT */
- #define RGPWRPT 0x6E /* Read EGPWRPT */
- #define WRXWRPT 0x70 /* Write ERXWRPT */
- #define RRXWRPT 0x72 /* Read ERXWRPT */
- #define WUDAWRPT 0x74 /* Write EUDAWRPT */
- #define RUDAWRPT 0x76 /* Read EUDAWRPT */
- /* n byte instructions */
- #define RCRCODE 0x00
- #define WCRCODE 0x40
- #define BFSCODE 0x80
- #define BFCCODE 0xA0
- #define RCR(addr) (RCRCODE | (addr & ADDR_MASK)) /* Read Control Register */
- #define WCR(addr) (WCRCODE | (addr & ADDR_MASK)) /* Write Control Register */
- #define RCRU 0x20 /* Read Control Register Unbanked */
- #define WCRU 0x22 /* Write Control Register Unbanked */
- #define BFS(addr) (BFSCODE | (addr & ADDR_MASK)) /* Bit Field Set */
- #define BFC(addr) (BFCCODE | (addr & ADDR_MASK)) /* Bit Field Clear */
- #define BFSU 0x24 /* Bit Field Set Unbanked */
- #define BFCU 0x26 /* Bit Field Clear Unbanked */
- #define RGPDATA 0x28 /* Read EGPDATA */
- #define WGPDATA 0x2A /* Write EGPDATA */
- #define RRXDATA 0x2C /* Read ERXDATA */
- #define WRXDATA 0x2E /* Write ERXDATA */
- #define RUDADATA 0x30 /* Read EUDADATA */
- #define WUDADATA 0x32 /* Write EUDADATA */
- #define SFR_REG_COUNT 0xA0
- /* ENC424J600 Control Registers
- * Control register definitions are a combination of address
- * and bank number
- * - Register address (bits 0-4)
- * - Bank number (bits 5-6)
- */
- #define ADDR_MASK 0x1F
- #define BANK_MASK 0x60
- #define BANK_SHIFT 5
- /* All-bank registers */
- #define EUDAST 0x16
- #define EUDAND 0x18
- #define ESTAT 0x1A
- #define EIR 0x1C
- #define ECON1 0x1E
- /* Bank 0 registers */
- #define ETXST (0x00 | 0x00)
- #define ETXLEN (0x02 | 0x00)
- #define ERXST (0x04 | 0x00)
- #define ERXTAIL (0x06 | 0x00)
- #define ERXHEAD (0x08 | 0x00)
- #define EDMAST (0x0A | 0x00)
- #define EDMALEN (0x0C | 0x00)
- #define EDMADST (0x0E | 0x00)
- #define EDMACS (0x10 | 0x00)
- #define ETXSTAT (0x12 | 0x00)
- #define ETXWIRE (0x14 | 0x00)
- /* Bank 1 registers */
- #define EHT1 (0x00 | 0x20)
- #define EHT2 (0x02 | 0x20)
- #define EHT3 (0x04 | 0x20)
- #define EHT4 (0x06 | 0x20)
- #define EPMM1 (0x08 | 0x20)
- #define EPMM2 (0x0A | 0x20)
- #define EPMM3 (0x0C | 0x20)
- #define EPMM4 (0x0E | 0x20)
- #define EPMCS (0x10 | 0x20)
- #define EPMO (0x12 | 0x20)
- #define ERXFCON (0x14 | 0x20)
- /* Bank 2 registers */
- #define MACON1 (0x00 | 0x40)
- #define MACON2 (0x02 | 0x40)
- #define MABBIPG (0x04 | 0x40)
- #define MAIPG (0x06 | 0x40)
- #define MACLCON (0x08 | 0x40)
- #define MAMXFL (0x0A | 0x40)
- #define MICMD (0x12 | 0x40)
- #define MIREGADR (0x14 | 0x40)
- /* Bank 3 registers */
- #define MAADR3 (0x00 | 0x60)
- #define MAADR2 (0x02 | 0x60)
- #define MAADR1 (0x04 | 0x60)
- #define MIWR (0x06 | 0x60)
- #define MIRD (0x08 | 0x60)
- #define MISTAT (0x0A | 0x60)
- #define EPAUS (0x0C | 0x60)
- #define ECON2 (0x0E | 0x60)
- #define ERXWM (0x10 | 0x60)
- #define EIE (0x12 | 0x60)
- #define EIDLED (0x14 | 0x60)
- /* Unbanked registers */
- #define EGPDATA (0x00 | 0x80)
- #define ERXDATA (0x02 | 0x80)
- #define EUDADATA (0x04 | 0x80)
- #define EGPRDPT (0x06 | 0x80)
- #define EGPWRPT (0x08 | 0x80)
- #define ERXRDPT (0x0A | 0x80)
- #define ERXWRPT (0x0C | 0x80)
- #define EUDARDPT (0x0E | 0x80)
- #define EUDAWRPT (0x10 | 0x80)
- /* Register bit definitions */
- /* ESTAT */
- #define INT (1 << 15)
- #define FCIDLE (1 << 14)
- #define RXBUSY (1 << 13)
- #define CLKRDY (1 << 12)
- #define PHYDPX (1 << 10)
- #define PHYLNK (1 << 8)
- /* EIR */
- #define CRYPTEN (1 << 15)
- #define MODEXIF (1 << 14)
- #define HASHIF (1 << 13)
- #define AESIF (1 << 12)
- #define LINKIF (1 << 11)
- #define PKTIF (1 << 6)
- #define DMAIF (1 << 5)
- #define TXIF (1 << 3)
- #define TXABTIF (1 << 2)
- #define RXABTIF (1 << 1)
- #define PCFULIF (1 << 0)
- /* ECON1 */
- #define MODEXST (1 << 15)
- #define HASHEN (1 << 14)
- #define HASHOP (1 << 13)
- #define HASHLST (1 << 12)
- #define AESST (1 << 11)
- #define AESOP1 (1 << 10)
- #define AESOP0 (1 << 9)
- #define PKTDEC (1 << 8)
- #define FCOP1 (1 << 7)
- #define FCOP0 (1 << 6)
- #define DMAST (1 << 5)
- #define DMACPY (1 << 4)
- #define DMACSSD (1 << 3)
- #define DMANOCS (1 << 2)
- #define TXRTS (1 << 1)
- #define RXEN (1 << 0)
- /* ETXSTAT */
- #define LATECOL (1 << 10)
- #define MAXCOL (1 << 9)
- #define EXDEFER (1 << 8)
- #define ETXSTATL_DEFER (1 << 7)
- #define CRCBAD (1 << 4)
- #define COLCNT_MASK 0xF
- /* ERXFCON */
- #define HTEN (1 << 15)
- #define MPEN (1 << 14)
- #define NOTPM (1 << 12)
- #define PMEN3 (1 << 11)
- #define PMEN2 (1 << 10)
- #define PMEN1 (1 << 9)
- #define PMEN0 (1 << 8)
- #define CRCEEN (1 << 7)
- #define CRCEN (1 << 6)
- #define RUNTEEN (1 << 5)
- #define RUNTEN (1 << 4)
- #define UCEN (1 << 3)
- #define NOTMEEN (1 << 2)
- #define MCEN (1 << 1)
- #define BCEN (1 << 0)
- /* MACON1 */
- #define LOOPBK (1 << 4)
- #define RXPAUS (1 << 2)
- #define PASSALL (1 << 1)
- /* MACON2 */
- #define MACON2_DEFER (1 << 14)
- #define BPEN (1 << 13)
- #define NOBKOFF (1 << 12)
- #define PADCFG2 (1 << 7)
- #define PADCFG1 (1 << 6)
- #define PADCFG0 (1 << 5)
- #define TXCRCEN (1 << 4)
- #define PHDREN (1 << 3)
- #define HFRMEN (1 << 2)
- #define MACON2_RSV1 (1 << 1)
- #define FULDPX (1 << 0)
- /* MAIPG */
- /* value of the high byte is given by the reserved bits,
- * value of the low byte is recomended setting of the
- * IPG parameter.
- */
- #define MAIPGH_VAL 0x0C
- #define MAIPGL_VAL 0x12
- /* MIREGADRH */
- #define MIREGADR_VAL (1 << 8)
- /* MIREGADRL */
- #define PHREG_MASK 0x1F
- /* MICMD */
- #define MIISCAN (1 << 1)
- #define MIIRD (1 << 0)
- /* MISTAT */
- #define NVALID (1 << 2)
- #define SCAN (1 << 1)
- #define BUSY (1 << 0)
- /* ECON2 */
- #define ETHEN (1 << 15)
- #define STRCH (1 << 14)
- #define TXMAC (1 << 13)
- #define SHA1MD5 (1 << 12)
- #define COCON3 (1 << 11)
- #define COCON2 (1 << 10)
- #define COCON1 (1 << 9)
- #define COCON0 (1 << 8)
- #define AUTOFC (1 << 7)
- #define TXRST (1 << 6)
- #define RXRST (1 << 5)
- #define ETHRST (1 << 4)
- #define MODLEN1 (1 << 3)
- #define MODLEN0 (1 << 2)
- #define AESLEN1 (1 << 1)
- #define AESLEN0 (1 << 0)
- /* EIE */
- #define INTIE (1 << 15)
- #define MODEXIE (1 << 14)
- #define HASHIE (1 << 13)
- #define AESIE (1 << 12)
- #define LINKIE (1 << 11)
- #define PKTIE (1 << 6)
- #define DMAIE (1 << 5)
- #define TXIE (1 << 3)
- #define TXABTIE (1 << 2)
- #define RXABTIE (1 << 1)
- #define PCFULIE (1 << 0)
- /* EIDLED */
- #define LACFG3 (1 << 15)
- #define LACFG2 (1 << 14)
- #define LACFG1 (1 << 13)
- #define LACFG0 (1 << 12)
- #define LBCFG3 (1 << 11)
- #define LBCFG2 (1 << 10)
- #define LBCFG1 (1 << 9)
- #define LBCFG0 (1 << 8)
- #define DEVID_SHIFT 5
- #define DEVID_MASK (0x7 << DEVID_SHIFT)
- #define REVID_SHIFT 0
- #define REVID_MASK (0x1F << REVID_SHIFT)
- /* PHY registers */
- #define PHCON1 0x00
- #define PHSTAT1 0x01
- #define PHANA 0x04
- #define PHANLPA 0x05
- #define PHANE 0x06
- #define PHCON2 0x11
- #define PHSTAT2 0x1B
- #define PHSTAT3 0x1F
- /* PHCON1 */
- #define PRST (1 << 15)
- #define PLOOPBK (1 << 14)
- #define SPD100 (1 << 13)
- #define ANEN (1 << 12)
- #define PSLEEP (1 << 11)
- #define RENEG (1 << 9)
- #define PFULDPX (1 << 8)
- /* PHSTAT1 */
- #define FULL100 (1 << 14)
- #define HALF100 (1 << 13)
- #define FULL10 (1 << 12)
- #define HALF10 (1 << 11)
- #define ANDONE (1 << 5)
- #define LRFAULT (1 << 4)
- #define ANABLE (1 << 3)
- #define LLSTAT (1 << 2)
- #define EXTREGS (1 << 0)
- /* PHSTAT2 */
- #define PLRITY (1 << 4)
- /* PHSTAT3 */
- #define PHY3SPD100 (1 << 3)
- #define PHY3DPX (1 << 4)
- #define SPDDPX_SHIFT 2
- #define SPDDPX_MASK (0x7 << SPDDPX_SHIFT)
- /* PHANA */
- /* Default value for PHY initialization*/
- #define PHANA_DEFAULT 0x05E1
- /* PHANE */
- #define PDFLT (1 << 4)
- #define LPARCD (1 << 1)
- #define LPANABL (1 << 0)
- #define EUDAST_TEST_VAL 0x1234
- #define TSV_SIZE 7
- #define ENCX24J600_DEV_ID 0x1
- /* Configuration */
- /* Led is on when the link is present and driven low
- * temporarily when packet is TX'd or RX'd
- */
- #define LED_A_SETTINGS 0xC
- /* Led is on if the link is in 100 Mbps mode */
- #define LED_B_SETTINGS 0x8
- /* maximum ethernet frame length
- * Currently not used as a limit anywhere
- * (we're using the "huge frame enable" feature of
- * enc424j600).
- */
- #define MAX_FRAMELEN 1518
- /* Size in bytes of the receive buffer in enc424j600.
- * Must be word aligned (even).
- */
- #define RX_BUFFER_SIZE (15 * MAX_FRAMELEN)
- /* Start of the general purpose area in sram */
- #define SRAM_GP_START 0x0
- /* SRAM size */
- #define SRAM_SIZE 0x6000
- /* Start of the receive buffer */
- #define ERXST_VAL (SRAM_SIZE - RX_BUFFER_SIZE)
- #define RSV_RXLONGEVDROPEV 16
- #define RSV_CARRIEREV 18
- #define RSV_CRCERROR 20
- #define RSV_LENCHECKERR 21
- #define RSV_LENOUTOFRANGE 22
- #define RSV_RXOK 23
- #define RSV_RXMULTICAST 24
- #define RSV_RXBROADCAST 25
- #define RSV_DRIBBLENIBBLE 26
- #define RSV_RXCONTROLFRAME 27
- #define RSV_RXPAUSEFRAME 28
- #define RSV_RXUNKNOWNOPCODE 29
- #define RSV_RXTYPEVLAN 30
- #define RSV_RUNTFILTERMATCH 31
- #define RSV_NOTMEFILTERMATCH 32
- #define RSV_HASHFILTERMATCH 33
- #define RSV_MAGICPKTFILTERMATCH 34
- #define RSV_PTRNMTCHFILTERMATCH 35
- #define RSV_UNICASTFILTERMATCH 36
- #define RSV_SIZE 8
- #define RSV_BITMASK(x) (1 << ((x) - 16))
- #define RSV_GETBIT(x, y) (((x) & RSV_BITMASK(y)) ? 1 : 0)
- struct rsv {
- u16 next_packet;
- u16 len;
- u32 rxstat;
- };
- /* Put RX buffer at 0 as suggested by the Errata datasheet */
- #define RXSTART_INIT ERXST_VAL
- #define RXEND_INIT 0x5FFF
- int regmap_encx24j600_spi_write(void *context, u8 reg, const u8 *data,
- size_t count);
- int regmap_encx24j600_spi_read(void *context, u8 reg, u8 *data, size_t count);
- #endif
|