Skip to contentSkip to conversation

Fixes for mv88e6xxx (mainly 6320 family)

PATCH Applied Marek Behún 3 participants 16 messages Mar 17, 2025 – Mar 24, 2025

Subsystems (5)
lore
Share & tools
lore
#0 lore raw

v2 cover Fixes for mv88e6xxx (mainly 6320 family)

Hello Andrew et al.,

this is v2 of fixes for the mv88e6xxx driver.
As requested, I left only the fixes that are needed for our board to be backported, the rest will be sent to net-next.

Marek

v1 at:
https://patchwork.kernel.org/project/netdevbpf/cover/[email protected]/

Marek Behún (7):
net: dsa: mv88e6xxx: fix VTU methods for 6320 family
net: dsa: mv88e6xxx: fix atu_move_port_mask for 6341 family
net: dsa: mv88e6xxx: enable PVT for 6321 switch
net: dsa: mv88e6xxx: enable .port_set_policy() for 6320 family
net: dsa: mv88e6xxx: enable STU methods for 6320 family
net: dsa: mv88e6xxx: fix internal PHYs for 6320 family
net: dsa: mv88e6xxx: workaround RGMII transmit delay erratum for 6320
family

 drivers/net/dsa/mv88e6xxx/chip.c | 44 ++++++++++++++++++++++++++------
 1 file changed, 36 insertions(+), 8 deletions(-)
Signature · 1 line
2.48.1
#1 lore raw

PATCH v2 1/7 net: dsa: mv88e6xxx: fix VTU methods for 6320 family

The VTU registers of the 6320 family use the 6352 semantics, not 6185. Fix it.

Fixes b8fee9571063 ("net: dsa: mv88e6xxx: add VLAN Get Next support")
Cc <[email protected]> # 5.15.x
---
 drivers/net/dsa/mv88e6xxx/chip.c | 8 ++++----
 1 file changed, 4 insertions(+), 4 deletions(-)
drivers/net/dsa/mv88e6xxx/chip.c +4 -4
index 5db96ca52505..06b17c3b2205 100644
@@ -5169,8 +5169,8 @@ static const struct mv88e6xxx_ops mv88e6320_ops = {
 	.hardware_reset_pre = mv88e6xxx_g2_eeprom_wait,
 	.hardware_reset_post = mv88e6xxx_g2_eeprom_wait,
 	.reset = mv88e6352_g1_reset,
-	.vtu_getnext = mv88e6185_g1_vtu_getnext,
-	.vtu_loadpurge = mv88e6185_g1_vtu_loadpurge,
+	.vtu_getnext = mv88e6352_g1_vtu_getnext,
+	.vtu_loadpurge = mv88e6352_g1_vtu_loadpurge,
 	.gpio_ops = &mv88e6352_gpio_ops,
 	.avb_ops = &mv88e6352_avb_ops,
 	.ptp_ops = &mv88e6352_ptp_ops,
@@ -5217,8 +5217,8 @@ static const struct mv88e6xxx_ops mv88e6321_ops = {
 	.hardware_reset_pre = mv88e6xxx_g2_eeprom_wait,
 	.hardware_reset_post = mv88e6xxx_g2_eeprom_wait,
 	.reset = mv88e6352_g1_reset,
-	.vtu_getnext = mv88e6185_g1_vtu_getnext,
-	.vtu_loadpurge = mv88e6185_g1_vtu_loadpurge,
+	.vtu_getnext = mv88e6352_g1_vtu_getnext,
+	.vtu_loadpurge = mv88e6352_g1_vtu_loadpurge,
 	.gpio_ops = &mv88e6352_gpio_ops,
 	.avb_ops = &mv88e6352_avb_ops,
 	.ptp_ops = &mv88e6352_ptp_ops,
Signature · 1 line
2.48.1
#3 lore raw

PATCH v2 2/7 net: dsa: mv88e6xxx: fix atu_move_port_mask for 6341 family

In reply to Marek Behún

The atu_move_port_mask for 6341 family (Topaz) is 0xf, not 0x1f. The PortVec field is 8 bits wide, not 11 as in 6390 family. Fix this.

Fixes e606ca36bbf2 ("net: dsa: mv88e6xxx: rework ATU Remove")
---
 drivers/net/dsa/mv88e6xxx/chip.c | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)
drivers/net/dsa/mv88e6xxx/chip.c +2 -2
index 06b17c3b2205..b989123cdbeb 100644
@@ -5818,7 +5818,7 @@ static const struct mv88e6xxx_info mv88e6xxx_table[] = {
 		.global1_addr = 0x1b,
 		.global2_addr = 0x1c,
 		.age_time_coeff = 3750,
-		.atu_move_port_mask = 0x1f,
+		.atu_move_port_mask = 0xf,
 		.g1_irqs = 9,
 		.g2_irqs = 10,
 		.stats_type = STATS_TYPE_BANK0 | STATS_TYPE_BANK1,
@@ -6296,7 +6296,7 @@ static const struct mv88e6xxx_info mv88e6xxx_table[] = {
 		.global1_addr = 0x1b,
 		.global2_addr = 0x1c,
 		.age_time_coeff = 3750,
-		.atu_move_port_mask = 0x1f,
+		.atu_move_port_mask = 0xf,
 		.g1_irqs = 9,
 		.g2_irqs = 10,
 		.stats_type = STATS_TYPE_BANK0 | STATS_TYPE_BANK1,
Signature · 1 line
2.48.1
maintainer Reviewed-by on v2 2/7
#4 lore raw

Re: [PATCH net v2 2/7] net: dsa: mv88e6xxx: fix atu_move_port_mask for 6341 family

Quoted 5 lines · Marek Behún

The atu_move_port_mask for 6341 family (Topaz) is 0xf, not 0x1f. The PortVec field is 8 bits wide, not 11 as in 6390 family. Fix this.

Fixes e606ca36bbf2 ("net: dsa: mv88e6xxx: rework ATU Remove")

Andrew

#5 lore raw

PATCH v2 3/7 net: dsa: mv88e6xxx: enable PVT for 6321 switch

In reply to Marek Behún

Commit f36456522168 ("net: dsa: mv88e6xxx: move PVT description in info") did not enable PVT for 6321 switch. Fix it.

Fixes f36456522168 ("net: dsa: mv88e6xxx: move PVT description in info")
---
 drivers/net/dsa/mv88e6xxx/chip.c | 1 +
 1 file changed, 1 insertion(+)
drivers/net/dsa/mv88e6xxx/chip.c +1 -0
index b989123cdbeb..3cddc8f084b3 100644
@@ -6274,6 +6274,7 @@ static const struct mv88e6xxx_info mv88e6xxx_table[] = {
 		.g2_irqs = 10,
 		.stats_type = STATS_TYPE_BANK0 | STATS_TYPE_BANK1,
 		.atu_move_port_mask = 0xf,
+		.pvt = true,
 		.multi_chip = true,
 		.edsa_support = MV88E6XXX_EDSA_SUPPORTED,
 		.ptp_support = true,
Signature · 1 line
2.48.1
maintainer Reviewed-by on v2 3/7
#6 lore raw

Re: [PATCH net v2 3/7] net: dsa: mv88e6xxx: enable PVT for 6321 switch

Quoted 5 lines · Marek Behún

Commit f36456522168 ("net: dsa: mv88e6xxx: move PVT description in info") did not enable PVT for 6321 switch. Fix it.

Fixes f36456522168 ("net: dsa: mv88e6xxx: move PVT description in info")

Andrew

#7 lore raw

PATCH v2 4/7 net: dsa: mv88e6xxx: enable .port_set_policy() for 6320 family

In reply to Marek Behún

Commit f3a2cd326e44 ("net: dsa: mv88e6xxx: introduce .port_set_policy") did not add the .port_set_policy() method for the 6320 family. Fix it.

Fixes f3a2cd326e44 ("net: dsa: mv88e6xxx: introduce .port_set_policy")
---
 drivers/net/dsa/mv88e6xxx/chip.c | 2 ++
 1 file changed, 2 insertions(+)
drivers/net/dsa/mv88e6xxx/chip.c +2 -0
index 3cddc8f084b3..f886a69d7a3c 100644
@@ -5145,6 +5145,7 @@ static const struct mv88e6xxx_ops mv88e6320_ops = {
 	.port_set_rgmii_delay = mv88e6320_port_set_rgmii_delay,
 	.port_set_speed_duplex = mv88e6185_port_set_speed_duplex,
 	.port_tag_remap = mv88e6095_port_tag_remap,
+	.port_set_policy = mv88e6352_port_set_policy,
 	.port_set_frame_mode = mv88e6351_port_set_frame_mode,
 	.port_set_ucast_flood = mv88e6352_port_set_ucast_flood,
 	.port_set_mcast_flood = mv88e6352_port_set_mcast_flood,
@@ -5194,6 +5195,7 @@ static const struct mv88e6xxx_ops mv88e6321_ops = {
 	.port_set_rgmii_delay = mv88e6320_port_set_rgmii_delay,
 	.port_set_speed_duplex = mv88e6185_port_set_speed_duplex,
 	.port_tag_remap = mv88e6095_port_tag_remap,
+	.port_set_policy = mv88e6352_port_set_policy,
 	.port_set_frame_mode = mv88e6351_port_set_frame_mode,
 	.port_set_ucast_flood = mv88e6352_port_set_ucast_flood,
 	.port_set_mcast_flood = mv88e6352_port_set_mcast_flood,
Signature · 1 line
2.48.1
maintainer Reviewed-by on v2 4/7
#8 lore raw

Re: [PATCH net v2 4/7] net: dsa: mv88e6xxx: enable .port_set_policy() for 6320 family

Quoted 5 lines · Marek Behún

Commit f3a2cd326e44 ("net: dsa: mv88e6xxx: introduce .port_set_policy") did not add the .port_set_policy() method for the 6320 family. Fix it.

Fixes f3a2cd326e44 ("net: dsa: mv88e6xxx: introduce .port_set_policy")

Andrew

#9 lore raw

PATCH v2 5/7 net: dsa: mv88e6xxx: enable STU methods for 6320 family

In reply to Marek Behún

Commit c050f5e91b47 ("net: dsa: mv88e6xxx: Fill in STU support for all supported chips") introduced STU methods, but did not add them to the 6320 family. Fix it.

Fixes c050f5e91b47 ("net: dsa: mv88e6xxx: Fill in STU support for all supported chips")
---
 drivers/net/dsa/mv88e6xxx/chip.c | 6 ++++++
 1 file changed, 6 insertions(+)
drivers/net/dsa/mv88e6xxx/chip.c +6 -0
index f886a69d7a3c..74b8bae226e4 100644
@@ -5172,6 +5172,8 @@ static const struct mv88e6xxx_ops mv88e6320_ops = {
 	.reset = mv88e6352_g1_reset,
 	.vtu_getnext = mv88e6352_g1_vtu_getnext,
 	.vtu_loadpurge = mv88e6352_g1_vtu_loadpurge,
+	.stu_getnext = mv88e6352_g1_stu_getnext,
+	.stu_loadpurge = mv88e6352_g1_stu_loadpurge,
 	.gpio_ops = &mv88e6352_gpio_ops,
 	.avb_ops = &mv88e6352_avb_ops,
 	.ptp_ops = &mv88e6352_ptp_ops,
@@ -5221,6 +5223,8 @@ static const struct mv88e6xxx_ops mv88e6321_ops = {
 	.reset = mv88e6352_g1_reset,
 	.vtu_getnext = mv88e6352_g1_vtu_getnext,
 	.vtu_loadpurge = mv88e6352_g1_vtu_loadpurge,
+	.stu_getnext = mv88e6352_g1_stu_getnext,
+	.stu_loadpurge = mv88e6352_g1_stu_loadpurge,
 	.gpio_ops = &mv88e6352_gpio_ops,
 	.avb_ops = &mv88e6352_avb_ops,
 	.ptp_ops = &mv88e6352_ptp_ops,
@@ -6241,6 +6245,7 @@ static const struct mv88e6xxx_info mv88e6xxx_table[] = {
 		.num_internal_phys = 5,
 		.num_gpio = 15,
 		.max_vid = 4095,
+		.max_sid = 63,
 		.port_base_addr = 0x10,
 		.phy_base_addr = 0x0,
 		.global1_addr = 0x1b,
@@ -6267,6 +6272,7 @@ static const struct mv88e6xxx_info mv88e6xxx_table[] = {
 		.num_internal_phys = 5,
 		.num_gpio = 15,
 		.max_vid = 4095,
+		.max_sid = 63,
 		.port_base_addr = 0x10,
 		.phy_base_addr = 0x0,
 		.global1_addr = 0x1b,
Signature · 1 line
2.48.1
maintainer Reviewed-by on v2 5/7
#10 lore raw

Re: [PATCH net v2 5/7] net: dsa: mv88e6xxx: enable STU methods for 6320 family

Quoted 6 lines · Marek Behún

Commit c050f5e91b47 ("net: dsa: mv88e6xxx: Fill in STU support for all supported chips") introduced STU methods, but did not add them to the 6320 family. Fix it.

Fixes c050f5e91b47 ("net: dsa: mv88e6xxx: Fill in STU support for all supported chips")

Andrew

#11 lore raw

PATCH v2 6/7 net: dsa: mv88e6xxx: fix internal PHYs for 6320 family

In reply to Marek Behún

Fix internal PHYs definition for the 6320 family, which has only 2 internal PHYs (on ports 3 and 4).

Fixes bc3931557d1d ("net: dsa: mv88e6xxx: Add number of internal PHYs")
Cc <[email protected]> # 6.6.x
---
 drivers/net/dsa/mv88e6xxx/chip.c | 6 ++++--
 1 file changed, 4 insertions(+), 2 deletions(-)
drivers/net/dsa/mv88e6xxx/chip.c +4 -2
index 74b8bae226e4..88f479dc328c 100644
@@ -6242,7 +6242,8 @@ static const struct mv88e6xxx_info mv88e6xxx_table[] = {
 		.num_databases = 4096,
 		.num_macs = 8192,
 		.num_ports = 7,
-		.num_internal_phys = 5,
+		.num_internal_phys = 2,
+		.internal_phys_offset = 3,
 		.num_gpio = 15,
 		.max_vid = 4095,
 		.max_sid = 63,
@@ -6269,7 +6270,8 @@ static const struct mv88e6xxx_info mv88e6xxx_table[] = {
 		.num_databases = 4096,
 		.num_macs = 8192,
 		.num_ports = 7,
-		.num_internal_phys = 5,
+		.num_internal_phys = 2,
+		.internal_phys_offset = 3,
 		.num_gpio = 15,
 		.max_vid = 4095,
 		.max_sid = 63,
Signature · 1 line
2.48.1
#13 lore raw

PATCH v2 7/7 net: dsa: mv88e6xxx: workaround RGMII transmit delay erratum for 6320 family

In reply to Marek Behún

Implement the workaround for erratum
3.3 RGMII timing may be out of spec when transmit delay is enabled
for the 6320 family, which says:

When transmit delay is enabled via Port register 1 bit 14 = 1, duty cycle may be out of spec. Under very rare conditions this may cause the attached device receive CRC errors.

---
 drivers/net/dsa/mv88e6xxx/chip.c | 17 +++++++++++++++++
 1 file changed, 17 insertions(+)
drivers/net/dsa/mv88e6xxx/chip.c +17 -0
index 88f479dc328c..901929f96b38 100644
@@ -3674,6 +3674,21 @@ static int mv88e6xxx_stats_setup(struct mv88e6xxx_chip *chip)
 	return mv88e6xxx_g1_stats_clear(chip);
 }
 
+static int mv88e6320_setup_errata(struct mv88e6xxx_chip *chip)
+{
+	u16 dummy;
+	int err;
+
+	/* Workaround for erratum
+	 *   3.3 RGMII timing may be out of spec when transmit delay is enabled
+	 */
+	err = mv88e6xxx_port_hidden_write(chip, 0, 0xf, 0x7, 0xe000);
+	if (err)
+		return err;
+
+	return mv88e6xxx_port_hidden_read(chip, 0, 0xf, 0x7, &dummy);
+}
+
 /* Check if the errata has already been applied. */
 static bool mv88e6390_setup_errata_applied(struct mv88e6xxx_chip *chip)
 {
@@ -5130,6 +5145,7 @@ static const struct mv88e6xxx_ops mv88e6290_ops = {
 
 static const struct mv88e6xxx_ops mv88e6320_ops = {
 	/* MV88E6XXX_FAMILY_6320 */
+	.setup_errata = mv88e6320_setup_errata,
 	.ieee_pri_map = mv88e6085_g1_ieee_pri_map,
 	.ip_pri_map = mv88e6085_g1_ip_pri_map,
 	.irl_init_all = mv88e6352_g2_irl_init_all,
@@ -5182,6 +5198,7 @@ static const struct mv88e6xxx_ops mv88e6320_ops = {
 
 static const struct mv88e6xxx_ops mv88e6321_ops = {
 	/* MV88E6XXX_FAMILY_6320 */
+	.setup_errata = mv88e6320_setup_errata,
 	.ieee_pri_map = mv88e6085_g1_ieee_pri_map,
 	.ip_pri_map = mv88e6085_g1_ip_pri_map,
 	.irl_init_all = mv88e6352_g2_irl_init_all,
Signature · 1 line
2.48.1
maintainer Reviewed-by on v2 7/7
#14 lore raw

Re: [PATCH net v2 7/7] net: dsa: mv88e6xxx: workaround RGMII transmit delay erratum for 6320 family

Quoted 10 lines · Marek Behún

Implement the workaround for erratum
3.3 RGMII timing may be out of spec when transmit delay is enabled
for the 6320 family, which says:

When transmit delay is enabled via Port register 1 bit 14 = 1, duty cycle may be out of spec. Under very rare conditions this may cause the attached device receive CRC errors.

Andrew

#15 lore raw
In reply to Marek Behún
This series was applied to netdev/net.git (main) by Jakub Kicinski <[email protected]>:

Hello:

This series was applied to netdev/net.git (main)
by Jakub Kicinski <[email protected]>:

Quoted 9 lines · On Mon, 17 Mar 2025 18:32:43 +0100 you wrote:

Hello Andrew et al.,

this is v2 of fixes for the mv88e6xxx driver.
As requested, I left only the fixes that are needed for our board to be backported, the rest will be sent to net-next.

Marek

[...]

Here is the summary with links:
- [net,v2,1/7] net: dsa: mv88e6xxx: fix VTU methods for 6320 family

    https://git.kernel.org/netdev/net/c/f9a457722cf5
  - [net,v2,2/7] net: dsa: mv88e6xxx: fix atu_move_port_mask for 6341 family
    https://git.kernel.org/netdev/net/c/4ae01ec00771
  - [net,v2,3/7] net: dsa: mv88e6xxx: enable PVT for 6321 switch
    https://git.kernel.org/netdev/net/c/f85c69369854
  - [net,v2,4/7] net: dsa: mv88e6xxx: enable .port_set_policy() for 6320 family
    https://git.kernel.org/netdev/net/c/a2ef58e2c4ae
  - [net,v2,5/7] net: dsa: mv88e6xxx: enable STU methods for 6320 family
    https://git.kernel.org/netdev/net/c/1428a6109b20
  - [net,v2,6/7] net: dsa: mv88e6xxx: fix internal PHYs for 6320 family
    https://git.kernel.org/netdev/net/c/52fdc41c3278
  - [net,v2,7/7] net: dsa: mv88e6xxx: workaround RGMII transmit delay erratum for 6320 family
    https://git.kernel.org/netdev/net/c/1ebc8e1ef906

You are awesome, thank you!

Signature · 2 lines
Deet-doot-dot, I am a bot.
https://korg.docs.kernel.org/patchwork/pwbot.html