From 42aa15cf05c0a47cc5807c21c7ff471b80cad371 Mon Sep 17 00:00:00 2001 From: Vivien Didelot Date: Wed, 28 Aug 2019 14:55:11 -0400 Subject: [PATCH] net: dsa: mv88e6xxx: fix freeing unused SERDES IRQ MIME-Version: 1.0 Content-Type: text/plain; charset=utf8 Content-Transfer-Encoding: 8bit Now mv88e6xxx does not enable its ports at setup itself and let the DSA core handle this, unused ports are disabled without being powered on first. While that is expected, the SERDES powering code was assuming that a port was already set up before powering it down, resulting in freeing an unused IRQ. The patch fixes this assumption. Fixes: b759f528ca3d ("net: dsa: mv88e6xxx: enable SERDES after setup") Signed-off-by: Vivien Didelot Reviewed-by: Marek Behún Tested-by: Andrew Lunn Signed-off-by: David S. Miller --- drivers/net/dsa/mv88e6xxx/chip.c | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/drivers/net/dsa/mv88e6xxx/chip.c b/drivers/net/dsa/mv88e6xxx/chip.c index 6525075f6bd3..c648f9fbfa59 100644 --- a/drivers/net/dsa/mv88e6xxx/chip.c +++ b/drivers/net/dsa/mv88e6xxx/chip.c @@ -2070,7 +2070,8 @@ static int mv88e6xxx_serdes_power(struct mv88e6xxx_chip *chip, int port, if (chip->info->ops->serdes_irq_setup) err = chip->info->ops->serdes_irq_setup(chip, port); } else { - if (chip->info->ops->serdes_irq_free) + if (chip->info->ops->serdes_irq_free && + chip->ports[port].serdes_irq) chip->info->ops->serdes_irq_free(chip, port); err = chip->info->ops->serdes_power(chip, port, false); -- 2.30.2