net: tulip: convert to devres
authorRolf Eike Beer <eike-kernel@sf-tec.de>
Fri, 13 May 2022 17:23:59 +0000 (19:23 +0200)
committerDavid S. Miller <davem@davemloft.net>
Mon, 16 May 2022 10:29:26 +0000 (11:29 +0100)
Works fine on my HP C3600:

[  274.452394] tulip0: no phy info, aborting mtable build
[  274.499041] tulip0:  MII transceiver #1 config 1000 status 782d advertising 01e1
[  274.750691] net eth0: Digital DS21142/43 Tulip rev 65 at MMIO 0xf4008000, 00:30:6e:08:7d:21, IRQ 17
[  283.104520] net eth0: Setting full-duplex based on MII#1 link partner capability of c1e1

Signed-off-by: Rolf Eike Beer <eike-kernel@sf-tec.de>
Signed-off-by: David S. Miller <davem@davemloft.net>
drivers/net/ethernet/dec/tulip/eeprom.c
drivers/net/ethernet/dec/tulip/tulip_core.c

index ba0a69b..67a67cb 100644 (file)
@@ -117,8 +117,8 @@ static void tulip_build_fake_mediatable(struct tulip_private *tp)
                          0x00, 0x06  /* ttm bit map */
                        };
 
-               tp->mtable = kmalloc(sizeof(struct mediatable) +
-                                    sizeof(struct medialeaf), GFP_KERNEL);
+               tp->mtable = devm_kmalloc(&tp->pdev->pdev, sizeof(struct mediatable) +
+                                         sizeof(struct medialeaf), GFP_KERNEL);
 
                if (tp->mtable == NULL)
                        return; /* Horrible, impossible failure. */
@@ -224,7 +224,8 @@ subsequent_board:
                        return;
                }
 
-               mtable = kmalloc(struct_size(mtable, mleaf, count), GFP_KERNEL);
+               mtable = devm_kmalloc(&tp->pdev->dev, struct_size(mtable, mleaf, count),
+                                     GFP_KERNEL);
                if (mtable == NULL)
                        return;                         /* Horrible, impossible failure. */
                last_mediatable = tp->mtable = mtable;
index 825e81f..b8e46c4 100644 (file)
@@ -1389,7 +1389,7 @@ static int tulip_init_one(struct pci_dev *pdev, const struct pci_device_id *ent)
         *      And back to business
         */
 
-       i = pci_enable_device(pdev);
+       i = pcim_enable_device(pdev);
        if (i) {
                pr_err("Cannot enable tulip board #%d, aborting\n", board_idx);
                return i;
@@ -1398,11 +1398,9 @@ static int tulip_init_one(struct pci_dev *pdev, const struct pci_device_id *ent)
        irq = pdev->irq;
 
        /* alloc_etherdev ensures aligned and zeroed private structures */
-       dev = alloc_etherdev (sizeof (*tp));
-       if (!dev) {
-               pci_disable_device(pdev);
+       dev = devm_alloc_etherdev(&pdev->dev, sizeof(*tp));
+       if (!dev)
                return -ENOMEM;
-       }
 
        SET_NETDEV_DEV(dev, &pdev->dev);
        if (pci_resource_len (pdev, 0) < tulip_tbl[chip_idx].io_size) {
@@ -1410,18 +1408,18 @@ static int tulip_init_one(struct pci_dev *pdev, const struct pci_device_id *ent)
                       pci_name(pdev),
                       (unsigned long long)pci_resource_len (pdev, 0),
                       (unsigned long long)pci_resource_start (pdev, 0));
-               goto err_out_free_netdev;
+               return -ENODEV;
        }
 
        /* grab all resources from both PIO and MMIO regions, as we
         * don't want anyone else messing around with our hardware */
-       if (pci_request_regions (pdev, DRV_NAME))
-               goto err_out_free_netdev;
+       if (pci_request_regions(pdev, DRV_NAME))
+               return -ENODEV;
 
-       ioaddr =  pci_iomap(pdev, TULIP_BAR, tulip_tbl[chip_idx].io_size);
+       ioaddr = pcim_iomap(pdev, TULIP_BAR, tulip_tbl[chip_idx].io_size);
 
        if (!ioaddr)
-               goto err_out_free_res;
+               return -ENODEV;
 
        /*
         * initialize private data structure 'tp'
@@ -1430,12 +1428,12 @@ static int tulip_init_one(struct pci_dev *pdev, const struct pci_device_id *ent)
        tp = netdev_priv(dev);
        tp->dev = dev;
 
-       tp->rx_ring = dma_alloc_coherent(&pdev->dev,
-                                        sizeof(struct tulip_rx_desc) * RX_RING_SIZE +
-                                        sizeof(struct tulip_tx_desc) * TX_RING_SIZE,
-                                        &tp->rx_ring_dma, GFP_KERNEL);
+       tp->rx_ring = dmam_alloc_coherent(&pdev->dev,
+                                         sizeof(struct tulip_rx_desc) * RX_RING_SIZE +
+                                         sizeof(struct tulip_tx_desc) * TX_RING_SIZE,
+                                         &tp->rx_ring_dma, GFP_KERNEL);
        if (!tp->rx_ring)
-               goto err_out_mtable;
+               return -ENODEV;
        tp->tx_ring = (struct tulip_tx_desc *)(tp->rx_ring + RX_RING_SIZE);
        tp->tx_ring_dma = tp->rx_ring_dma + sizeof(struct tulip_rx_desc) * RX_RING_SIZE;
 
@@ -1695,8 +1693,9 @@ static int tulip_init_one(struct pci_dev *pdev, const struct pci_device_id *ent)
 #endif
        dev->ethtool_ops = &ops;
 
-       if (register_netdev(dev))
-               goto err_out_free_ring;
+       i = register_netdev(dev);
+       if (i)
+               return i;
 
        pci_set_drvdata(pdev, dev);
 
@@ -1771,24 +1770,6 @@ static int tulip_init_one(struct pci_dev *pdev, const struct pci_device_id *ent)
        tulip_set_power_state (tp, 0, 1);
 
        return 0;
-
-err_out_free_ring:
-       dma_free_coherent(&pdev->dev,
-                         sizeof(struct tulip_rx_desc) * RX_RING_SIZE +
-                         sizeof(struct tulip_tx_desc) * TX_RING_SIZE,
-                         tp->rx_ring, tp->rx_ring_dma);
-
-err_out_mtable:
-       kfree (tp->mtable);
-       pci_iounmap(pdev, ioaddr);
-
-err_out_free_res:
-       pci_release_regions (pdev);
-
-err_out_free_netdev:
-       free_netdev (dev);
-       pci_disable_device(pdev);
-       return -ENODEV;
 }
 
 
@@ -1888,24 +1869,11 @@ static int __maybe_unused tulip_resume(struct device *dev_d)
 static void tulip_remove_one(struct pci_dev *pdev)
 {
        struct net_device *dev = pci_get_drvdata (pdev);
-       struct tulip_private *tp;
 
        if (!dev)
                return;
 
-       tp = netdev_priv(dev);
        unregister_netdev(dev);
-       dma_free_coherent(&pdev->dev,
-                         sizeof(struct tulip_rx_desc) * RX_RING_SIZE +
-                         sizeof(struct tulip_tx_desc) * TX_RING_SIZE,
-                         tp->rx_ring, tp->rx_ring_dma);
-       kfree (tp->mtable);
-       pci_iounmap(pdev, tp->base_addr);
-       free_netdev (dev);
-       pci_release_regions (pdev);
-       pci_disable_device(pdev);
-
-       /* pci_power_off (pdev, -1); */
 }
 
 #ifdef CONFIG_NET_POLL_CONTROLLER