aboutsummaryrefslogtreecommitdiffstats
path: root/package/kernel/mac80211/patches/339-v5.1-0002-brcmfmac-pass-bus-to-the-__brcmf_err-in-pcie.c.patch
diff options
context:
space:
mode:
Diffstat (limited to 'package/kernel/mac80211/patches/339-v5.1-0002-brcmfmac-pass-bus-to-the-__brcmf_err-in-pcie.c.patch')
-rw-r--r--package/kernel/mac80211/patches/339-v5.1-0002-brcmfmac-pass-bus-to-the-__brcmf_err-in-pcie.c.patch286
1 files changed, 286 insertions, 0 deletions
diff --git a/package/kernel/mac80211/patches/339-v5.1-0002-brcmfmac-pass-bus-to-the-__brcmf_err-in-pcie.c.patch b/package/kernel/mac80211/patches/339-v5.1-0002-brcmfmac-pass-bus-to-the-__brcmf_err-in-pcie.c.patch
new file mode 100644
index 0000000000..2cb39856e9
--- /dev/null
+++ b/package/kernel/mac80211/patches/339-v5.1-0002-brcmfmac-pass-bus-to-the-__brcmf_err-in-pcie.c.patch
@@ -0,0 +1,286 @@
+From 8602e62441aba276cafd68034b72162fbc5ca0a6 Mon Sep 17 00:00:00 2001
+From: =?UTF-8?q?Rafa=C5=82=20Mi=C5=82ecki?= <rafal@milecki.pl>
+Date: Wed, 6 Feb 2019 12:28:16 +0100
+Subject: [PATCH] brcmfmac: pass bus to the __brcmf_err() in pcie.c
+MIME-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+
+This enables dev_err() usage (instead of pr_err()) in the __brcmf_err().
+It makes error messages more meaningful and is important for debugging
+errors/bugs on systems with multiple brcmfmac supported devices.
+
+All bus files should follow & get updated similarly (soon).
+
+Signed-off-by: Rafał Miłecki <rafal@milecki.pl>
+Signed-off-by: Kalle Valo <kvalo@codeaurora.org>
+---
+ .../broadcom/brcm80211/brcmfmac/debug.h | 2 +
+ .../broadcom/brcm80211/brcmfmac/pcie.c | 59 +++++++++++--------
+ 2 files changed, 38 insertions(+), 23 deletions(-)
+
+--- a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/debug.h
++++ b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/debug.h
+@@ -52,6 +52,7 @@ void __brcmf_err(struct brcmf_bus *bus,
+ /* Macro for error messages. When debugging / tracing the driver all error
+ * messages are important to us.
+ */
++#ifndef brcmf_err
+ #define brcmf_err(fmt, ...) \
+ do { \
+ if (IS_ENABLED(CPTCFG_BRCMDBG) || \
+@@ -59,6 +60,7 @@ void __brcmf_err(struct brcmf_bus *bus,
+ net_ratelimit()) \
+ __brcmf_err(NULL, __func__, fmt, ##__VA_ARGS__);\
+ } while (0)
++#endif
+
+ #if defined(DEBUG) || defined(CPTCFG_BRCM_TRACING)
+
+--- a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/pcie.c
++++ b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/pcie.c
+@@ -30,6 +30,15 @@
+ #include <brcmu_wifi.h>
+ #include <brcm_hw_ids.h>
+
++/* Custom brcmf_err() that takes bus arg and passes it further */
++#define brcmf_err(bus, fmt, ...) \
++ do { \
++ if (IS_ENABLED(CPTCFG_BRCMDBG) || \
++ IS_ENABLED(CPTCFG_BRCM_TRACING) || \
++ net_ratelimit()) \
++ __brcmf_err(bus, __func__, fmt, ##__VA_ARGS__); \
++ } while (0)
++
+ #include "debug.h"
+ #include "bus.h"
+ #include "commonring.h"
+@@ -529,6 +538,7 @@ static void
+ brcmf_pcie_select_core(struct brcmf_pciedev_info *devinfo, u16 coreid)
+ {
+ const struct pci_dev *pdev = devinfo->pdev;
++ struct brcmf_bus *bus = dev_get_drvdata(&pdev->dev);
+ struct brcmf_core *core;
+ u32 bar0_win;
+
+@@ -546,7 +556,7 @@ brcmf_pcie_select_core(struct brcmf_pcie
+ }
+ }
+ } else {
+- brcmf_err("Unsupported core selected %x\n", coreid);
++ brcmf_err(bus, "Unsupported core selected %x\n", coreid);
+ }
+ }
+
+@@ -840,9 +850,8 @@ static irqreturn_t brcmf_pcie_isr_thread
+
+ static int brcmf_pcie_request_irq(struct brcmf_pciedev_info *devinfo)
+ {
+- struct pci_dev *pdev;
+-
+- pdev = devinfo->pdev;
++ struct pci_dev *pdev = devinfo->pdev;
++ struct brcmf_bus *bus = dev_get_drvdata(&pdev->dev);
+
+ brcmf_pcie_intr_disable(devinfo);
+
+@@ -853,7 +862,7 @@ static int brcmf_pcie_request_irq(struct
+ brcmf_pcie_isr_thread, IRQF_SHARED,
+ "brcmf_pcie_intr", devinfo)) {
+ pci_disable_msi(pdev);
+- brcmf_err("Failed to request IRQ %d\n", pdev->irq);
++ brcmf_err(bus, "Failed to request IRQ %d\n", pdev->irq);
+ return -EIO;
+ }
+ devinfo->irq_allocated = true;
+@@ -863,15 +872,14 @@ static int brcmf_pcie_request_irq(struct
+
+ static void brcmf_pcie_release_irq(struct brcmf_pciedev_info *devinfo)
+ {
+- struct pci_dev *pdev;
++ struct pci_dev *pdev = devinfo->pdev;
++ struct brcmf_bus *bus = dev_get_drvdata(&pdev->dev);
+ u32 status;
+ u32 count;
+
+ if (!devinfo->irq_allocated)
+ return;
+
+- pdev = devinfo->pdev;
+-
+ brcmf_pcie_intr_disable(devinfo);
+ free_irq(pdev->irq, devinfo);
+ pci_disable_msi(pdev);
+@@ -883,7 +891,7 @@ static void brcmf_pcie_release_irq(struc
+ count++;
+ }
+ if (devinfo->in_irq)
+- brcmf_err("Still in IRQ (processing) !!!\n");
++ brcmf_err(bus, "Still in IRQ (processing) !!!\n");
+
+ status = brcmf_pcie_read_reg32(devinfo, BRCMF_PCIE_PCIE2REG_MAILBOXINT);
+ brcmf_pcie_write_reg32(devinfo, BRCMF_PCIE_PCIE2REG_MAILBOXINT, status);
+@@ -1094,6 +1102,7 @@ static void brcmf_pcie_release_ringbuffe
+
+ static int brcmf_pcie_init_ringbuffers(struct brcmf_pciedev_info *devinfo)
+ {
++ struct brcmf_bus *bus = dev_get_drvdata(&devinfo->pdev->dev);
+ struct brcmf_pcie_ringbuf *ring;
+ struct brcmf_pcie_ringbuf *rings;
+ u32 d2h_w_idx_ptr;
+@@ -1246,7 +1255,7 @@ static int brcmf_pcie_init_ringbuffers(s
+ return 0;
+
+ fail:
+- brcmf_err("Allocating ring buffers failed\n");
++ brcmf_err(bus, "Allocating ring buffers failed\n");
+ brcmf_pcie_release_ringbuffers(devinfo);
+ return -ENOMEM;
+ }
+@@ -1269,6 +1278,7 @@ brcmf_pcie_release_scratchbuffers(struct
+
+ static int brcmf_pcie_init_scratchbuffers(struct brcmf_pciedev_info *devinfo)
+ {
++ struct brcmf_bus *bus = dev_get_drvdata(&devinfo->pdev->dev);
+ u64 address;
+ u32 addr;
+
+@@ -1308,7 +1318,7 @@ static int brcmf_pcie_init_scratchbuffer
+ return 0;
+
+ fail:
+- brcmf_err("Allocating scratch buffers failed\n");
++ brcmf_err(bus, "Allocating scratch buffers failed\n");
+ brcmf_pcie_release_scratchbuffers(devinfo);
+ return -ENOMEM;
+ }
+@@ -1409,6 +1419,7 @@ static int
+ brcmf_pcie_init_share_ram_info(struct brcmf_pciedev_info *devinfo,
+ u32 sharedram_addr)
+ {
++ struct brcmf_bus *bus = dev_get_drvdata(&devinfo->pdev->dev);
+ struct brcmf_pcie_shared_info *shared;
+ u32 addr;
+
+@@ -1420,7 +1431,8 @@ brcmf_pcie_init_share_ram_info(struct br
+ brcmf_dbg(PCIE, "PCIe protocol version %d\n", shared->version);
+ if ((shared->version > BRCMF_PCIE_MAX_SHARED_VERSION) ||
+ (shared->version < BRCMF_PCIE_MIN_SHARED_VERSION)) {
+- brcmf_err("Unsupported PCIE version %d\n", shared->version);
++ brcmf_err(bus, "Unsupported PCIE version %d\n",
++ shared->version);
+ return -EINVAL;
+ }
+
+@@ -1462,6 +1474,7 @@ static int brcmf_pcie_download_fw_nvram(
+ const struct firmware *fw, void *nvram,
+ u32 nvram_len)
+ {
++ struct brcmf_bus *bus = dev_get_drvdata(&devinfo->pdev->dev);
+ u32 sharedram_addr;
+ u32 sharedram_addr_written;
+ u32 loop_counter;
+@@ -1516,7 +1529,7 @@ static int brcmf_pcie_download_fw_nvram(
+ loop_counter--;
+ }
+ if (sharedram_addr == sharedram_addr_written) {
+- brcmf_err("FW failed to initialize\n");
++ brcmf_err(bus, "FW failed to initialize\n");
+ return -ENODEV;
+ }
+ brcmf_dbg(PCIE, "Shared RAM addr: 0x%08x\n", sharedram_addr);
+@@ -1527,16 +1540,15 @@ static int brcmf_pcie_download_fw_nvram(
+
+ static int brcmf_pcie_get_resource(struct brcmf_pciedev_info *devinfo)
+ {
+- struct pci_dev *pdev;
++ struct pci_dev *pdev = devinfo->pdev;
++ struct brcmf_bus *bus = dev_get_drvdata(&pdev->dev);
+ int err;
+ phys_addr_t bar0_addr, bar1_addr;
+ ulong bar1_size;
+
+- pdev = devinfo->pdev;
+-
+ err = pci_enable_device(pdev);
+ if (err) {
+- brcmf_err("pci_enable_device failed err=%d\n", err);
++ brcmf_err(bus, "pci_enable_device failed err=%d\n", err);
+ return err;
+ }
+
+@@ -1549,7 +1561,7 @@ static int brcmf_pcie_get_resource(struc
+ /* read Bar-1 mapped memory range */
+ bar1_size = pci_resource_len(pdev, 2);
+ if ((bar1_size == 0) || (bar1_addr == 0)) {
+- brcmf_err("BAR1 Not enabled, device size=%ld, addr=%#016llx\n",
++ brcmf_err(bus, "BAR1 Not enabled, device size=%ld, addr=%#016llx\n",
+ bar1_size, (unsigned long long)bar1_addr);
+ return -EINVAL;
+ }
+@@ -1558,7 +1570,7 @@ static int brcmf_pcie_get_resource(struc
+ devinfo->tcm = ioremap_nocache(bar1_addr, bar1_size);
+
+ if (!devinfo->regs || !devinfo->tcm) {
+- brcmf_err("ioremap() failed (%p,%p)\n", devinfo->regs,
++ brcmf_err(bus, "ioremap() failed (%p,%p)\n", devinfo->regs,
+ devinfo->tcm);
+ return -EINVAL;
+ }
+@@ -1585,16 +1597,17 @@ static void brcmf_pcie_release_resource(
+
+ static int brcmf_pcie_attach_bus(struct brcmf_pciedev_info *devinfo)
+ {
++ struct brcmf_bus *bus = dev_get_drvdata(&devinfo->pdev->dev);
+ int ret;
+
+ /* Attach to the common driver interface */
+ ret = brcmf_attach(&devinfo->pdev->dev, devinfo->settings);
+ if (ret) {
+- brcmf_err("brcmf_attach failed\n");
++ brcmf_err(bus, "brcmf_attach failed\n");
+ } else {
+ ret = brcmf_bus_started(&devinfo->pdev->dev);
+ if (ret)
+- brcmf_err("dongle is not responding\n");
++ brcmf_err(bus, "dongle is not responding\n");
+ }
+
+ return ret;
+@@ -1823,7 +1836,7 @@ fail_bus:
+ kfree(bus->msgbuf);
+ kfree(bus);
+ fail:
+- brcmf_err("failed %x:%x\n", pdev->vendor, pdev->device);
++ brcmf_err(NULL, "failed %x:%x\n", pdev->vendor, pdev->device);
+ brcmf_pcie_release_resource(devinfo);
+ if (devinfo->ci)
+ brcmf_chip_detach(devinfo->ci);
+@@ -1897,7 +1910,7 @@ static int brcmf_pcie_pm_enter_D3(struct
+ wait_event_timeout(devinfo->mbdata_resp_wait, devinfo->mbdata_completed,
+ BRCMF_PCIE_MBDATA_TIMEOUT);
+ if (!devinfo->mbdata_completed) {
+- brcmf_err("Timeout on response for entering D3 substate\n");
++ brcmf_err(bus, "Timeout on response for entering D3 substate\n");
+ brcmf_bus_change_state(bus, BRCMF_BUS_UP);
+ return -EIO;
+ }
+@@ -1942,7 +1955,7 @@ cleanup:
+
+ err = brcmf_pcie_probe(pdev, NULL);
+ if (err)
+- brcmf_err("probe after resume failed, err=%d\n", err);
++ brcmf_err(bus, "probe after resume failed, err=%d\n", err);
+
+ return err;
+ }
+@@ -2014,7 +2027,8 @@ void brcmf_pcie_register(void)
+ brcmf_dbg(PCIE, "Enter\n");
+ err = pci_register_driver(&brcmf_pciedrvr);
+ if (err)
+- brcmf_err("PCIE driver registration failed, err=%d\n", err);
++ brcmf_err(NULL, "PCIE driver registration failed, err=%d\n",
++ err);
+ }
+
+