mirror of https://lore.kernel.org/lkml/
 help / color / mirror / Atom feed
From: netdev-bot+sashiko@kernel.org
To: f.fainelli@gmail.com
Cc: netdev@vger.kernel.org, andrew+netdev@lunn.ch,
	davem@davemloft.net, edumazet@kernel.org, kuba@kernel.org,
	pabeni@redhat.com, hkallweit1@gmail.com, linux@armlinux.org.uk,
	shaojijie@huawei.com, horms@kernel.org, runyu.xiao@seu.edu.cn,
	mmyangfl@gmail.com, hvr@gnu.org, jeff@garzik.org,
	danny.kukawka@bisect.de, mugunthanvnm@ti.com,
	sebastian.hesselbarth@gmail.com, linux-kernel@vger.kernel.org,
	manuel.lauss@gmail.com
Subject: Re: [PATCH net 04/11] net: au1000: report MDIO transaction timeouts
Date: Thu, 29 Oct 2026 16:15:12 +0000	[thread overview]
Message-ID: <179329051221.3134.18425968013165195410@kernel.org> (raw)
In-Reply-To: <20261027223140.3774570-5-f.fainelli@gmail.com>

Thank you for your contribution! Sashiko AI review found more severe
issue(s) in other patches of this series. This mail is only an FYI, in case
you want to address the nit picks below when you respin.

Low priority / nit picks for your consideration:

- [Low] The new completion poll in au1000_mdio_write() reads MAC_MII_BUSY
  right after `writel(mii_control, mii_control_reg)`.

Pre-existing issues:
- [Low] On success, au1000_mdio_read() returns the raw 32-bit
  MAC_MII_DATA value (`return readl(mii_data_reg);`, au1000_eth.c:298)…

--

net: au1000: report MDIO transaction timeouts

This commit changes au1000_mdio_write() to return an int. Timeouts from
the busy wait before the transaction, and from a new completion poll after
the write, now go back to phylib through au1000_mdiobus_write(). The read
timeout paths in au1000_mdio_read() now return -ETIMEDOUT instead of -1.

> diff --git a/drivers/net/ethernet/amd/au1000_eth.c b/drivers/net/ethernet/amd/au1000_eth.c
> index 70319b432182f..a507a524370fd 100644
> --- a/drivers/net/ethernet/amd/au1000_eth.c
> +++ b/drivers/net/ethernet/amd/au1000_eth.c

[ ... ]

> @@ -292,14 +292,14 @@ static int au1000_mdio_read(struct net_device *dev, int phy_addr, int reg)
>  		mdelay(1);
>  		if (--timedout == 0) {
>  			netdev_err(dev, "mdio_read busy timeout!!\n");
> -			return -1;
> +			return -ETIMEDOUT;
>  		}
>  	}
>  	return readl(mii_data_reg);

[Severity: Low]
This isn't a bug introduced by this patch, but should au1000_mdio_read()
mask the data register value to 16 bits before returning it?

On success the raw 32-bit MAC_MII_DATA value goes back through
au1000_mdiobus_read() to phylib. __mdiobus_read() expects either a
register value or a negative errno, and it passes the value through
without masking:

drivers/net/phy/mdio_bus.c:__mdiobus_read() {
    ...
	if (bus->read)
		retval = bus->read(bus, addr, regnum);
    ...
}

If bits 31:16 of mii_data ever read back non-zero, phylib would get a
value wider than 16 bits. If bit 31 were set, it would read as an error.

Nothing in the tree shows whether those upper bits are ever non-zero on
this hardware. Would something like readl(mii_data_reg) & 0xffff be
safer, now that negative values on this path are proper errnos?

>  }

[ ... ]

> @@ -320,6 +320,17 @@ static void au1000_mdio_write(struct net_device *dev, int phy_addr,
>  
>  	writel(value, mii_data_reg);
>  	writel(mii_control, mii_control_reg);
> +
> +	timedout = 20;
> +	while (readl(mii_control_reg) & MAC_MII_BUSY) {
> +		mdelay(1);

[Severity: Low]
With this new completion poll, will every MDIO write now busy-wait for at
least 1 ms?

A clause 22 management frame is about 64 MDC cycles, which is roughly
26 us at 2.5 MHz. So the first readl() right after
writel(mii_control, mii_control_reg) will almost always see MAC_MII_BUSY
set, and mdelay(1) will run at least once.

The mii_bus->write callback runs in process context under
bus->mdio_lock, which is a mutex. Could this use readl_poll_timeout()
with a sleep of a few tens of microseconds and the same ~20 ms timeout?

To be fair, before this patch the access that followed a write already
paid this mdelay(1) in its own BUSY wait before starting. So for
back-to-back sequences the cost mostly moves into the write. The new cost
falls on the last write of a burst and on isolated writes. The existing
completion poll in au1000_mdio_read() has the same 1 ms granularity.

> +		if (--timedout == 0) {
> +			netdev_err(dev, "mdio_write busy timeout!!\n");
> +			return -ETIMEDOUT;
> +		}
> +	}
> +
> +	return 0;
>  }

[ ... ]

-- 
Sashiko AI review · https://netdev-ai.bots.linux.dev/sashiko/#/patchset/20261027223140.3774570-1-f.fainelli%40gmail.com

  reply	other threads:[~2026-10-29 16:15 UTC|newest]

Thread overview: 28+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2026-10-27 22:31 [PATCH net 00/11] net: au1000: Bug fixes Florian Fainelli
2026-10-27 22:31 ` [PATCH net 01/11] net: au1000: recycle RX descriptors on allocation failure Florian Fainelli
2026-10-27 22:31 ` [PATCH net 02/11] net: au1000: clear all-multicast mode when restoring hash filtering Florian Fainelli
2026-10-27 22:31 ` [PATCH net 03/11] net: au1000: disconnect the PHY before freeing the MDIO bus Florian Fainelli
2026-10-29 16:15   ` netdev-bot+sashiko
2026-10-29 17:23     ` Florian Fainelli
2026-10-27 22:31 ` [PATCH net 04/11] net: au1000: report MDIO transaction timeouts Florian Fainelli
2026-10-29 16:15   ` netdev-bot+sashiko [this message]
2026-10-29 17:25     ` Florian Fainelli
2026-10-27 22:31 ` [PATCH net 05/11] net: au1000: serialize TX completion with packet submission Florian Fainelli
2026-10-29 16:15   ` netdev-bot+sashiko
2026-10-29 17:32     ` Florian Fainelli
2026-10-27 22:31 ` [PATCH net 06/11] net: au1000: assign a valid MAC address without platform data Florian Fainelli
2026-10-29 16:15   ` netdev-bot+sashiko
2026-10-29 17:33     ` Florian Fainelli
2026-10-27 22:31 ` [PATCH net 07/11] net: au1000: fix buffer descriptor free list insertion Florian Fainelli
2026-10-29 16:15   ` netdev-bot+sashiko
2026-10-29 17:35     ` Florian Fainelli
2026-10-27 22:31 ` [PATCH net 08/11] net: au1000: restore receive filtering after MAC initialization Florian Fainelli
2026-10-29 16:15   ` netdev-bot+sashiko
2026-10-29 17:37     ` Florian Fainelli
2026-10-27 22:31 ` [PATCH net 09/11] net: au1000: restore RX buffer addresses when restarting the MAC Florian Fainelli
2026-10-27 22:31 ` [PATCH net 10/11] net: au1000: keep the MAC stopped until the PHY link is ready Florian Fainelli
2026-10-29 16:15   ` netdev-bot+sashiko
2026-10-29 17:39     ` Florian Fainelli
2026-10-27 22:31 ` [PATCH net 11/11] net: phy: smsc: wait for LAN83C183 power-down recovery Florian Fainelli
2026-10-27 23:21 ` [PATCH net 00/11] net: au1000: Bug fixes Jakub Kicinski
2026-10-28  0:12   ` Florian Fainelli

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=179329051221.3134.18425968013165195410@kernel.org \
    --to=netdev-bot+sashiko@kernel.org \
    --cc=andrew+netdev@lunn.ch \
    --cc=danny.kukawka@bisect.de \
    --cc=davem@davemloft.net \
    --cc=edumazet@kernel.org \
    --cc=f.fainelli@gmail.com \
    --cc=hkallweit1@gmail.com \
    --cc=horms@kernel.org \
    --cc=hvr@gnu.org \
    --cc=jeff@garzik.org \
    --cc=kuba@kernel.org \
    --cc=linux-kernel@vger.kernel.org \
    --cc=linux@armlinux.org.uk \
    --cc=manuel.lauss@gmail.com \
    --cc=mmyangfl@gmail.com \
    --cc=mugunthanvnm@ti.com \
    --cc=netdev@vger.kernel.org \
    --cc=pabeni@redhat.com \
    --cc=runyu.xiao@seu.edu.cn \
    --cc=sebastian.hesselbarth@gmail.com \
    --cc=shaojijie@huawei.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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox

all inboxes | Powered by JetHome®