Fixes for mv88e6xxx (mainly 6320 family)
Subsystems (5)
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
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.
--- drivers/net/dsa/mv88e6xxx/chip.c | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-)
drivers/net/dsa/mv88e6xxx/chip.c +4 -4
@@ -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
Re: [PATCH net v2 1/7] net: dsa: mv88e6xxx: fix VTU methods for 6320 family
Quoted 6 lines · Marek Behún
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")Signed-off-by Marek Behún <[email protected]>Cc <[email protected]> # 5.15.x
Andrew
PATCH v2 2/7 net: dsa: mv88e6xxx: fix atu_move_port_mask for 6341 family
In reply to Marek BehúnThe 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.
--- drivers/net/dsa/mv88e6xxx/chip.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-)
drivers/net/dsa/mv88e6xxx/chip.c +2 -2
@@ -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
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_maskfor 6341 family (Topaz) is0xf, not0x1f. The PortVec field is 8 bits wide, not 11 as in 6390 family. Fix this.Fixes e606ca36bbf2 ("net: dsa: mv88e6xxx: rework ATU Remove")Signed-off-by Marek Behún <[email protected]>
Andrew
PATCH v2 3/7 net: dsa: mv88e6xxx: enable PVT for 6321 switch
In reply to Marek BehúnCommit f36456522168 ("net: dsa: mv88e6xxx: move PVT description in info") did not enable PVT for 6321 switch. Fix it.
--- drivers/net/dsa/mv88e6xxx/chip.c | 1 + 1 file changed, 1 insertion(+)
drivers/net/dsa/mv88e6xxx/chip.c +1 -0
@@ -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
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")Signed-off-by Marek Behún <[email protected]>
Andrew
PATCH v2 4/7 net: dsa: mv88e6xxx: enable .port_set_policy() for 6320 family
In reply to Marek BehúnCommit f3a2cd326e44 ("net: dsa: mv88e6xxx: introduce .port_set_policy") did not add the .port_set_policy() method for the 6320 family. Fix it.
--- drivers/net/dsa/mv88e6xxx/chip.c | 2 ++ 1 file changed, 2 insertions(+)
drivers/net/dsa/mv88e6xxx/chip.c +2 -0
@@ -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
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")Signed-off-by Marek Behún <[email protected]>
Andrew
PATCH v2 5/7 net: dsa: mv88e6xxx: enable STU methods for 6320 family
In reply to Marek BehúnCommit 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.
--- drivers/net/dsa/mv88e6xxx/chip.c | 6 ++++++ 1 file changed, 6 insertions(+)
drivers/net/dsa/mv88e6xxx/chip.c +6 -0
@@ -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
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")Signed-off-by Marek Behún <[email protected]>
Andrew
PATCH v2 6/7 net: dsa: mv88e6xxx: fix internal PHYs for 6320 family
In reply to Marek BehúnFix internal PHYs definition for the 6320 family, which has only 2 internal PHYs (on ports 3 and 4).
--- drivers/net/dsa/mv88e6xxx/chip.c | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-)
drivers/net/dsa/mv88e6xxx/chip.c +4 -2
@@ -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
Re: [PATCH net v2 6/7] net: dsa: mv88e6xxx: fix internal PHYs for 6320 family
Quoted 6 lines · 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")Signed-off-by Marek Behún <[email protected]>Cc <[email protected]> # 6.6.x
Andrew
PATCH v2 7/7 net: dsa: mv88e6xxx: workaround RGMII transmit delay erratum for 6320 family
In reply to Marek BehúnImplement 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
@@ -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
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.
Signed-off-by Marek Behún <[email protected]>Cc <[email protected]> # 5.4.x
Andrew
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