.. | .. |
---|
| 1 | +// SPDX-License-Identifier: GPL-2.0-only |
---|
1 | 2 | /* |
---|
2 | 3 | * Copyright (C) 2004-2013 Synopsys, Inc. (www.synopsys.com) |
---|
3 | | - * |
---|
4 | | - * This program is free software; you can redistribute it and/or modify |
---|
5 | | - * it under the terms of the GNU General Public License version 2 as |
---|
6 | | - * published by the Free Software Foundation. |
---|
7 | 4 | * |
---|
8 | 5 | * Driver for the ARC EMAC 10100 (hardware revision 5) |
---|
9 | 6 | * |
---|
.. | .. |
---|
95 | 92 | struct arc_emac_priv *priv = netdev_priv(ndev); |
---|
96 | 93 | |
---|
97 | 94 | strlcpy(info->driver, priv->drv_name, sizeof(info->driver)); |
---|
98 | | - strlcpy(info->version, priv->drv_version, sizeof(info->version)); |
---|
99 | 95 | } |
---|
100 | 96 | |
---|
101 | 97 | static const struct ethtool_ops arc_emac_ethtool_ops = { |
---|
.. | .. |
---|
144 | 140 | stats->tx_bytes += skb->len; |
---|
145 | 141 | } |
---|
146 | 142 | |
---|
147 | | - dma_unmap_single(&ndev->dev, dma_unmap_addr(tx_buff, addr), |
---|
| 143 | + dma_unmap_single(ndev->dev.parent, dma_unmap_addr(tx_buff, addr), |
---|
148 | 144 | dma_unmap_len(tx_buff, len), DMA_TO_DEVICE); |
---|
149 | 145 | |
---|
150 | 146 | /* return the sk_buff to system */ |
---|
151 | | - dev_kfree_skb_irq(skb); |
---|
| 147 | + dev_consume_skb_irq(skb); |
---|
152 | 148 | |
---|
153 | 149 | txbd->data = 0; |
---|
154 | 150 | txbd->info = 0; |
---|
.. | .. |
---|
227 | 223 | continue; |
---|
228 | 224 | } |
---|
229 | 225 | |
---|
230 | | - addr = dma_map_single(&ndev->dev, (void *)skb->data, |
---|
| 226 | + addr = dma_map_single(ndev->dev.parent, (void *)skb->data, |
---|
231 | 227 | EMAC_BUFFER_SIZE, DMA_FROM_DEVICE); |
---|
232 | | - if (dma_mapping_error(&ndev->dev, addr)) { |
---|
| 228 | + if (dma_mapping_error(ndev->dev.parent, addr)) { |
---|
233 | 229 | if (net_ratelimit()) |
---|
234 | 230 | netdev_err(ndev, "cannot map dma buffer\n"); |
---|
235 | 231 | dev_kfree_skb(skb); |
---|
.. | .. |
---|
241 | 237 | } |
---|
242 | 238 | |
---|
243 | 239 | /* unmap previosly mapped skb */ |
---|
244 | | - dma_unmap_single(&ndev->dev, dma_unmap_addr(rx_buff, addr), |
---|
| 240 | + dma_unmap_single(ndev->dev.parent, dma_unmap_addr(rx_buff, addr), |
---|
245 | 241 | dma_unmap_len(rx_buff, len), DMA_FROM_DEVICE); |
---|
246 | 242 | |
---|
247 | 243 | pktlen = info & LEN_MASK; |
---|
.. | .. |
---|
431 | 427 | phy_dev->autoneg = AUTONEG_ENABLE; |
---|
432 | 428 | phy_dev->speed = 0; |
---|
433 | 429 | phy_dev->duplex = 0; |
---|
434 | | - phy_dev->advertising &= phy_dev->supported; |
---|
| 430 | + linkmode_and(phy_dev->advertising, phy_dev->advertising, |
---|
| 431 | + phy_dev->supported); |
---|
435 | 432 | |
---|
436 | 433 | priv->last_rx_bd = 0; |
---|
437 | 434 | |
---|
.. | .. |
---|
447 | 444 | if (unlikely(!rx_buff->skb)) |
---|
448 | 445 | return -ENOMEM; |
---|
449 | 446 | |
---|
450 | | - addr = dma_map_single(&ndev->dev, (void *)rx_buff->skb->data, |
---|
| 447 | + addr = dma_map_single(ndev->dev.parent, (void *)rx_buff->skb->data, |
---|
451 | 448 | EMAC_BUFFER_SIZE, DMA_FROM_DEVICE); |
---|
452 | | - if (dma_mapping_error(&ndev->dev, addr)) { |
---|
| 449 | + if (dma_mapping_error(ndev->dev.parent, addr)) { |
---|
453 | 450 | netdev_err(ndev, "cannot dma map\n"); |
---|
454 | 451 | dev_kfree_skb(rx_buff->skb); |
---|
455 | 452 | return -ENOMEM; |
---|
.. | .. |
---|
557 | 554 | struct buffer_state *tx_buff = &priv->tx_buff[i]; |
---|
558 | 555 | |
---|
559 | 556 | if (tx_buff->skb) { |
---|
560 | | - dma_unmap_single(&ndev->dev, |
---|
| 557 | + dma_unmap_single(ndev->dev.parent, |
---|
561 | 558 | dma_unmap_addr(tx_buff, addr), |
---|
562 | 559 | dma_unmap_len(tx_buff, len), |
---|
563 | 560 | DMA_TO_DEVICE); |
---|
.. | .. |
---|
588 | 585 | struct buffer_state *rx_buff = &priv->rx_buff[i]; |
---|
589 | 586 | |
---|
590 | 587 | if (rx_buff->skb) { |
---|
591 | | - dma_unmap_single(&ndev->dev, |
---|
| 588 | + dma_unmap_single(ndev->dev.parent, |
---|
592 | 589 | dma_unmap_addr(rx_buff, addr), |
---|
593 | 590 | dma_unmap_len(rx_buff, len), |
---|
594 | 591 | DMA_FROM_DEVICE); |
---|
.. | .. |
---|
675 | 672 | * |
---|
676 | 673 | * This function is invoked from upper layers to initiate transmission. |
---|
677 | 674 | */ |
---|
678 | | -static int arc_emac_tx(struct sk_buff *skb, struct net_device *ndev) |
---|
| 675 | +static netdev_tx_t arc_emac_tx(struct sk_buff *skb, struct net_device *ndev) |
---|
679 | 676 | { |
---|
680 | 677 | struct arc_emac_priv *priv = netdev_priv(ndev); |
---|
681 | 678 | unsigned int len, *txbd_curr = &priv->txbd_curr; |
---|
.. | .. |
---|
696 | 693 | return NETDEV_TX_BUSY; |
---|
697 | 694 | } |
---|
698 | 695 | |
---|
699 | | - addr = dma_map_single(&ndev->dev, (void *)skb->data, len, |
---|
| 696 | + addr = dma_map_single(ndev->dev.parent, (void *)skb->data, len, |
---|
700 | 697 | DMA_TO_DEVICE); |
---|
701 | 698 | |
---|
702 | | - if (unlikely(dma_mapping_error(&ndev->dev, addr))) { |
---|
| 699 | + if (unlikely(dma_mapping_error(ndev->dev.parent, addr))) { |
---|
703 | 700 | stats->tx_dropped++; |
---|
704 | 701 | stats->tx_errors++; |
---|
705 | 702 | dev_kfree_skb_any(skb); |
---|
.. | .. |
---|
784 | 781 | return 0; |
---|
785 | 782 | } |
---|
786 | 783 | |
---|
787 | | -static int arc_emac_ioctl(struct net_device *dev, struct ifreq *rq, int cmd) |
---|
788 | | -{ |
---|
789 | | - if (!netif_running(dev)) |
---|
790 | | - return -EINVAL; |
---|
791 | | - |
---|
792 | | - if (!dev->phydev) |
---|
793 | | - return -ENODEV; |
---|
794 | | - |
---|
795 | | - return phy_mii_ioctl(dev->phydev, rq, cmd); |
---|
796 | | -} |
---|
797 | | - |
---|
798 | | - |
---|
799 | 784 | /** |
---|
800 | 785 | * arc_emac_restart - Restart EMAC |
---|
801 | 786 | * @ndev: Pointer to net_device structure. |
---|
.. | .. |
---|
860 | 845 | .ndo_set_mac_address = arc_emac_set_address, |
---|
861 | 846 | .ndo_get_stats = arc_emac_stats, |
---|
862 | 847 | .ndo_set_rx_mode = arc_emac_set_rx_mode, |
---|
863 | | - .ndo_do_ioctl = arc_emac_ioctl, |
---|
| 848 | + .ndo_do_ioctl = phy_do_ioctl_running, |
---|
864 | 849 | #ifdef CONFIG_NET_POLL_CONTROLLER |
---|
865 | 850 | .ndo_poll_controller = arc_emac_poll_controller, |
---|
866 | 851 | #endif |
---|
.. | .. |
---|
960 | 945 | /* Get MAC address from device tree */ |
---|
961 | 946 | mac_addr = of_get_mac_address(dev->of_node); |
---|
962 | 947 | |
---|
963 | | - if (mac_addr) |
---|
964 | | - memcpy(ndev->dev_addr, mac_addr, ETH_ALEN); |
---|
| 948 | + if (!IS_ERR(mac_addr)) |
---|
| 949 | + ether_addr_copy(ndev->dev_addr, mac_addr); |
---|
965 | 950 | else |
---|
966 | 951 | eth_hw_addr_random(ndev); |
---|
967 | 952 | |
---|