Skip to content

Commit

Permalink
net: prestera: cache port state for non-phylink ports too
Browse files Browse the repository at this point in the history
[ Upstream commit 704438d ]

Port event data must stored to port-state cache regardless of whether
the port uses phylink or not since this data is used by ethtool.

Fixes: 52323ef ("net: marvell: prestera: add phylink support")
Signed-off-by: Oleksandr Mazur <oleksandr.mazur@plvision.eu>
Signed-off-by: Maksym Glubokiy <maksym.glubokiy@plvision.eu>
Signed-off-by: David S. Miller <davem@davemloft.net>
Signed-off-by: Sasha Levin <sashal@kernel.org>
  • Loading branch information
Maksym Glubokiy authored and gregkh committed Oct 21, 2022
1 parent a639baa commit 25180b7
Showing 1 changed file with 17 additions and 19 deletions.
36 changes: 17 additions & 19 deletions drivers/net/ethernet/marvell/prestera/prestera_main.c
Original file line number Diff line number Diff line change
Expand Up @@ -799,32 +799,30 @@ static void prestera_port_handle_event(struct prestera_switch *sw,

caching_dw = &port->cached_hw_stats.caching_dw;

if (port->phy_link) {
memset(&smac, 0, sizeof(smac));
smac.valid = true;
smac.oper = pevt->data.mac.oper;
if (smac.oper) {
smac.mode = pevt->data.mac.mode;
smac.speed = pevt->data.mac.speed;
smac.duplex = pevt->data.mac.duplex;
smac.fc = pevt->data.mac.fc;
smac.fec = pevt->data.mac.fec;
phylink_mac_change(port->phy_link, true);
} else {
phylink_mac_change(port->phy_link, false);
}
prestera_port_mac_state_cache_write(port, &smac);
memset(&smac, 0, sizeof(smac));
smac.valid = true;
smac.oper = pevt->data.mac.oper;
if (smac.oper) {
smac.mode = pevt->data.mac.mode;
smac.speed = pevt->data.mac.speed;
smac.duplex = pevt->data.mac.duplex;
smac.fc = pevt->data.mac.fc;
smac.fec = pevt->data.mac.fec;
}
prestera_port_mac_state_cache_write(port, &smac);

if (port->state_mac.oper) {
if (!port->phy_link)
if (port->phy_link)
phylink_mac_change(port->phy_link, true);
else
netif_carrier_on(port->dev);

if (!delayed_work_pending(caching_dw))
queue_delayed_work(prestera_wq, caching_dw, 0);
} else if (netif_running(port->dev) &&
netif_carrier_ok(port->dev)) {
if (!port->phy_link)
} else {
if (port->phy_link)
phylink_mac_change(port->phy_link, false);
else if (netif_running(port->dev) && netif_carrier_ok(port->dev))
netif_carrier_off(port->dev);

if (delayed_work_pending(caching_dw))
Expand Down

0 comments on commit 25180b7

Please sign in to comment.