| From da62577632857d63e82467c524cdbbf0425f7eec Mon Sep 17 00:00:00 2001 |
| From: Russell King <rmk+kernel@armlinux.org.uk> |
| Date: Tue, 28 May 2019 10:27:21 +0100 |
| Subject: net: phylink: ensure consistent phy interface mode |
| |
| [ Upstream commit c678726305b9425454be7c8a7624290b602602fc ] |
| |
| Ensure that we supply the same phy interface mode to mac_link_down() as |
| we did for the corresponding mac_link_up() call. This ensures that MAC |
| drivers that use the phy interface mode in these methods can depend on |
| mac_link_down() always corresponding to a mac_link_up() call for the |
| same interface mode. |
| |
| Signed-off-by: Russell King <rmk+kernel@armlinux.org.uk> |
| Signed-off-by: David S. Miller <davem@davemloft.net> |
| Signed-off-by: Sasha Levin <sashal@kernel.org> |
| --- |
| drivers/net/phy/phylink.c | 10 +++++++--- |
| 1 file changed, 7 insertions(+), 3 deletions(-) |
| |
| diff --git a/drivers/net/phy/phylink.c b/drivers/net/phy/phylink.c |
| index c5a509129ae6..b7dafa9dfef4 100644 |
| --- a/drivers/net/phy/phylink.c |
| +++ b/drivers/net/phy/phylink.c |
| @@ -54,6 +54,10 @@ struct phylink { |
| |
| /* The link configuration settings */ |
| struct phylink_link_state link_config; |
| + |
| + /* The current settings */ |
| + phy_interface_t cur_interface; |
| + |
| struct gpio_desc *link_gpio; |
| struct timer_list link_poll; |
| void (*get_fixed_state)(struct net_device *dev, |
| @@ -477,12 +481,12 @@ static void phylink_resolve(struct work_struct *w) |
| if (!link_state.link) { |
| netif_carrier_off(ndev); |
| pl->ops->mac_link_down(ndev, pl->link_an_mode, |
| - pl->phy_state.interface); |
| + pl->cur_interface); |
| netdev_info(ndev, "Link is Down\n"); |
| } else { |
| + pl->cur_interface = link_state.interface; |
| pl->ops->mac_link_up(ndev, pl->link_an_mode, |
| - pl->phy_state.interface, |
| - pl->phydev); |
| + pl->cur_interface, pl->phydev); |
| |
| netif_carrier_on(ndev); |
| |
| -- |
| 2.20.1 |
| |