From ab045664226fe7a9099f5e3f23fc9f49e0805276 Mon Sep 17 00:00:00 2001 From: JasonHuang Date: Tue, 18 Nov 2025 22:38:41 -0600 Subject: [PATCH] brcmfmac: fix hang issue after bus_reset Observed Function 3 is being enumerated with an incorrect class value, after the bus reset, which likely causes the driver to take an unexpected execution path leading to a hang. Let functions 1 and 3 earlier exit can solve the issue. Also, it can avoid unnecessarily setting card quirks. Fixes SWLINUX-5548 Signed-off-by: JasonHuang --- drivers/net/wireless/broadcom/brcm80211/brcmfmac/bcmsdh.c | 7 +++---- 1 file changed, 3 insertions(+), 4 deletions(-) diff --git a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/bcmsdh.c b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/bcmsdh.c index 57f740f60449..175674cc05e3 100644 --- a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/bcmsdh.c +++ b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/bcmsdh.c @@ -1187,6 +1187,9 @@ static int brcmf_ops_sdio_probe(struct sdio_func *func, brcmf_dbg(SDIO, "sdio vendor ID: 0x%04x\n", func->vendor); brcmf_dbg(SDIO, "sdio device ID: 0x%04x\n", func->device); brcmf_dbg(SDIO, "Function#: %d\n", func->num); + /* Consume func num 1 but dont do anything with it. */ + if (func->num == SDIO_FUNC_1 || func->num == SDIO_FUNC_3) + return 0; /* Set MMC_QUIRK_LENIENT_FN0 for this card */ func->card->quirks |= MMC_QUIRK_LENIENT_FN0; @@ -1196,10 +1199,6 @@ static int brcmf_ops_sdio_probe(struct sdio_func *func, */ func->card->quirks |= MMC_QUIRK_BLKSZ_FOR_BYTE_MODE; - /* Consume func num 1 but dont do anything with it. */ - if (func->num == SDIO_FUNC_1 || func->num == SDIO_FUNC_3) - return 0; - /* Ignore anything but func 2 */ if (func->num != SDIO_FUNC_2) return -ENODEV;