brcmfmac: dump dongle memory when attaching failed
authorWright Feng <wright.feng@cypress.com>
Thu, 29 Sep 2022 03:10:01 +0000 (22:10 -0500)
committerKalle Valo <kvalo@kernel.org>
Tue, 4 Oct 2022 08:28:28 +0000 (11:28 +0300)
To enhance FW debugging, we add dongle memory dump when hitting attaching
failure with PCIE bus. It can help developer to get more information
about dongle trap reason and root cause.

Signed-off-by: Wright Feng <wright.feng@cypress.com>
Signed-off-by: Chi-hsien Lin <chi-hsien.lin@cypress.com>
Signed-off-by: Ian Lin <ian.lin@infineon.com>
Signed-off-by: Kalle Valo <kvalo@kernel.org>
Link: https://lore.kernel.org/r/20220929031001.9962-4-ian.lin@infineon.com
drivers/net/wireless/broadcom/brcm80211/brcmfmac/core.c
drivers/net/wireless/broadcom/brcm80211/brcmfmac/pcie.c

index 595ae3a..d354f79 100644 (file)
@@ -1399,7 +1399,8 @@ void brcmf_fw_crashed(struct device *dev)
 
        brcmf_dev_coredump(dev);
 
-       schedule_work(&drvr->bus_reset);
+       if (drvr->bus_reset.func)
+               schedule_work(&drvr->bus_reset);
 }
 
 void brcmf_detach(struct device *dev)
index 1becd50..cf564ad 100644 (file)
@@ -2068,13 +2068,14 @@ static void brcmf_pcie_setup(struct device *dev, int ret,
        struct brcmf_commonring **flowrings;
        u32 i, nvram_len;
 
+       bus = dev_get_drvdata(dev);
+       pcie_bus_dev = bus->bus_priv.pcie;
+       devinfo = pcie_bus_dev->devinfo;
+
        /* check firmware loading result */
        if (ret)
                goto fail;
 
-       bus = dev_get_drvdata(dev);
-       pcie_bus_dev = bus->bus_priv.pcie;
-       devinfo = pcie_bus_dev->devinfo;
        brcmf_pcie_attach(devinfo);
 
        fw = fwreq->items[BRCMF_PCIE_FW_CODE].binary;
@@ -2148,6 +2149,9 @@ static void brcmf_pcie_setup(struct device *dev, int ret,
        return;
 
 fail:
+       brcmf_err(bus, "Dongle setup failed\n");
+       brcmf_pcie_bus_console_read(devinfo, true);
+       brcmf_fw_crashed(dev);
        device_release_driver(dev);
 }