From: Roger Quadros <rogerq@kernel.org>
To: Siddharth Vadapalli <s-vadapalli@ti.com>
Cc: u-boot@lists.denx.de, nm@ti.com, joe.hershberger@ni.com,
robertcnelson@gmail.com, jkridner@beagleboard.org,
r-gunasekaran@ti.com, srk@ti.com, trini@konsulko.com,
Ramon Fried <rfried.dev@gmail.com>
Subject: Re: [PATCH 1/2] net: ti: am65-cpsw-nuss: Workaround for buggy PHY/Board
Date: Wed, 23 Aug 2023 10:52:57 +0300 [thread overview]
Message-ID: <de614af1-28b1-a6c9-e0e0-454646d0aba6@kernel.org> (raw)
In-Reply-To: <0348ec9c-a50e-1e03-2f7d-c7b82fefc1ed@ti.com>
Hi Siddharth,
On 23/08/2023 07:35, Siddharth Vadapalli wrote:
> Roger,
>
> On 22/08/23 17:43, Roger Quadros wrote:
>> Beagleplay has a buggy Ethernet PHY implementation for the Gigabit
>> PHY in the sense that it is non responsive over MDIO immediately
>> after power-up/reset.
>>
>> We need to either try multiple times or wait sufficiently long enough
>> (couple of 10s of ms?) before the PHY begins to respond correctly.
>
> Based on the datasheet at:
> https://datasheet.lcsc.com/lcsc/1912111437_Realtek-Semicon-RTL8211F-CG_C187932.pdf
> in the section 7.17. PHY Reset (Hardware Reset), it is stated that
> software has to wait for at least 50 ms before accessing the PHY
> registers. Is this why the for-loop in the code below tries for at most
> 5 times with a delay of 10 ms before the next try? If yes, then isn't it
Good catch. This might be the reason why PHY is not responding in the first
few attempts.
> better to move the delay into the realtek PHY driver at
> drivers/net/phy/realtek.c
We are currently at the MDIO bus driver where we don't even know what PHY
is on the bus. So this delay cannot come at the realtec PHY driver.
It has to come at the MDIO bus driver level.
> Shouldn't it be the PHY driver which ensures that any reads/writes to the PHY
> registers are valid? It can ensure this by having a one time 50ms delay for the
> very first access to the PHY registers.>
>>
>> One theory is that the PHY is configured to operate on MDIO address 0
>> which it treats as a special broadcast address.
>>
>> Datasheet states:
>> "PHYAD (config pins) sets the PHY address for the device.
>> The RTL8211F(I)/RTL8211FD(I) supports PHY addresses from 0x01 to 0x07.
>> Note 1: An MDIO command with PHY address=0 is a broadcast from the MAC;
>> each PHY device should respond."
>>
>> This issue is not seen with the other PHY (different make) on the board
>> which is configured for address 0x1.
>>
>> As a woraround we try to probe the PHY multiple times instead of giving
>> up on the first attempt.
>>
>> Signed-off-by: Roger Quadros <rogerq@kernel.org>
>> ---
>> drivers/net/ti/am65-cpsw-nuss.c | 19 ++++++++++++++-----
>> 1 file changed, 14 insertions(+), 5 deletions(-)
>>
>> diff --git a/drivers/net/ti/am65-cpsw-nuss.c b/drivers/net/ti/am65-cpsw-nuss.c
>> index 51a8167d14..4f8a2f9b93 100644
>> --- a/drivers/net/ti/am65-cpsw-nuss.c
>> +++ b/drivers/net/ti/am65-cpsw-nuss.c
>> @@ -27,6 +27,7 @@
>> #include <syscon.h>
>> #include <linux/bitops.h>
>> #include <linux/soc/ti/ti-udma.h>
>> +#include <linux/delay.h>
>>
>> #include "cpsw_mdio.h"
>>
>> @@ -678,14 +679,22 @@ static int am65_cpsw_phy_init(struct udevice *dev)
>> struct am65_cpsw_priv *priv = dev_get_priv(dev);
>> struct am65_cpsw_common *cpsw_common = priv->cpsw_common;
>> struct eth_pdata *pdata = dev_get_plat(dev);
>> - struct phy_device *phydev;
>> u32 supported = PHY_GBIT_FEATURES;
>> + struct phy_device *phydev;
>> + int tries;
>> int ret;
>>
>> - phydev = phy_connect(cpsw_common->bus,
>> - priv->phy_addr,
>> - priv->dev,
>> - pdata->phy_interface);
>> + /* Some boards (e.g. beagleplay) don't work on first go */
>> + for (tries = 1; tries <= 5; tries++) {
>> + phydev = phy_connect(cpsw_common->bus,
>> + priv->phy_addr,
>> + priv->dev,
>> + pdata->phy_interface);
>> + if (phydev)
>> + break;
>> +
>> + mdelay(10);
>> + }
>>
>> if (!phydev) {
>> dev_err(dev, "phy_connect() failed\n");
>
--
cheers,
-roger
next prev parent reply other threads:[~2023-08-23 7:53 UTC|newest]
Thread overview: 16+ messages / expand[flat|nested] mbox.gz Atom feed top
2023-08-22 12:13 [PATCH 0/2] net: Fix Ethernet PHY detection on Beagleplay Roger Quadros
2023-08-22 12:13 ` [PATCH 1/2] net: ti: am65-cpsw-nuss: Workaround for buggy PHY/Board Roger Quadros
2023-08-23 4:35 ` Siddharth Vadapalli
2023-08-23 7:52 ` Roger Quadros [this message]
2023-08-23 8:02 ` Siddharth Vadapalli
2023-08-23 8:14 ` Roger Quadros
2023-08-23 8:35 ` Roger Quadros
2023-08-24 18:04 ` Siddharth Vadapalli
2023-08-24 18:24 ` Tom Rini
2023-08-24 19:09 ` Roger Quadros
2023-08-25 5:42 ` Siddharth Vadapalli
2023-08-25 7:52 ` Roger Quadros
2023-08-25 8:22 ` Siddharth Vadapalli
2023-08-22 12:13 ` [PATCH 2/2] net: phy: Change "PHY not found" message to debug() Roger Quadros
2023-08-23 4:54 ` Siddharth Vadapalli
2023-08-23 8:06 ` Roger Quadros
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=de614af1-28b1-a6c9-e0e0-454646d0aba6@kernel.org \
--to=rogerq@kernel.org \
--cc=jkridner@beagleboard.org \
--cc=joe.hershberger@ni.com \
--cc=nm@ti.com \
--cc=r-gunasekaran@ti.com \
--cc=rfried.dev@gmail.com \
--cc=robertcnelson@gmail.com \
--cc=s-vadapalli@ti.com \
--cc=srk@ti.com \
--cc=trini@konsulko.com \
--cc=u-boot@lists.denx.de \
/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