mirror of
https://github.com/openwrt/openwrt.git
synced 2024-12-21 22:47:56 +00:00
8888cb725d
This improves FullMAC firmware compatibility, adds logging in case of firmware crash and *may* fix "Invalid packet id" errors. Signed-off-by: Rafał Miłecki <rafal@milecki.pl>
91 lines
2.9 KiB
Diff
91 lines
2.9 KiB
Diff
From 47dd82e3d25e85a7c7c4e4b0eac9d297d1e5e2d4 Mon Sep 17 00:00:00 2001
|
|
From: =?UTF-8?q?Rafa=C5=82=20Mi=C5=82ecki?= <rafal@milecki.pl>
|
|
Date: Sun, 28 Apr 2019 23:38:26 +0200
|
|
Subject: [PATCH] brcmfmac: print firmware messages after a firmware crash
|
|
MIME-Version: 1.0
|
|
Content-Type: text/plain; charset=UTF-8
|
|
Content-Transfer-Encoding: 8bit
|
|
|
|
Normally firmware messages are printed with debugging enabled only. It's
|
|
a good idea as firmware may print a lot of messages that normal users
|
|
don't need to care about.
|
|
|
|
However, on firmware crash, it may be very helpful to log all recent
|
|
messages. There is almost always a backtrace available as well as rought
|
|
info on the latest actions/state.
|
|
|
|
Signed-off-by: Rafał Miłecki <rafal@milecki.pl>
|
|
Reviewed-by: Arend van Spriel <arend.vanspriel@broadcom.com>
|
|
Signed-off-by: Kalle Valo <kvalo@codeaurora.org>
|
|
---
|
|
.../broadcom/brcm80211/brcmfmac/pcie.c | 24 ++++++++++++++-----
|
|
1 file changed, 18 insertions(+), 6 deletions(-)
|
|
|
|
--- a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/pcie.c
|
|
+++ b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/pcie.c
|
|
@@ -764,15 +764,22 @@ static void brcmf_pcie_bus_console_init(
|
|
console->base_addr, console->buf_addr, console->bufsize);
|
|
}
|
|
|
|
-
|
|
-static void brcmf_pcie_bus_console_read(struct brcmf_pciedev_info *devinfo)
|
|
+/**
|
|
+ * brcmf_pcie_bus_console_read - reads firmware messages
|
|
+ *
|
|
+ * @error: specifies if error has occurred (prints messages unconditionally)
|
|
+ */
|
|
+static void brcmf_pcie_bus_console_read(struct brcmf_pciedev_info *devinfo,
|
|
+ bool error)
|
|
{
|
|
+ struct pci_dev *pdev = devinfo->pdev;
|
|
+ struct brcmf_bus *bus = dev_get_drvdata(&pdev->dev);
|
|
struct brcmf_pcie_console *console;
|
|
u32 addr;
|
|
u8 ch;
|
|
u32 newidx;
|
|
|
|
- if (!BRCMF_FWCON_ON())
|
|
+ if (!error && !BRCMF_FWCON_ON())
|
|
return;
|
|
|
|
console = &devinfo->shared.console;
|
|
@@ -796,7 +803,10 @@ static void brcmf_pcie_bus_console_read(
|
|
}
|
|
if (ch == '\n') {
|
|
console->log_str[console->log_idx] = 0;
|
|
- pr_debug("CONSOLE: %s", console->log_str);
|
|
+ if (error)
|
|
+ brcmf_err(bus, "CONSOLE: %s", console->log_str);
|
|
+ else
|
|
+ pr_debug("CONSOLE: %s", console->log_str);
|
|
console->log_idx = 0;
|
|
}
|
|
}
|
|
@@ -857,7 +867,7 @@ static irqreturn_t brcmf_pcie_isr_thread
|
|
&devinfo->pdev->dev);
|
|
}
|
|
}
|
|
- brcmf_pcie_bus_console_read(devinfo);
|
|
+ brcmf_pcie_bus_console_read(devinfo, false);
|
|
if (devinfo->state == BRCMFMAC_PCIE_STATE_UP)
|
|
brcmf_pcie_intr_enable(devinfo);
|
|
devinfo->in_irq = false;
|
|
@@ -1426,6 +1436,8 @@ static int brcmf_pcie_reset(struct devic
|
|
struct brcmf_fw_request *fwreq;
|
|
int err;
|
|
|
|
+ brcmf_pcie_bus_console_read(devinfo, true);
|
|
+
|
|
brcmf_detach(dev);
|
|
|
|
brcmf_pcie_release_irq(devinfo);
|
|
@@ -1818,7 +1830,7 @@ static void brcmf_pcie_setup(struct devi
|
|
if (brcmf_attach(&devinfo->pdev->dev, devinfo->settings) == 0)
|
|
return;
|
|
|
|
- brcmf_pcie_bus_console_read(devinfo);
|
|
+ brcmf_pcie_bus_console_read(devinfo, false);
|
|
|
|
fail:
|
|
device_release_driver(dev);
|