.. | .. |
---|
| 1 | +// SPDX-License-Identifier: GPL-2.0-or-later |
---|
1 | 2 | /* |
---|
2 | 3 | * RDC R6040 Fast Ethernet MAC support |
---|
3 | 4 | * |
---|
.. | .. |
---|
5 | 6 | * Copyright (C) 2007 |
---|
6 | 7 | * Daniel Gimpelevich <daniel@gimpelevich.san-francisco.ca.us> |
---|
7 | 8 | * Copyright (C) 2007-2012 Florian Fainelli <f.fainelli@gmail.com> |
---|
8 | | - * |
---|
9 | | - * This program is free software; you can redistribute it and/or |
---|
10 | | - * modify it under the terms of the GNU General Public License |
---|
11 | | - * as published by the Free Software Foundation; either version 2 |
---|
12 | | - * of the License, or (at your option) any later version. |
---|
13 | | - * |
---|
14 | | - * This program is distributed in the hope that it will be useful, |
---|
15 | | - * but WITHOUT ANY WARRANTY; without even the implied warranty of |
---|
16 | | - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
---|
17 | | - * GNU General Public License for more details. |
---|
18 | | - * |
---|
19 | | - * You should have received a copy of the GNU General Public License |
---|
20 | | - * along with this program; if not, write to the |
---|
21 | | - * Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, |
---|
22 | | - * Boston, MA 02110-1301, USA. |
---|
23 | 9 | */ |
---|
24 | 10 | |
---|
25 | 11 | #include <linux/kernel.h> |
---|
.. | .. |
---|
278 | 264 | |
---|
279 | 265 | for (i = 0; i < TX_DCNT; i++) { |
---|
280 | 266 | if (lp->tx_insert_ptr->skb_ptr) { |
---|
281 | | - pci_unmap_single(lp->pdev, |
---|
282 | | - le32_to_cpu(lp->tx_insert_ptr->buf), |
---|
283 | | - MAX_BUF_SIZE, PCI_DMA_TODEVICE); |
---|
| 267 | + dma_unmap_single(&lp->pdev->dev, |
---|
| 268 | + le32_to_cpu(lp->tx_insert_ptr->buf), |
---|
| 269 | + MAX_BUF_SIZE, DMA_TO_DEVICE); |
---|
284 | 270 | dev_kfree_skb(lp->tx_insert_ptr->skb_ptr); |
---|
285 | 271 | lp->tx_insert_ptr->skb_ptr = NULL; |
---|
286 | 272 | } |
---|
.. | .. |
---|
295 | 281 | |
---|
296 | 282 | for (i = 0; i < RX_DCNT; i++) { |
---|
297 | 283 | if (lp->rx_insert_ptr->skb_ptr) { |
---|
298 | | - pci_unmap_single(lp->pdev, |
---|
299 | | - le32_to_cpu(lp->rx_insert_ptr->buf), |
---|
300 | | - MAX_BUF_SIZE, PCI_DMA_FROMDEVICE); |
---|
| 284 | + dma_unmap_single(&lp->pdev->dev, |
---|
| 285 | + le32_to_cpu(lp->rx_insert_ptr->buf), |
---|
| 286 | + MAX_BUF_SIZE, DMA_FROM_DEVICE); |
---|
301 | 287 | dev_kfree_skb(lp->rx_insert_ptr->skb_ptr); |
---|
302 | 288 | lp->rx_insert_ptr->skb_ptr = NULL; |
---|
303 | 289 | } |
---|
.. | .. |
---|
351 | 337 | goto err_exit; |
---|
352 | 338 | } |
---|
353 | 339 | desc->skb_ptr = skb; |
---|
354 | | - desc->buf = cpu_to_le32(pci_map_single(lp->pdev, |
---|
355 | | - desc->skb_ptr->data, |
---|
356 | | - MAX_BUF_SIZE, PCI_DMA_FROMDEVICE)); |
---|
| 340 | + desc->buf = cpu_to_le32(dma_map_single(&lp->pdev->dev, |
---|
| 341 | + desc->skb_ptr->data, |
---|
| 342 | + MAX_BUF_SIZE, |
---|
| 343 | + DMA_FROM_DEVICE)); |
---|
357 | 344 | desc->status = DSC_OWNER_MAC; |
---|
358 | 345 | desc = desc->vndescp; |
---|
359 | 346 | } while (desc != lp->rx_ring); |
---|
.. | .. |
---|
431 | 418 | iowrite16(TM2TX, ioaddr + MTPR); |
---|
432 | 419 | } |
---|
433 | 420 | |
---|
434 | | -static void r6040_tx_timeout(struct net_device *dev) |
---|
| 421 | +static void r6040_tx_timeout(struct net_device *dev, unsigned int txqueue) |
---|
435 | 422 | { |
---|
436 | 423 | struct r6040_private *priv = netdev_priv(dev); |
---|
437 | 424 | void __iomem *ioaddr = priv->base; |
---|
.. | .. |
---|
505 | 492 | |
---|
506 | 493 | /* Free Descriptor memory */ |
---|
507 | 494 | if (lp->rx_ring) { |
---|
508 | | - pci_free_consistent(pdev, |
---|
509 | | - RX_DESC_SIZE, lp->rx_ring, lp->rx_ring_dma); |
---|
| 495 | + dma_free_coherent(&pdev->dev, RX_DESC_SIZE, lp->rx_ring, |
---|
| 496 | + lp->rx_ring_dma); |
---|
510 | 497 | lp->rx_ring = NULL; |
---|
511 | 498 | } |
---|
512 | 499 | |
---|
513 | 500 | if (lp->tx_ring) { |
---|
514 | | - pci_free_consistent(pdev, |
---|
515 | | - TX_DESC_SIZE, lp->tx_ring, lp->tx_ring_dma); |
---|
| 501 | + dma_free_coherent(&pdev->dev, TX_DESC_SIZE, lp->tx_ring, |
---|
| 502 | + lp->tx_ring_dma); |
---|
516 | 503 | lp->tx_ring = NULL; |
---|
517 | 504 | } |
---|
518 | 505 | |
---|
519 | 506 | return 0; |
---|
520 | | -} |
---|
521 | | - |
---|
522 | | -static int r6040_ioctl(struct net_device *dev, struct ifreq *rq, int cmd) |
---|
523 | | -{ |
---|
524 | | - if (!dev->phydev) |
---|
525 | | - return -EINVAL; |
---|
526 | | - |
---|
527 | | - return phy_mii_ioctl(dev->phydev, rq, cmd); |
---|
528 | 507 | } |
---|
529 | 508 | |
---|
530 | 509 | static int r6040_rx(struct net_device *dev, int limit) |
---|
.. | .. |
---|
573 | 552 | |
---|
574 | 553 | /* Do not count the CRC */ |
---|
575 | 554 | skb_put(skb_ptr, descptr->len - 4); |
---|
576 | | - pci_unmap_single(priv->pdev, le32_to_cpu(descptr->buf), |
---|
577 | | - MAX_BUF_SIZE, PCI_DMA_FROMDEVICE); |
---|
| 555 | + dma_unmap_single(&priv->pdev->dev, le32_to_cpu(descptr->buf), |
---|
| 556 | + MAX_BUF_SIZE, DMA_FROM_DEVICE); |
---|
578 | 557 | skb_ptr->protocol = eth_type_trans(skb_ptr, priv->dev); |
---|
579 | 558 | |
---|
580 | 559 | /* Send to upper layer */ |
---|
.. | .. |
---|
584 | 563 | |
---|
585 | 564 | /* put new skb into descriptor */ |
---|
586 | 565 | descptr->skb_ptr = new_skb; |
---|
587 | | - descptr->buf = cpu_to_le32(pci_map_single(priv->pdev, |
---|
588 | | - descptr->skb_ptr->data, |
---|
589 | | - MAX_BUF_SIZE, PCI_DMA_FROMDEVICE)); |
---|
| 566 | + descptr->buf = cpu_to_le32(dma_map_single(&priv->pdev->dev, |
---|
| 567 | + descptr->skb_ptr->data, |
---|
| 568 | + MAX_BUF_SIZE, |
---|
| 569 | + DMA_FROM_DEVICE)); |
---|
590 | 570 | |
---|
591 | 571 | next_descr: |
---|
592 | 572 | /* put the descriptor back to the MAC */ |
---|
.. | .. |
---|
626 | 606 | dev->stats.tx_packets++; |
---|
627 | 607 | dev->stats.tx_bytes += skb_ptr->len; |
---|
628 | 608 | |
---|
629 | | - pci_unmap_single(priv->pdev, le32_to_cpu(descptr->buf), |
---|
630 | | - skb_ptr->len, PCI_DMA_TODEVICE); |
---|
| 609 | + dma_unmap_single(&priv->pdev->dev, le32_to_cpu(descptr->buf), |
---|
| 610 | + skb_ptr->len, DMA_TO_DEVICE); |
---|
631 | 611 | /* Free buffer */ |
---|
632 | 612 | dev_kfree_skb(skb_ptr); |
---|
633 | 613 | descptr->skb_ptr = NULL; |
---|
.. | .. |
---|
779 | 759 | |
---|
780 | 760 | /* Allocate Descriptor memory */ |
---|
781 | 761 | lp->rx_ring = |
---|
782 | | - pci_alloc_consistent(lp->pdev, RX_DESC_SIZE, &lp->rx_ring_dma); |
---|
| 762 | + dma_alloc_coherent(&lp->pdev->dev, RX_DESC_SIZE, |
---|
| 763 | + &lp->rx_ring_dma, GFP_KERNEL); |
---|
783 | 764 | if (!lp->rx_ring) { |
---|
784 | 765 | ret = -ENOMEM; |
---|
785 | 766 | goto err_free_irq; |
---|
786 | 767 | } |
---|
787 | 768 | |
---|
788 | 769 | lp->tx_ring = |
---|
789 | | - pci_alloc_consistent(lp->pdev, TX_DESC_SIZE, &lp->tx_ring_dma); |
---|
| 770 | + dma_alloc_coherent(&lp->pdev->dev, TX_DESC_SIZE, |
---|
| 771 | + &lp->tx_ring_dma, GFP_KERNEL); |
---|
790 | 772 | if (!lp->tx_ring) { |
---|
791 | 773 | ret = -ENOMEM; |
---|
792 | 774 | goto err_free_rx_ring; |
---|
.. | .. |
---|
802 | 784 | return 0; |
---|
803 | 785 | |
---|
804 | 786 | err_free_tx_ring: |
---|
805 | | - pci_free_consistent(lp->pdev, TX_DESC_SIZE, lp->tx_ring, |
---|
806 | | - lp->tx_ring_dma); |
---|
| 787 | + dma_free_coherent(&lp->pdev->dev, TX_DESC_SIZE, lp->tx_ring, |
---|
| 788 | + lp->tx_ring_dma); |
---|
807 | 789 | err_free_rx_ring: |
---|
808 | | - pci_free_consistent(lp->pdev, RX_DESC_SIZE, lp->rx_ring, |
---|
809 | | - lp->rx_ring_dma); |
---|
| 790 | + dma_free_coherent(&lp->pdev->dev, RX_DESC_SIZE, lp->rx_ring, |
---|
| 791 | + lp->rx_ring_dma); |
---|
810 | 792 | err_free_irq: |
---|
811 | 793 | free_irq(dev->irq, dev); |
---|
812 | 794 | out: |
---|
.. | .. |
---|
840 | 822 | descptr = lp->tx_insert_ptr; |
---|
841 | 823 | descptr->len = skb->len; |
---|
842 | 824 | descptr->skb_ptr = skb; |
---|
843 | | - descptr->buf = cpu_to_le32(pci_map_single(lp->pdev, |
---|
844 | | - skb->data, skb->len, PCI_DMA_TODEVICE)); |
---|
| 825 | + descptr->buf = cpu_to_le32(dma_map_single(&lp->pdev->dev, skb->data, |
---|
| 826 | + skb->len, DMA_TO_DEVICE)); |
---|
845 | 827 | descptr->status = DSC_OWNER_MAC; |
---|
846 | 828 | |
---|
847 | 829 | skb_tx_timestamp(skb); |
---|
848 | 830 | |
---|
849 | 831 | /* Trigger the MAC to check the TX descriptor */ |
---|
850 | | - if (!skb->xmit_more || netif_queue_stopped(dev)) |
---|
| 832 | + if (!netdev_xmit_more() || netif_queue_stopped(dev)) |
---|
851 | 833 | iowrite16(TM2TX, ioaddr + MTPR); |
---|
852 | 834 | lp->tx_insert_ptr = descptr->vndescp; |
---|
853 | 835 | |
---|
.. | .. |
---|
978 | 960 | .ndo_set_rx_mode = r6040_multicast_list, |
---|
979 | 961 | .ndo_validate_addr = eth_validate_addr, |
---|
980 | 962 | .ndo_set_mac_address = eth_mac_addr, |
---|
981 | | - .ndo_do_ioctl = r6040_ioctl, |
---|
| 963 | + .ndo_do_ioctl = phy_do_ioctl, |
---|
982 | 964 | .ndo_tx_timeout = r6040_tx_timeout, |
---|
983 | 965 | #ifdef CONFIG_NET_POLL_CONTROLLER |
---|
984 | 966 | .ndo_poll_controller = r6040_poll_controller, |
---|
.. | .. |
---|
1031 | 1013 | return PTR_ERR(phydev); |
---|
1032 | 1014 | } |
---|
1033 | 1015 | |
---|
1034 | | - /* mask with MAC supported features */ |
---|
1035 | | - phydev->supported &= (SUPPORTED_10baseT_Half |
---|
1036 | | - | SUPPORTED_10baseT_Full |
---|
1037 | | - | SUPPORTED_100baseT_Half |
---|
1038 | | - | SUPPORTED_100baseT_Full |
---|
1039 | | - | SUPPORTED_Autoneg |
---|
1040 | | - | SUPPORTED_MII |
---|
1041 | | - | SUPPORTED_TP); |
---|
| 1016 | + phy_set_max_speed(phydev, SPEED_100); |
---|
1042 | 1017 | |
---|
1043 | | - phydev->advertising = phydev->supported; |
---|
1044 | 1018 | lp->old_link = 0; |
---|
1045 | 1019 | lp->old_duplex = -1; |
---|
1046 | 1020 | |
---|
.. | .. |
---|
1066 | 1040 | goto err_out; |
---|
1067 | 1041 | |
---|
1068 | 1042 | /* this should always be supported */ |
---|
1069 | | - err = pci_set_dma_mask(pdev, DMA_BIT_MASK(32)); |
---|
| 1043 | + err = dma_set_mask(&pdev->dev, DMA_BIT_MASK(32)); |
---|
1070 | 1044 | if (err) { |
---|
1071 | 1045 | dev_err(&pdev->dev, "32-bit PCI DMA addresses not supported by the card\n"); |
---|
1072 | 1046 | goto err_out_disable_dev; |
---|
1073 | 1047 | } |
---|
1074 | | - err = pci_set_consistent_dma_mask(pdev, DMA_BIT_MASK(32)); |
---|
| 1048 | + err = dma_set_coherent_mask(&pdev->dev, DMA_BIT_MASK(32)); |
---|
1075 | 1049 | if (err) { |
---|
1076 | 1050 | dev_err(&pdev->dev, "32-bit PCI DMA addresses not supported by the card\n"); |
---|
1077 | 1051 | goto err_out_disable_dev; |
---|
.. | .. |
---|
1184 | 1158 | err = register_netdev(dev); |
---|
1185 | 1159 | if (err) { |
---|
1186 | 1160 | dev_err(&pdev->dev, "Failed to register net device\n"); |
---|
1187 | | - goto err_out_mdio_unregister; |
---|
| 1161 | + goto err_out_phy_disconnect; |
---|
1188 | 1162 | } |
---|
1189 | 1163 | return 0; |
---|
1190 | 1164 | |
---|
| 1165 | +err_out_phy_disconnect: |
---|
| 1166 | + phy_disconnect(dev->phydev); |
---|
1191 | 1167 | err_out_mdio_unregister: |
---|
1192 | 1168 | mdiobus_unregister(lp->mii_bus); |
---|
1193 | 1169 | err_out_mdio: |
---|
.. | .. |
---|
1211 | 1187 | struct r6040_private *lp = netdev_priv(dev); |
---|
1212 | 1188 | |
---|
1213 | 1189 | unregister_netdev(dev); |
---|
| 1190 | + phy_disconnect(dev->phydev); |
---|
1214 | 1191 | mdiobus_unregister(lp->mii_bus); |
---|
1215 | 1192 | mdiobus_free(lp->mii_bus); |
---|
1216 | 1193 | netif_napi_del(&lp->napi); |
---|