| From d00908df3c1a759cbe266bdbbbf34c5fd3847e42 Mon Sep 17 00:00:00 2001 |
| From: Sasha Levin <sashal@kernel.org> |
| Date: Wed, 30 Apr 2025 15:30:40 +0200 |
| Subject: net: vertexcom: mse102x: Fix possible stuck of SPI interrupt |
| |
| From: Stefan Wahren <wahrenst@gmx.net> |
| |
| [ Upstream commit 55f362885951b2d00fd7fbb02ef0227deea572c2 ] |
| |
| 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> |
| Signed-off-by: Sasha Levin <sashal@kernel.org> |
| --- |
| drivers/net/ethernet/vertexcom/mse102x.c | 8 ++++++++ |
| 1 file changed, 8 insertions(+) |
| |
| diff --git a/drivers/net/ethernet/vertexcom/mse102x.c b/drivers/net/ethernet/vertexcom/mse102x.c |
| index 89dc4c401a8de..92ebf16331598 100644 |
| --- a/drivers/net/ethernet/vertexcom/mse102x.c |
| +++ b/drivers/net/ethernet/vertexcom/mse102x.c |
| @@ -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; |
| -- |
| 2.39.5 |
| |