123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990 |
- 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
- @@ -760,15 +760,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;
- @@ -792,7 +799,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;
- }
- }
- @@ -847,7 +857,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;
- @@ -1398,6 +1408,8 @@ static int brcmf_pcie_reset(struct devic
- u16 bus_nr;
- int err;
-
- + brcmf_pcie_bus_console_read(devinfo, true);
- +
- brcmf_detach(dev);
-
- brcmf_pcie_release_irq(devinfo);
- @@ -1799,7 +1811,7 @@ static void brcmf_pcie_setup(struct devi
- if (brcmf_pcie_attach_bus(devinfo) == 0)
- return;
-
- - brcmf_pcie_bus_console_read(devinfo);
- + brcmf_pcie_bus_console_read(devinfo, false);
-
- fail:
- device_release_driver(dev);
|