These changes are the raw update to linux-4.4.6-rt14. Kernel sources
[kvmfornfv.git] / kernel / drivers / net / ethernet / aurora / nb8800.h
1 #ifndef _NB8800_H_
2 #define _NB8800_H_
3
4 #include <linux/types.h>
5 #include <linux/skbuff.h>
6 #include <linux/phy.h>
7 #include <linux/clk.h>
8 #include <linux/bitops.h>
9
10 #define RX_DESC_COUNT                   256
11 #define TX_DESC_COUNT                   256
12
13 #define NB8800_DESC_LOW                 4
14
15 #define RX_BUF_SIZE                     1552
16
17 #define RX_COPYBREAK                    256
18 #define RX_COPYHDR                      128
19
20 #define MAX_MDC_CLOCK                   2500000
21
22 /* Stargate Solutions SSN8800 core registers */
23 #define NB8800_TX_CTL1                  0x000
24 #define TX_TPD                          BIT(5)
25 #define TX_APPEND_FCS                   BIT(4)
26 #define TX_PAD_EN                       BIT(3)
27 #define TX_RETRY_EN                     BIT(2)
28 #define TX_EN                           BIT(0)
29
30 #define NB8800_TX_CTL2                  0x001
31
32 #define NB8800_RX_CTL                   0x004
33 #define RX_BC_DISABLE                   BIT(7)
34 #define RX_RUNT                         BIT(6)
35 #define RX_AF_EN                        BIT(5)
36 #define RX_PAUSE_EN                     BIT(3)
37 #define RX_SEND_CRC                     BIT(2)
38 #define RX_PAD_STRIP                    BIT(1)
39 #define RX_EN                           BIT(0)
40
41 #define NB8800_RANDOM_SEED              0x008
42 #define NB8800_TX_SDP                   0x14
43 #define NB8800_TX_TPDP1                 0x18
44 #define NB8800_TX_TPDP2                 0x19
45 #define NB8800_SLOT_TIME                0x1c
46
47 #define NB8800_MDIO_CMD                 0x020
48 #define MDIO_CMD_GO                     BIT(31)
49 #define MDIO_CMD_WR                     BIT(26)
50 #define MDIO_CMD_ADDR(x)                ((x) << 21)
51 #define MDIO_CMD_REG(x)                 ((x) << 16)
52 #define MDIO_CMD_DATA(x)                ((x) <<  0)
53
54 #define NB8800_MDIO_STS                 0x024
55 #define MDIO_STS_ERR                    BIT(31)
56
57 #define NB8800_MC_ADDR(i)               (0x028 + (i))
58 #define NB8800_MC_INIT                  0x02e
59 #define NB8800_UC_ADDR(i)               (0x03c + (i))
60
61 #define NB8800_MAC_MODE                 0x044
62 #define RGMII_MODE                      BIT(7)
63 #define HALF_DUPLEX                     BIT(4)
64 #define BURST_EN                        BIT(3)
65 #define LOOPBACK_EN                     BIT(2)
66 #define GMAC_MODE                       BIT(0)
67
68 #define NB8800_IC_THRESHOLD             0x050
69 #define NB8800_PE_THRESHOLD             0x051
70 #define NB8800_PF_THRESHOLD             0x052
71 #define NB8800_TX_BUFSIZE               0x054
72 #define NB8800_FIFO_CTL                 0x056
73 #define NB8800_PQ1                      0x060
74 #define NB8800_PQ2                      0x061
75 #define NB8800_SRC_ADDR(i)              (0x06a + (i))
76 #define NB8800_STAT_DATA                0x078
77 #define NB8800_STAT_INDEX               0x07c
78 #define NB8800_STAT_CLEAR               0x07d
79
80 #define NB8800_SLEEP_MODE               0x07e
81 #define SLEEP_MODE                      BIT(0)
82
83 #define NB8800_WAKEUP                   0x07f
84 #define WAKEUP                          BIT(0)
85
86 /* Aurora NB8800 host interface registers */
87 #define NB8800_TXC_CR                   0x100
88 #define TCR_LK                          BIT(12)
89 #define TCR_DS                          BIT(11)
90 #define TCR_BTS(x)                      (((x) & 0x7) << 8)
91 #define TCR_DIE                         BIT(7)
92 #define TCR_TFI(x)                      (((x) & 0x7) << 4)
93 #define TCR_LE                          BIT(3)
94 #define TCR_RS                          BIT(2)
95 #define TCR_DM                          BIT(1)
96 #define TCR_EN                          BIT(0)
97
98 #define NB8800_TXC_SR                   0x104
99 #define TSR_DE                          BIT(3)
100 #define TSR_DI                          BIT(2)
101 #define TSR_TO                          BIT(1)
102 #define TSR_TI                          BIT(0)
103
104 #define NB8800_TX_SAR                   0x108
105 #define NB8800_TX_DESC_ADDR             0x10c
106
107 #define NB8800_TX_REPORT_ADDR           0x110
108 #define TX_BYTES_TRANSFERRED(x)         (((x) >> 16) & 0xffff)
109 #define TX_FIRST_DEFERRAL               BIT(7)
110 #define TX_EARLY_COLLISIONS(x)          (((x) >> 3) & 0xf)
111 #define TX_LATE_COLLISION               BIT(2)
112 #define TX_PACKET_DROPPED               BIT(1)
113 #define TX_FIFO_UNDERRUN                BIT(0)
114 #define IS_TX_ERROR(r)                  ((r) & 0x07)
115
116 #define NB8800_TX_FIFO_SR               0x114
117 #define NB8800_TX_ITR                   0x118
118
119 #define NB8800_RXC_CR                   0x200
120 #define RCR_FL                          BIT(13)
121 #define RCR_LK                          BIT(12)
122 #define RCR_DS                          BIT(11)
123 #define RCR_BTS(x)                      (((x) & 7) << 8)
124 #define RCR_DIE                         BIT(7)
125 #define RCR_RFI(x)                      (((x) & 7) << 4)
126 #define RCR_LE                          BIT(3)
127 #define RCR_RS                          BIT(2)
128 #define RCR_DM                          BIT(1)
129 #define RCR_EN                          BIT(0)
130
131 #define NB8800_RXC_SR                   0x204
132 #define RSR_DE                          BIT(3)
133 #define RSR_DI                          BIT(2)
134 #define RSR_RO                          BIT(1)
135 #define RSR_RI                          BIT(0)
136
137 #define NB8800_RX_SAR                   0x208
138 #define NB8800_RX_DESC_ADDR             0x20c
139
140 #define NB8800_RX_REPORT_ADDR           0x210
141 #define RX_BYTES_TRANSFERRED(x)         (((x) >> 16) & 0xFFFF)
142 #define RX_MULTICAST_PKT                BIT(9)
143 #define RX_BROADCAST_PKT                BIT(8)
144 #define RX_LENGTH_ERR                   BIT(7)
145 #define RX_FCS_ERR                      BIT(6)
146 #define RX_RUNT_PKT                     BIT(5)
147 #define RX_FIFO_OVERRUN                 BIT(4)
148 #define RX_LATE_COLLISION               BIT(3)
149 #define RX_ALIGNMENT_ERROR              BIT(2)
150 #define RX_ERROR_MASK                   0xfc
151 #define IS_RX_ERROR(r)                  ((r) & RX_ERROR_MASK)
152
153 #define NB8800_RX_FIFO_SR               0x214
154 #define NB8800_RX_ITR                   0x218
155
156 /* Sigma Designs SMP86xx additional registers */
157 #define NB8800_TANGOX_PAD_MODE          0x400
158 #define PAD_MODE_MASK                   0x7
159 #define PAD_MODE_MII                    0x0
160 #define PAD_MODE_RGMII                  0x1
161 #define PAD_MODE_GTX_CLK_INV            BIT(3)
162 #define PAD_MODE_GTX_CLK_DELAY          BIT(4)
163
164 #define NB8800_TANGOX_MDIO_CLKDIV       0x420
165 #define NB8800_TANGOX_RESET             0x424
166
167 /* Hardware DMA descriptor */
168 struct nb8800_dma_desc {
169         u32                             s_addr; /* start address */
170         u32                             n_addr; /* next descriptor address */
171         u32                             r_addr; /* report address */
172         u32                             config;
173 } __aligned(8);
174
175 #define DESC_ID                         BIT(23)
176 #define DESC_EOC                        BIT(22)
177 #define DESC_EOF                        BIT(21)
178 #define DESC_LK                         BIT(20)
179 #define DESC_DS                         BIT(19)
180 #define DESC_BTS(x)                     (((x) & 0x7) << 16)
181
182 /* DMA descriptor and associated data for rx.
183  * Allocated from coherent memory.
184  */
185 struct nb8800_rx_desc {
186         /* DMA descriptor */
187         struct nb8800_dma_desc          desc;
188
189         /* Status report filled in by hardware */
190         u32                             report;
191 };
192
193 /* Address of buffer on rx ring */
194 struct nb8800_rx_buf {
195         struct page                     *page;
196         unsigned long                   offset;
197 };
198
199 /* DMA descriptors and associated data for tx.
200  * Allocated from coherent memory.
201  */
202 struct nb8800_tx_desc {
203         /* DMA descriptor.  The second descriptor is used if packet
204          * data is unaligned.
205          */
206         struct nb8800_dma_desc          desc[2];
207
208         /* Status report filled in by hardware */
209         u32                             report;
210
211         /* Bounce buffer for initial unaligned part of packet */
212         u8                              buf[8] __aligned(8);
213 };
214
215 /* Packet in tx queue */
216 struct nb8800_tx_buf {
217         /* Currently queued skb */
218         struct sk_buff                  *skb;
219
220         /* DMA address of the first descriptor */
221         dma_addr_t                      dma_desc;
222
223         /* DMA address of packet data */
224         dma_addr_t                      dma_addr;
225
226         /* Length of DMA mapping, less than skb->len if alignment
227          * buffer is used.
228          */
229         unsigned int                    dma_len;
230
231         /* Number of packets in chain starting here */
232         unsigned int                    chain_len;
233
234         /* Packet chain ready to be submitted to hardware */
235         bool                            ready;
236 };
237
238 struct nb8800_priv {
239         struct napi_struct              napi;
240
241         void __iomem                    *base;
242
243         /* RX DMA descriptors */
244         struct nb8800_rx_desc           *rx_descs;
245
246         /* RX buffers referenced by DMA descriptors */
247         struct nb8800_rx_buf            *rx_bufs;
248
249         /* Current end of chain */
250         u32                             rx_eoc;
251
252         /* Value for rx interrupt time register in NAPI interrupt mode */
253         u32                             rx_itr_irq;
254
255         /* Value for rx interrupt time register in NAPI poll mode */
256         u32                             rx_itr_poll;
257
258         /* Value for config field of rx DMA descriptors */
259         u32                             rx_dma_config;
260
261         /* TX DMA descriptors */
262         struct nb8800_tx_desc           *tx_descs;
263
264         /* TX packet queue */
265         struct nb8800_tx_buf            *tx_bufs;
266
267         /* Number of free tx queue entries */
268         atomic_t                        tx_free;
269
270         /* First free tx queue entry */
271         u32                             tx_next;
272
273         /* Next buffer to transmit */
274         u32                             tx_queue;
275
276         /* Start of current packet chain */
277         struct nb8800_tx_buf            *tx_chain;
278
279         /* Next buffer to reclaim */
280         u32                             tx_done;
281
282         /* Lock for DMA activation */
283         spinlock_t                      tx_lock;
284
285         struct mii_bus                  *mii_bus;
286         struct device_node              *phy_node;
287         struct phy_device               *phydev;
288
289         /* PHY connection type from DT */
290         int                             phy_mode;
291
292         /* Current link status */
293         int                             speed;
294         int                             duplex;
295         int                             link;
296
297         /* Pause settings */
298         bool                            pause_aneg;
299         bool                            pause_rx;
300         bool                            pause_tx;
301
302         /* DMA base address of rx descriptors, see rx_descs above */
303         dma_addr_t                      rx_desc_dma;
304
305         /* DMA base address of tx descriptors, see tx_descs above */
306         dma_addr_t                      tx_desc_dma;
307
308         struct clk                      *clk;
309 };
310
311 struct nb8800_ops {
312         int                             (*init)(struct net_device *dev);
313         int                             (*reset)(struct net_device *dev);
314 };
315
316 #endif /* _NB8800_H_ */