All of lore.kernel.org
 help / color / mirror / Atom feed
From: Simon Horman <horms@kernel.org>
To: nikita.shubin@maquefel.me
Cc: Hartley Sweeten <hsweeten@visionengravers.com>,
	"David S. Miller" <davem@davemloft.net>,
	Eric Dumazet <edumazet@google.com>,
	Jakub Kicinski <kuba@kernel.org>, Paolo Abeni <pabeni@redhat.com>,
	netdev@vger.kernel.org, linux-kernel@vger.kernel.org,
	Arnd Bergmann <arnd@arndb.de>, Andrew Lunn <andrew@lunn.ch>
Subject: Re: [PATCH v9 17/38] net: cirrus: add DT support for Cirrus EP93xx
Date: Thu, 28 Mar 2024 20:34:29 +0000	[thread overview]
Message-ID: <20240328203429.GK651713@kernel.org> (raw)
In-Reply-To: <20240326-ep93xx-v9-17-156e2ae5dfc8@maquefel.me>

On Tue, Mar 26, 2024 at 12:18:44PM +0300, Nikita Shubin via B4 Relay wrote:
> From: Nikita Shubin <nikita.shubin@maquefel.me>
> 
> - add OF ID match table
> - get phy_id from the device tree, as part of mdio
> - copy_addr is now always used, as there is no SoC/board that aren't
> - dropped platform header
> 
> Reviewed-by: Andrew Lunn <andrew@lunn.ch>
> Tested-by: Alexander Sverdlin <alexander.sverdlin@gmail.com>
> Reviewed-by: Linus Walleij <linus.walleij@linaro.org>
> Signed-off-by: Nikita Shubin <nikita.shubin@maquefel.me>
> ---
>  drivers/net/ethernet/cirrus/ep93xx_eth.c | 63 ++++++++++++++++----------------
>  1 file changed, 32 insertions(+), 31 deletions(-)
> 
> diff --git a/drivers/net/ethernet/cirrus/ep93xx_eth.c b/drivers/net/ethernet/cirrus/ep93xx_eth.c
> index 1f495cfd7959..2523d9c9d1b8 100644
> --- a/drivers/net/ethernet/cirrus/ep93xx_eth.c
> +++ b/drivers/net/ethernet/cirrus/ep93xx_eth.c
> @@ -16,13 +16,12 @@
>  #include <linux/ethtool.h>
>  #include <linux/interrupt.h>
>  #include <linux/moduleparam.h>
> +#include <linux/of.h>
>  #include <linux/platform_device.h>
>  #include <linux/delay.h>
>  #include <linux/io.h>
>  #include <linux/slab.h>
>  
> -#include <linux/platform_data/eth-ep93xx.h>
> -
>  #define DRV_MODULE_NAME		"ep93xx-eth"
>  
>  #define RX_QUEUE_ENTRIES	64
> @@ -738,25 +737,6 @@ static const struct net_device_ops ep93xx_netdev_ops = {
>  	.ndo_set_mac_address	= eth_mac_addr,
>  };
>  
> -static struct net_device *ep93xx_dev_alloc(struct ep93xx_eth_data *data)
> -{
> -	struct net_device *dev;
> -
> -	dev = alloc_etherdev(sizeof(struct ep93xx_priv));
> -	if (dev == NULL)
> -		return NULL;
> -
> -	eth_hw_addr_set(dev, data->dev_addr);
> -
> -	dev->ethtool_ops = &ep93xx_ethtool_ops;
> -	dev->netdev_ops = &ep93xx_netdev_ops;
> -
> -	dev->features |= NETIF_F_SG | NETIF_F_HW_CSUM;
> -
> -	return dev;
> -}
> -
> -
>  static void ep93xx_eth_remove(struct platform_device *pdev)
>  {
>  	struct net_device *dev;
> @@ -786,27 +766,47 @@ static void ep93xx_eth_remove(struct platform_device *pdev)
>  
>  static int ep93xx_eth_probe(struct platform_device *pdev)
>  {
> -	struct ep93xx_eth_data *data;
>  	struct net_device *dev;
>  	struct ep93xx_priv *ep;
>  	struct resource *mem;
> +	void __iomem *base_addr;
> +	struct device_node *np;
> +	u32 phy_id;
>  	int irq;
>  	int err;

Please consider preserving reverse xmas tree order - longest line to
shortest, for local variables in Networking code.

>  
>  	if (pdev == NULL)
>  		return -ENODEV;
> -	data = dev_get_platdata(&pdev->dev);
>  
>  	mem = platform_get_resource(pdev, IORESOURCE_MEM, 0);
>  	irq = platform_get_irq(pdev, 0);
>  	if (!mem || irq < 0)
>  		return -ENXIO;
>  
> -	dev = ep93xx_dev_alloc(data);
> +	base_addr = ioremap(mem->start, resource_size(mem));
> +	if (!base_addr)
> +		return dev_err_probe(&pdev->dev, -EIO, "Failed to ioremap ethernet registers\n");
> +
> +	np = of_parse_phandle(pdev->dev.of_node, "phy-handle", 0);
> +	if (!np)
> +		return dev_err_probe(&pdev->dev, -ENODEV, "Please provide \"phy-handle\"\n");

This function, not entirely due to this patch, seems to leak
resources in error paths.

F.e., here base_addr is not unmapped and mem->start is not released.

I expect that to resolve this problem it would be best to move
to idiomatic error handling by:

* using a ladder of goto labels in ep93xx_eth_probe(); and
* as a clean up, remove the conditions from ep93xx_eth_remove.

> +
> +	err = of_property_read_u32(np, "reg", &phy_id);
> +	of_node_put(np);
> +	if (err)
> +		return dev_err_probe(&pdev->dev, -ENOENT, "Failed to locate \"phy_id\"\n");
> +
> +	dev = alloc_etherdev(sizeof(struct ep93xx_priv));
>  	if (dev == NULL) {
>  		err = -ENOMEM;
>  		goto err_out;
>  	}
> +
> +	eth_hw_addr_set(dev, base_addr + 0x50);

This doesn't look right.

eth_hw_addr_set() expects it's second argument to
be a char * which represents an Ethernet address.
But the type of base_addr + 0x50 is __iomem *.

I suspect that you need some construction based on readb/readw/readl
to copy the Ethernet address from io memory into a buffer,
taking into account endiness and possibly taking into account
unaligned access.

Also, it would be good a descriptively named #define in place of 0x50.

> +	dev->ethtool_ops = &ep93xx_ethtool_ops;
> +	dev->netdev_ops = &ep93xx_netdev_ops;
> +	dev->features |= NETIF_F_SG | NETIF_F_HW_CSUM;
> +
>  	ep = netdev_priv(dev);
>  	ep->dev = dev;
>  	SET_NETDEV_DEV(dev, &pdev->dev);

...

  reply	other threads:[~2024-03-28 20:34 UTC|newest]

Thread overview: 115+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2024-03-26  9:18 [PATCH v9 00/38] ep93xx device tree conversion Nikita Shubin
2024-03-26  9:18 ` Nikita Shubin via B4 Relay
2024-03-26  9:18 ` Nikita Shubin via B4 Relay
2024-03-26  9:18 ` [PATCH v9 01/38] gpio: ep93xx: split device in multiple Nikita Shubin
2024-03-26  9:18   ` Nikita Shubin via B4 Relay
2024-03-26  9:18   ` Nikita Shubin via B4 Relay
2024-03-26  9:18 ` [PATCH v9 02/38] ARM: ep93xx: add regmap aux_dev Nikita Shubin
2024-03-26  9:18   ` Nikita Shubin via B4 Relay
2024-03-26  9:18 ` [PATCH v9 03/38] clk: ep93xx: add DT support for Cirrus EP93xx Nikita Shubin
2024-03-26  9:18   ` Nikita Shubin via B4 Relay
2024-03-26  9:18 ` [PATCH v9 04/38] pinctrl: add a Cirrus ep93xx SoC pin controller Nikita Shubin
2024-03-26  9:18   ` Nikita Shubin via B4 Relay
2024-03-26  9:18 ` [PATCH v9 05/38] power: reset: Add a driver for the ep93xx reset Nikita Shubin
2024-03-26  9:18   ` Nikita Shubin via B4 Relay
2024-03-26 23:31   ` Sebastian Reichel
2024-03-26  9:18 ` [PATCH v9 06/38] dt-bindings: soc: Add Cirrus EP93xx Nikita Shubin
2024-03-26  9:18   ` Nikita Shubin via B4 Relay
2024-03-26  9:18 ` [PATCH v9 07/38] soc: Add SoC driver for Cirrus ep93xx Nikita Shubin
2024-03-26  9:18   ` Nikita Shubin via B4 Relay
2024-03-26  9:18 ` [PATCH v9 08/38] dt-bindings: dma: Add Cirrus EP93xx Nikita Shubin
2024-03-26  9:18   ` Nikita Shubin via B4 Relay
2024-03-28  4:26   ` Vinod Koul
2024-03-26  9:18 ` [PATCH v9 09/38] dma: cirrus: Convert to DT for " Nikita Shubin
2024-03-26  9:18   ` Nikita Shubin via B4 Relay
2024-03-28  4:31   ` Vinod Koul
2024-03-28  7:21     ` Alexander Sverdlin
2024-03-28  7:27       ` Vinod Koul
2024-03-28  7:24     ` Nikita Shubin
2024-03-28  7:28       ` Vinod Koul
2024-03-26  9:18 ` [PATCH v9 10/38] dt-bindings: watchdog: Add Cirrus EP93x Nikita Shubin
2024-03-26  9:18   ` Nikita Shubin via B4 Relay
2024-03-26  9:18 ` [PATCH v9 11/38] watchdog: ep93xx: add DT support for Cirrus EP93xx Nikita Shubin
2024-03-26  9:18   ` Nikita Shubin via B4 Relay
2024-03-26  9:18 ` [PATCH v9 12/38] dt-bindings: pwm: Add " Nikita Shubin
2024-03-26  9:18   ` Nikita Shubin via B4 Relay
2024-04-29 14:36   ` Uwe Kleine-König
2024-03-26  9:18 ` [PATCH v9 13/38] pwm: ep93xx: add DT support for " Nikita Shubin
2024-03-26  9:18   ` Nikita Shubin via B4 Relay
2024-03-26  9:18 ` [PATCH v9 14/38] dt-bindings: spi: Add " Nikita Shubin
2024-03-26  9:18   ` Nikita Shubin via B4 Relay
2024-03-26  9:18 ` [PATCH v9 15/38] spi: ep93xx: add DT support for " Nikita Shubin
2024-03-26  9:18   ` Nikita Shubin via B4 Relay
2024-03-26  9:18 ` [PATCH v9 16/38] dt-bindings: net: Add " Nikita Shubin
2024-03-26  9:18   ` Nikita Shubin via B4 Relay
2024-03-26  9:18 ` [PATCH v9 17/38] net: cirrus: add DT support for " Nikita Shubin
2024-03-26  9:18   ` Nikita Shubin via B4 Relay
2024-03-28 20:34   ` Simon Horman [this message]
2024-03-26  9:18 ` [PATCH v9 18/38] dt-bindings: mtd: Add ts7200 nand-controller Nikita Shubin
2024-03-26  9:18   ` Nikita Shubin via B4 Relay
2024-03-26  9:18   ` Nikita Shubin via B4 Relay
2024-03-26  9:18 ` [PATCH v9 19/38] mtd: rawnand: add support for ts72xx Nikita Shubin
2024-03-26  9:18   ` Nikita Shubin via B4 Relay
2024-03-26  9:18   ` Nikita Shubin via B4 Relay
2024-03-26  9:18 ` [PATCH v9 20/38] dt-bindings: ata: Add Cirrus EP93xx Nikita Shubin
2024-03-26  9:18   ` Nikita Shubin via B4 Relay
2024-03-26  9:18 ` [PATCH v9 21/38] ata: pata_ep93xx: add device tree support Nikita Shubin
2024-03-26  9:18   ` Nikita Shubin via B4 Relay
2024-03-30 18:41   ` Sergey Shtylyov
2024-03-26  9:18 ` [PATCH v9 22/38] dt-bindings: input: Add Cirrus EP93xx keypad Nikita Shubin
2024-03-26  9:18   ` Nikita Shubin via B4 Relay
2024-03-26  9:18 ` [PATCH v9 23/38] input: keypad: ep93xx: add DT support for Cirrus EP93xx Nikita Shubin
2024-03-26  9:18   ` Nikita Shubin via B4 Relay
2024-03-26  9:18   ` Nikita Shubin via B4 Relay
2024-03-26  9:18 ` [PATCH v9 24/38] wdt: ts72xx: add DT support for ts72xx Nikita Shubin
2024-03-26  9:18   ` Nikita Shubin via B4 Relay
2024-03-26  9:18 ` [PATCH v9 25/38] gpio: ep93xx: add DT support for gpio-ep93xx Nikita Shubin
2024-03-26  9:18   ` Nikita Shubin via B4 Relay
2024-03-26  9:18 ` [PATCH v9 26/38] ASoC: dt-bindings: ep93xx: Document DMA support Nikita Shubin
2024-03-26  9:18   ` Nikita Shubin via B4 Relay
2024-03-26  9:18   ` Nikita Shubin via B4 Relay
2024-03-26  9:18 ` [PATCH v9 27/38] ASoC: dt-bindings: ep93xx: Document Audio Port support Nikita Shubin
2024-03-26  9:18   ` Nikita Shubin via B4 Relay
2024-03-26  9:18   ` Nikita Shubin via B4 Relay
2024-03-26  9:18 ` [PATCH v9 28/38] ASoC: ep93xx: Drop legacy DMA support Nikita Shubin
2024-03-26  9:18   ` Nikita Shubin via B4 Relay
2024-03-26  9:18 ` [PATCH v9 29/38] ARM: dts: add Cirrus EP93XX SoC .dtsi Nikita Shubin
2024-03-26  9:18   ` Nikita Shubin via B4 Relay
2024-03-26  9:18 ` [PATCH v9 30/38] ARM: dts: ep93xx: add ts7250 board Nikita Shubin
2024-03-26  9:18   ` Nikita Shubin via B4 Relay
2024-03-26  9:18 ` [PATCH v9 31/38] ARM: dts: ep93xx: Add EDB9302 DT Nikita Shubin
2024-03-26  9:18   ` Nikita Shubin via B4 Relay
2024-03-26  9:18 ` [PATCH v9 32/38] ARM: ep93xx: DT for the Cirrus ep93xx SoC platforms Nikita Shubin
2024-03-26  9:18   ` Nikita Shubin via B4 Relay
2024-03-26  9:18   ` Nikita Shubin via B4 Relay
2024-03-26  9:43   ` Arnd Bergmann
2024-03-26  9:43     ` Arnd Bergmann
2024-03-26  9:19 ` [PATCH v9 33/38] pwm: ep93xx: drop legacy pinctrl Nikita Shubin
2024-03-26  9:19   ` Nikita Shubin via B4 Relay
2024-03-26  9:19   ` Nikita Shubin via B4 Relay
2024-03-26  9:19 ` [PATCH v9 34/38] ata: pata_ep93xx: remove legacy pinctrl use Nikita Shubin
2024-03-26  9:19   ` Nikita Shubin via B4 Relay
2024-03-26  9:19   ` Nikita Shubin via B4 Relay
2024-03-26  9:19 ` [PATCH v9 35/38] ARM: ep93xx: delete all boardfiles Nikita Shubin
2024-03-26  9:19   ` Nikita Shubin via B4 Relay
2024-03-26  9:19 ` [PATCH v9 36/38] ARM: ep93xx: soc: drop defines Nikita Shubin
2024-03-26  9:19   ` Nikita Shubin via B4 Relay
2024-03-26  9:19 ` [PATCH v9 37/38] ASoC: cirrus: edb93xx: Delete driver Nikita Shubin
2024-03-26  9:19   ` Nikita Shubin via B4 Relay
2024-03-26  9:19 ` [PATCH v9 38/38] dma: cirrus: remove platform code Nikita Shubin
2024-03-26  9:19   ` Nikita Shubin via B4 Relay
2024-03-28  4:44   ` Vinod Koul
2024-03-28  6:59     ` Alexander Sverdlin
2024-03-26 10:07 ` [PATCH v9 00/38] ep93xx device tree conversion Arnd Bergmann
2024-03-26 10:07   ` Arnd Bergmann
2024-04-13  8:48   ` Uwe Kleine-König
2024-04-13  8:48     ` Uwe Kleine-König
2024-03-26 10:19 ` Krzysztof Kozlowski
2024-03-26 10:19   ` Krzysztof Kozlowski
2024-03-26 14:49   ` Andy Shevchenko
2024-03-26 14:49     ` Andy Shevchenko
2024-03-27  5:07     ` Krzysztof Kozlowski
2024-03-27  5:07       ` Krzysztof Kozlowski
2024-03-27 10:59       ` Andy Shevchenko
2024-03-27 10:59         ` Andy Shevchenko
2024-03-26 14:53 ` Andy Shevchenko

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20240328203429.GK651713@kernel.org \
    --to=horms@kernel.org \
    --cc=andrew@lunn.ch \
    --cc=arnd@arndb.de \
    --cc=davem@davemloft.net \
    --cc=edumazet@google.com \
    --cc=hsweeten@visionengravers.com \
    --cc=kuba@kernel.org \
    --cc=linux-kernel@vger.kernel.org \
    --cc=netdev@vger.kernel.org \
    --cc=nikita.shubin@maquefel.me \
    --cc=pabeni@redhat.com \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.