Message ID | 20221028135148.105691-1-festevam@gmail.com (mailing list archive) |
---|---|
State | Changes Requested |
Delegated to: | Netdev Maintainers |
Headers | show |
Series | [v2,net-next] net: dsa: mv88e6xxx: Add .port_set_rgmii_delay to 88E6320 | expand |
On Fri, Oct 28, 2022 at 10:51:48AM -0300, Fabio Estevam wrote: > From: Steffen Bätz <steffen@innosonix.de> > > Currently, the port_set_rgmii_delay hook is missing for the 88E6320 > family, which causes failure to retrieve an IP address via DHCP. > > Add mv88e6320_port_set_rgmii_delay() that allows applying the RGMII > delay for ports 2, 5 and 6, which are the ports only that can be used > in RGMII mode. > > Tested on a i.MX8MN board connected to an 88E6320 switch. > > This change also applies safely to the 88E6321 variant. > @@ -5029,6 +5029,7 @@ static const struct mv88e6xxx_ops mv88e6320_ops = { > .phy_write = mv88e6xxx_g2_smi_phy_write, > .port_set_link = mv88e6xxx_port_set_link, > .port_sync_link = mv88e6xxx_port_sync_link, > + .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_frame_mode = mv88e6351_port_set_frame_mode, You say it is safe, but then don't actually add it to mv88e6321_ops ? Andrew
diff --git a/drivers/net/dsa/mv88e6xxx/chip.c b/drivers/net/dsa/mv88e6xxx/chip.c index 2479be3a1e35..dc7cbf48bda5 100644 --- a/drivers/net/dsa/mv88e6xxx/chip.c +++ b/drivers/net/dsa/mv88e6xxx/chip.c @@ -5029,6 +5029,7 @@ static const struct mv88e6xxx_ops mv88e6320_ops = { .phy_write = mv88e6xxx_g2_smi_phy_write, .port_set_link = mv88e6xxx_port_set_link, .port_sync_link = mv88e6xxx_port_sync_link, + .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_frame_mode = mv88e6351_port_set_frame_mode, diff --git a/drivers/net/dsa/mv88e6xxx/port.c b/drivers/net/dsa/mv88e6xxx/port.c index 5c4195c635b0..f79cf716c541 100644 --- a/drivers/net/dsa/mv88e6xxx/port.c +++ b/drivers/net/dsa/mv88e6xxx/port.c @@ -133,6 +133,15 @@ int mv88e6390_port_set_rgmii_delay(struct mv88e6xxx_chip *chip, int port, return mv88e6xxx_port_set_rgmii_delay(chip, port, mode); } +int mv88e6320_port_set_rgmii_delay(struct mv88e6xxx_chip *chip, int port, + phy_interface_t mode) +{ + if (port != 2 && port != 5 && port != 6) + return -EOPNOTSUPP; + + return mv88e6xxx_port_set_rgmii_delay(chip, port, mode); +} + int mv88e6xxx_port_set_link(struct mv88e6xxx_chip *chip, int port, int link) { u16 reg; diff --git a/drivers/net/dsa/mv88e6xxx/port.h b/drivers/net/dsa/mv88e6xxx/port.h index cb04243f37c1..fe8f2085bb0b 100644 --- a/drivers/net/dsa/mv88e6xxx/port.h +++ b/drivers/net/dsa/mv88e6xxx/port.h @@ -336,6 +336,8 @@ int mv88e6352_port_set_rgmii_delay(struct mv88e6xxx_chip *chip, int port, phy_interface_t mode); int mv88e6390_port_set_rgmii_delay(struct mv88e6xxx_chip *chip, int port, phy_interface_t mode); +int mv88e6320_port_set_rgmii_delay(struct mv88e6xxx_chip *chip, int port, + phy_interface_t mode); int mv88e6xxx_port_set_link(struct mv88e6xxx_chip *chip, int port, int link);