From nobody Sun May 10 09:53:18 2026 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by smtp.lore.kernel.org (Postfix) with ESMTP id 8C2A2C433F5 for ; Fri, 13 May 2022 17:24:15 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1382979AbiEMRYO (ORCPT ); Fri, 13 May 2022 13:24:14 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:36022 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1382970AbiEMRYK (ORCPT ); Fri, 13 May 2022 13:24:10 -0400 Received: from mail.sf-mail.de (mail.sf-mail.de [IPv6:2a01:4f8:1c17:6fae:616d:6c69:616d:6c69]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 05BFC703E4 for ; Fri, 13 May 2022 10:24:05 -0700 (PDT) Received: (qmail 5299 invoked from network); 13 May 2022 17:23:55 -0000 Received: from p200300cf07132b0076d435fffeb7be92.dip0.t-ipconnect.de ([2003:cf:713:2b00:76d4:35ff:feb7:be92]:43442 HELO eto.sf-tec.de) (auth=eike@sf-mail.de) by mail.sf-mail.de (Qsmtpd 0.38dev) with (TLS_AES_256_GCM_SHA384 encrypted) ESMTPSA for ; Fri, 13 May 2022 19:23:55 +0200 From: Rolf Eike Beer To: Jakub Kicinski Cc: linux-kernel@vger.kernel.org, linux-parisc@vger.kernel.org, netdev@vger.kernel.org, Yang Yingliang , davem@davemloft.net, edumazet@google.com Subject: [PATCH v2] net: tulip: convert to devres Date: Fri, 13 May 2022 19:23:59 +0200 Message-ID: <2630407.mvXUDI8C0e@eto.sf-tec.de> In-Reply-To: <2240900.ElGaqSPkdT@daneel.sf-tec.de> References: <2240900.ElGaqSPkdT@daneel.sf-tec.de> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Content-Type: text/plain; charset="utf-8" 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 advertis= ing 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 ca= pability of c1e1 Signed-off-by: Rolf Eike Beer --- drivers/net/ethernet/dec/tulip/eeprom.c | 7 ++- drivers/net/ethernet/dec/tulip/tulip_core.c | 64 ++++++--------------- 2 files changed, 20 insertions(+), 51 deletions(-) v2: rebased diff --git a/drivers/net/ethernet/dec/tulip/eeprom.c b/drivers/net/ethernet= /dec/tulip/eeprom.c index ba0a69b363f8..67a67cb78dbb 100644 --- a/drivers/net/ethernet/dec/tulip/eeprom.c +++ b/drivers/net/ethernet/dec/tulip/eeprom.c @@ -117,8 +117,8 @@ static void tulip_build_fake_mediatable(struct tulip_pr= ivate *tp) 0x00, 0x06 /* ttm bit map */ }; =20 - tp->mtable =3D kmalloc(sizeof(struct mediatable) + - sizeof(struct medialeaf), GFP_KERNEL); + tp->mtable =3D devm_kmalloc(&tp->pdev->pdev, sizeof(struct mediatable) + + sizeof(struct medialeaf), GFP_KERNEL); =20 if (tp->mtable =3D=3D NULL) return; /* Horrible, impossible failure. */ @@ -224,7 +224,8 @@ void tulip_parse_eeprom(struct net_device *dev) return; } =20 - mtable =3D kmalloc(struct_size(mtable, mleaf, count), GFP_KERNEL); + mtable =3D devm_kmalloc(&tp->pdev->dev, struct_size(mtable, mleaf, count= ), + GFP_KERNEL); if (mtable =3D=3D NULL) return; /* Horrible, impossible failure. */ last_mediatable =3D tp->mtable =3D mtable; diff --git a/drivers/net/ethernet/dec/tulip/tulip_core.c b/drivers/net/ethe= rnet/dec/tulip/tulip_core.c index 0040dcaab945..1a09d3753073 100644 --- a/drivers/net/ethernet/dec/tulip/tulip_core.c +++ b/drivers/net/ethernet/dec/tulip/tulip_core.c @@ -1389,7 +1389,7 @@ static int tulip_init_one(struct pci_dev *pdev, const= struct pci_device_id *ent) * And back to business */ =20 - i =3D pci_enable_device(pdev); + i =3D 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, cons= t struct pci_device_id *ent) irq =3D pdev->irq; =20 /* alloc_etherdev ensures aligned and zeroed private structures */ - dev =3D alloc_etherdev (sizeof (*tp)); - if (!dev) { - pci_disable_device(pdev); + dev =3D devm_alloc_etherdev(&pdev->dev, sizeof(*tp)); + if (!dev) return -ENOMEM; - } =20 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, con= st 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; } =20 /* 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; =20 - ioaddr =3D pci_iomap(pdev, TULIP_BAR, tulip_tbl[chip_idx].io_size); + ioaddr =3D pcim_iomap(pdev, TULIP_BAR, tulip_tbl[chip_idx].io_size); =20 if (!ioaddr) - goto err_out_free_res; + return -ENODEV; =20 /* * initialize private data structure 'tp' @@ -1430,12 +1428,12 @@ static int tulip_init_one(struct pci_dev *pdev, con= st struct pci_device_id *ent) tp =3D netdev_priv(dev); tp->dev =3D dev; =20 - tp->rx_ring =3D 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 =3D 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 =3D (struct tulip_tx_desc *)(tp->rx_ring + RX_RING_SIZE); tp->tx_ring_dma =3D tp->rx_ring_dma + sizeof(struct tulip_rx_desc) * RX_R= ING_SIZE; =20 @@ -1695,8 +1693,9 @@ static int tulip_init_one(struct pci_dev *pdev, const= struct pci_device_id *ent) #endif dev->ethtool_ops =3D &ops; =20 - if (register_netdev(dev)) - goto err_out_free_ring; + i =3D register_netdev(dev); + if (i) + return i; =20 pci_set_drvdata(pdev, dev); =20 @@ -1771,24 +1770,6 @@ static int tulip_init_one(struct pci_dev *pdev, cons= t struct pci_device_id *ent) tulip_set_power_state (tp, 0, 1); =20 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; } =20 =20 @@ -1888,24 +1869,11 @@ static int __maybe_unused tulip_resume(struct devic= e *dev_d) static void tulip_remove_one(struct pci_dev *pdev) { struct net_device *dev =3D pci_get_drvdata (pdev); - struct tulip_private *tp; =20 if (!dev) return; =20 - tp =3D 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); */ } =20 #ifdef CONFIG_NET_POLL_CONTROLLER --=20 2.35.3