2cd72294b6
So far support for multiple interface was somehow broken in brcmfmac. Driver couldn't correctly match firmware and system interfaces resulting in not working APs and WARNINGs. This pending patches fixes that :) Signed-off-by: Rafał Miłecki <zajec5@gmail.com> SVN-Revision: 46734
103 lines
3.6 KiB
Diff
103 lines
3.6 KiB
Diff
From: Arend van Spriel <arend@broadcom.com>
|
|
Date: Wed, 26 Aug 2015 22:15:01 +0200
|
|
Subject: [PATCH] brcmfmac: add dedicated debug level for firmware
|
|
console logging
|
|
|
|
Both PCIe and SDIO devices have the possibility to log the firmware
|
|
console output in kernel log. For PCIe it is logged when PCIE debug
|
|
level is enabled. For SDIO it is logged when user specifies a non-zero
|
|
console interval through debugfs. This patch tries to make it a
|
|
bit more consistent. The firmware console output is only logged when
|
|
FWCON debug level is enabled.
|
|
|
|
Reviewed-by: Hante Meuleman <meuleman@broadcom.com>
|
|
Reviewed-by: Franky (Zhenhui) Lin <frankyl@broadcom.com>
|
|
Reviewed-by: Pieter-Paul Giesberts <pieterpg@broadcom.com>
|
|
Reviewed-by: Pontus Fuchs <pontusf@broadcom.com>
|
|
Signed-off-by: Arend van Spriel <arend@broadcom.com>
|
|
---
|
|
|
|
--- a/drivers/net/wireless/brcm80211/brcmfmac/debug.h
|
|
+++ b/drivers/net/wireless/brcm80211/brcmfmac/debug.h
|
|
@@ -37,6 +37,7 @@
|
|
#define BRCMF_SDIO_VAL 0x00020000
|
|
#define BRCMF_MSGBUF_VAL 0x00040000
|
|
#define BRCMF_PCIE_VAL 0x00080000
|
|
+#define BRCMF_FWCON_VAL 0x00100000
|
|
|
|
/* set default print format */
|
|
#undef pr_fmt
|
|
@@ -78,6 +79,7 @@ do { \
|
|
#define BRCMF_GLOM_ON() (brcmf_msg_level & BRCMF_GLOM_VAL)
|
|
#define BRCMF_EVENT_ON() (brcmf_msg_level & BRCMF_EVENT_VAL)
|
|
#define BRCMF_FIL_ON() (brcmf_msg_level & BRCMF_FIL_VAL)
|
|
+#define BRCMF_FWCON_ON() (brcmf_msg_level & BRCMF_FWCON_VAL)
|
|
|
|
#else /* defined(DEBUG) || defined(CPTCFG_BRCM_TRACING) */
|
|
|
|
@@ -90,6 +92,7 @@ do { \
|
|
#define BRCMF_GLOM_ON() 0
|
|
#define BRCMF_EVENT_ON() 0
|
|
#define BRCMF_FIL_ON() 0
|
|
+#define BRCMF_FWCON_ON() 0
|
|
|
|
#endif /* defined(DEBUG) || defined(CPTCFG_BRCM_TRACING) */
|
|
|
|
--- a/drivers/net/wireless/brcm80211/brcmfmac/pcie.c
|
|
+++ b/drivers/net/wireless/brcm80211/brcmfmac/pcie.c
|
|
@@ -644,7 +644,7 @@ static void brcmf_pcie_bus_console_init(
|
|
addr = console->base_addr + BRCMF_CONSOLE_BUFSIZE_OFFSET;
|
|
console->bufsize = brcmf_pcie_read_tcm32(devinfo, addr);
|
|
|
|
- brcmf_dbg(PCIE, "Console: base %x, buf %x, size %d\n",
|
|
+ brcmf_dbg(FWCON, "Console: base %x, buf %x, size %d\n",
|
|
console->base_addr, console->buf_addr, console->bufsize);
|
|
}
|
|
|
|
@@ -656,6 +656,9 @@ static void brcmf_pcie_bus_console_read(
|
|
u8 ch;
|
|
u32 newidx;
|
|
|
|
+ if (!BRCMF_FWCON_ON())
|
|
+ return;
|
|
+
|
|
console = &devinfo->shared.console;
|
|
addr = console->base_addr + BRCMF_CONSOLE_WRITEIDX_OFFSET;
|
|
newidx = brcmf_pcie_read_tcm32(devinfo, addr);
|
|
@@ -677,7 +680,7 @@ static void brcmf_pcie_bus_console_read(
|
|
}
|
|
if (ch == '\n') {
|
|
console->log_str[console->log_idx] = 0;
|
|
- brcmf_dbg(PCIE, "CONSOLE: %s", console->log_str);
|
|
+ pr_debug("CONSOLE: %s", console->log_str);
|
|
console->log_idx = 0;
|
|
}
|
|
}
|
|
--- a/drivers/net/wireless/brcm80211/brcmfmac/sdio.c
|
|
+++ b/drivers/net/wireless/brcm80211/brcmfmac/sdio.c
|
|
@@ -123,6 +123,7 @@ struct rte_console {
|
|
|
|
#define BRCMF_FIRSTREAD (1 << 6)
|
|
|
|
+#define BRCMF_CONSOLE 10 /* watchdog interval to poll console */
|
|
|
|
/* SBSDIO_DEVICE_CTL */
|
|
|
|
@@ -3204,6 +3205,8 @@ static void brcmf_sdio_debugfs_create(st
|
|
if (IS_ERR_OR_NULL(dentry))
|
|
return;
|
|
|
|
+ bus->console_interval = BRCMF_CONSOLE;
|
|
+
|
|
brcmf_debugfs_add_entry(drvr, "forensics", brcmf_sdio_forensic_read);
|
|
brcmf_debugfs_add_entry(drvr, "counters",
|
|
brcmf_debugfs_sdio_count_read);
|
|
@@ -3613,7 +3616,7 @@ static void brcmf_sdio_bus_watchdog(stru
|
|
}
|
|
#ifdef DEBUG
|
|
/* Poll for console output periodically */
|
|
- if (bus->sdiodev->state == BRCMF_SDIOD_DATA &&
|
|
+ if (bus->sdiodev->state == BRCMF_SDIOD_DATA && BRCMF_FWCON_ON() &&
|
|
bus->console_interval != 0) {
|
|
bus->console.count += BRCMF_WD_POLL_MS;
|
|
if (bus->console.count >= bus->console_interval) {
|