]> git.ipfire.org Git - thirdparty/linux.git/commitdiff
net: vertexcom: mse102x: Fix possible stuck of SPI interrupt
authorStefan Wahren <wahrenst@gmx.net>
Wed, 30 Apr 2025 13:30:40 +0000 (15:30 +0200)
committerJakub Kicinski <kuba@kernel.org>
Thu, 1 May 2025 14:24:05 +0000 (07:24 -0700)
The MSE102x doesn't provide any SPI commands for interrupt handling.
So in case the interrupt fired before the driver requests the IRQ,
the interrupt will never fire again. In order to fix this always poll
for pending packets after opening the interface.

Fixes: 2f207cbf0dd4 ("net: vertexcom: Add MSE102x SPI support")
Signed-off-by: Stefan Wahren <wahrenst@gmx.net>
Reviewed-by: Andrew Lunn <andrew@lunn.ch>
Link: https://patch.msgid.link/20250430133043.7722-2-wahrenst@gmx.net
Signed-off-by: Jakub Kicinski <kuba@kernel.org>
drivers/net/ethernet/vertexcom/mse102x.c

index 89dc4c401a8de45d84e03263a393dc71f2283c1b..92ebf16331598960b676e5a8239b420eb12065a9 100644 (file)
@@ -509,6 +509,7 @@ static irqreturn_t mse102x_irq(int irq, void *_mse)
 static int mse102x_net_open(struct net_device *ndev)
 {
        struct mse102x_net *mse = netdev_priv(ndev);
+       struct mse102x_net_spi *mses = to_mse102x_spi(mse);
        int ret;
 
        ret = request_threaded_irq(ndev->irq, NULL, mse102x_irq, IRQF_ONESHOT,
@@ -524,6 +525,13 @@ static int mse102x_net_open(struct net_device *ndev)
 
        netif_carrier_on(ndev);
 
+       /* The SPI interrupt can stuck in case of pending packet(s).
+        * So poll for possible packet(s) to re-arm the interrupt.
+        */
+       mutex_lock(&mses->lock);
+       mse102x_rx_pkt_spi(mse);
+       mutex_unlock(&mses->lock);
+
        netif_dbg(mse, ifup, ndev, "network device up\n");
 
        return 0;