diff mbox series

[net-next,v2,2/2] net: dsa: microchip: remove MICREL_NO_EEE workaround

Message ID 329108a3-12d6-4ce4-9b28-b59f107120ba@gmail.com (mailing list archive)
State Changes Requested
Delegated to: Netdev Maintainers
Headers show
Series microchip/micrel switch: replace MICREL_NO_EEE workaround | expand

Checks

Context Check Description
netdev/series_format success Posting correctly formatted
netdev/tree_selection success Clearly marked for net-next
netdev/ynl success Generated files up to date; no warnings/errors; no diff in generated;
netdev/fixes_present success Fixes tag not required for -next series
netdev/header_inline success No static functions without inline keyword in header files
netdev/build_32bit success Errors and warnings before: 1 this patch: 1
netdev/build_tools success Errors and warnings before: 0 (+23) this patch: 0 (+23)
netdev/cc_maintainers warning 2 maintainers not CCed: woojung.huh@microchip.com olteanv@gmail.com
netdev/build_clang success Errors and warnings before: 6 this patch: 6
netdev/verify_signedoff success Signed-off-by tag matches author and committer
netdev/deprecated_api success None detected
netdev/check_selftest success No net selftest shell script
netdev/verify_fixes success No Fixes tag
netdev/build_allmodconfig_warn success Errors and warnings before: 40 this patch: 40
netdev/checkpatch success total: 0 errors, 0 warnings, 0 checks, 38 lines checked
netdev/build_clang_rust success No Rust files in patch. Skipping build
netdev/kdoc success Errors and warnings before: 0 this patch: 0
netdev/source_inline success Was 0 now: 0
netdev/contest success net-next-2025-01-06--18-00 (tests: 886)

Commit Message

Heiner Kallweit Jan. 6, 2025, 1:23 p.m. UTC
The integrated PHY's on all these switch types have the same PHY ID.
So we can assume that the issue is related to the PHY type, not the
switch type. After having disabled EEE for this PHY type, we can remove
the workaround code here.

Note: On the fast ethernet models listed here the integrated PHY has
      PHY ID 0x00221550, which is handled by PHY driver
      "Micrel KSZ87XX Switch". This PHY driver doesn't handle flag
      MICREL_NO_EEE, therefore setting the flag for these models
      results in a no-op.

Signed-off-by: Heiner Kallweit <hkallweit1@gmail.com>
---
 drivers/net/dsa/microchip/ksz_common.c | 25 -------------------------
 include/linux/micrel_phy.h             |  1 -
 2 files changed, 26 deletions(-)

Comments

Andrew Lunn Jan. 6, 2025, 6:36 p.m. UTC | #1
On Mon, Jan 06, 2025 at 02:23:36PM +0100, Heiner Kallweit wrote:
> The integrated PHY's on all these switch types have the same PHY ID.
> So we can assume that the issue is related to the PHY type, not the
> switch type. After having disabled EEE for this PHY type, we can remove
> the workaround code here.
> 
> Note: On the fast ethernet models listed here the integrated PHY has
>       PHY ID 0x00221550, which is handled by PHY driver
>       "Micrel KSZ87XX Switch". This PHY driver doesn't handle flag
>       MICREL_NO_EEE, therefore setting the flag for these models
>       results in a no-op.
> 
> Signed-off-by: Heiner Kallweit <hkallweit1@gmail.com>

Reviewed-by: Andrew Lunn <andrew@lunn.ch>

    Andrew
Oleksij Rempel Jan. 7, 2025, 7:42 a.m. UTC | #2
On Mon, Jan 06, 2025 at 02:23:36PM +0100, Heiner Kallweit wrote:
> The integrated PHY's on all these switch types have the same PHY ID.
> So we can assume that the issue is related to the PHY type, not the
> switch type. After having disabled EEE for this PHY type, we can remove
> the workaround code here.
> 
> Note: On the fast ethernet models listed here the integrated PHY has
>       PHY ID 0x00221550, which is handled by PHY driver
>       "Micrel KSZ87XX Switch". This PHY driver doesn't handle flag
>       MICREL_NO_EEE, therefore setting the flag for these models
>       results in a no-op.

Yes, it feels like no one is using KSZ87XX switches with the kernel DSA
driver.

> Signed-off-by: Heiner Kallweit <hkallweit1@gmail.com>
> ---
>  drivers/net/dsa/microchip/ksz_common.c | 25 -------------------------
>  include/linux/micrel_phy.h             |  1 -
>  2 files changed, 26 deletions(-)
> 
> diff --git a/drivers/net/dsa/microchip/ksz_common.c b/drivers/net/dsa/microchip/ksz_common.c
> index e3512e324..4871bb1fc 100644
> --- a/drivers/net/dsa/microchip/ksz_common.c
> +++ b/drivers/net/dsa/microchip/ksz_common.c
> @@ -3008,31 +3008,6 @@ static u32 ksz_get_phy_flags(struct dsa_switch *ds, int port)
>  		if (!port)
>  			return MICREL_KSZ8_P1_ERRATA;
>  		break;
> -	case KSZ8567_CHIP_ID:
> -		/* KSZ8567R Errata DS80000752C Module 4 */
> -	case KSZ8765_CHIP_ID:
> -	case KSZ8794_CHIP_ID:
> -	case KSZ8795_CHIP_ID:
> -		/* KSZ879x/KSZ877x/KSZ876x Errata DS80000687C Module 2 */
> -	case KSZ9477_CHIP_ID:
> -		/* KSZ9477S Errata DS80000754A Module 4 */
> -	case KSZ9567_CHIP_ID:
> -		/* KSZ9567S Errata DS80000756A Module 4 */
> -	case KSZ9896_CHIP_ID:
> -		/* KSZ9896C Errata DS80000757A Module 3 */
> -	case KSZ9897_CHIP_ID:
> -	case LAN9646_CHIP_ID:
> -		/* KSZ9897R Errata DS80000758C Module 4 */
> -		/* Energy Efficient Ethernet (EEE) feature select must be manually disabled
> -		 *   The EEE feature is enabled by default, but it is not fully
> -		 *   operational. It must be manually disabled through register
> -		 *   controls. If not disabled, the PHY ports can auto-negotiate
> -		 *   to enable EEE, and this feature can cause link drops when
> -		 *   linked to another device supporting EEE.
> -		 *
> -		 * The same item appears in the errata for all switches above.
> -		 */

I have two problems with current patch set:
- dropped documentation, not all switches are officially broken, so
  keeping it documented is important.
- not all KSZ9xxx based switches are officially broken. All 3 port
  switches are not broken but still match against the KSZ9477 PHY
  driver:
  KSZ8563_CHIP_ID - 0x00221631
  KSZ9563_CHIP_ID - 0x00221631
  KSZ9893_CHIP_ID - 0x00221631

Best Regards,
Oleksij
Andrew Lunn Jan. 7, 2025, 1:03 p.m. UTC | #3
> I have two problems with current patch set:
> - dropped documentation, not all switches are officially broken, so
>   keeping it documented is important.
> - not all KSZ9xxx based switches are officially broken. All 3 port
>   switches are not broken but still match against the KSZ9477 PHY
>   driver:
>   KSZ8563_CHIP_ID - 0x00221631
>   KSZ9563_CHIP_ID - 0x00221631
>   KSZ9893_CHIP_ID - 0x00221631

When you say "not broken", do you mean there is text in the errata
which says they do really, truly, work, or there is simply no errata
which says they are broken? Do you have these 3 ports switches and
have tested them?

It seems odd to me that the 3 port version should work. Why is it
special?

	Andrew
Oleksij Rempel Jan. 7, 2025, 1:26 p.m. UTC | #4
On Tue, Jan 07, 2025 at 02:03:27PM +0100, Andrew Lunn wrote:
> > I have two problems with current patch set:
> > - dropped documentation, not all switches are officially broken, so
> >   keeping it documented is important.
> > - not all KSZ9xxx based switches are officially broken. All 3 port
> >   switches are not broken but still match against the KSZ9477 PHY
> >   driver:
> >   KSZ8563_CHIP_ID - 0x00221631
> >   KSZ9563_CHIP_ID - 0x00221631
> >   KSZ9893_CHIP_ID - 0x00221631
> 
> When you say "not broken", do you mean there is text in the errata
> which says they do really, truly, work, or there is simply no errata
> which says they are broken? Do you have these 3 ports switches and
> have tested them?

There are multiple true conditions in this case:
- Documentation claims EEE is supported
- Errata documentation do not recommend to disable it
- I have access to this variants, they are relatively common in
  industrial products. So far it seems to work without issues.

> It seems odd to me that the 3 port version should work. Why is it
> special?

In my case, on KSZ9477 the EEE starts to have issues as soon as i start to use
more then 2 ports. I assume, it is switch internal power domain
integration issues and not directly related to actual PHYs. May be it is
possible to handle it some how or disable EEE only for some ports, or
not enable for more then 2 ports, but if vendor removes EEE from
documentation I see it as officially not supported.
Heiner Kallweit Jan. 7, 2025, 8:08 p.m. UTC | #5
On 07.01.2025 08:42, Oleksij Rempel wrote:
> On Mon, Jan 06, 2025 at 02:23:36PM +0100, Heiner Kallweit wrote:
>> The integrated PHY's on all these switch types have the same PHY ID.
>> So we can assume that the issue is related to the PHY type, not the
>> switch type. After having disabled EEE for this PHY type, we can remove
>> the workaround code here.
>>
>> Note: On the fast ethernet models listed here the integrated PHY has
>>       PHY ID 0x00221550, which is handled by PHY driver
>>       "Micrel KSZ87XX Switch". This PHY driver doesn't handle flag
>>       MICREL_NO_EEE, therefore setting the flag for these models
>>       results in a no-op.
> 
> Yes, it feels like no one is using KSZ87XX switches with the kernel DSA
> driver.
> 
>> Signed-off-by: Heiner Kallweit <hkallweit1@gmail.com>
>> ---
>>  drivers/net/dsa/microchip/ksz_common.c | 25 -------------------------
>>  include/linux/micrel_phy.h             |  1 -
>>  2 files changed, 26 deletions(-)
>>
>> diff --git a/drivers/net/dsa/microchip/ksz_common.c b/drivers/net/dsa/microchip/ksz_common.c
>> index e3512e324..4871bb1fc 100644
>> --- a/drivers/net/dsa/microchip/ksz_common.c
>> +++ b/drivers/net/dsa/microchip/ksz_common.c
>> @@ -3008,31 +3008,6 @@ static u32 ksz_get_phy_flags(struct dsa_switch *ds, int port)
>>  		if (!port)
>>  			return MICREL_KSZ8_P1_ERRATA;
>>  		break;
>> -	case KSZ8567_CHIP_ID:
>> -		/* KSZ8567R Errata DS80000752C Module 4 */
>> -	case KSZ8765_CHIP_ID:
>> -	case KSZ8794_CHIP_ID:
>> -	case KSZ8795_CHIP_ID:
>> -		/* KSZ879x/KSZ877x/KSZ876x Errata DS80000687C Module 2 */
>> -	case KSZ9477_CHIP_ID:
>> -		/* KSZ9477S Errata DS80000754A Module 4 */
>> -	case KSZ9567_CHIP_ID:
>> -		/* KSZ9567S Errata DS80000756A Module 4 */
>> -	case KSZ9896_CHIP_ID:
>> -		/* KSZ9896C Errata DS80000757A Module 3 */
>> -	case KSZ9897_CHIP_ID:
>> -	case LAN9646_CHIP_ID:
>> -		/* KSZ9897R Errata DS80000758C Module 4 */
>> -		/* Energy Efficient Ethernet (EEE) feature select must be manually disabled
>> -		 *   The EEE feature is enabled by default, but it is not fully
>> -		 *   operational. It must be manually disabled through register
>> -		 *   controls. If not disabled, the PHY ports can auto-negotiate
>> -		 *   to enable EEE, and this feature can cause link drops when
>> -		 *   linked to another device supporting EEE.
>> -		 *
>> -		 * The same item appears in the errata for all switches above.
>> -		 */
> 
> I have two problems with current patch set:
> - dropped documentation, not all switches are officially broken, so
>   keeping it documented is important.
> - not all KSZ9xxx based switches are officially broken. All 3 port
>   switches are not broken but still match against the KSZ9477 PHY
>   driver:
>   KSZ8563_CHIP_ID - 0x00221631
>   KSZ9563_CHIP_ID - 0x00221631
>   KSZ9893_CHIP_ID - 0x00221631
> 
OK, thanks for the clarification. Then we have to go another way.

> Best Regards,
> Oleksij
diff mbox series

Patch

diff --git a/drivers/net/dsa/microchip/ksz_common.c b/drivers/net/dsa/microchip/ksz_common.c
index e3512e324..4871bb1fc 100644
--- a/drivers/net/dsa/microchip/ksz_common.c
+++ b/drivers/net/dsa/microchip/ksz_common.c
@@ -3008,31 +3008,6 @@  static u32 ksz_get_phy_flags(struct dsa_switch *ds, int port)
 		if (!port)
 			return MICREL_KSZ8_P1_ERRATA;
 		break;
-	case KSZ8567_CHIP_ID:
-		/* KSZ8567R Errata DS80000752C Module 4 */
-	case KSZ8765_CHIP_ID:
-	case KSZ8794_CHIP_ID:
-	case KSZ8795_CHIP_ID:
-		/* KSZ879x/KSZ877x/KSZ876x Errata DS80000687C Module 2 */
-	case KSZ9477_CHIP_ID:
-		/* KSZ9477S Errata DS80000754A Module 4 */
-	case KSZ9567_CHIP_ID:
-		/* KSZ9567S Errata DS80000756A Module 4 */
-	case KSZ9896_CHIP_ID:
-		/* KSZ9896C Errata DS80000757A Module 3 */
-	case KSZ9897_CHIP_ID:
-	case LAN9646_CHIP_ID:
-		/* KSZ9897R Errata DS80000758C Module 4 */
-		/* Energy Efficient Ethernet (EEE) feature select must be manually disabled
-		 *   The EEE feature is enabled by default, but it is not fully
-		 *   operational. It must be manually disabled through register
-		 *   controls. If not disabled, the PHY ports can auto-negotiate
-		 *   to enable EEE, and this feature can cause link drops when
-		 *   linked to another device supporting EEE.
-		 *
-		 * The same item appears in the errata for all switches above.
-		 */
-		return MICREL_NO_EEE;
 	}
 
 	return 0;
diff --git a/include/linux/micrel_phy.h b/include/linux/micrel_phy.h
index 591bf5b5e..9af01bdd8 100644
--- a/include/linux/micrel_phy.h
+++ b/include/linux/micrel_phy.h
@@ -44,7 +44,6 @@ 
 #define MICREL_PHY_50MHZ_CLK	BIT(0)
 #define MICREL_PHY_FXEN		BIT(1)
 #define MICREL_KSZ8_P1_ERRATA	BIT(2)
-#define MICREL_NO_EEE		BIT(3)
 
 #define MICREL_KSZ9021_EXTREG_CTRL	0xB
 #define MICREL_KSZ9021_EXTREG_DATA_WRITE	0xC