aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorwilly tarreau <w@1wt.eu>2014-01-16 02:20:10 -0500
committerDavid S. Miller <davem@davemloft.net>2014-01-16 18:15:42 -0500
commit40ba35e74fa56866918d2f3bc0528b5b92725d5e (patch)
treeffe9d2f8e8dd4343783005f58a3406a14855f614
parent290213667ab53a95456397763205e4b1e30f46b5 (diff)
net: mvneta: add missing bit descriptions for interrupt masks and causes
Marvell has not published the chip's datasheet yet, so it's very hard to find the relevant bits to manipulate to change the IRQ behaviour. Fortunately, these bits are described in the proprietary LSP patch set which is publicly available here : http://www.plugcomputer.org/downloads/mirabox/ So let's put them back in the driver in order to reduce the burden of current and future maintenance. Cc: Thomas Petazzoni <thomas.petazzoni@free-electrons.com> Cc: Gregory CLEMENT <gregory.clement@free-electrons.com> Tested-by: Arnaud Ebalard <arno@natisbad.org> Signed-off-by: Willy Tarreau <w@1wt.eu> Signed-off-by: David S. Miller <davem@davemloft.net>
-rw-r--r--drivers/net/ethernet/marvell/mvneta.c44
1 files changed, 42 insertions, 2 deletions
diff --git a/drivers/net/ethernet/marvell/mvneta.c b/drivers/net/ethernet/marvell/mvneta.c
index 84220c12e727..defda6fb4433 100644
--- a/drivers/net/ethernet/marvell/mvneta.c
+++ b/drivers/net/ethernet/marvell/mvneta.c
@@ -101,16 +101,56 @@
101#define MVNETA_CPU_RXQ_ACCESS_ALL_MASK 0x000000ff 101#define MVNETA_CPU_RXQ_ACCESS_ALL_MASK 0x000000ff
102#define MVNETA_CPU_TXQ_ACCESS_ALL_MASK 0x0000ff00 102#define MVNETA_CPU_TXQ_ACCESS_ALL_MASK 0x0000ff00
103#define MVNETA_RXQ_TIME_COAL_REG(q) (0x2580 + ((q) << 2)) 103#define MVNETA_RXQ_TIME_COAL_REG(q) (0x2580 + ((q) << 2))
104
105/* Exception Interrupt Port/Queue Cause register */
106
104#define MVNETA_INTR_NEW_CAUSE 0x25a0 107#define MVNETA_INTR_NEW_CAUSE 0x25a0
105#define MVNETA_RX_INTR_MASK(nr_rxqs) (((1 << nr_rxqs) - 1) << 8)
106#define MVNETA_INTR_NEW_MASK 0x25a4 108#define MVNETA_INTR_NEW_MASK 0x25a4
109
110/* bits 0..7 = TXQ SENT, one bit per queue.
111 * bits 8..15 = RXQ OCCUP, one bit per queue.
112 * bits 16..23 = RXQ FREE, one bit per queue.
113 * bit 29 = OLD_REG_SUM, see old reg ?
114 * bit 30 = TX_ERR_SUM, one bit for 4 ports
115 * bit 31 = MISC_SUM, one bit for 4 ports
116 */
117#define MVNETA_TX_INTR_MASK(nr_txqs) (((1 << nr_txqs) - 1) << 0)
118#define MVNETA_TX_INTR_MASK_ALL (0xff << 0)
119#define MVNETA_RX_INTR_MASK(nr_rxqs) (((1 << nr_rxqs) - 1) << 8)
120#define MVNETA_RX_INTR_MASK_ALL (0xff << 8)
121
107#define MVNETA_INTR_OLD_CAUSE 0x25a8 122#define MVNETA_INTR_OLD_CAUSE 0x25a8
108#define MVNETA_INTR_OLD_MASK 0x25ac 123#define MVNETA_INTR_OLD_MASK 0x25ac
124
125/* Data Path Port/Queue Cause Register */
109#define MVNETA_INTR_MISC_CAUSE 0x25b0 126#define MVNETA_INTR_MISC_CAUSE 0x25b0
110#define MVNETA_INTR_MISC_MASK 0x25b4 127#define MVNETA_INTR_MISC_MASK 0x25b4
128
129#define MVNETA_CAUSE_PHY_STATUS_CHANGE BIT(0)
130#define MVNETA_CAUSE_LINK_CHANGE BIT(1)
131#define MVNETA_CAUSE_PTP BIT(4)
132
133#define MVNETA_CAUSE_INTERNAL_ADDR_ERR BIT(7)
134#define MVNETA_CAUSE_RX_OVERRUN BIT(8)
135#define MVNETA_CAUSE_RX_CRC_ERROR BIT(9)
136#define MVNETA_CAUSE_RX_LARGE_PKT BIT(10)
137#define MVNETA_CAUSE_TX_UNDERUN BIT(11)
138#define MVNETA_CAUSE_PRBS_ERR BIT(12)
139#define MVNETA_CAUSE_PSC_SYNC_CHANGE BIT(13)
140#define MVNETA_CAUSE_SERDES_SYNC_ERR BIT(14)
141
142#define MVNETA_CAUSE_BMU_ALLOC_ERR_SHIFT 16
143#define MVNETA_CAUSE_BMU_ALLOC_ERR_ALL_MASK (0xF << MVNETA_CAUSE_BMU_ALLOC_ERR_SHIFT)
144#define MVNETA_CAUSE_BMU_ALLOC_ERR_MASK(pool) (1 << (MVNETA_CAUSE_BMU_ALLOC_ERR_SHIFT + (pool)))
145
146#define MVNETA_CAUSE_TXQ_ERROR_SHIFT 24
147#define MVNETA_CAUSE_TXQ_ERROR_ALL_MASK (0xFF << MVNETA_CAUSE_TXQ_ERROR_SHIFT)
148#define MVNETA_CAUSE_TXQ_ERROR_MASK(q) (1 << (MVNETA_CAUSE_TXQ_ERROR_SHIFT + (q)))
149
111#define MVNETA_INTR_ENABLE 0x25b8 150#define MVNETA_INTR_ENABLE 0x25b8
112#define MVNETA_TXQ_INTR_ENABLE_ALL_MASK 0x0000ff00 151#define MVNETA_TXQ_INTR_ENABLE_ALL_MASK 0x0000ff00
113#define MVNETA_RXQ_INTR_ENABLE_ALL_MASK 0xff000000 152#define MVNETA_RXQ_INTR_ENABLE_ALL_MASK 0xff000000 // note: neta says it's 0x000000FF
153
114#define MVNETA_RXQ_CMD 0x2680 154#define MVNETA_RXQ_CMD 0x2680
115#define MVNETA_RXQ_DISABLE_SHIFT 8 155#define MVNETA_RXQ_DISABLE_SHIFT 8
116#define MVNETA_RXQ_ENABLE_MASK 0x000000ff 156#define MVNETA_RXQ_ENABLE_MASK 0x000000ff