mail archive of the barebox mailing list
 help / color / mirror / Atom feed
From: Oleksij Rempel <o.rempel@pengutronix.de>
To: barebox@lists.infradead.org
Cc: Oleksij Rempel <o.rempel@pengutronix.de>
Subject: [PATCH v1] net: phy: do not call adjust_link() form phy_device_attach()
Date: Thu, 14 Apr 2022 09:55:30 +0200	[thread overview]
Message-ID: <20220414075530.1372003-1-o.rempel@pengutronix.de> (raw)

phy_device_attach() is usually called from eth_open() to enable
interface, configure MAC, etc. Some times we have situations like this:
1. find and configure PHY
2. define PHY as clock provider for MAC
3. reset and configure MAC
4. detect link and speed and configure MAC accordingly.

Which works as expected unless we use fixed PHY. Since fixed-phy was
handled differently by the PHY code, we did step 4. before step 3. In
this case we will loose MAC speed configuration at least on designware-eqos
Ethernet controller.

With this change, we handle real PHY and virtual fixed-PHY in the same way.
So, adjust_link() (step 4.) will be called after edev->open() (step 3.)
as it should be for both variants.

Signed-off-by: Oleksij Rempel <o.rempel@pengutronix.de>
---
 drivers/net/phy/phy.c | 13 ++++++++-----
 1 file changed, 8 insertions(+), 5 deletions(-)

diff --git a/drivers/net/phy/phy.c b/drivers/net/phy/phy.c
index 85cdd7862f..adff9dadd1 100644
--- a/drivers/net/phy/phy.c
+++ b/drivers/net/phy/phy.c
@@ -54,6 +54,13 @@ int phy_update_status(struct phy_device *phydev)
 			return ret;
 	}
 
+	/*
+	 * If the phy is a fixed-link, set it to active state to trigger
+	 * MAC configuration
+	 */
+	if (!phydev->bus && !phydev->link)
+		phydev->link = 1;
+
 	if (phydev->speed == oldspeed && phydev->duplex == oldduplex &&
 	    phydev->link == oldlink)
 		return 0;
@@ -311,7 +318,7 @@ struct phy_device *of_phy_register_fixed_link(struct device_node *np,
 
 	phydev->dev.parent = &edev->dev;
 	phydev->registered = 1;
-	phydev->link = 1;
+	phydev->link = 0;
 
 	if (of_property_read_u32(np, "speed", &phydev->speed))
 		return NULL;
@@ -401,10 +408,6 @@ static int phy_device_attach(struct phy_device *phy, struct eth_device *edev,
 
 	phy->adjust_link = adjust_link;
 
-	/* If the phy is a fixed-link, then call adjust_link directly */
-	if (!phy->bus && adjust_link)
-		adjust_link(edev);
-
 	return 0;
 }
 
-- 
2.30.2


_______________________________________________
barebox mailing list
barebox@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/barebox


             reply	other threads:[~2022-04-14  7:57 UTC|newest]

Thread overview: 2+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2022-04-14  7:55 Oleksij Rempel [this message]
2022-04-19  7:15 ` Sascha Hauer

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=20220414075530.1372003-1-o.rempel@pengutronix.de \
    --to=o.rempel@pengutronix.de \
    --cc=barebox@lists.infradead.org \
    --subject='Re: [PATCH v1] net: phy: do not call adjust_link() form phy_device_attach()' \
    /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

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox