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