Merge git://git.kernel.org/pub/scm/linux/kernel/git/davem/net
[linux-2.6-block.git] / drivers / net / ethernet / ti / cpsw_priv.h
1 /* SPDX-License-Identifier: GPL-2.0 */
2 /*
3  * Texas Instruments Ethernet Switch Driver
4  */
5
6 #ifndef DRIVERS_NET_ETHERNET_TI_CPSW_PRIV_H_
7 #define DRIVERS_NET_ETHERNET_TI_CPSW_PRIV_H_
8
9 #include "davinci_cpdma.h"
10
11 #define CPSW_DEBUG      (NETIF_MSG_HW           | NETIF_MSG_WOL         | \
12                          NETIF_MSG_DRV          | NETIF_MSG_LINK        | \
13                          NETIF_MSG_IFUP         | NETIF_MSG_INTR        | \
14                          NETIF_MSG_PROBE        | NETIF_MSG_TIMER       | \
15                          NETIF_MSG_IFDOWN       | NETIF_MSG_RX_ERR      | \
16                          NETIF_MSG_TX_ERR       | NETIF_MSG_TX_DONE     | \
17                          NETIF_MSG_PKTDATA      | NETIF_MSG_TX_QUEUED   | \
18                          NETIF_MSG_RX_STATUS)
19
20 #define cpsw_info(priv, type, format, ...)              \
21 do {                                                            \
22         if (netif_msg_##type(priv) && net_ratelimit())          \
23                 dev_info(priv->dev, format, ## __VA_ARGS__);    \
24 } while (0)
25
26 #define cpsw_err(priv, type, format, ...)               \
27 do {                                                            \
28         if (netif_msg_##type(priv) && net_ratelimit())          \
29                 dev_err(priv->dev, format, ## __VA_ARGS__);     \
30 } while (0)
31
32 #define cpsw_dbg(priv, type, format, ...)               \
33 do {                                                            \
34         if (netif_msg_##type(priv) && net_ratelimit())          \
35                 dev_dbg(priv->dev, format, ## __VA_ARGS__);     \
36 } while (0)
37
38 #define cpsw_notice(priv, type, format, ...)            \
39 do {                                                            \
40         if (netif_msg_##type(priv) && net_ratelimit())          \
41                 dev_notice(priv->dev, format, ## __VA_ARGS__);  \
42 } while (0)
43
44 #define ALE_ALL_PORTS           0x7
45
46 #define CPSW_MAJOR_VERSION(reg)         (reg >> 8 & 0x7)
47 #define CPSW_MINOR_VERSION(reg)         (reg & 0xff)
48 #define CPSW_RTL_VERSION(reg)           ((reg >> 11) & 0x1f)
49
50 #define CPSW_VERSION_1          0x19010a
51 #define CPSW_VERSION_2          0x19010c
52 #define CPSW_VERSION_3          0x19010f
53 #define CPSW_VERSION_4          0x190112
54
55 #define HOST_PORT_NUM           0
56 #define CPSW_ALE_PORTS_NUM      3
57 #define SLIVER_SIZE             0x40
58
59 #define CPSW1_HOST_PORT_OFFSET  0x028
60 #define CPSW1_SLAVE_OFFSET      0x050
61 #define CPSW1_SLAVE_SIZE        0x040
62 #define CPSW1_CPDMA_OFFSET      0x100
63 #define CPSW1_STATERAM_OFFSET   0x200
64 #define CPSW1_HW_STATS          0x400
65 #define CPSW1_CPTS_OFFSET       0x500
66 #define CPSW1_ALE_OFFSET        0x600
67 #define CPSW1_SLIVER_OFFSET     0x700
68
69 #define CPSW2_HOST_PORT_OFFSET  0x108
70 #define CPSW2_SLAVE_OFFSET      0x200
71 #define CPSW2_SLAVE_SIZE        0x100
72 #define CPSW2_CPDMA_OFFSET      0x800
73 #define CPSW2_HW_STATS          0x900
74 #define CPSW2_STATERAM_OFFSET   0xa00
75 #define CPSW2_CPTS_OFFSET       0xc00
76 #define CPSW2_ALE_OFFSET        0xd00
77 #define CPSW2_SLIVER_OFFSET     0xd80
78 #define CPSW2_BD_OFFSET         0x2000
79
80 #define CPDMA_RXTHRESH          0x0c0
81 #define CPDMA_RXFREE            0x0e0
82 #define CPDMA_TXHDP             0x00
83 #define CPDMA_RXHDP             0x20
84 #define CPDMA_TXCP              0x40
85 #define CPDMA_RXCP              0x60
86
87 #define CPSW_POLL_WEIGHT        64
88 #define CPSW_RX_VLAN_ENCAP_HDR_SIZE             4
89 #define CPSW_MIN_PACKET_SIZE    (VLAN_ETH_ZLEN)
90 #define CPSW_MAX_PACKET_SIZE    (VLAN_ETH_FRAME_LEN +\
91                                  ETH_FCS_LEN +\
92                                  CPSW_RX_VLAN_ENCAP_HDR_SIZE)
93
94 #define RX_PRIORITY_MAPPING     0x76543210
95 #define TX_PRIORITY_MAPPING     0x33221100
96 #define CPDMA_TX_PRIORITY_MAP   0x76543210
97
98 #define CPSW_VLAN_AWARE         BIT(1)
99 #define CPSW_RX_VLAN_ENCAP      BIT(2)
100 #define CPSW_ALE_VLAN_AWARE     1
101
102 #define CPSW_FIFO_NORMAL_MODE           (0 << 16)
103 #define CPSW_FIFO_DUAL_MAC_MODE         (1 << 16)
104 #define CPSW_FIFO_RATE_LIMIT_MODE       (2 << 16)
105
106 #define CPSW_INTPACEEN          (0x3f << 16)
107 #define CPSW_INTPRESCALE_MASK   (0x7FF << 0)
108 #define CPSW_CMINTMAX_CNT       63
109 #define CPSW_CMINTMIN_CNT       2
110 #define CPSW_CMINTMAX_INTVL     (1000 / CPSW_CMINTMIN_CNT)
111 #define CPSW_CMINTMIN_INTVL     ((1000 / CPSW_CMINTMAX_CNT) + 1)
112
113 #define IRQ_NUM                 2
114 #define CPSW_MAX_QUEUES         8
115 #define CPSW_CPDMA_DESCS_POOL_SIZE_DEFAULT 256
116 #define CPSW_FIFO_QUEUE_TYPE_SHIFT      16
117 #define CPSW_FIFO_SHAPE_EN_SHIFT        16
118 #define CPSW_FIFO_RATE_EN_SHIFT         20
119 #define CPSW_TC_NUM                     4
120 #define CPSW_FIFO_SHAPERS_NUM           (CPSW_TC_NUM - 1)
121 #define CPSW_PCT_MASK                   0x7f
122
123 #define CPSW_RX_VLAN_ENCAP_HDR_PRIO_SHIFT       29
124 #define CPSW_RX_VLAN_ENCAP_HDR_PRIO_MSK         GENMASK(2, 0)
125 #define CPSW_RX_VLAN_ENCAP_HDR_VID_SHIFT        16
126 #define CPSW_RX_VLAN_ENCAP_HDR_PKT_TYPE_SHIFT   8
127 #define CPSW_RX_VLAN_ENCAP_HDR_PKT_TYPE_MSK     GENMASK(1, 0)
128 enum {
129         CPSW_RX_VLAN_ENCAP_HDR_PKT_VLAN_TAG = 0,
130         CPSW_RX_VLAN_ENCAP_HDR_PKT_RESERV,
131         CPSW_RX_VLAN_ENCAP_HDR_PKT_PRIO_TAG,
132         CPSW_RX_VLAN_ENCAP_HDR_PKT_UNTAG,
133 };
134
135 struct cpsw_wr_regs {
136         u32     id_ver;
137         u32     soft_reset;
138         u32     control;
139         u32     int_control;
140         u32     rx_thresh_en;
141         u32     rx_en;
142         u32     tx_en;
143         u32     misc_en;
144         u32     mem_allign1[8];
145         u32     rx_thresh_stat;
146         u32     rx_stat;
147         u32     tx_stat;
148         u32     misc_stat;
149         u32     mem_allign2[8];
150         u32     rx_imax;
151         u32     tx_imax;
152
153 };
154
155 struct cpsw_ss_regs {
156         u32     id_ver;
157         u32     control;
158         u32     soft_reset;
159         u32     stat_port_en;
160         u32     ptype;
161         u32     soft_idle;
162         u32     thru_rate;
163         u32     gap_thresh;
164         u32     tx_start_wds;
165         u32     flow_control;
166         u32     vlan_ltype;
167         u32     ts_ltype;
168         u32     dlr_ltype;
169 };
170
171 /* CPSW_PORT_V1 */
172 #define CPSW1_MAX_BLKS      0x00 /* Maximum FIFO Blocks */
173 #define CPSW1_BLK_CNT       0x04 /* FIFO Block Usage Count (Read Only) */
174 #define CPSW1_TX_IN_CTL     0x08 /* Transmit FIFO Control */
175 #define CPSW1_PORT_VLAN     0x0c /* VLAN Register */
176 #define CPSW1_TX_PRI_MAP    0x10 /* Tx Header Priority to Switch Pri Mapping */
177 #define CPSW1_TS_CTL        0x14 /* Time Sync Control */
178 #define CPSW1_TS_SEQ_LTYPE  0x18 /* Time Sync Sequence ID Offset and Msg Type */
179 #define CPSW1_TS_VLAN       0x1c /* Time Sync VLAN1 and VLAN2 */
180
181 /* CPSW_PORT_V2 */
182 #define CPSW2_CONTROL       0x00 /* Control Register */
183 #define CPSW2_MAX_BLKS      0x08 /* Maximum FIFO Blocks */
184 #define CPSW2_BLK_CNT       0x0c /* FIFO Block Usage Count (Read Only) */
185 #define CPSW2_TX_IN_CTL     0x10 /* Transmit FIFO Control */
186 #define CPSW2_PORT_VLAN     0x14 /* VLAN Register */
187 #define CPSW2_TX_PRI_MAP    0x18 /* Tx Header Priority to Switch Pri Mapping */
188 #define CPSW2_TS_SEQ_MTYPE  0x1c /* Time Sync Sequence ID Offset and Msg Type */
189
190 /* CPSW_PORT_V1 and V2 */
191 #define SA_LO               0x20 /* CPGMAC_SL Source Address Low */
192 #define SA_HI               0x24 /* CPGMAC_SL Source Address High */
193 #define SEND_PERCENT        0x28 /* Transmit Queue Send Percentages */
194
195 /* CPSW_PORT_V2 only */
196 #define RX_DSCP_PRI_MAP0    0x30 /* Rx DSCP Priority to Rx Packet Mapping */
197 #define RX_DSCP_PRI_MAP1    0x34 /* Rx DSCP Priority to Rx Packet Mapping */
198 #define RX_DSCP_PRI_MAP2    0x38 /* Rx DSCP Priority to Rx Packet Mapping */
199 #define RX_DSCP_PRI_MAP3    0x3c /* Rx DSCP Priority to Rx Packet Mapping */
200 #define RX_DSCP_PRI_MAP4    0x40 /* Rx DSCP Priority to Rx Packet Mapping */
201 #define RX_DSCP_PRI_MAP5    0x44 /* Rx DSCP Priority to Rx Packet Mapping */
202 #define RX_DSCP_PRI_MAP6    0x48 /* Rx DSCP Priority to Rx Packet Mapping */
203 #define RX_DSCP_PRI_MAP7    0x4c /* Rx DSCP Priority to Rx Packet Mapping */
204
205 /* Bit definitions for the CPSW2_CONTROL register */
206 #define PASS_PRI_TAGGED     BIT(24) /* Pass Priority Tagged */
207 #define VLAN_LTYPE2_EN      BIT(21) /* VLAN LTYPE 2 enable */
208 #define VLAN_LTYPE1_EN      BIT(20) /* VLAN LTYPE 1 enable */
209 #define DSCP_PRI_EN         BIT(16) /* DSCP Priority Enable */
210 #define TS_107              BIT(15) /* Tyme Sync Dest IP Address 107 */
211 #define TS_320              BIT(14) /* Time Sync Dest Port 320 enable */
212 #define TS_319              BIT(13) /* Time Sync Dest Port 319 enable */
213 #define TS_132              BIT(12) /* Time Sync Dest IP Addr 132 enable */
214 #define TS_131              BIT(11) /* Time Sync Dest IP Addr 131 enable */
215 #define TS_130              BIT(10) /* Time Sync Dest IP Addr 130 enable */
216 #define TS_129              BIT(9)  /* Time Sync Dest IP Addr 129 enable */
217 #define TS_TTL_NONZERO      BIT(8)  /* Time Sync Time To Live Non-zero enable */
218 #define TS_ANNEX_F_EN       BIT(6)  /* Time Sync Annex F enable */
219 #define TS_ANNEX_D_EN       BIT(4)  /* Time Sync Annex D enable */
220 #define TS_LTYPE2_EN        BIT(3)  /* Time Sync LTYPE 2 enable */
221 #define TS_LTYPE1_EN        BIT(2)  /* Time Sync LTYPE 1 enable */
222 #define TS_TX_EN            BIT(1)  /* Time Sync Transmit Enable */
223 #define TS_RX_EN            BIT(0)  /* Time Sync Receive Enable */
224
225 #define CTRL_V2_TS_BITS \
226         (TS_320 | TS_319 | TS_132 | TS_131 | TS_130 | TS_129 |\
227          TS_TTL_NONZERO  | TS_ANNEX_D_EN | TS_LTYPE1_EN | VLAN_LTYPE1_EN)
228
229 #define CTRL_V2_ALL_TS_MASK (CTRL_V2_TS_BITS | TS_TX_EN | TS_RX_EN)
230 #define CTRL_V2_TX_TS_BITS  (CTRL_V2_TS_BITS | TS_TX_EN)
231 #define CTRL_V2_RX_TS_BITS  (CTRL_V2_TS_BITS | TS_RX_EN)
232
233
234 #define CTRL_V3_TS_BITS \
235         (TS_107 | TS_320 | TS_319 | TS_132 | TS_131 | TS_130 | TS_129 |\
236          TS_TTL_NONZERO | TS_ANNEX_F_EN | TS_ANNEX_D_EN |\
237          TS_LTYPE1_EN | VLAN_LTYPE1_EN)
238
239 #define CTRL_V3_ALL_TS_MASK (CTRL_V3_TS_BITS | TS_TX_EN | TS_RX_EN)
240 #define CTRL_V3_TX_TS_BITS  (CTRL_V3_TS_BITS | TS_TX_EN)
241 #define CTRL_V3_RX_TS_BITS  (CTRL_V3_TS_BITS | TS_RX_EN)
242
243 /* Bit definitions for the CPSW2_TS_SEQ_MTYPE register */
244 #define TS_SEQ_ID_OFFSET_SHIFT   (16)    /* Time Sync Sequence ID Offset */
245 #define TS_SEQ_ID_OFFSET_MASK    (0x3f)
246 #define TS_MSG_TYPE_EN_SHIFT     (0)     /* Time Sync Message Type Enable */
247 #define TS_MSG_TYPE_EN_MASK      (0xffff)
248
249 /* The PTP event messages - Sync, Delay_Req, Pdelay_Req, and Pdelay_Resp. */
250 #define EVENT_MSG_BITS ((1<<0) | (1<<1) | (1<<2) | (1<<3))
251
252 /* Bit definitions for the CPSW1_TS_CTL register */
253 #define CPSW_V1_TS_RX_EN                BIT(0)
254 #define CPSW_V1_TS_TX_EN                BIT(4)
255 #define CPSW_V1_MSG_TYPE_OFS            16
256
257 /* Bit definitions for the CPSW1_TS_SEQ_LTYPE register */
258 #define CPSW_V1_SEQ_ID_OFS_SHIFT        16
259
260 #define CPSW_MAX_BLKS_TX                15
261 #define CPSW_MAX_BLKS_TX_SHIFT          4
262 #define CPSW_MAX_BLKS_RX                5
263
264 struct cpsw_host_regs {
265         u32     max_blks;
266         u32     blk_cnt;
267         u32     tx_in_ctl;
268         u32     port_vlan;
269         u32     tx_pri_map;
270         u32     cpdma_tx_pri_map;
271         u32     cpdma_rx_chan_map;
272 };
273
274 struct cpsw_slave_data {
275         struct device_node *slave_node;
276         struct device_node *phy_node;
277         char            phy_id[MII_BUS_ID_SIZE];
278         int             phy_if;
279         u8              mac_addr[ETH_ALEN];
280         u16             dual_emac_res_vlan;     /* Reserved VLAN for DualEMAC */
281         struct phy      *ifphy;
282 };
283
284 struct cpsw_platform_data {
285         struct cpsw_slave_data  *slave_data;
286         u32     ss_reg_ofs;     /* Subsystem control register offset */
287         u32     channels;       /* number of cpdma channels (symmetric) */
288         u32     slaves;         /* number of slave cpgmac ports */
289         u32     active_slave; /* time stamping, ethtool and SIOCGMIIPHY slave */
290         u32     ale_entries;    /* ale table size */
291         u32     bd_ram_size;  /*buffer descriptor ram size */
292         u32     mac_control;    /* Mac control register */
293         u16     default_vlan;   /* Def VLAN for ALE lookup in VLAN aware mode*/
294         bool    dual_emac;      /* Enable Dual EMAC mode */
295 };
296
297 struct cpsw_slave {
298         void __iomem                    *regs;
299         int                             slave_num;
300         u32                             mac_control;
301         struct cpsw_slave_data          *data;
302         struct phy_device               *phy;
303         struct net_device               *ndev;
304         u32                             port_vlan;
305         struct cpsw_sl                  *mac_sl;
306 };
307
308 static inline u32 slave_read(struct cpsw_slave *slave, u32 offset)
309 {
310         return readl_relaxed(slave->regs + offset);
311 }
312
313 static inline void slave_write(struct cpsw_slave *slave, u32 val, u32 offset)
314 {
315         writel_relaxed(val, slave->regs + offset);
316 }
317
318 struct cpsw_vector {
319         struct cpdma_chan *ch;
320         int budget;
321 };
322
323 struct cpsw_common {
324         struct device                   *dev;
325         struct cpsw_platform_data       data;
326         struct napi_struct              napi_rx;
327         struct napi_struct              napi_tx;
328         struct cpsw_ss_regs __iomem     *regs;
329         struct cpsw_wr_regs __iomem     *wr_regs;
330         u8 __iomem                      *hw_stats;
331         struct cpsw_host_regs __iomem   *host_port_regs;
332         u32                             version;
333         u32                             coal_intvl;
334         u32                             bus_freq_mhz;
335         int                             rx_packet_max;
336         int                             descs_pool_size;
337         struct cpsw_slave               *slaves;
338         struct cpdma_ctlr               *dma;
339         struct cpsw_vector              txv[CPSW_MAX_QUEUES];
340         struct cpsw_vector              rxv[CPSW_MAX_QUEUES];
341         struct cpsw_ale                 *ale;
342         bool                            quirk_irq;
343         bool                            rx_irq_disabled;
344         bool                            tx_irq_disabled;
345         u32 irqs_table[IRQ_NUM];
346         struct cpts                     *cpts;
347         int                             rx_ch_num, tx_ch_num;
348         int                             speed;
349         int                             usage_count;
350         struct page_pool                *page_pool[CPSW_MAX_QUEUES];
351 };
352
353 struct cpsw_priv {
354         struct net_device               *ndev;
355         struct device                   *dev;
356         u32                             msg_enable;
357         u8                              mac_addr[ETH_ALEN];
358         bool                            rx_pause;
359         bool                            tx_pause;
360         bool                            mqprio_hw;
361         int                             fifo_bw[CPSW_TC_NUM];
362         int                             shp_cfg_speed;
363         int                             tx_ts_enabled;
364         int                             rx_ts_enabled;
365         struct bpf_prog                 *xdp_prog;
366         struct xdp_rxq_info             xdp_rxq[CPSW_MAX_QUEUES];
367         struct xdp_attachment_info      xdpi;
368
369         u32 emac_port;
370         struct cpsw_common *cpsw;
371 };
372
373 #define ndev_to_cpsw(ndev) (((struct cpsw_priv *)netdev_priv(ndev))->cpsw)
374 #define napi_to_cpsw(napi)      container_of(napi, struct cpsw_common, napi)
375
376 #define cpsw_slave_index(cpsw, priv)                            \
377                 ((cpsw->data.dual_emac) ? priv->emac_port :     \
378                 cpsw->data.active_slave)
379
380 static inline int cpsw_get_slave_port(u32 slave_num)
381 {
382         return slave_num + 1;
383 }
384
385 struct addr_sync_ctx {
386         struct net_device *ndev;
387         const u8 *addr;         /* address to be synched */
388         int consumed;           /* number of address instances */
389         int flush;              /* flush flag */
390 };
391
392 int cpsw_init_common(struct cpsw_common *cpsw, void __iomem *ss_regs,
393                      int ale_ageout, phys_addr_t desc_mem_phys,
394                      int descs_pool_size);
395 void cpsw_split_res(struct cpsw_common *cpsw);
396 int cpsw_fill_rx_channels(struct cpsw_priv *priv);
397 void cpsw_intr_enable(struct cpsw_common *cpsw);
398 void cpsw_intr_disable(struct cpsw_common *cpsw);
399 void cpsw_tx_handler(void *token, int len, int status);
400 int cpsw_create_xdp_rxqs(struct cpsw_common *cpsw);
401 void cpsw_destroy_xdp_rxqs(struct cpsw_common *cpsw);
402
403 /* ethtool */
404 u32 cpsw_get_msglevel(struct net_device *ndev);
405 void cpsw_set_msglevel(struct net_device *ndev, u32 value);
406 int cpsw_get_coalesce(struct net_device *ndev, struct ethtool_coalesce *coal);
407 int cpsw_set_coalesce(struct net_device *ndev, struct ethtool_coalesce *coal);
408 int cpsw_get_sset_count(struct net_device *ndev, int sset);
409 void cpsw_get_strings(struct net_device *ndev, u32 stringset, u8 *data);
410 void cpsw_get_ethtool_stats(struct net_device *ndev,
411                             struct ethtool_stats *stats, u64 *data);
412 void cpsw_get_pauseparam(struct net_device *ndev,
413                          struct ethtool_pauseparam *pause);
414 void cpsw_get_wol(struct net_device *ndev, struct ethtool_wolinfo *wol);
415 int cpsw_set_wol(struct net_device *ndev, struct ethtool_wolinfo *wol);
416 int cpsw_get_regs_len(struct net_device *ndev);
417 void cpsw_get_regs(struct net_device *ndev, struct ethtool_regs *regs, void *p);
418 int cpsw_ethtool_op_begin(struct net_device *ndev);
419 void cpsw_ethtool_op_complete(struct net_device *ndev);
420 void cpsw_get_channels(struct net_device *ndev, struct ethtool_channels *ch);
421 int cpsw_get_link_ksettings(struct net_device *ndev,
422                             struct ethtool_link_ksettings *ecmd);
423 int cpsw_set_link_ksettings(struct net_device *ndev,
424                             const struct ethtool_link_ksettings *ecmd);
425 int cpsw_get_eee(struct net_device *ndev, struct ethtool_eee *edata);
426 int cpsw_set_eee(struct net_device *ndev, struct ethtool_eee *edata);
427 int cpsw_nway_reset(struct net_device *ndev);
428 void cpsw_get_ringparam(struct net_device *ndev,
429                         struct ethtool_ringparam *ering);
430 int cpsw_set_ringparam(struct net_device *ndev,
431                        struct ethtool_ringparam *ering);
432 int cpsw_set_channels_common(struct net_device *ndev,
433                              struct ethtool_channels *chs,
434                              cpdma_handler_fn rx_handler);
435 int cpsw_get_ts_info(struct net_device *ndev, struct ethtool_ts_info *info);
436
437 #endif /* DRIVERS_NET_ETHERNET_TI_CPSW_PRIV_H_ */