diff mbox series

[1/1] net: phy: Do not do CL22 phy reset before ethernet phy driver probe

Message ID 20241014070611.32040-1-SkyLake.Huang@mediatek.com
State Accepted
Commit bab54f5942c428be698216224fd10b91d974d4da
Delegated to: Ramon Fried
Headers show
Series [1/1] net: phy: Do not do CL22 phy reset before ethernet phy driver probe | expand

Commit Message

SkyLake Huang (黃啟澤) Oct. 14, 2024, 7:06 a.m. UTC
From: "SkyLake.Huang" <skylake.huang@mediatek.com>

Remove unnecessary CL22 phy reset before ethernet phy driver
probe. Lots of ethernet phys requires driver to load firmware.
Before that, CL22 phy reset may lead to malfunction.

Signed-off-by: SkyLake.Huang <skylake.huang@mediatek.com>
---
 drivers/net/phy/phy.c | 2 --
 1 file changed, 2 deletions(-)

Comments

Tom Rini May 23, 2025, 10:26 p.m. UTC | #1
On Mon, 14 Oct 2024 15:06:11 +0800, Sky Huang wrote:

> Remove unnecessary CL22 phy reset before ethernet phy driver
> probe. Lots of ethernet phys requires driver to load firmware.
> Before that, CL22 phy reset may lead to malfunction.
> 
> 

Applied to u-boot/next, thanks!

[1/1] net: phy: Do not do CL22 phy reset before ethernet phy driver probe
      commit: bab54f5942c428be698216224fd10b91d974d4da
Paul Kocialkowski Aug. 5, 2025, 6 p.m. UTC | #2
Hi,

Le Mon 14 Oct 24, 10:43, Marek Vasut a écrit :
> On 10/14/24 9:06 AM, Sky Huang wrote:
> > From: "SkyLake.Huang" <skylake.huang@mediatek.com>
> > 
> > Remove unnecessary CL22 phy reset before ethernet phy driver
> > probe. Lots of ethernet phys requires driver to load firmware.
> > Before that, CL22 phy reset may lead to malfunction.
> > 
> > Signed-off-by: SkyLake.Huang <skylake.huang@mediatek.com>
> > ---
> >   drivers/net/phy/phy.c | 2 --
> >   1 file changed, 2 deletions(-)
> > 
> > diff --git a/drivers/net/phy/phy.c b/drivers/net/phy/phy.c
> > index 716a1d46111..e6fed8c41d7 100644
> > --- a/drivers/net/phy/phy.c
> > +++ b/drivers/net/phy/phy.c
> > @@ -839,8 +839,6 @@ struct phy_device *phy_find_by_mask(struct mii_dev *bus, uint phy_mask)
> >   static void phy_connect_dev(struct phy_device *phydev, struct udevice *dev,
> >   			    phy_interface_t interface)
> >   {
> > -	/* Soft Reset the PHY */
> > -	phy_reset(phydev);
> >   	if (phydev->dev && phydev->dev != dev) {
> >   		printf("%s:%d is connected to %s.  Reconnecting to %s\n",
> >   		       phydev->bus->name, phydev->addr,
> 
> This needs clarification and likely has to be handled differently. Removing
> the reset would leave the PHY in potentially undefined state.
> 
> Which PHY is affected by this ?

Good hunch. I just bisected down to this commit as I had some issues with my
Allwinner V3 board using the internal CL22 PHY. The symptom is that the LEDS's
polarity was inverted. Network still seems to work (although not tested beyond
ping).

This change can have very significant consequences in general, which were not
explored at all in the commit. This may break many boards that do rely on that
PHY reset, in various scenarios and for various reasons.

I think it should be reverted as soon as possible to restore previous behavior.

All the best,

Paul
Tom Rini Oct. 26, 2025, 3:43 p.m. UTC | #3
On Tue, Aug 05, 2025 at 08:00:29PM +0200, Paul Kocialkowski wrote:
> Hi,
> 
> Le Mon 14 Oct 24, 10:43, Marek Vasut a écrit :
> > On 10/14/24 9:06 AM, Sky Huang wrote:
> > > From: "SkyLake.Huang" <skylake.huang@mediatek.com>
> > > 
> > > Remove unnecessary CL22 phy reset before ethernet phy driver
> > > probe. Lots of ethernet phys requires driver to load firmware.
> > > Before that, CL22 phy reset may lead to malfunction.
> > > 
> > > Signed-off-by: SkyLake.Huang <skylake.huang@mediatek.com>
> > > ---
> > >   drivers/net/phy/phy.c | 2 --
> > >   1 file changed, 2 deletions(-)
> > > 
> > > diff --git a/drivers/net/phy/phy.c b/drivers/net/phy/phy.c
> > > index 716a1d46111..e6fed8c41d7 100644
> > > --- a/drivers/net/phy/phy.c
> > > +++ b/drivers/net/phy/phy.c
> > > @@ -839,8 +839,6 @@ struct phy_device *phy_find_by_mask(struct mii_dev *bus, uint phy_mask)
> > >   static void phy_connect_dev(struct phy_device *phydev, struct udevice *dev,
> > >   			    phy_interface_t interface)
> > >   {
> > > -	/* Soft Reset the PHY */
> > > -	phy_reset(phydev);
> > >   	if (phydev->dev && phydev->dev != dev) {
> > >   		printf("%s:%d is connected to %s.  Reconnecting to %s\n",
> > >   		       phydev->bus->name, phydev->addr,
> > 
> > This needs clarification and likely has to be handled differently. Removing
> > the reset would leave the PHY in potentially undefined state.
> > 
> > Which PHY is affected by this ?
> 
> Good hunch. I just bisected down to this commit as I had some issues with my
> Allwinner V3 board using the internal CL22 PHY. The symptom is that the LEDS's
> polarity was inverted. Network still seems to work (although not tested beyond
> ping).
> 
> This change can have very significant consequences in general, which were not
> explored at all in the commit. This may break many boards that do rely on that
> PHY reset, in various scenarios and for various reasons.
> 
> I think it should be reverted as soon as possible to restore previous behavior.

I'm wondering if anyone has further comments here? If I do go and revert
this what is then going to break on the MediaTek side for example?
Marek Vasut Oct. 26, 2025, 3:56 p.m. UTC | #4
On 10/26/25 4:43 PM, Tom Rini wrote:
> On Tue, Aug 05, 2025 at 08:00:29PM +0200, Paul Kocialkowski wrote:
>> Hi,
>>
>> Le Mon 14 Oct 24, 10:43, Marek Vasut a écrit :
>>> On 10/14/24 9:06 AM, Sky Huang wrote:
>>>> From: "SkyLake.Huang" <skylake.huang@mediatek.com>
>>>>
>>>> Remove unnecessary CL22 phy reset before ethernet phy driver
>>>> probe. Lots of ethernet phys requires driver to load firmware.
>>>> Before that, CL22 phy reset may lead to malfunction.
>>>>
>>>> Signed-off-by: SkyLake.Huang <skylake.huang@mediatek.com>
>>>> ---
>>>>    drivers/net/phy/phy.c | 2 --
>>>>    1 file changed, 2 deletions(-)
>>>>
>>>> diff --git a/drivers/net/phy/phy.c b/drivers/net/phy/phy.c
>>>> index 716a1d46111..e6fed8c41d7 100644
>>>> --- a/drivers/net/phy/phy.c
>>>> +++ b/drivers/net/phy/phy.c
>>>> @@ -839,8 +839,6 @@ struct phy_device *phy_find_by_mask(struct mii_dev *bus, uint phy_mask)
>>>>    static void phy_connect_dev(struct phy_device *phydev, struct udevice *dev,
>>>>    			    phy_interface_t interface)
>>>>    {
>>>> -	/* Soft Reset the PHY */
>>>> -	phy_reset(phydev);
>>>>    	if (phydev->dev && phydev->dev != dev) {
>>>>    		printf("%s:%d is connected to %s.  Reconnecting to %s\n",
>>>>    		       phydev->bus->name, phydev->addr,
>>>
>>> This needs clarification and likely has to be handled differently. Removing
>>> the reset would leave the PHY in potentially undefined state.
>>>
>>> Which PHY is affected by this ?
>>
>> Good hunch. I just bisected down to this commit as I had some issues with my
>> Allwinner V3 board using the internal CL22 PHY. The symptom is that the LEDS's
>> polarity was inverted. Network still seems to work (although not tested beyond
>> ping).
>>
>> This change can have very significant consequences in general, which were not
>> explored at all in the commit. This may break many boards that do rely on that
>> PHY reset, in various scenarios and for various reasons.
>>
>> I think it should be reverted as soon as possible to restore previous behavior.
> 
> I'm wondering if anyone has further comments here? If I do go and revert
> this what is then going to break on the MediaTek side for example?
Let's revert it, and if MTK stuff breaks, let's fix it properly then.
Paul Kocialkowski Oct. 26, 2025, 5:32 p.m. UTC | #5
Hi,

On Sun 26 Oct 25, 16:56, Marek Vasut wrote:
> On 10/26/25 4:43 PM, Tom Rini wrote:
> > On Tue, Aug 05, 2025 at 08:00:29PM +0200, Paul Kocialkowski wrote:
> > > Hi,
> > > 
> > > Le Mon 14 Oct 24, 10:43, Marek Vasut a écrit :
> > > > On 10/14/24 9:06 AM, Sky Huang wrote:
> > > > > From: "SkyLake.Huang" <skylake.huang@mediatek.com>
> > > > > 
> > > > > Remove unnecessary CL22 phy reset before ethernet phy driver
> > > > > probe. Lots of ethernet phys requires driver to load firmware.
> > > > > Before that, CL22 phy reset may lead to malfunction.
> > > > > 
> > > > > Signed-off-by: SkyLake.Huang <skylake.huang@mediatek.com>
> > > > > ---
> > > > >    drivers/net/phy/phy.c | 2 --
> > > > >    1 file changed, 2 deletions(-)
> > > > > 
> > > > > diff --git a/drivers/net/phy/phy.c b/drivers/net/phy/phy.c
> > > > > index 716a1d46111..e6fed8c41d7 100644
> > > > > --- a/drivers/net/phy/phy.c
> > > > > +++ b/drivers/net/phy/phy.c
> > > > > @@ -839,8 +839,6 @@ struct phy_device *phy_find_by_mask(struct mii_dev *bus, uint phy_mask)
> > > > >    static void phy_connect_dev(struct phy_device *phydev, struct udevice *dev,
> > > > >    			    phy_interface_t interface)
> > > > >    {
> > > > > -	/* Soft Reset the PHY */
> > > > > -	phy_reset(phydev);
> > > > >    	if (phydev->dev && phydev->dev != dev) {
> > > > >    		printf("%s:%d is connected to %s.  Reconnecting to %s\n",
> > > > >    		       phydev->bus->name, phydev->addr,
> > > > 
> > > > This needs clarification and likely has to be handled differently. Removing
> > > > the reset would leave the PHY in potentially undefined state.
> > > > 
> > > > Which PHY is affected by this ?
> > > 
> > > Good hunch. I just bisected down to this commit as I had some issues with my
> > > Allwinner V3 board using the internal CL22 PHY. The symptom is that the LEDS's
> > > polarity was inverted. Network still seems to work (although not tested beyond
> > > ping).
> > > 
> > > This change can have very significant consequences in general, which were not
> > > explored at all in the commit. This may break many boards that do rely on that
> > > PHY reset, in various scenarios and for various reasons.
> > > 
> > > I think it should be reverted as soon as possible to restore previous behavior.
> > 
> > I'm wondering if anyone has further comments here? If I do go and revert
> > this what is then going to break on the MediaTek side for example?
> Let's revert it, and if MTK stuff breaks, let's fix it properly then.

Agreed, keeping it only saves one setup but sacrifices many others. This is
definitely not right.

An immediate solution to support Mediatek would be to add a config
option (enabled by default) for the PHY reset. Or maybe this could be described
in the board file somehow (this is a policy decision so I don't think any
approach based on device-tree would be relevant here).

All the best,

Paul
Tom Rini Oct. 26, 2025, 5:55 p.m. UTC | #6
On Sun, Oct 26, 2025 at 06:32:23PM +0100, Paul Kocialkowski wrote:
> Hi,
> 
> On Sun 26 Oct 25, 16:56, Marek Vasut wrote:
> > On 10/26/25 4:43 PM, Tom Rini wrote:
> > > On Tue, Aug 05, 2025 at 08:00:29PM +0200, Paul Kocialkowski wrote:
> > > > Hi,
> > > > 
> > > > Le Mon 14 Oct 24, 10:43, Marek Vasut a écrit :
> > > > > On 10/14/24 9:06 AM, Sky Huang wrote:
> > > > > > From: "SkyLake.Huang" <skylake.huang@mediatek.com>
> > > > > > 
> > > > > > Remove unnecessary CL22 phy reset before ethernet phy driver
> > > > > > probe. Lots of ethernet phys requires driver to load firmware.
> > > > > > Before that, CL22 phy reset may lead to malfunction.
> > > > > > 
> > > > > > Signed-off-by: SkyLake.Huang <skylake.huang@mediatek.com>
> > > > > > ---
> > > > > >    drivers/net/phy/phy.c | 2 --
> > > > > >    1 file changed, 2 deletions(-)
> > > > > > 
> > > > > > diff --git a/drivers/net/phy/phy.c b/drivers/net/phy/phy.c
> > > > > > index 716a1d46111..e6fed8c41d7 100644
> > > > > > --- a/drivers/net/phy/phy.c
> > > > > > +++ b/drivers/net/phy/phy.c
> > > > > > @@ -839,8 +839,6 @@ struct phy_device *phy_find_by_mask(struct mii_dev *bus, uint phy_mask)
> > > > > >    static void phy_connect_dev(struct phy_device *phydev, struct udevice *dev,
> > > > > >    			    phy_interface_t interface)
> > > > > >    {
> > > > > > -	/* Soft Reset the PHY */
> > > > > > -	phy_reset(phydev);
> > > > > >    	if (phydev->dev && phydev->dev != dev) {
> > > > > >    		printf("%s:%d is connected to %s.  Reconnecting to %s\n",
> > > > > >    		       phydev->bus->name, phydev->addr,
> > > > > 
> > > > > This needs clarification and likely has to be handled differently. Removing
> > > > > the reset would leave the PHY in potentially undefined state.
> > > > > 
> > > > > Which PHY is affected by this ?
> > > > 
> > > > Good hunch. I just bisected down to this commit as I had some issues with my
> > > > Allwinner V3 board using the internal CL22 PHY. The symptom is that the LEDS's
> > > > polarity was inverted. Network still seems to work (although not tested beyond
> > > > ping).
> > > > 
> > > > This change can have very significant consequences in general, which were not
> > > > explored at all in the commit. This may break many boards that do rely on that
> > > > PHY reset, in various scenarios and for various reasons.
> > > > 
> > > > I think it should be reverted as soon as possible to restore previous behavior.
> > > 
> > > I'm wondering if anyone has further comments here? If I do go and revert
> > > this what is then going to break on the MediaTek side for example?
> > Let's revert it, and if MTK stuff breaks, let's fix it properly then.
> 
> Agreed, keeping it only saves one setup but sacrifices many others. This is
> definitely not right.
> 
> An immediate solution to support Mediatek would be to add a config
> option (enabled by default) for the PHY reset. Or maybe this could be described
> in the board file somehow (this is a policy decision so I don't think any
> approach based on device-tree would be relevant here).

OK, can you please post the revert and cc the MediaTek people,
explaining what you ran in to? Thanks!
diff mbox series

Patch

diff --git a/drivers/net/phy/phy.c b/drivers/net/phy/phy.c
index 716a1d46111..e6fed8c41d7 100644
--- a/drivers/net/phy/phy.c
+++ b/drivers/net/phy/phy.c
@@ -839,8 +839,6 @@  struct phy_device *phy_find_by_mask(struct mii_dev *bus, uint phy_mask)
 static void phy_connect_dev(struct phy_device *phydev, struct udevice *dev,
 			    phy_interface_t interface)
 {
-	/* Soft Reset the PHY */
-	phy_reset(phydev);
 	if (phydev->dev && phydev->dev != dev) {
 		printf("%s:%d is connected to %s.  Reconnecting to %s\n",
 		       phydev->bus->name, phydev->addr,