xref: /linux/drivers/net/ethernet/ti/cpsw_new.c (revision bdd1a21b52557ea8f61d0a5dc2f77151b576eb70)
1 // SPDX-License-Identifier: GPL-2.0
2 /*
3  * Texas Instruments Ethernet Switch Driver
4  *
5  * Copyright (C) 2019 Texas Instruments
6  */
7 
8 #include <linux/io.h>
9 #include <linux/clk.h>
10 #include <linux/timer.h>
11 #include <linux/module.h>
12 #include <linux/irqreturn.h>
13 #include <linux/interrupt.h>
14 #include <linux/if_ether.h>
15 #include <linux/etherdevice.h>
16 #include <linux/net_tstamp.h>
17 #include <linux/phy.h>
18 #include <linux/phy/phy.h>
19 #include <linux/delay.h>
20 #include <linux/pinctrl/consumer.h>
21 #include <linux/pm_runtime.h>
22 #include <linux/gpio/consumer.h>
23 #include <linux/of.h>
24 #include <linux/of_mdio.h>
25 #include <linux/of_net.h>
26 #include <linux/of_device.h>
27 #include <linux/if_vlan.h>
28 #include <linux/kmemleak.h>
29 #include <linux/sys_soc.h>
30 
31 #include <net/page_pool.h>
32 #include <net/pkt_cls.h>
33 #include <net/devlink.h>
34 
35 #include "cpsw.h"
36 #include "cpsw_ale.h"
37 #include "cpsw_priv.h"
38 #include "cpsw_sl.h"
39 #include "cpsw_switchdev.h"
40 #include "cpts.h"
41 #include "davinci_cpdma.h"
42 
43 #include <net/pkt_sched.h>
44 
45 static int debug_level;
46 static int ale_ageout = CPSW_ALE_AGEOUT_DEFAULT;
47 static int rx_packet_max = CPSW_MAX_PACKET_SIZE;
48 static int descs_pool_size = CPSW_CPDMA_DESCS_POOL_SIZE_DEFAULT;
49 
50 struct cpsw_devlink {
51 	struct cpsw_common *cpsw;
52 };
53 
54 enum cpsw_devlink_param_id {
55 	CPSW_DEVLINK_PARAM_ID_BASE = DEVLINK_PARAM_GENERIC_ID_MAX,
56 	CPSW_DL_PARAM_SWITCH_MODE,
57 	CPSW_DL_PARAM_ALE_BYPASS,
58 };
59 
60 /* struct cpsw_common is not needed, kept here for compatibility
61  * reasons witrh the old driver
62  */
63 static int cpsw_slave_index_priv(struct cpsw_common *cpsw,
64 				 struct cpsw_priv *priv)
65 {
66 	if (priv->emac_port == HOST_PORT_NUM)
67 		return -1;
68 
69 	return priv->emac_port - 1;
70 }
71 
72 static bool cpsw_is_switch_en(struct cpsw_common *cpsw)
73 {
74 	return !cpsw->data.dual_emac;
75 }
76 
77 static void cpsw_set_promiscious(struct net_device *ndev, bool enable)
78 {
79 	struct cpsw_common *cpsw = ndev_to_cpsw(ndev);
80 	bool enable_uni = false;
81 	int i;
82 
83 	if (cpsw_is_switch_en(cpsw))
84 		return;
85 
86 	/* Enabling promiscuous mode for one interface will be
87 	 * common for both the interface as the interface shares
88 	 * the same hardware resource.
89 	 */
90 	for (i = 0; i < cpsw->data.slaves; i++)
91 		if (cpsw->slaves[i].ndev &&
92 		    (cpsw->slaves[i].ndev->flags & IFF_PROMISC))
93 			enable_uni = true;
94 
95 	if (!enable && enable_uni) {
96 		enable = enable_uni;
97 		dev_dbg(cpsw->dev, "promiscuity not disabled as the other interface is still in promiscuity mode\n");
98 	}
99 
100 	if (enable) {
101 		/* Enable unknown unicast, reg/unreg mcast */
102 		cpsw_ale_control_set(cpsw->ale, HOST_PORT_NUM,
103 				     ALE_P0_UNI_FLOOD, 1);
104 
105 		dev_dbg(cpsw->dev, "promiscuity enabled\n");
106 	} else {
107 		/* Disable unknown unicast */
108 		cpsw_ale_control_set(cpsw->ale, HOST_PORT_NUM,
109 				     ALE_P0_UNI_FLOOD, 0);
110 		dev_dbg(cpsw->dev, "promiscuity disabled\n");
111 	}
112 }
113 
114 /**
115  * cpsw_set_mc - adds multicast entry to the table if it's not added or deletes
116  * if it's not deleted
117  * @ndev: device to sync
118  * @addr: address to be added or deleted
119  * @vid: vlan id, if vid < 0 set/unset address for real device
120  * @add: add address if the flag is set or remove otherwise
121  */
122 static int cpsw_set_mc(struct net_device *ndev, const u8 *addr,
123 		       int vid, int add)
124 {
125 	struct cpsw_priv *priv = netdev_priv(ndev);
126 	struct cpsw_common *cpsw = priv->cpsw;
127 	int mask, flags, ret, slave_no;
128 
129 	slave_no = cpsw_slave_index(cpsw, priv);
130 	if (vid < 0)
131 		vid = cpsw->slaves[slave_no].port_vlan;
132 
133 	mask =  ALE_PORT_HOST;
134 	flags = vid ? ALE_VLAN : 0;
135 
136 	if (add)
137 		ret = cpsw_ale_add_mcast(cpsw->ale, addr, mask, flags, vid, 0);
138 	else
139 		ret = cpsw_ale_del_mcast(cpsw->ale, addr, 0, flags, vid);
140 
141 	return ret;
142 }
143 
144 static int cpsw_update_vlan_mc(struct net_device *vdev, int vid, void *ctx)
145 {
146 	struct addr_sync_ctx *sync_ctx = ctx;
147 	struct netdev_hw_addr *ha;
148 	int found = 0, ret = 0;
149 
150 	if (!vdev || !(vdev->flags & IFF_UP))
151 		return 0;
152 
153 	/* vlan address is relevant if its sync_cnt != 0 */
154 	netdev_for_each_mc_addr(ha, vdev) {
155 		if (ether_addr_equal(ha->addr, sync_ctx->addr)) {
156 			found = ha->sync_cnt;
157 			break;
158 		}
159 	}
160 
161 	if (found)
162 		sync_ctx->consumed++;
163 
164 	if (sync_ctx->flush) {
165 		if (!found)
166 			cpsw_set_mc(sync_ctx->ndev, sync_ctx->addr, vid, 0);
167 		return 0;
168 	}
169 
170 	if (found)
171 		ret = cpsw_set_mc(sync_ctx->ndev, sync_ctx->addr, vid, 1);
172 
173 	return ret;
174 }
175 
176 static int cpsw_add_mc_addr(struct net_device *ndev, const u8 *addr, int num)
177 {
178 	struct addr_sync_ctx sync_ctx;
179 	int ret;
180 
181 	sync_ctx.consumed = 0;
182 	sync_ctx.addr = addr;
183 	sync_ctx.ndev = ndev;
184 	sync_ctx.flush = 0;
185 
186 	ret = vlan_for_each(ndev, cpsw_update_vlan_mc, &sync_ctx);
187 	if (sync_ctx.consumed < num && !ret)
188 		ret = cpsw_set_mc(ndev, addr, -1, 1);
189 
190 	return ret;
191 }
192 
193 static int cpsw_del_mc_addr(struct net_device *ndev, const u8 *addr, int num)
194 {
195 	struct addr_sync_ctx sync_ctx;
196 
197 	sync_ctx.consumed = 0;
198 	sync_ctx.addr = addr;
199 	sync_ctx.ndev = ndev;
200 	sync_ctx.flush = 1;
201 
202 	vlan_for_each(ndev, cpsw_update_vlan_mc, &sync_ctx);
203 	if (sync_ctx.consumed == num)
204 		cpsw_set_mc(ndev, addr, -1, 0);
205 
206 	return 0;
207 }
208 
209 static int cpsw_purge_vlan_mc(struct net_device *vdev, int vid, void *ctx)
210 {
211 	struct addr_sync_ctx *sync_ctx = ctx;
212 	struct netdev_hw_addr *ha;
213 	int found = 0;
214 
215 	if (!vdev || !(vdev->flags & IFF_UP))
216 		return 0;
217 
218 	/* vlan address is relevant if its sync_cnt != 0 */
219 	netdev_for_each_mc_addr(ha, vdev) {
220 		if (ether_addr_equal(ha->addr, sync_ctx->addr)) {
221 			found = ha->sync_cnt;
222 			break;
223 		}
224 	}
225 
226 	if (!found)
227 		return 0;
228 
229 	sync_ctx->consumed++;
230 	cpsw_set_mc(sync_ctx->ndev, sync_ctx->addr, vid, 0);
231 	return 0;
232 }
233 
234 static int cpsw_purge_all_mc(struct net_device *ndev, const u8 *addr, int num)
235 {
236 	struct addr_sync_ctx sync_ctx;
237 
238 	sync_ctx.addr = addr;
239 	sync_ctx.ndev = ndev;
240 	sync_ctx.consumed = 0;
241 
242 	vlan_for_each(ndev, cpsw_purge_vlan_mc, &sync_ctx);
243 	if (sync_ctx.consumed < num)
244 		cpsw_set_mc(ndev, addr, -1, 0);
245 
246 	return 0;
247 }
248 
249 static void cpsw_ndo_set_rx_mode(struct net_device *ndev)
250 {
251 	struct cpsw_priv *priv = netdev_priv(ndev);
252 	struct cpsw_common *cpsw = priv->cpsw;
253 
254 	if (ndev->flags & IFF_PROMISC) {
255 		/* Enable promiscuous mode */
256 		cpsw_set_promiscious(ndev, true);
257 		cpsw_ale_set_allmulti(cpsw->ale, IFF_ALLMULTI, priv->emac_port);
258 		return;
259 	}
260 
261 	/* Disable promiscuous mode */
262 	cpsw_set_promiscious(ndev, false);
263 
264 	/* Restore allmulti on vlans if necessary */
265 	cpsw_ale_set_allmulti(cpsw->ale,
266 			      ndev->flags & IFF_ALLMULTI, priv->emac_port);
267 
268 	/* add/remove mcast address either for real netdev or for vlan */
269 	__hw_addr_ref_sync_dev(&ndev->mc, ndev, cpsw_add_mc_addr,
270 			       cpsw_del_mc_addr);
271 }
272 
273 static unsigned int cpsw_rxbuf_total_len(unsigned int len)
274 {
275 	len += CPSW_HEADROOM;
276 	len += SKB_DATA_ALIGN(sizeof(struct skb_shared_info));
277 
278 	return SKB_DATA_ALIGN(len);
279 }
280 
281 static void cpsw_rx_handler(void *token, int len, int status)
282 {
283 	struct page *new_page, *page = token;
284 	void *pa = page_address(page);
285 	int headroom = CPSW_HEADROOM;
286 	struct cpsw_meta_xdp *xmeta;
287 	struct cpsw_common *cpsw;
288 	struct net_device *ndev;
289 	int port, ch, pkt_size;
290 	struct cpsw_priv *priv;
291 	struct page_pool *pool;
292 	struct sk_buff *skb;
293 	struct xdp_buff xdp;
294 	int ret = 0;
295 	dma_addr_t dma;
296 
297 	xmeta = pa + CPSW_XMETA_OFFSET;
298 	cpsw = ndev_to_cpsw(xmeta->ndev);
299 	ndev = xmeta->ndev;
300 	pkt_size = cpsw->rx_packet_max;
301 	ch = xmeta->ch;
302 
303 	if (status >= 0) {
304 		port = CPDMA_RX_SOURCE_PORT(status);
305 		if (port)
306 			ndev = cpsw->slaves[--port].ndev;
307 	}
308 
309 	priv = netdev_priv(ndev);
310 	pool = cpsw->page_pool[ch];
311 
312 	if (unlikely(status < 0) || unlikely(!netif_running(ndev))) {
313 		/* In dual emac mode check for all interfaces */
314 		if (cpsw->usage_count && status >= 0) {
315 			/* The packet received is for the interface which
316 			 * is already down and the other interface is up
317 			 * and running, instead of freeing which results
318 			 * in reducing of the number of rx descriptor in
319 			 * DMA engine, requeue page back to cpdma.
320 			 */
321 			new_page = page;
322 			goto requeue;
323 		}
324 
325 		/* the interface is going down, pages are purged */
326 		page_pool_recycle_direct(pool, page);
327 		return;
328 	}
329 
330 	new_page = page_pool_dev_alloc_pages(pool);
331 	if (unlikely(!new_page)) {
332 		new_page = page;
333 		ndev->stats.rx_dropped++;
334 		goto requeue;
335 	}
336 
337 	if (priv->xdp_prog) {
338 		int headroom = CPSW_HEADROOM, size = len;
339 
340 		xdp_init_buff(&xdp, PAGE_SIZE, &priv->xdp_rxq[ch]);
341 		if (status & CPDMA_RX_VLAN_ENCAP) {
342 			headroom += CPSW_RX_VLAN_ENCAP_HDR_SIZE;
343 			size -= CPSW_RX_VLAN_ENCAP_HDR_SIZE;
344 		}
345 
346 		xdp_prepare_buff(&xdp, pa, headroom, size, false);
347 
348 		ret = cpsw_run_xdp(priv, ch, &xdp, page, priv->emac_port, &len);
349 		if (ret != CPSW_XDP_PASS)
350 			goto requeue;
351 
352 		headroom = xdp.data - xdp.data_hard_start;
353 
354 		/* XDP prog can modify vlan tag, so can't use encap header */
355 		status &= ~CPDMA_RX_VLAN_ENCAP;
356 	}
357 
358 	/* pass skb to netstack if no XDP prog or returned XDP_PASS */
359 	skb = build_skb(pa, cpsw_rxbuf_total_len(pkt_size));
360 	if (!skb) {
361 		ndev->stats.rx_dropped++;
362 		page_pool_recycle_direct(pool, page);
363 		goto requeue;
364 	}
365 
366 	skb->offload_fwd_mark = priv->offload_fwd_mark;
367 	skb_reserve(skb, headroom);
368 	skb_put(skb, len);
369 	skb->dev = ndev;
370 	if (status & CPDMA_RX_VLAN_ENCAP)
371 		cpsw_rx_vlan_encap(skb);
372 	if (priv->rx_ts_enabled)
373 		cpts_rx_timestamp(cpsw->cpts, skb);
374 	skb->protocol = eth_type_trans(skb, ndev);
375 
376 	/* mark skb for recycling */
377 	skb_mark_for_recycle(skb, page, pool);
378 	netif_receive_skb(skb);
379 
380 	ndev->stats.rx_bytes += len;
381 	ndev->stats.rx_packets++;
382 
383 requeue:
384 	xmeta = page_address(new_page) + CPSW_XMETA_OFFSET;
385 	xmeta->ndev = ndev;
386 	xmeta->ch = ch;
387 
388 	dma = page_pool_get_dma_addr(new_page) + CPSW_HEADROOM;
389 	ret = cpdma_chan_submit_mapped(cpsw->rxv[ch].ch, new_page, dma,
390 				       pkt_size, 0);
391 	if (ret < 0) {
392 		WARN_ON(ret == -ENOMEM);
393 		page_pool_recycle_direct(pool, new_page);
394 	}
395 }
396 
397 static int cpsw_add_vlan_ale_entry(struct cpsw_priv *priv,
398 				   unsigned short vid)
399 {
400 	struct cpsw_common *cpsw = priv->cpsw;
401 	int unreg_mcast_mask = 0;
402 	int mcast_mask;
403 	u32 port_mask;
404 	int ret;
405 
406 	port_mask = (1 << priv->emac_port) | ALE_PORT_HOST;
407 
408 	mcast_mask = ALE_PORT_HOST;
409 	if (priv->ndev->flags & IFF_ALLMULTI)
410 		unreg_mcast_mask = mcast_mask;
411 
412 	ret = cpsw_ale_add_vlan(cpsw->ale, vid, port_mask, 0, port_mask,
413 				unreg_mcast_mask);
414 	if (ret != 0)
415 		return ret;
416 
417 	ret = cpsw_ale_add_ucast(cpsw->ale, priv->mac_addr,
418 				 HOST_PORT_NUM, ALE_VLAN, vid);
419 	if (ret != 0)
420 		goto clean_vid;
421 
422 	ret = cpsw_ale_add_mcast(cpsw->ale, priv->ndev->broadcast,
423 				 mcast_mask, ALE_VLAN, vid, 0);
424 	if (ret != 0)
425 		goto clean_vlan_ucast;
426 	return 0;
427 
428 clean_vlan_ucast:
429 	cpsw_ale_del_ucast(cpsw->ale, priv->mac_addr,
430 			   HOST_PORT_NUM, ALE_VLAN, vid);
431 clean_vid:
432 	cpsw_ale_del_vlan(cpsw->ale, vid, 0);
433 	return ret;
434 }
435 
436 static int cpsw_ndo_vlan_rx_add_vid(struct net_device *ndev,
437 				    __be16 proto, u16 vid)
438 {
439 	struct cpsw_priv *priv = netdev_priv(ndev);
440 	struct cpsw_common *cpsw = priv->cpsw;
441 	int ret, i;
442 
443 	if (cpsw_is_switch_en(cpsw)) {
444 		dev_dbg(cpsw->dev, ".ndo_vlan_rx_add_vid called in switch mode\n");
445 		return 0;
446 	}
447 
448 	if (vid == cpsw->data.default_vlan)
449 		return 0;
450 
451 	ret = pm_runtime_get_sync(cpsw->dev);
452 	if (ret < 0) {
453 		pm_runtime_put_noidle(cpsw->dev);
454 		return ret;
455 	}
456 
457 	/* In dual EMAC, reserved VLAN id should not be used for
458 	 * creating VLAN interfaces as this can break the dual
459 	 * EMAC port separation
460 	 */
461 	for (i = 0; i < cpsw->data.slaves; i++) {
462 		if (cpsw->slaves[i].ndev &&
463 		    vid == cpsw->slaves[i].port_vlan) {
464 			ret = -EINVAL;
465 			goto err;
466 		}
467 	}
468 
469 	dev_dbg(priv->dev, "Adding vlanid %d to vlan filter\n", vid);
470 	ret = cpsw_add_vlan_ale_entry(priv, vid);
471 err:
472 	pm_runtime_put(cpsw->dev);
473 	return ret;
474 }
475 
476 static int cpsw_restore_vlans(struct net_device *vdev, int vid, void *arg)
477 {
478 	struct cpsw_priv *priv = arg;
479 
480 	if (!vdev || !vid)
481 		return 0;
482 
483 	cpsw_ndo_vlan_rx_add_vid(priv->ndev, 0, vid);
484 	return 0;
485 }
486 
487 /* restore resources after port reset */
488 static void cpsw_restore(struct cpsw_priv *priv)
489 {
490 	struct cpsw_common *cpsw = priv->cpsw;
491 
492 	/* restore vlan configurations */
493 	vlan_for_each(priv->ndev, cpsw_restore_vlans, priv);
494 
495 	/* restore MQPRIO offload */
496 	cpsw_mqprio_resume(&cpsw->slaves[priv->emac_port - 1], priv);
497 
498 	/* restore CBS offload */
499 	cpsw_cbs_resume(&cpsw->slaves[priv->emac_port - 1], priv);
500 }
501 
502 static void cpsw_init_stp_ale_entry(struct cpsw_common *cpsw)
503 {
504 	char stpa[] = {0x01, 0x80, 0xc2, 0x0, 0x0, 0x0};
505 
506 	cpsw_ale_add_mcast(cpsw->ale, stpa,
507 			   ALE_PORT_HOST, ALE_SUPER, 0,
508 			   ALE_MCAST_BLOCK_LEARN_FWD);
509 }
510 
511 static void cpsw_init_host_port_switch(struct cpsw_common *cpsw)
512 {
513 	int vlan = cpsw->data.default_vlan;
514 
515 	writel(CPSW_FIFO_NORMAL_MODE, &cpsw->host_port_regs->tx_in_ctl);
516 
517 	writel(vlan, &cpsw->host_port_regs->port_vlan);
518 
519 	cpsw_ale_add_vlan(cpsw->ale, vlan, ALE_ALL_PORTS,
520 			  ALE_ALL_PORTS, ALE_ALL_PORTS,
521 			  ALE_PORT_1 | ALE_PORT_2);
522 
523 	cpsw_init_stp_ale_entry(cpsw);
524 
525 	cpsw_ale_control_set(cpsw->ale, HOST_PORT_NUM, ALE_P0_UNI_FLOOD, 1);
526 	dev_dbg(cpsw->dev, "Set P0_UNI_FLOOD\n");
527 	cpsw_ale_control_set(cpsw->ale, HOST_PORT_NUM, ALE_PORT_NOLEARN, 0);
528 }
529 
530 static void cpsw_init_host_port_dual_mac(struct cpsw_common *cpsw)
531 {
532 	int vlan = cpsw->data.default_vlan;
533 
534 	writel(CPSW_FIFO_DUAL_MAC_MODE, &cpsw->host_port_regs->tx_in_ctl);
535 
536 	cpsw_ale_control_set(cpsw->ale, HOST_PORT_NUM, ALE_P0_UNI_FLOOD, 0);
537 	dev_dbg(cpsw->dev, "unset P0_UNI_FLOOD\n");
538 
539 	writel(vlan, &cpsw->host_port_regs->port_vlan);
540 
541 	cpsw_ale_add_vlan(cpsw->ale, vlan, ALE_ALL_PORTS, ALE_ALL_PORTS, 0, 0);
542 	/* learning make no sense in dual_mac mode */
543 	cpsw_ale_control_set(cpsw->ale, HOST_PORT_NUM, ALE_PORT_NOLEARN, 1);
544 }
545 
546 static void cpsw_init_host_port(struct cpsw_priv *priv)
547 {
548 	struct cpsw_common *cpsw = priv->cpsw;
549 	u32 control_reg;
550 
551 	/* soft reset the controller and initialize ale */
552 	soft_reset("cpsw", &cpsw->regs->soft_reset);
553 	cpsw_ale_start(cpsw->ale);
554 
555 	/* switch to vlan unaware mode */
556 	cpsw_ale_control_set(cpsw->ale, HOST_PORT_NUM, ALE_VLAN_AWARE,
557 			     CPSW_ALE_VLAN_AWARE);
558 	control_reg = readl(&cpsw->regs->control);
559 	control_reg |= CPSW_VLAN_AWARE | CPSW_RX_VLAN_ENCAP;
560 	writel(control_reg, &cpsw->regs->control);
561 
562 	/* setup host port priority mapping */
563 	writel_relaxed(CPDMA_TX_PRIORITY_MAP,
564 		       &cpsw->host_port_regs->cpdma_tx_pri_map);
565 	writel_relaxed(0, &cpsw->host_port_regs->cpdma_rx_chan_map);
566 
567 	/* disable priority elevation */
568 	writel_relaxed(0, &cpsw->regs->ptype);
569 
570 	/* enable statistics collection only on all ports */
571 	writel_relaxed(0x7, &cpsw->regs->stat_port_en);
572 
573 	/* Enable internal fifo flow control */
574 	writel(0x7, &cpsw->regs->flow_control);
575 
576 	if (cpsw_is_switch_en(cpsw))
577 		cpsw_init_host_port_switch(cpsw);
578 	else
579 		cpsw_init_host_port_dual_mac(cpsw);
580 
581 	cpsw_ale_control_set(cpsw->ale, HOST_PORT_NUM,
582 			     ALE_PORT_STATE, ALE_PORT_STATE_FORWARD);
583 }
584 
585 static void cpsw_port_add_dual_emac_def_ale_entries(struct cpsw_priv *priv,
586 						    struct cpsw_slave *slave)
587 {
588 	u32 port_mask = 1 << priv->emac_port | ALE_PORT_HOST;
589 	struct cpsw_common *cpsw = priv->cpsw;
590 	u32 reg;
591 
592 	reg = (cpsw->version == CPSW_VERSION_1) ? CPSW1_PORT_VLAN :
593 	       CPSW2_PORT_VLAN;
594 	slave_write(slave, slave->port_vlan, reg);
595 
596 	cpsw_ale_add_vlan(cpsw->ale, slave->port_vlan, port_mask,
597 			  port_mask, port_mask, 0);
598 	cpsw_ale_add_mcast(cpsw->ale, priv->ndev->broadcast,
599 			   ALE_PORT_HOST, ALE_VLAN, slave->port_vlan,
600 			   ALE_MCAST_FWD);
601 	cpsw_ale_add_ucast(cpsw->ale, priv->mac_addr,
602 			   HOST_PORT_NUM, ALE_VLAN |
603 			   ALE_SECURE, slave->port_vlan);
604 	cpsw_ale_control_set(cpsw->ale, priv->emac_port,
605 			     ALE_PORT_DROP_UNKNOWN_VLAN, 1);
606 	/* learning make no sense in dual_mac mode */
607 	cpsw_ale_control_set(cpsw->ale, priv->emac_port,
608 			     ALE_PORT_NOLEARN, 1);
609 }
610 
611 static void cpsw_port_add_switch_def_ale_entries(struct cpsw_priv *priv,
612 						 struct cpsw_slave *slave)
613 {
614 	u32 port_mask = 1 << priv->emac_port | ALE_PORT_HOST;
615 	struct cpsw_common *cpsw = priv->cpsw;
616 	u32 reg;
617 
618 	cpsw_ale_control_set(cpsw->ale, priv->emac_port,
619 			     ALE_PORT_DROP_UNKNOWN_VLAN, 0);
620 	cpsw_ale_control_set(cpsw->ale, priv->emac_port,
621 			     ALE_PORT_NOLEARN, 0);
622 	/* disabling SA_UPDATE required to make stp work, without this setting
623 	 * Host MAC addresses will jump between ports.
624 	 * As per TRM MAC address can be defined as unicast supervisory (super)
625 	 * by setting both (ALE_BLOCKED | ALE_SECURE) which should prevent
626 	 * SA_UPDATE, but HW seems works incorrectly and setting ALE_SECURE
627 	 * causes STP packets to be dropped due to ingress filter
628 	 *	if (source address found) and (secure) and
629 	 *	   (receive port number != port_number))
630 	 *	   then discard the packet
631 	 */
632 	cpsw_ale_control_set(cpsw->ale, priv->emac_port,
633 			     ALE_PORT_NO_SA_UPDATE, 1);
634 
635 	cpsw_ale_add_mcast(cpsw->ale, priv->ndev->broadcast,
636 			   port_mask, ALE_VLAN, slave->port_vlan,
637 			   ALE_MCAST_FWD_2);
638 	cpsw_ale_add_ucast(cpsw->ale, priv->mac_addr,
639 			   HOST_PORT_NUM, ALE_VLAN, slave->port_vlan);
640 
641 	reg = (cpsw->version == CPSW_VERSION_1) ? CPSW1_PORT_VLAN :
642 	       CPSW2_PORT_VLAN;
643 	slave_write(slave, slave->port_vlan, reg);
644 }
645 
646 static void cpsw_adjust_link(struct net_device *ndev)
647 {
648 	struct cpsw_priv *priv = netdev_priv(ndev);
649 	struct cpsw_common *cpsw = priv->cpsw;
650 	struct cpsw_slave *slave;
651 	struct phy_device *phy;
652 	u32 mac_control = 0;
653 
654 	slave = &cpsw->slaves[priv->emac_port - 1];
655 	phy = slave->phy;
656 
657 	if (!phy)
658 		return;
659 
660 	if (phy->link) {
661 		mac_control = CPSW_SL_CTL_GMII_EN;
662 
663 		if (phy->speed == 1000)
664 			mac_control |= CPSW_SL_CTL_GIG;
665 		if (phy->duplex)
666 			mac_control |= CPSW_SL_CTL_FULLDUPLEX;
667 
668 		/* set speed_in input in case RMII mode is used in 100Mbps */
669 		if (phy->speed == 100)
670 			mac_control |= CPSW_SL_CTL_IFCTL_A;
671 		/* in band mode only works in 10Mbps RGMII mode */
672 		else if ((phy->speed == 10) && phy_interface_is_rgmii(phy))
673 			mac_control |= CPSW_SL_CTL_EXT_EN; /* In Band mode */
674 
675 		if (priv->rx_pause)
676 			mac_control |= CPSW_SL_CTL_RX_FLOW_EN;
677 
678 		if (priv->tx_pause)
679 			mac_control |= CPSW_SL_CTL_TX_FLOW_EN;
680 
681 		if (mac_control != slave->mac_control)
682 			cpsw_sl_ctl_set(slave->mac_sl, mac_control);
683 
684 		/* enable forwarding */
685 		cpsw_ale_control_set(cpsw->ale, priv->emac_port,
686 				     ALE_PORT_STATE, ALE_PORT_STATE_FORWARD);
687 
688 		netif_tx_wake_all_queues(ndev);
689 
690 		if (priv->shp_cfg_speed &&
691 		    priv->shp_cfg_speed != slave->phy->speed &&
692 		    !cpsw_shp_is_off(priv))
693 			dev_warn(priv->dev, "Speed was changed, CBS shaper speeds are changed!");
694 	} else {
695 		netif_tx_stop_all_queues(ndev);
696 
697 		mac_control = 0;
698 		/* disable forwarding */
699 		cpsw_ale_control_set(cpsw->ale, priv->emac_port,
700 				     ALE_PORT_STATE, ALE_PORT_STATE_DISABLE);
701 
702 		cpsw_sl_wait_for_idle(slave->mac_sl, 100);
703 
704 		cpsw_sl_ctl_reset(slave->mac_sl);
705 	}
706 
707 	if (mac_control != slave->mac_control)
708 		phy_print_status(phy);
709 
710 	slave->mac_control = mac_control;
711 
712 	if (phy->link && cpsw_need_resplit(cpsw))
713 		cpsw_split_res(cpsw);
714 }
715 
716 static void cpsw_slave_open(struct cpsw_slave *slave, struct cpsw_priv *priv)
717 {
718 	struct cpsw_common *cpsw = priv->cpsw;
719 	struct phy_device *phy;
720 
721 	cpsw_sl_reset(slave->mac_sl, 100);
722 	cpsw_sl_ctl_reset(slave->mac_sl);
723 
724 	/* setup priority mapping */
725 	cpsw_sl_reg_write(slave->mac_sl, CPSW_SL_RX_PRI_MAP,
726 			  RX_PRIORITY_MAPPING);
727 
728 	switch (cpsw->version) {
729 	case CPSW_VERSION_1:
730 		slave_write(slave, TX_PRIORITY_MAPPING, CPSW1_TX_PRI_MAP);
731 		/* Increase RX FIFO size to 5 for supporting fullduplex
732 		 * flow control mode
733 		 */
734 		slave_write(slave,
735 			    (CPSW_MAX_BLKS_TX << CPSW_MAX_BLKS_TX_SHIFT) |
736 			    CPSW_MAX_BLKS_RX, CPSW1_MAX_BLKS);
737 		break;
738 	case CPSW_VERSION_2:
739 	case CPSW_VERSION_3:
740 	case CPSW_VERSION_4:
741 		slave_write(slave, TX_PRIORITY_MAPPING, CPSW2_TX_PRI_MAP);
742 		/* Increase RX FIFO size to 5 for supporting fullduplex
743 		 * flow control mode
744 		 */
745 		slave_write(slave,
746 			    (CPSW_MAX_BLKS_TX << CPSW_MAX_BLKS_TX_SHIFT) |
747 			    CPSW_MAX_BLKS_RX, CPSW2_MAX_BLKS);
748 		break;
749 	}
750 
751 	/* setup max packet size, and mac address */
752 	cpsw_sl_reg_write(slave->mac_sl, CPSW_SL_RX_MAXLEN,
753 			  cpsw->rx_packet_max);
754 	cpsw_set_slave_mac(slave, priv);
755 
756 	slave->mac_control = 0;	/* no link yet */
757 
758 	if (cpsw_is_switch_en(cpsw))
759 		cpsw_port_add_switch_def_ale_entries(priv, slave);
760 	else
761 		cpsw_port_add_dual_emac_def_ale_entries(priv, slave);
762 
763 	if (!slave->data->phy_node)
764 		dev_err(priv->dev, "no phy found on slave %d\n",
765 			slave->slave_num);
766 	phy = of_phy_connect(priv->ndev, slave->data->phy_node,
767 			     &cpsw_adjust_link, 0, slave->data->phy_if);
768 	if (!phy) {
769 		dev_err(priv->dev, "phy \"%pOF\" not found on slave %d\n",
770 			slave->data->phy_node,
771 			slave->slave_num);
772 		return;
773 	}
774 	slave->phy = phy;
775 
776 	phy_attached_info(slave->phy);
777 
778 	phy_start(slave->phy);
779 
780 	/* Configure GMII_SEL register */
781 	phy_set_mode_ext(slave->data->ifphy, PHY_MODE_ETHERNET,
782 			 slave->data->phy_if);
783 }
784 
785 static int cpsw_ndo_stop(struct net_device *ndev)
786 {
787 	struct cpsw_priv *priv = netdev_priv(ndev);
788 	struct cpsw_common *cpsw = priv->cpsw;
789 	struct cpsw_slave *slave;
790 
791 	cpsw_info(priv, ifdown, "shutting down ndev\n");
792 	slave = &cpsw->slaves[priv->emac_port - 1];
793 	if (slave->phy)
794 		phy_stop(slave->phy);
795 
796 	netif_tx_stop_all_queues(priv->ndev);
797 
798 	if (slave->phy) {
799 		phy_disconnect(slave->phy);
800 		slave->phy = NULL;
801 	}
802 
803 	__hw_addr_ref_unsync_dev(&ndev->mc, ndev, cpsw_purge_all_mc);
804 
805 	if (cpsw->usage_count <= 1) {
806 		napi_disable(&cpsw->napi_rx);
807 		napi_disable(&cpsw->napi_tx);
808 		cpts_unregister(cpsw->cpts);
809 		cpsw_intr_disable(cpsw);
810 		cpdma_ctlr_stop(cpsw->dma);
811 		cpsw_ale_stop(cpsw->ale);
812 		cpsw_destroy_xdp_rxqs(cpsw);
813 	}
814 
815 	if (cpsw_need_resplit(cpsw))
816 		cpsw_split_res(cpsw);
817 
818 	cpsw->usage_count--;
819 	pm_runtime_put_sync(cpsw->dev);
820 	return 0;
821 }
822 
823 static int cpsw_ndo_open(struct net_device *ndev)
824 {
825 	struct cpsw_priv *priv = netdev_priv(ndev);
826 	struct cpsw_common *cpsw = priv->cpsw;
827 	int ret;
828 
829 	dev_info(priv->dev, "starting ndev. mode: %s\n",
830 		 cpsw_is_switch_en(cpsw) ? "switch" : "dual_mac");
831 	ret = pm_runtime_get_sync(cpsw->dev);
832 	if (ret < 0) {
833 		pm_runtime_put_noidle(cpsw->dev);
834 		return ret;
835 	}
836 
837 	/* Notify the stack of the actual queue counts. */
838 	ret = netif_set_real_num_tx_queues(ndev, cpsw->tx_ch_num);
839 	if (ret) {
840 		dev_err(priv->dev, "cannot set real number of tx queues\n");
841 		goto pm_cleanup;
842 	}
843 
844 	ret = netif_set_real_num_rx_queues(ndev, cpsw->rx_ch_num);
845 	if (ret) {
846 		dev_err(priv->dev, "cannot set real number of rx queues\n");
847 		goto pm_cleanup;
848 	}
849 
850 	/* Initialize host and slave ports */
851 	if (!cpsw->usage_count)
852 		cpsw_init_host_port(priv);
853 	cpsw_slave_open(&cpsw->slaves[priv->emac_port - 1], priv);
854 
855 	/* initialize shared resources for every ndev */
856 	if (!cpsw->usage_count) {
857 		/* create rxqs for both infs in dual mac as they use same pool
858 		 * and must be destroyed together when no users.
859 		 */
860 		ret = cpsw_create_xdp_rxqs(cpsw);
861 		if (ret < 0)
862 			goto err_cleanup;
863 
864 		ret = cpsw_fill_rx_channels(priv);
865 		if (ret < 0)
866 			goto err_cleanup;
867 
868 		if (cpsw->cpts) {
869 			if (cpts_register(cpsw->cpts))
870 				dev_err(priv->dev, "error registering cpts device\n");
871 			else
872 				writel(0x10, &cpsw->wr_regs->misc_en);
873 		}
874 
875 		napi_enable(&cpsw->napi_rx);
876 		napi_enable(&cpsw->napi_tx);
877 
878 		if (cpsw->tx_irq_disabled) {
879 			cpsw->tx_irq_disabled = false;
880 			enable_irq(cpsw->irqs_table[1]);
881 		}
882 
883 		if (cpsw->rx_irq_disabled) {
884 			cpsw->rx_irq_disabled = false;
885 			enable_irq(cpsw->irqs_table[0]);
886 		}
887 	}
888 
889 	cpsw_restore(priv);
890 
891 	/* Enable Interrupt pacing if configured */
892 	if (cpsw->coal_intvl != 0) {
893 		struct ethtool_coalesce coal;
894 
895 		coal.rx_coalesce_usecs = cpsw->coal_intvl;
896 		cpsw_set_coalesce(ndev, &coal);
897 	}
898 
899 	cpdma_ctlr_start(cpsw->dma);
900 	cpsw_intr_enable(cpsw);
901 	cpsw->usage_count++;
902 
903 	return 0;
904 
905 err_cleanup:
906 	cpsw_ndo_stop(ndev);
907 
908 pm_cleanup:
909 	pm_runtime_put_sync(cpsw->dev);
910 	return ret;
911 }
912 
913 static netdev_tx_t cpsw_ndo_start_xmit(struct sk_buff *skb,
914 				       struct net_device *ndev)
915 {
916 	struct cpsw_priv *priv = netdev_priv(ndev);
917 	struct cpsw_common *cpsw = priv->cpsw;
918 	struct cpts *cpts = cpsw->cpts;
919 	struct netdev_queue *txq;
920 	struct cpdma_chan *txch;
921 	int ret, q_idx;
922 
923 	if (skb_padto(skb, CPSW_MIN_PACKET_SIZE)) {
924 		cpsw_err(priv, tx_err, "packet pad failed\n");
925 		ndev->stats.tx_dropped++;
926 		return NET_XMIT_DROP;
927 	}
928 
929 	if (skb_shinfo(skb)->tx_flags & SKBTX_HW_TSTAMP &&
930 	    priv->tx_ts_enabled && cpts_can_timestamp(cpts, skb))
931 		skb_shinfo(skb)->tx_flags |= SKBTX_IN_PROGRESS;
932 
933 	q_idx = skb_get_queue_mapping(skb);
934 	if (q_idx >= cpsw->tx_ch_num)
935 		q_idx = q_idx % cpsw->tx_ch_num;
936 
937 	txch = cpsw->txv[q_idx].ch;
938 	txq = netdev_get_tx_queue(ndev, q_idx);
939 	skb_tx_timestamp(skb);
940 	ret = cpdma_chan_submit(txch, skb, skb->data, skb->len,
941 				priv->emac_port);
942 	if (unlikely(ret != 0)) {
943 		cpsw_err(priv, tx_err, "desc submit failed\n");
944 		goto fail;
945 	}
946 
947 	/* If there is no more tx desc left free then we need to
948 	 * tell the kernel to stop sending us tx frames.
949 	 */
950 	if (unlikely(!cpdma_check_free_tx_desc(txch))) {
951 		netif_tx_stop_queue(txq);
952 
953 		/* Barrier, so that stop_queue visible to other cpus */
954 		smp_mb__after_atomic();
955 
956 		if (cpdma_check_free_tx_desc(txch))
957 			netif_tx_wake_queue(txq);
958 	}
959 
960 	return NETDEV_TX_OK;
961 fail:
962 	ndev->stats.tx_dropped++;
963 	netif_tx_stop_queue(txq);
964 
965 	/* Barrier, so that stop_queue visible to other cpus */
966 	smp_mb__after_atomic();
967 
968 	if (cpdma_check_free_tx_desc(txch))
969 		netif_tx_wake_queue(txq);
970 
971 	return NETDEV_TX_BUSY;
972 }
973 
974 static int cpsw_ndo_set_mac_address(struct net_device *ndev, void *p)
975 {
976 	struct sockaddr *addr = (struct sockaddr *)p;
977 	struct cpsw_priv *priv = netdev_priv(ndev);
978 	struct cpsw_common *cpsw = priv->cpsw;
979 	int ret, slave_no;
980 	int flags = 0;
981 	u16 vid = 0;
982 
983 	slave_no = cpsw_slave_index(cpsw, priv);
984 	if (!is_valid_ether_addr(addr->sa_data))
985 		return -EADDRNOTAVAIL;
986 
987 	ret = pm_runtime_get_sync(cpsw->dev);
988 	if (ret < 0) {
989 		pm_runtime_put_noidle(cpsw->dev);
990 		return ret;
991 	}
992 
993 	vid = cpsw->slaves[slave_no].port_vlan;
994 	flags = ALE_VLAN | ALE_SECURE;
995 
996 	cpsw_ale_del_ucast(cpsw->ale, priv->mac_addr, HOST_PORT_NUM,
997 			   flags, vid);
998 	cpsw_ale_add_ucast(cpsw->ale, addr->sa_data, HOST_PORT_NUM,
999 			   flags, vid);
1000 
1001 	ether_addr_copy(priv->mac_addr, addr->sa_data);
1002 	ether_addr_copy(ndev->dev_addr, priv->mac_addr);
1003 	cpsw_set_slave_mac(&cpsw->slaves[slave_no], priv);
1004 
1005 	pm_runtime_put(cpsw->dev);
1006 
1007 	return 0;
1008 }
1009 
1010 static int cpsw_ndo_vlan_rx_kill_vid(struct net_device *ndev,
1011 				     __be16 proto, u16 vid)
1012 {
1013 	struct cpsw_priv *priv = netdev_priv(ndev);
1014 	struct cpsw_common *cpsw = priv->cpsw;
1015 	int ret;
1016 	int i;
1017 
1018 	if (cpsw_is_switch_en(cpsw)) {
1019 		dev_dbg(cpsw->dev, "ndo del vlan is called in switch mode\n");
1020 		return 0;
1021 	}
1022 
1023 	if (vid == cpsw->data.default_vlan)
1024 		return 0;
1025 
1026 	ret = pm_runtime_get_sync(cpsw->dev);
1027 	if (ret < 0) {
1028 		pm_runtime_put_noidle(cpsw->dev);
1029 		return ret;
1030 	}
1031 
1032 	/* reset the return code as pm_runtime_get_sync() can return
1033 	 * non zero values as well.
1034 	 */
1035 	ret = 0;
1036 	for (i = 0; i < cpsw->data.slaves; i++) {
1037 		if (cpsw->slaves[i].ndev &&
1038 		    vid == cpsw->slaves[i].port_vlan) {
1039 			ret = -EINVAL;
1040 			goto err;
1041 		}
1042 	}
1043 
1044 	dev_dbg(priv->dev, "removing vlanid %d from vlan filter\n", vid);
1045 	ret = cpsw_ale_del_vlan(cpsw->ale, vid, 0);
1046 	if (ret)
1047 		dev_err(priv->dev, "cpsw_ale_del_vlan() failed: ret %d\n", ret);
1048 	ret = cpsw_ale_del_ucast(cpsw->ale, priv->mac_addr,
1049 				 HOST_PORT_NUM, ALE_VLAN, vid);
1050 	if (ret)
1051 		dev_err(priv->dev, "cpsw_ale_del_ucast() failed: ret %d\n",
1052 			ret);
1053 	ret = cpsw_ale_del_mcast(cpsw->ale, priv->ndev->broadcast,
1054 				 0, ALE_VLAN, vid);
1055 	if (ret)
1056 		dev_err(priv->dev, "cpsw_ale_del_mcast failed. ret %d\n",
1057 			ret);
1058 	cpsw_ale_flush_multicast(cpsw->ale, ALE_PORT_HOST, vid);
1059 	ret = 0;
1060 err:
1061 	pm_runtime_put(cpsw->dev);
1062 	return ret;
1063 }
1064 
1065 static int cpsw_ndo_get_phys_port_name(struct net_device *ndev, char *name,
1066 				       size_t len)
1067 {
1068 	struct cpsw_priv *priv = netdev_priv(ndev);
1069 	int err;
1070 
1071 	err = snprintf(name, len, "p%d", priv->emac_port);
1072 
1073 	if (err >= len)
1074 		return -EINVAL;
1075 
1076 	return 0;
1077 }
1078 
1079 #ifdef CONFIG_NET_POLL_CONTROLLER
1080 static void cpsw_ndo_poll_controller(struct net_device *ndev)
1081 {
1082 	struct cpsw_common *cpsw = ndev_to_cpsw(ndev);
1083 
1084 	cpsw_intr_disable(cpsw);
1085 	cpsw_rx_interrupt(cpsw->irqs_table[0], cpsw);
1086 	cpsw_tx_interrupt(cpsw->irqs_table[1], cpsw);
1087 	cpsw_intr_enable(cpsw);
1088 }
1089 #endif
1090 
1091 static int cpsw_ndo_xdp_xmit(struct net_device *ndev, int n,
1092 			     struct xdp_frame **frames, u32 flags)
1093 {
1094 	struct cpsw_priv *priv = netdev_priv(ndev);
1095 	struct xdp_frame *xdpf;
1096 	int i, nxmit = 0;
1097 
1098 	if (unlikely(flags & ~XDP_XMIT_FLAGS_MASK))
1099 		return -EINVAL;
1100 
1101 	for (i = 0; i < n; i++) {
1102 		xdpf = frames[i];
1103 		if (xdpf->len < CPSW_MIN_PACKET_SIZE)
1104 			break;
1105 
1106 		if (cpsw_xdp_tx_frame(priv, xdpf, NULL, priv->emac_port))
1107 			break;
1108 		nxmit++;
1109 	}
1110 
1111 	return nxmit;
1112 }
1113 
1114 static int cpsw_get_port_parent_id(struct net_device *ndev,
1115 				   struct netdev_phys_item_id *ppid)
1116 {
1117 	struct cpsw_common *cpsw = ndev_to_cpsw(ndev);
1118 
1119 	ppid->id_len = sizeof(cpsw->base_mac);
1120 	memcpy(&ppid->id, &cpsw->base_mac, ppid->id_len);
1121 
1122 	return 0;
1123 }
1124 
1125 static const struct net_device_ops cpsw_netdev_ops = {
1126 	.ndo_open		= cpsw_ndo_open,
1127 	.ndo_stop		= cpsw_ndo_stop,
1128 	.ndo_start_xmit		= cpsw_ndo_start_xmit,
1129 	.ndo_set_mac_address	= cpsw_ndo_set_mac_address,
1130 	.ndo_do_ioctl		= cpsw_ndo_ioctl,
1131 	.ndo_validate_addr	= eth_validate_addr,
1132 	.ndo_tx_timeout		= cpsw_ndo_tx_timeout,
1133 	.ndo_set_rx_mode	= cpsw_ndo_set_rx_mode,
1134 	.ndo_set_tx_maxrate	= cpsw_ndo_set_tx_maxrate,
1135 #ifdef CONFIG_NET_POLL_CONTROLLER
1136 	.ndo_poll_controller	= cpsw_ndo_poll_controller,
1137 #endif
1138 	.ndo_vlan_rx_add_vid	= cpsw_ndo_vlan_rx_add_vid,
1139 	.ndo_vlan_rx_kill_vid	= cpsw_ndo_vlan_rx_kill_vid,
1140 	.ndo_setup_tc           = cpsw_ndo_setup_tc,
1141 	.ndo_get_phys_port_name = cpsw_ndo_get_phys_port_name,
1142 	.ndo_bpf		= cpsw_ndo_bpf,
1143 	.ndo_xdp_xmit		= cpsw_ndo_xdp_xmit,
1144 	.ndo_get_port_parent_id	= cpsw_get_port_parent_id,
1145 };
1146 
1147 static void cpsw_get_drvinfo(struct net_device *ndev,
1148 			     struct ethtool_drvinfo *info)
1149 {
1150 	struct cpsw_common *cpsw = ndev_to_cpsw(ndev);
1151 	struct platform_device *pdev;
1152 
1153 	pdev = to_platform_device(cpsw->dev);
1154 	strlcpy(info->driver, "cpsw-switch", sizeof(info->driver));
1155 	strlcpy(info->version, "2.0", sizeof(info->version));
1156 	strlcpy(info->bus_info, pdev->name, sizeof(info->bus_info));
1157 }
1158 
1159 static int cpsw_set_pauseparam(struct net_device *ndev,
1160 			       struct ethtool_pauseparam *pause)
1161 {
1162 	struct cpsw_common *cpsw = ndev_to_cpsw(ndev);
1163 	struct cpsw_priv *priv = netdev_priv(ndev);
1164 	int slave_no;
1165 
1166 	slave_no = cpsw_slave_index(cpsw, priv);
1167 	if (!cpsw->slaves[slave_no].phy)
1168 		return -EINVAL;
1169 
1170 	if (!phy_validate_pause(cpsw->slaves[slave_no].phy, pause))
1171 		return -EINVAL;
1172 
1173 	priv->rx_pause = pause->rx_pause ? true : false;
1174 	priv->tx_pause = pause->tx_pause ? true : false;
1175 
1176 	phy_set_asym_pause(cpsw->slaves[slave_no].phy,
1177 			   priv->rx_pause, priv->tx_pause);
1178 
1179 	return 0;
1180 }
1181 
1182 static int cpsw_set_channels(struct net_device *ndev,
1183 			     struct ethtool_channels *chs)
1184 {
1185 	return cpsw_set_channels_common(ndev, chs, cpsw_rx_handler);
1186 }
1187 
1188 static const struct ethtool_ops cpsw_ethtool_ops = {
1189 	.supported_coalesce_params = ETHTOOL_COALESCE_RX_USECS,
1190 	.get_drvinfo		= cpsw_get_drvinfo,
1191 	.get_msglevel		= cpsw_get_msglevel,
1192 	.set_msglevel		= cpsw_set_msglevel,
1193 	.get_link		= ethtool_op_get_link,
1194 	.get_ts_info		= cpsw_get_ts_info,
1195 	.get_coalesce		= cpsw_get_coalesce,
1196 	.set_coalesce		= cpsw_set_coalesce,
1197 	.get_sset_count		= cpsw_get_sset_count,
1198 	.get_strings		= cpsw_get_strings,
1199 	.get_ethtool_stats	= cpsw_get_ethtool_stats,
1200 	.get_pauseparam		= cpsw_get_pauseparam,
1201 	.set_pauseparam		= cpsw_set_pauseparam,
1202 	.get_wol		= cpsw_get_wol,
1203 	.set_wol		= cpsw_set_wol,
1204 	.get_regs_len		= cpsw_get_regs_len,
1205 	.get_regs		= cpsw_get_regs,
1206 	.begin			= cpsw_ethtool_op_begin,
1207 	.complete		= cpsw_ethtool_op_complete,
1208 	.get_channels		= cpsw_get_channels,
1209 	.set_channels		= cpsw_set_channels,
1210 	.get_link_ksettings	= cpsw_get_link_ksettings,
1211 	.set_link_ksettings	= cpsw_set_link_ksettings,
1212 	.get_eee		= cpsw_get_eee,
1213 	.set_eee		= cpsw_set_eee,
1214 	.nway_reset		= cpsw_nway_reset,
1215 	.get_ringparam		= cpsw_get_ringparam,
1216 	.set_ringparam		= cpsw_set_ringparam,
1217 };
1218 
1219 static int cpsw_probe_dt(struct cpsw_common *cpsw)
1220 {
1221 	struct device_node *node = cpsw->dev->of_node, *tmp_node, *port_np;
1222 	struct cpsw_platform_data *data = &cpsw->data;
1223 	struct device *dev = cpsw->dev;
1224 	int ret;
1225 	u32 prop;
1226 
1227 	if (!node)
1228 		return -EINVAL;
1229 
1230 	tmp_node = of_get_child_by_name(node, "ethernet-ports");
1231 	if (!tmp_node)
1232 		return -ENOENT;
1233 	data->slaves = of_get_child_count(tmp_node);
1234 	if (data->slaves != CPSW_SLAVE_PORTS_NUM) {
1235 		of_node_put(tmp_node);
1236 		return -ENOENT;
1237 	}
1238 
1239 	data->active_slave = 0;
1240 	data->channels = CPSW_MAX_QUEUES;
1241 	data->dual_emac = true;
1242 	data->bd_ram_size = CPSW_BD_RAM_SIZE;
1243 	data->mac_control = 0;
1244 
1245 	data->slave_data = devm_kcalloc(dev, CPSW_SLAVE_PORTS_NUM,
1246 					sizeof(struct cpsw_slave_data),
1247 					GFP_KERNEL);
1248 	if (!data->slave_data)
1249 		return -ENOMEM;
1250 
1251 	/* Populate all the child nodes here...
1252 	 */
1253 	ret = devm_of_platform_populate(dev);
1254 	/* We do not want to force this, as in some cases may not have child */
1255 	if (ret)
1256 		dev_warn(dev, "Doesn't have any child node\n");
1257 
1258 	for_each_child_of_node(tmp_node, port_np) {
1259 		struct cpsw_slave_data *slave_data;
1260 		u32 port_id;
1261 
1262 		ret = of_property_read_u32(port_np, "reg", &port_id);
1263 		if (ret < 0) {
1264 			dev_err(dev, "%pOF error reading port_id %d\n",
1265 				port_np, ret);
1266 			goto err_node_put;
1267 		}
1268 
1269 		if (!port_id || port_id > CPSW_SLAVE_PORTS_NUM) {
1270 			dev_err(dev, "%pOF has invalid port_id %u\n",
1271 				port_np, port_id);
1272 			ret = -EINVAL;
1273 			goto err_node_put;
1274 		}
1275 
1276 		slave_data = &data->slave_data[port_id - 1];
1277 
1278 		slave_data->disabled = !of_device_is_available(port_np);
1279 		if (slave_data->disabled)
1280 			continue;
1281 
1282 		slave_data->slave_node = port_np;
1283 		slave_data->ifphy = devm_of_phy_get(dev, port_np, NULL);
1284 		if (IS_ERR(slave_data->ifphy)) {
1285 			ret = PTR_ERR(slave_data->ifphy);
1286 			dev_err(dev, "%pOF: Error retrieving port phy: %d\n",
1287 				port_np, ret);
1288 			goto err_node_put;
1289 		}
1290 
1291 		if (of_phy_is_fixed_link(port_np)) {
1292 			ret = of_phy_register_fixed_link(port_np);
1293 			if (ret) {
1294 				if (ret != -EPROBE_DEFER)
1295 					dev_err(dev, "%pOF failed to register fixed-link phy: %d\n",
1296 						port_np, ret);
1297 				goto err_node_put;
1298 			}
1299 			slave_data->phy_node = of_node_get(port_np);
1300 		} else {
1301 			slave_data->phy_node =
1302 				of_parse_phandle(port_np, "phy-handle", 0);
1303 		}
1304 
1305 		if (!slave_data->phy_node) {
1306 			dev_err(dev, "%pOF no phy found\n", port_np);
1307 			ret = -ENODEV;
1308 			goto err_node_put;
1309 		}
1310 
1311 		ret = of_get_phy_mode(port_np, &slave_data->phy_if);
1312 		if (ret) {
1313 			dev_err(dev, "%pOF read phy-mode err %d\n",
1314 				port_np, ret);
1315 			goto err_node_put;
1316 		}
1317 
1318 		ret = of_get_mac_address(port_np, slave_data->mac_addr);
1319 		if (ret) {
1320 			ret = ti_cm_get_macid(dev, port_id - 1,
1321 					      slave_data->mac_addr);
1322 			if (ret)
1323 				goto err_node_put;
1324 		}
1325 
1326 		if (of_property_read_u32(port_np, "ti,dual-emac-pvid",
1327 					 &prop)) {
1328 			dev_err(dev, "%pOF Missing dual_emac_res_vlan in DT.\n",
1329 				port_np);
1330 			slave_data->dual_emac_res_vlan = port_id;
1331 			dev_err(dev, "%pOF Using %d as Reserved VLAN\n",
1332 				port_np, slave_data->dual_emac_res_vlan);
1333 		} else {
1334 			slave_data->dual_emac_res_vlan = prop;
1335 		}
1336 	}
1337 
1338 	of_node_put(tmp_node);
1339 	return 0;
1340 
1341 err_node_put:
1342 	of_node_put(port_np);
1343 	return ret;
1344 }
1345 
1346 static void cpsw_remove_dt(struct cpsw_common *cpsw)
1347 {
1348 	struct cpsw_platform_data *data = &cpsw->data;
1349 	int i = 0;
1350 
1351 	for (i = 0; i < cpsw->data.slaves; i++) {
1352 		struct cpsw_slave_data *slave_data = &data->slave_data[i];
1353 		struct device_node *port_np = slave_data->phy_node;
1354 
1355 		if (port_np) {
1356 			if (of_phy_is_fixed_link(port_np))
1357 				of_phy_deregister_fixed_link(port_np);
1358 
1359 			of_node_put(port_np);
1360 		}
1361 	}
1362 }
1363 
1364 static int cpsw_create_ports(struct cpsw_common *cpsw)
1365 {
1366 	struct cpsw_platform_data *data = &cpsw->data;
1367 	struct net_device *ndev, *napi_ndev = NULL;
1368 	struct device *dev = cpsw->dev;
1369 	struct cpsw_priv *priv;
1370 	int ret = 0, i = 0;
1371 
1372 	for (i = 0; i < cpsw->data.slaves; i++) {
1373 		struct cpsw_slave_data *slave_data = &data->slave_data[i];
1374 
1375 		if (slave_data->disabled)
1376 			continue;
1377 
1378 		ndev = devm_alloc_etherdev_mqs(dev, sizeof(struct cpsw_priv),
1379 					       CPSW_MAX_QUEUES,
1380 					       CPSW_MAX_QUEUES);
1381 		if (!ndev) {
1382 			dev_err(dev, "error allocating net_device\n");
1383 			return -ENOMEM;
1384 		}
1385 
1386 		priv = netdev_priv(ndev);
1387 		priv->cpsw = cpsw;
1388 		priv->ndev = ndev;
1389 		priv->dev  = dev;
1390 		priv->msg_enable = netif_msg_init(debug_level, CPSW_DEBUG);
1391 		priv->emac_port = i + 1;
1392 
1393 		if (is_valid_ether_addr(slave_data->mac_addr)) {
1394 			ether_addr_copy(priv->mac_addr, slave_data->mac_addr);
1395 			dev_info(cpsw->dev, "Detected MACID = %pM\n",
1396 				 priv->mac_addr);
1397 		} else {
1398 			eth_random_addr(slave_data->mac_addr);
1399 			dev_info(cpsw->dev, "Random MACID = %pM\n",
1400 				 priv->mac_addr);
1401 		}
1402 		ether_addr_copy(ndev->dev_addr, slave_data->mac_addr);
1403 		ether_addr_copy(priv->mac_addr, slave_data->mac_addr);
1404 
1405 		cpsw->slaves[i].ndev = ndev;
1406 
1407 		ndev->features |= NETIF_F_HW_VLAN_CTAG_FILTER |
1408 				  NETIF_F_HW_VLAN_CTAG_RX | NETIF_F_NETNS_LOCAL;
1409 
1410 		ndev->netdev_ops = &cpsw_netdev_ops;
1411 		ndev->ethtool_ops = &cpsw_ethtool_ops;
1412 		SET_NETDEV_DEV(ndev, dev);
1413 
1414 		if (!napi_ndev) {
1415 			/* CPSW Host port CPDMA interface is shared between
1416 			 * ports and there is only one TX and one RX IRQs
1417 			 * available for all possible TX and RX channels
1418 			 * accordingly.
1419 			 */
1420 			netif_napi_add(ndev, &cpsw->napi_rx,
1421 				       cpsw->quirk_irq ?
1422 				       cpsw_rx_poll : cpsw_rx_mq_poll,
1423 				       CPSW_POLL_WEIGHT);
1424 			netif_tx_napi_add(ndev, &cpsw->napi_tx,
1425 					  cpsw->quirk_irq ?
1426 					  cpsw_tx_poll : cpsw_tx_mq_poll,
1427 					  CPSW_POLL_WEIGHT);
1428 		}
1429 
1430 		napi_ndev = ndev;
1431 	}
1432 
1433 	return ret;
1434 }
1435 
1436 static void cpsw_unregister_ports(struct cpsw_common *cpsw)
1437 {
1438 	int i = 0;
1439 
1440 	for (i = 0; i < cpsw->data.slaves; i++) {
1441 		if (!cpsw->slaves[i].ndev)
1442 			continue;
1443 
1444 		unregister_netdev(cpsw->slaves[i].ndev);
1445 	}
1446 }
1447 
1448 static int cpsw_register_ports(struct cpsw_common *cpsw)
1449 {
1450 	int ret = 0, i = 0;
1451 
1452 	for (i = 0; i < cpsw->data.slaves; i++) {
1453 		if (!cpsw->slaves[i].ndev)
1454 			continue;
1455 
1456 		/* register the network device */
1457 		ret = register_netdev(cpsw->slaves[i].ndev);
1458 		if (ret) {
1459 			dev_err(cpsw->dev,
1460 				"cpsw: err registering net device%d\n", i);
1461 			cpsw->slaves[i].ndev = NULL;
1462 			break;
1463 		}
1464 	}
1465 
1466 	if (ret)
1467 		cpsw_unregister_ports(cpsw);
1468 	return ret;
1469 }
1470 
1471 bool cpsw_port_dev_check(const struct net_device *ndev)
1472 {
1473 	if (ndev->netdev_ops == &cpsw_netdev_ops) {
1474 		struct cpsw_common *cpsw = ndev_to_cpsw(ndev);
1475 
1476 		return !cpsw->data.dual_emac;
1477 	}
1478 
1479 	return false;
1480 }
1481 
1482 static void cpsw_port_offload_fwd_mark_update(struct cpsw_common *cpsw)
1483 {
1484 	int set_val = 0;
1485 	int i;
1486 
1487 	if (!cpsw->ale_bypass &&
1488 	    (cpsw->br_members == (ALE_PORT_1 | ALE_PORT_2)))
1489 		set_val = 1;
1490 
1491 	dev_dbg(cpsw->dev, "set offload_fwd_mark %d\n", set_val);
1492 
1493 	for (i = 0; i < cpsw->data.slaves; i++) {
1494 		struct net_device *sl_ndev = cpsw->slaves[i].ndev;
1495 		struct cpsw_priv *priv = netdev_priv(sl_ndev);
1496 
1497 		priv->offload_fwd_mark = set_val;
1498 	}
1499 }
1500 
1501 static int cpsw_netdevice_port_link(struct net_device *ndev,
1502 				    struct net_device *br_ndev)
1503 {
1504 	struct cpsw_priv *priv = netdev_priv(ndev);
1505 	struct cpsw_common *cpsw = priv->cpsw;
1506 
1507 	if (!cpsw->br_members) {
1508 		cpsw->hw_bridge_dev = br_ndev;
1509 	} else {
1510 		/* This is adding the port to a second bridge, this is
1511 		 * unsupported
1512 		 */
1513 		if (cpsw->hw_bridge_dev != br_ndev)
1514 			return -EOPNOTSUPP;
1515 	}
1516 
1517 	cpsw->br_members |= BIT(priv->emac_port);
1518 
1519 	cpsw_port_offload_fwd_mark_update(cpsw);
1520 
1521 	return NOTIFY_DONE;
1522 }
1523 
1524 static void cpsw_netdevice_port_unlink(struct net_device *ndev)
1525 {
1526 	struct cpsw_priv *priv = netdev_priv(ndev);
1527 	struct cpsw_common *cpsw = priv->cpsw;
1528 
1529 	cpsw->br_members &= ~BIT(priv->emac_port);
1530 
1531 	cpsw_port_offload_fwd_mark_update(cpsw);
1532 
1533 	if (!cpsw->br_members)
1534 		cpsw->hw_bridge_dev = NULL;
1535 }
1536 
1537 /* netdev notifier */
1538 static int cpsw_netdevice_event(struct notifier_block *unused,
1539 				unsigned long event, void *ptr)
1540 {
1541 	struct net_device *ndev = netdev_notifier_info_to_dev(ptr);
1542 	struct netdev_notifier_changeupper_info *info;
1543 	int ret = NOTIFY_DONE;
1544 
1545 	if (!cpsw_port_dev_check(ndev))
1546 		return NOTIFY_DONE;
1547 
1548 	switch (event) {
1549 	case NETDEV_CHANGEUPPER:
1550 		info = ptr;
1551 
1552 		if (netif_is_bridge_master(info->upper_dev)) {
1553 			if (info->linking)
1554 				ret = cpsw_netdevice_port_link(ndev,
1555 							       info->upper_dev);
1556 			else
1557 				cpsw_netdevice_port_unlink(ndev);
1558 		}
1559 		break;
1560 	default:
1561 		return NOTIFY_DONE;
1562 	}
1563 
1564 	return notifier_from_errno(ret);
1565 }
1566 
1567 static struct notifier_block cpsw_netdevice_nb __read_mostly = {
1568 	.notifier_call = cpsw_netdevice_event,
1569 };
1570 
1571 static int cpsw_register_notifiers(struct cpsw_common *cpsw)
1572 {
1573 	int ret = 0;
1574 
1575 	ret = register_netdevice_notifier(&cpsw_netdevice_nb);
1576 	if (ret) {
1577 		dev_err(cpsw->dev, "can't register netdevice notifier\n");
1578 		return ret;
1579 	}
1580 
1581 	ret = cpsw_switchdev_register_notifiers(cpsw);
1582 	if (ret)
1583 		unregister_netdevice_notifier(&cpsw_netdevice_nb);
1584 
1585 	return ret;
1586 }
1587 
1588 static void cpsw_unregister_notifiers(struct cpsw_common *cpsw)
1589 {
1590 	cpsw_switchdev_unregister_notifiers(cpsw);
1591 	unregister_netdevice_notifier(&cpsw_netdevice_nb);
1592 }
1593 
1594 static const struct devlink_ops cpsw_devlink_ops = {
1595 };
1596 
1597 static int cpsw_dl_switch_mode_get(struct devlink *dl, u32 id,
1598 				   struct devlink_param_gset_ctx *ctx)
1599 {
1600 	struct cpsw_devlink *dl_priv = devlink_priv(dl);
1601 	struct cpsw_common *cpsw = dl_priv->cpsw;
1602 
1603 	dev_dbg(cpsw->dev, "%s id:%u\n", __func__, id);
1604 
1605 	if (id != CPSW_DL_PARAM_SWITCH_MODE)
1606 		return  -EOPNOTSUPP;
1607 
1608 	ctx->val.vbool = !cpsw->data.dual_emac;
1609 
1610 	return 0;
1611 }
1612 
1613 static int cpsw_dl_switch_mode_set(struct devlink *dl, u32 id,
1614 				   struct devlink_param_gset_ctx *ctx)
1615 {
1616 	struct cpsw_devlink *dl_priv = devlink_priv(dl);
1617 	struct cpsw_common *cpsw = dl_priv->cpsw;
1618 	int vlan = cpsw->data.default_vlan;
1619 	bool switch_en = ctx->val.vbool;
1620 	bool if_running = false;
1621 	int i;
1622 
1623 	dev_dbg(cpsw->dev, "%s id:%u\n", __func__, id);
1624 
1625 	if (id != CPSW_DL_PARAM_SWITCH_MODE)
1626 		return  -EOPNOTSUPP;
1627 
1628 	if (switch_en == !cpsw->data.dual_emac)
1629 		return 0;
1630 
1631 	if (!switch_en && cpsw->br_members) {
1632 		dev_err(cpsw->dev, "Remove ports from BR before disabling switch mode\n");
1633 		return -EINVAL;
1634 	}
1635 
1636 	rtnl_lock();
1637 
1638 	for (i = 0; i < cpsw->data.slaves; i++) {
1639 		struct cpsw_slave *slave = &cpsw->slaves[i];
1640 		struct net_device *sl_ndev = slave->ndev;
1641 
1642 		if (!sl_ndev || !netif_running(sl_ndev))
1643 			continue;
1644 
1645 		if_running = true;
1646 	}
1647 
1648 	if (!if_running) {
1649 		/* all ndevs are down */
1650 		cpsw->data.dual_emac = !switch_en;
1651 		for (i = 0; i < cpsw->data.slaves; i++) {
1652 			struct cpsw_slave *slave = &cpsw->slaves[i];
1653 			struct net_device *sl_ndev = slave->ndev;
1654 
1655 			if (!sl_ndev)
1656 				continue;
1657 
1658 			if (switch_en)
1659 				vlan = cpsw->data.default_vlan;
1660 			else
1661 				vlan = slave->data->dual_emac_res_vlan;
1662 			slave->port_vlan = vlan;
1663 		}
1664 		goto exit;
1665 	}
1666 
1667 	if (switch_en) {
1668 		dev_info(cpsw->dev, "Enable switch mode\n");
1669 
1670 		/* enable bypass - no forwarding; all traffic goes to Host */
1671 		cpsw_ale_control_set(cpsw->ale, 0, ALE_BYPASS, 1);
1672 
1673 		/* clean up ALE table */
1674 		cpsw_ale_control_set(cpsw->ale, 0, ALE_CLEAR, 1);
1675 		cpsw_ale_control_get(cpsw->ale, 0, ALE_AGEOUT);
1676 
1677 		cpsw_init_host_port_switch(cpsw);
1678 
1679 		for (i = 0; i < cpsw->data.slaves; i++) {
1680 			struct cpsw_slave *slave = &cpsw->slaves[i];
1681 			struct net_device *sl_ndev = slave->ndev;
1682 			struct cpsw_priv *priv;
1683 
1684 			if (!sl_ndev)
1685 				continue;
1686 
1687 			priv = netdev_priv(sl_ndev);
1688 			slave->port_vlan = vlan;
1689 			if (netif_running(sl_ndev))
1690 				cpsw_port_add_switch_def_ale_entries(priv,
1691 								     slave);
1692 		}
1693 
1694 		cpsw_ale_control_set(cpsw->ale, 0, ALE_BYPASS, 0);
1695 		cpsw->data.dual_emac = false;
1696 	} else {
1697 		dev_info(cpsw->dev, "Disable switch mode\n");
1698 
1699 		/* enable bypass - no forwarding; all traffic goes to Host */
1700 		cpsw_ale_control_set(cpsw->ale, 0, ALE_BYPASS, 1);
1701 
1702 		cpsw_ale_control_set(cpsw->ale, 0, ALE_CLEAR, 1);
1703 		cpsw_ale_control_get(cpsw->ale, 0, ALE_AGEOUT);
1704 
1705 		cpsw_init_host_port_dual_mac(cpsw);
1706 
1707 		for (i = 0; i < cpsw->data.slaves; i++) {
1708 			struct cpsw_slave *slave = &cpsw->slaves[i];
1709 			struct net_device *sl_ndev = slave->ndev;
1710 			struct cpsw_priv *priv;
1711 
1712 			if (!sl_ndev)
1713 				continue;
1714 
1715 			priv = netdev_priv(slave->ndev);
1716 			slave->port_vlan = slave->data->dual_emac_res_vlan;
1717 			cpsw_port_add_dual_emac_def_ale_entries(priv, slave);
1718 		}
1719 
1720 		cpsw_ale_control_set(cpsw->ale, 0, ALE_BYPASS, 0);
1721 		cpsw->data.dual_emac = true;
1722 	}
1723 exit:
1724 	rtnl_unlock();
1725 
1726 	return 0;
1727 }
1728 
1729 static int cpsw_dl_ale_ctrl_get(struct devlink *dl, u32 id,
1730 				struct devlink_param_gset_ctx *ctx)
1731 {
1732 	struct cpsw_devlink *dl_priv = devlink_priv(dl);
1733 	struct cpsw_common *cpsw = dl_priv->cpsw;
1734 
1735 	dev_dbg(cpsw->dev, "%s id:%u\n", __func__, id);
1736 
1737 	switch (id) {
1738 	case CPSW_DL_PARAM_ALE_BYPASS:
1739 		ctx->val.vbool = cpsw_ale_control_get(cpsw->ale, 0, ALE_BYPASS);
1740 		break;
1741 	default:
1742 		return -EOPNOTSUPP;
1743 	}
1744 
1745 	return 0;
1746 }
1747 
1748 static int cpsw_dl_ale_ctrl_set(struct devlink *dl, u32 id,
1749 				struct devlink_param_gset_ctx *ctx)
1750 {
1751 	struct cpsw_devlink *dl_priv = devlink_priv(dl);
1752 	struct cpsw_common *cpsw = dl_priv->cpsw;
1753 	int ret = -EOPNOTSUPP;
1754 
1755 	dev_dbg(cpsw->dev, "%s id:%u\n", __func__, id);
1756 
1757 	switch (id) {
1758 	case CPSW_DL_PARAM_ALE_BYPASS:
1759 		ret = cpsw_ale_control_set(cpsw->ale, 0, ALE_BYPASS,
1760 					   ctx->val.vbool);
1761 		if (!ret) {
1762 			cpsw->ale_bypass = ctx->val.vbool;
1763 			cpsw_port_offload_fwd_mark_update(cpsw);
1764 		}
1765 		break;
1766 	default:
1767 		return -EOPNOTSUPP;
1768 	}
1769 
1770 	return 0;
1771 }
1772 
1773 static const struct devlink_param cpsw_devlink_params[] = {
1774 	DEVLINK_PARAM_DRIVER(CPSW_DL_PARAM_SWITCH_MODE,
1775 			     "switch_mode", DEVLINK_PARAM_TYPE_BOOL,
1776 			     BIT(DEVLINK_PARAM_CMODE_RUNTIME),
1777 			     cpsw_dl_switch_mode_get, cpsw_dl_switch_mode_set,
1778 			     NULL),
1779 	DEVLINK_PARAM_DRIVER(CPSW_DL_PARAM_ALE_BYPASS,
1780 			     "ale_bypass", DEVLINK_PARAM_TYPE_BOOL,
1781 			     BIT(DEVLINK_PARAM_CMODE_RUNTIME),
1782 			     cpsw_dl_ale_ctrl_get, cpsw_dl_ale_ctrl_set, NULL),
1783 };
1784 
1785 static int cpsw_register_devlink(struct cpsw_common *cpsw)
1786 {
1787 	struct device *dev = cpsw->dev;
1788 	struct cpsw_devlink *dl_priv;
1789 	int ret = 0;
1790 
1791 	cpsw->devlink = devlink_alloc(&cpsw_devlink_ops, sizeof(*dl_priv));
1792 	if (!cpsw->devlink)
1793 		return -ENOMEM;
1794 
1795 	dl_priv = devlink_priv(cpsw->devlink);
1796 	dl_priv->cpsw = cpsw;
1797 
1798 	ret = devlink_register(cpsw->devlink, dev);
1799 	if (ret) {
1800 		dev_err(dev, "DL reg fail ret:%d\n", ret);
1801 		goto dl_free;
1802 	}
1803 
1804 	ret = devlink_params_register(cpsw->devlink, cpsw_devlink_params,
1805 				      ARRAY_SIZE(cpsw_devlink_params));
1806 	if (ret) {
1807 		dev_err(dev, "DL params reg fail ret:%d\n", ret);
1808 		goto dl_unreg;
1809 	}
1810 
1811 	devlink_params_publish(cpsw->devlink);
1812 	return ret;
1813 
1814 dl_unreg:
1815 	devlink_unregister(cpsw->devlink);
1816 dl_free:
1817 	devlink_free(cpsw->devlink);
1818 	return ret;
1819 }
1820 
1821 static void cpsw_unregister_devlink(struct cpsw_common *cpsw)
1822 {
1823 	devlink_params_unpublish(cpsw->devlink);
1824 	devlink_params_unregister(cpsw->devlink, cpsw_devlink_params,
1825 				  ARRAY_SIZE(cpsw_devlink_params));
1826 	devlink_unregister(cpsw->devlink);
1827 	devlink_free(cpsw->devlink);
1828 }
1829 
1830 static const struct of_device_id cpsw_of_mtable[] = {
1831 	{ .compatible = "ti,cpsw-switch"},
1832 	{ .compatible = "ti,am335x-cpsw-switch"},
1833 	{ .compatible = "ti,am4372-cpsw-switch"},
1834 	{ .compatible = "ti,dra7-cpsw-switch"},
1835 	{ /* sentinel */ },
1836 };
1837 MODULE_DEVICE_TABLE(of, cpsw_of_mtable);
1838 
1839 static const struct soc_device_attribute cpsw_soc_devices[] = {
1840 	{ .family = "AM33xx", .revision = "ES1.0"},
1841 	{ /* sentinel */ }
1842 };
1843 
1844 static int cpsw_probe(struct platform_device *pdev)
1845 {
1846 	const struct soc_device_attribute *soc;
1847 	struct device *dev = &pdev->dev;
1848 	struct cpsw_common *cpsw;
1849 	struct resource *ss_res;
1850 	struct gpio_descs *mode;
1851 	void __iomem *ss_regs;
1852 	int ret = 0, ch;
1853 	struct clk *clk;
1854 	int irq;
1855 
1856 	cpsw = devm_kzalloc(dev, sizeof(struct cpsw_common), GFP_KERNEL);
1857 	if (!cpsw)
1858 		return -ENOMEM;
1859 
1860 	cpsw_slave_index = cpsw_slave_index_priv;
1861 
1862 	cpsw->dev = dev;
1863 
1864 	cpsw->slaves = devm_kcalloc(dev,
1865 				    CPSW_SLAVE_PORTS_NUM,
1866 				    sizeof(struct cpsw_slave),
1867 				    GFP_KERNEL);
1868 	if (!cpsw->slaves)
1869 		return -ENOMEM;
1870 
1871 	mode = devm_gpiod_get_array_optional(dev, "mode", GPIOD_OUT_LOW);
1872 	if (IS_ERR(mode)) {
1873 		ret = PTR_ERR(mode);
1874 		dev_err(dev, "gpio request failed, ret %d\n", ret);
1875 		return ret;
1876 	}
1877 
1878 	clk = devm_clk_get(dev, "fck");
1879 	if (IS_ERR(clk)) {
1880 		ret = PTR_ERR(clk);
1881 		dev_err(dev, "fck is not found %d\n", ret);
1882 		return ret;
1883 	}
1884 	cpsw->bus_freq_mhz = clk_get_rate(clk) / 1000000;
1885 
1886 	ss_regs = devm_platform_get_and_ioremap_resource(pdev, 0, &ss_res);
1887 	if (IS_ERR(ss_regs)) {
1888 		ret = PTR_ERR(ss_regs);
1889 		return ret;
1890 	}
1891 	cpsw->regs = ss_regs;
1892 
1893 	irq = platform_get_irq_byname(pdev, "rx");
1894 	if (irq < 0)
1895 		return irq;
1896 	cpsw->irqs_table[0] = irq;
1897 
1898 	irq = platform_get_irq_byname(pdev, "tx");
1899 	if (irq < 0)
1900 		return irq;
1901 	cpsw->irqs_table[1] = irq;
1902 
1903 	irq = platform_get_irq_byname(pdev, "misc");
1904 	if (irq <= 0)
1905 		return irq;
1906 	cpsw->misc_irq = irq;
1907 
1908 	platform_set_drvdata(pdev, cpsw);
1909 	/* This may be required here for child devices. */
1910 	pm_runtime_enable(dev);
1911 
1912 	/* Need to enable clocks with runtime PM api to access module
1913 	 * registers
1914 	 */
1915 	ret = pm_runtime_get_sync(dev);
1916 	if (ret < 0) {
1917 		pm_runtime_put_noidle(dev);
1918 		pm_runtime_disable(dev);
1919 		return ret;
1920 	}
1921 
1922 	ret = cpsw_probe_dt(cpsw);
1923 	if (ret)
1924 		goto clean_dt_ret;
1925 
1926 	soc = soc_device_match(cpsw_soc_devices);
1927 	if (soc)
1928 		cpsw->quirk_irq = true;
1929 
1930 	cpsw->rx_packet_max = rx_packet_max;
1931 	cpsw->descs_pool_size = descs_pool_size;
1932 	eth_random_addr(cpsw->base_mac);
1933 
1934 	ret = cpsw_init_common(cpsw, ss_regs, ale_ageout,
1935 			       (u32 __force)ss_res->start + CPSW2_BD_OFFSET,
1936 			       descs_pool_size);
1937 	if (ret)
1938 		goto clean_dt_ret;
1939 
1940 	cpsw->wr_regs = cpsw->version == CPSW_VERSION_1 ?
1941 			ss_regs + CPSW1_WR_OFFSET :
1942 			ss_regs + CPSW2_WR_OFFSET;
1943 
1944 	ch = cpsw->quirk_irq ? 0 : 7;
1945 	cpsw->txv[0].ch = cpdma_chan_create(cpsw->dma, ch, cpsw_tx_handler, 0);
1946 	if (IS_ERR(cpsw->txv[0].ch)) {
1947 		dev_err(dev, "error initializing tx dma channel\n");
1948 		ret = PTR_ERR(cpsw->txv[0].ch);
1949 		goto clean_cpts;
1950 	}
1951 
1952 	cpsw->rxv[0].ch = cpdma_chan_create(cpsw->dma, 0, cpsw_rx_handler, 1);
1953 	if (IS_ERR(cpsw->rxv[0].ch)) {
1954 		dev_err(dev, "error initializing rx dma channel\n");
1955 		ret = PTR_ERR(cpsw->rxv[0].ch);
1956 		goto clean_cpts;
1957 	}
1958 	cpsw_split_res(cpsw);
1959 
1960 	/* setup netdevs */
1961 	ret = cpsw_create_ports(cpsw);
1962 	if (ret)
1963 		goto clean_unregister_netdev;
1964 
1965 	/* Grab RX and TX IRQs. Note that we also have RX_THRESHOLD and
1966 	 * MISC IRQs which are always kept disabled with this driver so
1967 	 * we will not request them.
1968 	 *
1969 	 * If anyone wants to implement support for those, make sure to
1970 	 * first request and append them to irqs_table array.
1971 	 */
1972 
1973 	ret = devm_request_irq(dev, cpsw->irqs_table[0], cpsw_rx_interrupt,
1974 			       0, dev_name(dev), cpsw);
1975 	if (ret < 0) {
1976 		dev_err(dev, "error attaching irq (%d)\n", ret);
1977 		goto clean_unregister_netdev;
1978 	}
1979 
1980 	ret = devm_request_irq(dev, cpsw->irqs_table[1], cpsw_tx_interrupt,
1981 			       0, dev_name(dev), cpsw);
1982 	if (ret < 0) {
1983 		dev_err(dev, "error attaching irq (%d)\n", ret);
1984 		goto clean_unregister_netdev;
1985 	}
1986 
1987 	if (!cpsw->cpts)
1988 		goto skip_cpts;
1989 
1990 	ret = devm_request_irq(dev, cpsw->misc_irq, cpsw_misc_interrupt,
1991 			       0, dev_name(&pdev->dev), cpsw);
1992 	if (ret < 0) {
1993 		dev_err(dev, "error attaching misc irq (%d)\n", ret);
1994 		goto clean_unregister_netdev;
1995 	}
1996 
1997 	/* Enable misc CPTS evnt_pend IRQ */
1998 	cpts_set_irqpoll(cpsw->cpts, false);
1999 
2000 skip_cpts:
2001 	ret = cpsw_register_notifiers(cpsw);
2002 	if (ret)
2003 		goto clean_unregister_netdev;
2004 
2005 	ret = cpsw_register_devlink(cpsw);
2006 	if (ret)
2007 		goto clean_unregister_notifiers;
2008 
2009 	ret = cpsw_register_ports(cpsw);
2010 	if (ret)
2011 		goto clean_unregister_notifiers;
2012 
2013 	dev_notice(dev, "initialized (regs %pa, pool size %d) hw_ver:%08X %d.%d (%d)\n",
2014 		   &ss_res->start, descs_pool_size,
2015 		   cpsw->version, CPSW_MAJOR_VERSION(cpsw->version),
2016 		   CPSW_MINOR_VERSION(cpsw->version),
2017 		   CPSW_RTL_VERSION(cpsw->version));
2018 
2019 	pm_runtime_put(dev);
2020 
2021 	return 0;
2022 
2023 clean_unregister_notifiers:
2024 	cpsw_unregister_notifiers(cpsw);
2025 clean_unregister_netdev:
2026 	cpsw_unregister_ports(cpsw);
2027 clean_cpts:
2028 	cpts_release(cpsw->cpts);
2029 	cpdma_ctlr_destroy(cpsw->dma);
2030 clean_dt_ret:
2031 	cpsw_remove_dt(cpsw);
2032 	pm_runtime_put_sync(dev);
2033 	pm_runtime_disable(dev);
2034 	return ret;
2035 }
2036 
2037 static int cpsw_remove(struct platform_device *pdev)
2038 {
2039 	struct cpsw_common *cpsw = platform_get_drvdata(pdev);
2040 	int ret;
2041 
2042 	ret = pm_runtime_get_sync(&pdev->dev);
2043 	if (ret < 0) {
2044 		pm_runtime_put_noidle(&pdev->dev);
2045 		return ret;
2046 	}
2047 
2048 	cpsw_unregister_notifiers(cpsw);
2049 	cpsw_unregister_devlink(cpsw);
2050 	cpsw_unregister_ports(cpsw);
2051 
2052 	cpts_release(cpsw->cpts);
2053 	cpdma_ctlr_destroy(cpsw->dma);
2054 	cpsw_remove_dt(cpsw);
2055 	pm_runtime_put_sync(&pdev->dev);
2056 	pm_runtime_disable(&pdev->dev);
2057 	return 0;
2058 }
2059 
2060 static int __maybe_unused cpsw_suspend(struct device *dev)
2061 {
2062 	struct cpsw_common *cpsw = dev_get_drvdata(dev);
2063 	int i;
2064 
2065 	rtnl_lock();
2066 
2067 	for (i = 0; i < cpsw->data.slaves; i++) {
2068 		struct net_device *ndev = cpsw->slaves[i].ndev;
2069 
2070 		if (!(ndev && netif_running(ndev)))
2071 			continue;
2072 
2073 		cpsw_ndo_stop(ndev);
2074 	}
2075 
2076 	rtnl_unlock();
2077 
2078 	/* Select sleep pin state */
2079 	pinctrl_pm_select_sleep_state(dev);
2080 
2081 	return 0;
2082 }
2083 
2084 static int __maybe_unused cpsw_resume(struct device *dev)
2085 {
2086 	struct cpsw_common *cpsw = dev_get_drvdata(dev);
2087 	int i;
2088 
2089 	/* Select default pin state */
2090 	pinctrl_pm_select_default_state(dev);
2091 
2092 	/* shut up ASSERT_RTNL() warning in netif_set_real_num_tx/rx_queues */
2093 	rtnl_lock();
2094 
2095 	for (i = 0; i < cpsw->data.slaves; i++) {
2096 		struct net_device *ndev = cpsw->slaves[i].ndev;
2097 
2098 		if (!(ndev && netif_running(ndev)))
2099 			continue;
2100 
2101 		cpsw_ndo_open(ndev);
2102 	}
2103 
2104 	rtnl_unlock();
2105 
2106 	return 0;
2107 }
2108 
2109 static SIMPLE_DEV_PM_OPS(cpsw_pm_ops, cpsw_suspend, cpsw_resume);
2110 
2111 static struct platform_driver cpsw_driver = {
2112 	.driver = {
2113 		.name	 = "cpsw-switch",
2114 		.pm	 = &cpsw_pm_ops,
2115 		.of_match_table = cpsw_of_mtable,
2116 	},
2117 	.probe = cpsw_probe,
2118 	.remove = cpsw_remove,
2119 };
2120 
2121 module_platform_driver(cpsw_driver);
2122 
2123 MODULE_LICENSE("GPL");
2124 MODULE_DESCRIPTION("TI CPSW switchdev Ethernet driver");
2125