When the link status changes, the phylib calls the link_event function
in the mvpp2 driver. Before this patch only the egress/ingress transmit
was enabled/disabled. This patch adds more functionality to the link
status management code by enabling/disabling the port per-cpu
interrupts, and the port itself. The queues are now stopped as well, and
the netif carrier helpers are called.

Signed-off-by: Antoine Tenart <antoine.ten...@free-electrons.com>
---
 drivers/net/ethernet/marvell/mvpp2.c | 10 ++++++++++
 1 file changed, 10 insertions(+)

diff --git a/drivers/net/ethernet/marvell/mvpp2.c 
b/drivers/net/ethernet/marvell/mvpp2.c
index a9dea9b344de..1b26f5ed994f 100644
--- a/drivers/net/ethernet/marvell/mvpp2.c
+++ b/drivers/net/ethernet/marvell/mvpp2.c
@@ -5753,14 +5753,24 @@ static void mvpp2_link_event(struct net_device *dev)
                port->link = phydev->link;
 
                if (phydev->link) {
+                       mvpp2_interrupts_enable(port);
+                       mvpp2_port_enable(port);
+
                        mvpp2_egress_enable(port);
                        mvpp2_ingress_enable(port);
+                       netif_carrier_on(dev);
+                       netif_tx_wake_all_queues(dev);
                } else {
                        port->duplex = -1;
                        port->speed = 0;
 
+                       netif_tx_stop_all_queues(dev);
+                       netif_carrier_off(dev);
                        mvpp2_ingress_disable(port);
                        mvpp2_egress_disable(port);
+
+                       mvpp2_port_disable(port);
+                       mvpp2_interrupts_disable(port);
                }
 
                phy_print_status(phydev);
-- 
2.13.5

Reply via email to