cachepc-linux

Fork of AMDESE/linux with modifications for CachePC side-channel attack
git clone https://git.sinitax.com/sinitax/cachepc-linux
Log | Files | Refs | README | LICENSE | sfeed.txt

cpsw.c (46804B)


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