1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176
|
/*
* Faraday 10/100Mbps Ethernet Controller
*
* (C) Copyright 2013 Faraday Technology
* Dante Su <dantesu@faraday-tech.com>
*
* SPDX-License-Identifier: GPL-2.0+
*/
#ifndef _FTMAC110_H
#define _FTMAC110_H
struct ftmac110_regs {
uint32_t isr; /* 0x00: Interrups Status Register */
uint32_t imr; /* 0x04: Interrupt Mask Register */
uint32_t mac[2]; /* 0x08: MAC Address */
uint32_t mht[2]; /* 0x10: Multicast Hash Table Register */
uint32_t txpd; /* 0x18: Tx Poll Demand Register */
uint32_t rxpd; /* 0x1c: Rx Poll Demand Register */
uint32_t txba; /* 0x20: Tx Ring Base Address Register */
uint32_t rxba; /* 0x24: Rx Ring Base Address Register */
uint32_t itc; /* 0x28: Interrupt Timer Control Register */
uint32_t aptc; /* 0x2C: Automatic Polling Timer Control Register */
uint32_t dblac; /* 0x30: DMA Burst Length&Arbitration Control */
uint32_t revr; /* 0x34: Revision Register */
uint32_t fear; /* 0x38: Feature Register */
uint32_t rsvd[19];
uint32_t maccr; /* 0x88: MAC Control Register */
uint32_t macsr; /* 0x8C: MAC Status Register */
uint32_t phycr; /* 0x90: PHY Control Register */
uint32_t phydr; /* 0x94: PHY Data Register */
uint32_t fcr; /* 0x98: Flow Control Register */
uint32_t bpr; /* 0x9C: Back Pressure Register */
};
/*
* Interrupt status/mask register(ISR/IMR) bits
*/
#define ISR_ALL 0x3ff
#define ISR_PHYSTCHG (1 << 9) /* phy status change */
#define ISR_AHBERR (1 << 8) /* bus error */
#define ISR_RXLOST (1 << 7) /* rx lost */
#define ISR_RXFIFO (1 << 6) /* rx to fifo */
#define ISR_TXLOST (1 << 5) /* tx lost */
#define ISR_TXOK (1 << 4) /* tx to ethernet */
#define ISR_NOTXBUF (1 << 3) /* out of tx buffer */
#define ISR_TXFIFO (1 << 2) /* tx to fifo */
#define ISR_NORXBUF (1 << 1) /* out of rx buffer */
#define ISR_RXOK (1 << 0) /* rx to buffer */
/*
* MACCR control bits
*/
#define MACCR_100M (1 << 18) /* 100Mbps mode */
#define MACCR_RXBCST (1 << 17) /* rx broadcast packet */
#define MACCR_RXMCST (1 << 16) /* rx multicast packet */
#define MACCR_FD (1 << 15) /* full duplex */
#define MACCR_CRCAPD (1 << 14) /* tx crc append */
#define MACCR_RXALL (1 << 12) /* rx all packets */
#define MACCR_RXFTL (1 << 11) /* rx packet even it's > 1518 byte */
#define MACCR_RXRUNT (1 << 10) /* rx packet even it's < 64 byte */
#define MACCR_RXMCSTHT (1 << 9) /* rx multicast hash table */
#define MACCR_RXEN (1 << 8) /* rx enable */
#define MACCR_RXINHDTX (1 << 6) /* rx in half duplex tx */
#define MACCR_TXEN (1 << 5) /* tx enable */
#define MACCR_CRCDIS (1 << 4) /* tx packet even it's crc error */
#define MACCR_LOOPBACK (1 << 3) /* loop-back */
#define MACCR_RESET (1 << 2) /* reset */
#define MACCR_RXDMAEN (1 << 1) /* rx dma enable */
#define MACCR_TXDMAEN (1 << 0) /* tx dma enable */
/*
* PHYCR control bits
*/
#define PHYCR_READ (1 << 26)
#define PHYCR_WRITE (1 << 27)
#define PHYCR_REG_SHIFT 21
#define PHYCR_ADDR_SHIFT 16
/*
* ITC control bits
*/
/* Tx Cycle Length */
#define ITC_TX_CYCLONG (1 << 15) /* 100Mbps=81.92us; 10Mbps=819.2us */
#define ITC_TX_CYCNORM (0 << 15) /* 100Mbps=5.12us; 10Mbps=51.2us */
/* Tx Threshold: Aggregate n interrupts as 1 interrupt */
#define ITC_TX_THR(n) (((n) & 0x7) << 12)
/* Tx Interrupt Timeout = n * Tx Cycle */
#define ITC_TX_ITMO(n) (((n) & 0xf) << 8)
/* Rx Cycle Length */
#define ITC_RX_CYCLONG (1 << 7) /* 100Mbps=81.92us; 10Mbps=819.2us */
#define ITC_RX_CYCNORM (0 << 7) /* 100Mbps=5.12us; 10Mbps=51.2us */
/* Rx Threshold: Aggregate n interrupts as 1 interrupt */
#define ITC_RX_THR(n) (((n) & 0x7) << 4)
/* Rx Interrupt Timeout = n * Rx Cycle */
#define ITC_RX_ITMO(n) (((n) & 0xf) << 0)
#define ITC_DEFAULT \
(ITC_TX_THR(1) | ITC_TX_ITMO(0) | ITC_RX_THR(1) | ITC_RX_ITMO(0))
/*
* APTC contrl bits
*/
/* Tx Cycle Length */
#define APTC_TX_CYCLONG (1 << 12) /* 100Mbps=81.92us; 10Mbps=819.2us */
#define APTC_TX_CYCNORM (0 << 12) /* 100Mbps=5.12us; 10Mbps=51.2us */
/* Tx Poll Timeout = n * Tx Cycle, 0=No auto polling */
#define APTC_TX_PTMO(n) (((n) & 0xf) << 8)
/* Rx Cycle Length */
#define APTC_RX_CYCLONG (1 << 4) /* 100Mbps=81.92us; 10Mbps=819.2us */
#define APTC_RX_CYCNORM (0 << 4) /* 100Mbps=5.12us; 10Mbps=51.2us */
/* Rx Poll Timeout = n * Rx Cycle, 0=No auto polling */
#define APTC_RX_PTMO(n) (((n) & 0xf) << 0)
#define APTC_DEFAULT (APTC_TX_PTMO(0) | APTC_RX_PTMO(1))
/*
* DBLAC contrl bits
*/
#define DBLAC_BURST_MAX_ANY (0 << 14) /* un-limited */
#define DBLAC_BURST_MAX_32X4 (2 << 14) /* max = 32 x 4 bytes */
#define DBLAC_BURST_MAX_64X4 (3 << 14) /* max = 64 x 4 bytes */
#define DBLAC_RXTHR_EN (1 << 9) /* enable rx threshold arbitration */
#define DBLAC_RXTHR_HIGH(n) (((n) & 0x7) << 6) /* upper bound = n/8 fifo */
#define DBLAC_RXTHR_LOW(n) (((n) & 0x7) << 3) /* lower bound = n/8 fifo */
#define DBLAC_BURST_CAP16 (1 << 2) /* support burst 16 */
#define DBLAC_BURST_CAP8 (1 << 1) /* support burst 8 */
#define DBLAC_BURST_CAP4 (1 << 0) /* support burst 4 */
#define DBLAC_DEFAULT \
(DBLAC_RXTHR_EN | DBLAC_RXTHR_HIGH(6) | DBLAC_RXTHR_LOW(2))
/*
* descriptor structure
*/
struct ftmac110_desc {
uint64_t ctrl;
uint32_t pbuf;
void *vbuf;
};
#define FTMAC110_RXD_END ((uint64_t)1 << 63)
#define FTMAC110_RXD_BUFSZ(x) (((uint64_t)(x) & 0x7ff) << 32)
#define FTMAC110_RXD_OWNER ((uint64_t)1 << 31) /* owner: 1=HW, 0=SW */
#define FTMAC110_RXD_FRS ((uint64_t)1 << 29) /* first pkt desc */
#define FTMAC110_RXD_LRS ((uint64_t)1 << 28) /* last pkt desc */
#define FTMAC110_RXD_ODDNB ((uint64_t)1 << 22) /* odd nibble */
#define FTMAC110_RXD_RUNT ((uint64_t)1 << 21) /* runt pkt */
#define FTMAC110_RXD_FTL ((uint64_t)1 << 20) /* frame too long */
#define FTMAC110_RXD_CRC ((uint64_t)1 << 19) /* pkt crc error */
#define FTMAC110_RXD_ERR ((uint64_t)1 << 18) /* bus error */
#define FTMAC110_RXD_ERRMASK ((uint64_t)0x1f << 18)
#define FTMAC110_RXD_BCST ((uint64_t)1 << 17) /* Bcst pkt */
#define FTMAC110_RXD_MCST ((uint64_t)1 << 16) /* Mcst pkt */
#define FTMAC110_RXD_LEN(x) ((uint64_t)((x) & 0x7ff))
#define FTMAC110_RXD_CLRMASK \
(FTMAC110_RXD_END | FTMAC110_RXD_BUFSZ(0x7ff))
#define FTMAC110_TXD_END ((uint64_t)1 << 63) /* end of ring */
#define FTMAC110_TXD_TXIC ((uint64_t)1 << 62) /* tx done interrupt */
#define FTMAC110_TXD_TX2FIC ((uint64_t)1 << 61) /* tx fifo interrupt */
#define FTMAC110_TXD_FTS ((uint64_t)1 << 60) /* first pkt desc */
#define FTMAC110_TXD_LTS ((uint64_t)1 << 59) /* last pkt desc */
#define FTMAC110_TXD_LEN(x) ((uint64_t)((x) & 0x7ff) << 32)
#define FTMAC110_TXD_OWNER ((uint64_t)1 << 31) /* owner: 1=HW, 0=SW */
#define FTMAC110_TXD_COL ((uint64_t)3) /* collision */
#define FTMAC110_TXD_CLRMASK \
(FTMAC110_TXD_END)
#endif /* FTMAC110_H */
|