Skip to content

Commit 1ebc8e1

Browse files
elkablokuba-moo
authored andcommitted
net: dsa: mv88e6xxx: workaround RGMII transmit delay erratum for 6320 family
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 <kabel@kernel.org> Cc: <stable@vger.kernel.org> # 5.4.x Reviewed-by: Andrew Lunn <andrew@lunn.ch> Link: https://patch.msgid.link/20250317173250.28780-8-kabel@kernel.org Signed-off-by: Jakub Kicinski <kuba@kernel.org>
1 parent 52fdc41 commit 1ebc8e1

1 file changed

Lines changed: 17 additions & 0 deletions

File tree

  • drivers/net/dsa/mv88e6xxx

drivers/net/dsa/mv88e6xxx/chip.c

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3674,6 +3674,21 @@ static int mv88e6xxx_stats_setup(struct mv88e6xxx_chip *chip)
36743674
return mv88e6xxx_g1_stats_clear(chip);
36753675
}
36763676

3677+
static int mv88e6320_setup_errata(struct mv88e6xxx_chip *chip)
3678+
{
3679+
u16 dummy;
3680+
int err;
3681+
3682+
/* Workaround for erratum
3683+
* 3.3 RGMII timing may be out of spec when transmit delay is enabled
3684+
*/
3685+
err = mv88e6xxx_port_hidden_write(chip, 0, 0xf, 0x7, 0xe000);
3686+
if (err)
3687+
return err;
3688+
3689+
return mv88e6xxx_port_hidden_read(chip, 0, 0xf, 0x7, &dummy);
3690+
}
3691+
36773692
/* Check if the errata has already been applied. */
36783693
static bool mv88e6390_setup_errata_applied(struct mv88e6xxx_chip *chip)
36793694
{
@@ -5130,6 +5145,7 @@ static const struct mv88e6xxx_ops mv88e6290_ops = {
51305145

51315146
static const struct mv88e6xxx_ops mv88e6320_ops = {
51325147
/* MV88E6XXX_FAMILY_6320 */
5148+
.setup_errata = mv88e6320_setup_errata,
51335149
.ieee_pri_map = mv88e6085_g1_ieee_pri_map,
51345150
.ip_pri_map = mv88e6085_g1_ip_pri_map,
51355151
.irl_init_all = mv88e6352_g2_irl_init_all,
@@ -5182,6 +5198,7 @@ static const struct mv88e6xxx_ops mv88e6320_ops = {
51825198

51835199
static const struct mv88e6xxx_ops mv88e6321_ops = {
51845200
/* MV88E6XXX_FAMILY_6320 */
5201+
.setup_errata = mv88e6320_setup_errata,
51855202
.ieee_pri_map = mv88e6085_g1_ieee_pri_map,
51865203
.ip_pri_map = mv88e6085_g1_ip_pri_map,
51875204
.irl_init_all = mv88e6352_g2_irl_init_all,

0 commit comments

Comments
 (0)