hc
2023-12-11 d2ccde1c8e90d38cee87a1b0309ad2827f3fd30d
kernel/drivers/net/ethernet/smsc/smsc9420.c
....@@ -1,19 +1,7 @@
1
+// SPDX-License-Identifier: GPL-2.0-or-later
12 /***************************************************************************
23 *
34 * Copyright (C) 2007,2008 SMSC
4
- *
5
- * This program is free software; you can redistribute it and/or
6
- * modify it under the terms of the GNU General Public License
7
- * as published by the Free Software Foundation; either version 2
8
- * of the License, or (at your option) any later version.
9
- *
10
- * This program is distributed in the hope that it will be useful,
11
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
12
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
13
- * GNU General Public License for more details.
14
- *
15
- * You should have received a copy of the GNU General Public License
16
- * along with this program; if not, see <http://www.gnu.org/licenses/>.
175 *
186 ***************************************************************************
197 */
....@@ -220,15 +208,6 @@
220208
221209 netif_warn(pd, drv, pd->dev, "%s: Eeprom timed out\n", __func__);
222210 return -EIO;
223
-}
224
-
225
-/* Standard ioctls for mii-tool */
226
-static int smsc9420_do_ioctl(struct net_device *dev, struct ifreq *ifr, int cmd)
227
-{
228
- if (!netif_running(dev) || !dev->phydev)
229
- return -EINVAL;
230
-
231
- return phy_mii_ioctl(dev->phydev, ifr, cmd);
232211 }
233212
234213 static void smsc9420_ethtool_get_drvinfo(struct net_device *netdev,
....@@ -518,8 +497,9 @@
518497
519498 if (skb) {
520499 BUG_ON(!pd->tx_buffers[i].mapping);
521
- pci_unmap_single(pd->pdev, pd->tx_buffers[i].mapping,
522
- skb->len, PCI_DMA_TODEVICE);
500
+ dma_unmap_single(&pd->pdev->dev,
501
+ pd->tx_buffers[i].mapping, skb->len,
502
+ DMA_TO_DEVICE);
523503 dev_kfree_skb_any(skb);
524504 }
525505
....@@ -551,8 +531,9 @@
551531 dev_kfree_skb_any(pd->rx_buffers[i].skb);
552532
553533 if (pd->rx_buffers[i].mapping)
554
- pci_unmap_single(pd->pdev, pd->rx_buffers[i].mapping,
555
- PKT_BUF_SZ, PCI_DMA_FROMDEVICE);
534
+ dma_unmap_single(&pd->pdev->dev,
535
+ pd->rx_buffers[i].mapping,
536
+ PKT_BUF_SZ, DMA_FROM_DEVICE);
556537
557538 pd->rx_ring[i].status = 0;
558539 pd->rx_ring[i].length = 0;
....@@ -770,8 +751,8 @@
770751 dev->stats.rx_packets++;
771752 dev->stats.rx_bytes += packet_length;
772753
773
- pci_unmap_single(pd->pdev, pd->rx_buffers[index].mapping,
774
- PKT_BUF_SZ, PCI_DMA_FROMDEVICE);
754
+ dma_unmap_single(&pd->pdev->dev, pd->rx_buffers[index].mapping,
755
+ PKT_BUF_SZ, DMA_FROM_DEVICE);
775756 pd->rx_buffers[index].mapping = 0;
776757
777758 skb = pd->rx_buffers[index].skb;
....@@ -803,9 +784,9 @@
803784 if (unlikely(!skb))
804785 return -ENOMEM;
805786
806
- mapping = pci_map_single(pd->pdev, skb_tail_pointer(skb),
807
- PKT_BUF_SZ, PCI_DMA_FROMDEVICE);
808
- if (pci_dma_mapping_error(pd->pdev, mapping)) {
787
+ mapping = dma_map_single(&pd->pdev->dev, skb_tail_pointer(skb),
788
+ PKT_BUF_SZ, DMA_FROM_DEVICE);
789
+ if (dma_mapping_error(&pd->pdev->dev, mapping)) {
809790 dev_kfree_skb_any(skb);
810791 netif_warn(pd, rx_err, pd->dev, "pci_map_single failed!\n");
811792 return -ENOMEM;
....@@ -922,8 +903,10 @@
922903 BUG_ON(!pd->tx_buffers[index].skb);
923904 BUG_ON(!pd->tx_buffers[index].mapping);
924905
925
- pci_unmap_single(pd->pdev, pd->tx_buffers[index].mapping,
926
- pd->tx_buffers[index].skb->len, PCI_DMA_TODEVICE);
906
+ dma_unmap_single(&pd->pdev->dev,
907
+ pd->tx_buffers[index].mapping,
908
+ pd->tx_buffers[index].skb->len,
909
+ DMA_TO_DEVICE);
927910 pd->tx_buffers[index].mapping = 0;
928911
929912 dev_kfree_skb_any(pd->tx_buffers[index].skb);
....@@ -953,9 +936,9 @@
953936 BUG_ON(pd->tx_buffers[index].skb);
954937 BUG_ON(pd->tx_buffers[index].mapping);
955938
956
- mapping = pci_map_single(pd->pdev, skb->data,
957
- skb->len, PCI_DMA_TODEVICE);
958
- if (pci_dma_mapping_error(pd->pdev, mapping)) {
939
+ mapping = dma_map_single(&pd->pdev->dev, skb->data, skb->len,
940
+ DMA_TO_DEVICE);
941
+ if (dma_mapping_error(&pd->pdev->dev, mapping)) {
959942 netif_warn(pd, tx_err, pd->dev,
960943 "pci_map_single failed, dropping packet\n");
961944 return NETDEV_TX_BUSY;
....@@ -1135,10 +1118,10 @@
11351118 return PTR_ERR(phydev);
11361119 }
11371120
1121
+ phy_set_max_speed(phydev, SPEED_100);
1122
+
11381123 /* mask with MAC supported features */
1139
- phydev->supported &= (PHY_BASIC_FEATURES | SUPPORTED_Pause |
1140
- SUPPORTED_Asym_Pause);
1141
- phydev->advertising = phydev->supported;
1124
+ phy_support_asym_pause(phydev);
11421125
11431126 phy_attached_info(phydev);
11441127
....@@ -1443,11 +1426,9 @@
14431426 return result;
14441427 }
14451428
1446
-#ifdef CONFIG_PM
1447
-
1448
-static int smsc9420_suspend(struct pci_dev *pdev, pm_message_t state)
1429
+static int __maybe_unused smsc9420_suspend(struct device *dev_d)
14491430 {
1450
- struct net_device *dev = pci_get_drvdata(pdev);
1431
+ struct net_device *dev = dev_get_drvdata(dev_d);
14511432 struct smsc9420_pdata *pd = netdev_priv(dev);
14521433 u32 int_cfg;
14531434 ulong flags;
....@@ -1472,34 +1453,21 @@
14721453 netif_device_detach(dev);
14731454 }
14741455
1475
- pci_save_state(pdev);
1476
- pci_enable_wake(pdev, pci_choose_state(pdev, state), 0);
1477
- pci_disable_device(pdev);
1478
- pci_set_power_state(pdev, pci_choose_state(pdev, state));
1456
+ device_wakeup_disable(dev_d);
14791457
14801458 return 0;
14811459 }
14821460
1483
-static int smsc9420_resume(struct pci_dev *pdev)
1461
+static int __maybe_unused smsc9420_resume(struct device *dev_d)
14841462 {
1485
- struct net_device *dev = pci_get_drvdata(pdev);
1486
- struct smsc9420_pdata *pd = netdev_priv(dev);
1463
+ struct net_device *dev = dev_get_drvdata(dev_d);
14871464 int err;
14881465
1489
- pci_set_power_state(pdev, PCI_D0);
1490
- pci_restore_state(pdev);
1466
+ pci_set_master(to_pci_dev(dev_d));
14911467
1492
- err = pci_enable_device(pdev);
1493
- if (err)
1494
- return err;
1468
+ device_wakeup_disable(dev_d);
14951469
1496
- pci_set_master(pdev);
1497
-
1498
- err = pci_enable_wake(pdev, PCI_D0, 0);
1499
- if (err)
1500
- netif_warn(pd, ifup, pd->dev, "pci_enable_wake failed: %d\n",
1501
- err);
1502
-
1470
+ err = 0;
15031471 if (netif_running(dev)) {
15041472 /* FIXME: gross. It looks like ancient PM relic.*/
15051473 err = smsc9420_open(dev);
....@@ -1508,15 +1476,13 @@
15081476 return err;
15091477 }
15101478
1511
-#endif /* CONFIG_PM */
1512
-
15131479 static const struct net_device_ops smsc9420_netdev_ops = {
15141480 .ndo_open = smsc9420_open,
15151481 .ndo_stop = smsc9420_stop,
15161482 .ndo_start_xmit = smsc9420_hard_start_xmit,
15171483 .ndo_get_stats = smsc9420_get_stats,
15181484 .ndo_set_rx_mode = smsc9420_set_multicast_list,
1519
- .ndo_do_ioctl = smsc9420_do_ioctl,
1485
+ .ndo_do_ioctl = phy_do_ioctl_running,
15201486 .ndo_validate_addr = eth_validate_addr,
15211487 .ndo_set_mac_address = eth_mac_addr,
15221488 #ifdef CONFIG_NET_POLL_CONTROLLER
....@@ -1560,7 +1526,7 @@
15601526 goto out_free_netdev_2;
15611527 }
15621528
1563
- if (pci_set_dma_mask(pdev, DMA_BIT_MASK(32))) {
1529
+ if (dma_set_mask(&pdev->dev, DMA_BIT_MASK(32))) {
15641530 netdev_err(dev, "No usable DMA configuration, aborting\n");
15651531 goto out_free_regions_3;
15661532 }
....@@ -1578,10 +1544,9 @@
15781544 pd = netdev_priv(dev);
15791545
15801546 /* pci descriptors are created in the PCI consistent area */
1581
- pd->rx_ring = pci_alloc_consistent(pdev,
1582
- sizeof(struct smsc9420_dma_desc) * RX_RING_SIZE +
1583
- sizeof(struct smsc9420_dma_desc) * TX_RING_SIZE,
1584
- &pd->rx_dma_addr);
1547
+ pd->rx_ring = dma_alloc_coherent(&pdev->dev,
1548
+ sizeof(struct smsc9420_dma_desc) * (RX_RING_SIZE + TX_RING_SIZE),
1549
+ &pd->rx_dma_addr, GFP_KERNEL);
15851550
15861551 if (!pd->rx_ring)
15871552 goto out_free_io_4;
....@@ -1637,8 +1602,9 @@
16371602 return 0;
16381603
16391604 out_free_dmadesc_5:
1640
- pci_free_consistent(pdev, sizeof(struct smsc9420_dma_desc) *
1641
- (RX_RING_SIZE + TX_RING_SIZE), pd->rx_ring, pd->rx_dma_addr);
1605
+ dma_free_coherent(&pdev->dev,
1606
+ sizeof(struct smsc9420_dma_desc) * (RX_RING_SIZE + TX_RING_SIZE),
1607
+ pd->rx_ring, pd->rx_dma_addr);
16421608 out_free_io_4:
16431609 iounmap(virt_addr - LAN9420_CPSR_ENDIAN_OFFSET);
16441610 out_free_regions_3:
....@@ -1670,8 +1636,9 @@
16701636 BUG_ON(!pd->tx_ring);
16711637 BUG_ON(!pd->rx_ring);
16721638
1673
- pci_free_consistent(pdev, sizeof(struct smsc9420_dma_desc) *
1674
- (RX_RING_SIZE + TX_RING_SIZE), pd->rx_ring, pd->rx_dma_addr);
1639
+ dma_free_coherent(&pdev->dev,
1640
+ sizeof(struct smsc9420_dma_desc) * (RX_RING_SIZE + TX_RING_SIZE),
1641
+ pd->rx_ring, pd->rx_dma_addr);
16751642
16761643 iounmap(pd->ioaddr - LAN9420_CPSR_ENDIAN_OFFSET);
16771644 pci_release_regions(pdev);
....@@ -1679,15 +1646,14 @@
16791646 pci_disable_device(pdev);
16801647 }
16811648
1649
+static SIMPLE_DEV_PM_OPS(smsc9420_pm_ops, smsc9420_suspend, smsc9420_resume);
1650
+
16821651 static struct pci_driver smsc9420_driver = {
16831652 .name = DRV_NAME,
16841653 .id_table = smsc9420_id_table,
16851654 .probe = smsc9420_probe,
16861655 .remove = smsc9420_remove,
1687
-#ifdef CONFIG_PM
1688
- .suspend = smsc9420_suspend,
1689
- .resume = smsc9420_resume,
1690
-#endif /* CONFIG_PM */
1656
+ .driver.pm = &smsc9420_pm_ops,
16911657 };
16921658
16931659 static int __init smsc9420_init_module(void)