| .. | .. |
|---|
| 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 | |
|---|