mirror of
https://github.com/openwrt/openwrt.git
synced 2024-12-30 10:39:04 +00:00
mac80211: brcmfmac: backport important changes from the 4.18
Signed-off-by: Rafał Miłecki <rafal@milecki.pl>
This commit is contained in:
parent
84ef414bd4
commit
9d8940c5b9
@ -11,7 +11,7 @@ include $(INCLUDE_DIR)/kernel.mk
|
|||||||
PKG_NAME:=mac80211
|
PKG_NAME:=mac80211
|
||||||
|
|
||||||
PKG_VERSION:=2017-01-31
|
PKG_VERSION:=2017-01-31
|
||||||
PKG_RELEASE:=11
|
PKG_RELEASE:=12
|
||||||
PKG_SOURCE_URL:=http://mirror2.openwrt.org/sources
|
PKG_SOURCE_URL:=http://mirror2.openwrt.org/sources
|
||||||
PKG_BACKPORT_VERSION:=
|
PKG_BACKPORT_VERSION:=
|
||||||
PKG_HASH:=75e6d39e34cf156212a2509172a4a62b673b69eb4a1d9aaa565f7fa719fa2317
|
PKG_HASH:=75e6d39e34cf156212a2509172a4a62b673b69eb4a1d9aaa565f7fa719fa2317
|
||||||
|
@ -0,0 +1,97 @@
|
|||||||
|
From f56324baf329bc9362a52ad77a4a1a0f3356d1bc Mon Sep 17 00:00:00 2001
|
||||||
|
From: Franky Lin <franky.lin@broadcom.com>
|
||||||
|
Date: Thu, 26 Apr 2018 12:16:51 +0200
|
||||||
|
Subject: [PATCH] brcmfmac: coarse support for PCIe shared structure rev7
|
||||||
|
|
||||||
|
Revision 7 of PCIe dongle interface increases the item size of tx and rx
|
||||||
|
complete rings to accommodate extra payload for new feature. This patch
|
||||||
|
simply bump up the size of these two rings without adding the support
|
||||||
|
for utilizing the new space. This makes brcmfmac compatible with rev7
|
||||||
|
firmware.
|
||||||
|
|
||||||
|
Reviewed-by: Arend van Spriel <arend.vanspriel@broadcom.com>
|
||||||
|
Signed-off-by: Franky Lin <franky.lin@broadcom.com>
|
||||||
|
Signed-off-by: Arend van Spriel <arend.vanspriel@broadcom.com>
|
||||||
|
Signed-off-by: Kalle Valo <kvalo@codeaurora.org>
|
||||||
|
---
|
||||||
|
.../wireless/broadcom/brcm80211/brcmfmac/msgbuf.h | 6 ++++--
|
||||||
|
.../wireless/broadcom/brcm80211/brcmfmac/pcie.c | 23 ++++++++++++++++++----
|
||||||
|
2 files changed, 23 insertions(+), 6 deletions(-)
|
||||||
|
|
||||||
|
--- a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/msgbuf.h
|
||||||
|
+++ b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/msgbuf.h
|
||||||
|
@@ -27,8 +27,10 @@
|
||||||
|
#define BRCMF_H2D_MSGRING_CONTROL_SUBMIT_ITEMSIZE 40
|
||||||
|
#define BRCMF_H2D_MSGRING_RXPOST_SUBMIT_ITEMSIZE 32
|
||||||
|
#define BRCMF_D2H_MSGRING_CONTROL_COMPLETE_ITEMSIZE 24
|
||||||
|
-#define BRCMF_D2H_MSGRING_TX_COMPLETE_ITEMSIZE 16
|
||||||
|
-#define BRCMF_D2H_MSGRING_RX_COMPLETE_ITEMSIZE 32
|
||||||
|
+#define BRCMF_D2H_MSGRING_TX_COMPLETE_ITEMSIZE_PRE_V7 16
|
||||||
|
+#define BRCMF_D2H_MSGRING_TX_COMPLETE_ITEMSIZE 24
|
||||||
|
+#define BRCMF_D2H_MSGRING_RX_COMPLETE_ITEMSIZE_PRE_V7 32
|
||||||
|
+#define BRCMF_D2H_MSGRING_RX_COMPLETE_ITEMSIZE 40
|
||||||
|
#define BRCMF_H2D_TXFLOWRING_ITEMSIZE 48
|
||||||
|
|
||||||
|
struct msgbuf_buf_addr {
|
||||||
|
--- a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/pcie.c
|
||||||
|
+++ b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/pcie.c
|
||||||
|
@@ -135,8 +135,9 @@ static struct brcmf_firmware_mapping brc
|
||||||
|
BRCMF_PCIE_MB_INT_D2H3_DB0 | \
|
||||||
|
BRCMF_PCIE_MB_INT_D2H3_DB1)
|
||||||
|
|
||||||
|
+#define BRCMF_PCIE_SHARED_VERSION_7 7
|
||||||
|
#define BRCMF_PCIE_MIN_SHARED_VERSION 5
|
||||||
|
-#define BRCMF_PCIE_MAX_SHARED_VERSION 6
|
||||||
|
+#define BRCMF_PCIE_MAX_SHARED_VERSION BRCMF_PCIE_SHARED_VERSION_7
|
||||||
|
#define BRCMF_PCIE_SHARED_VERSION_MASK 0x00FF
|
||||||
|
#define BRCMF_PCIE_SHARED_DMA_INDEX 0x10000
|
||||||
|
#define BRCMF_PCIE_SHARED_DMA_2B_IDX 0x100000
|
||||||
|
@@ -316,6 +317,14 @@ static const u32 brcmf_ring_max_item[BRC
|
||||||
|
BRCMF_D2H_MSGRING_RX_COMPLETE_MAX_ITEM
|
||||||
|
};
|
||||||
|
|
||||||
|
+static const u32 brcmf_ring_itemsize_pre_v7[BRCMF_NROF_COMMON_MSGRINGS] = {
|
||||||
|
+ BRCMF_H2D_MSGRING_CONTROL_SUBMIT_ITEMSIZE,
|
||||||
|
+ BRCMF_H2D_MSGRING_RXPOST_SUBMIT_ITEMSIZE,
|
||||||
|
+ BRCMF_D2H_MSGRING_CONTROL_COMPLETE_ITEMSIZE,
|
||||||
|
+ BRCMF_D2H_MSGRING_TX_COMPLETE_ITEMSIZE_PRE_V7,
|
||||||
|
+ BRCMF_D2H_MSGRING_RX_COMPLETE_ITEMSIZE_PRE_V7
|
||||||
|
+};
|
||||||
|
+
|
||||||
|
static const u32 brcmf_ring_itemsize[BRCMF_NROF_COMMON_MSGRINGS] = {
|
||||||
|
BRCMF_H2D_MSGRING_CONTROL_SUBMIT_ITEMSIZE,
|
||||||
|
BRCMF_H2D_MSGRING_RXPOST_SUBMIT_ITEMSIZE,
|
||||||
|
@@ -999,8 +1008,14 @@ brcmf_pcie_alloc_dma_and_ring(struct brc
|
||||||
|
struct brcmf_pcie_ringbuf *ring;
|
||||||
|
u32 size;
|
||||||
|
u32 addr;
|
||||||
|
+ const u32 *ring_itemsize_array;
|
||||||
|
+
|
||||||
|
+ if (devinfo->shared.version < BRCMF_PCIE_SHARED_VERSION_7)
|
||||||
|
+ ring_itemsize_array = brcmf_ring_itemsize_pre_v7;
|
||||||
|
+ else
|
||||||
|
+ ring_itemsize_array = brcmf_ring_itemsize;
|
||||||
|
|
||||||
|
- size = brcmf_ring_max_item[ring_id] * brcmf_ring_itemsize[ring_id];
|
||||||
|
+ size = brcmf_ring_max_item[ring_id] * ring_itemsize_array[ring_id];
|
||||||
|
dma_buf = brcmf_pcie_init_dmabuffer_for_device(devinfo, size,
|
||||||
|
tcm_ring_phys_addr + BRCMF_RING_MEM_BASE_ADDR_OFFSET,
|
||||||
|
&dma_handle);
|
||||||
|
@@ -1010,7 +1025,7 @@ brcmf_pcie_alloc_dma_and_ring(struct brc
|
||||||
|
addr = tcm_ring_phys_addr + BRCMF_RING_MAX_ITEM_OFFSET;
|
||||||
|
brcmf_pcie_write_tcm16(devinfo, addr, brcmf_ring_max_item[ring_id]);
|
||||||
|
addr = tcm_ring_phys_addr + BRCMF_RING_LEN_ITEMS_OFFSET;
|
||||||
|
- brcmf_pcie_write_tcm16(devinfo, addr, brcmf_ring_itemsize[ring_id]);
|
||||||
|
+ brcmf_pcie_write_tcm16(devinfo, addr, ring_itemsize_array[ring_id]);
|
||||||
|
|
||||||
|
ring = kzalloc(sizeof(*ring), GFP_KERNEL);
|
||||||
|
if (!ring) {
|
||||||
|
@@ -1019,7 +1034,7 @@ brcmf_pcie_alloc_dma_and_ring(struct brc
|
||||||
|
return NULL;
|
||||||
|
}
|
||||||
|
brcmf_commonring_config(&ring->commonring, brcmf_ring_max_item[ring_id],
|
||||||
|
- brcmf_ring_itemsize[ring_id], dma_buf);
|
||||||
|
+ ring_itemsize_array[ring_id], dma_buf);
|
||||||
|
ring->dma_handle = dma_handle;
|
||||||
|
ring->devinfo = devinfo;
|
||||||
|
brcmf_commonring_register_cb(&ring->commonring,
|
@ -0,0 +1,45 @@
|
|||||||
|
From 9c4a121e82634aa000a702c98cd6f05b27d6e186 Mon Sep 17 00:00:00 2001
|
||||||
|
From: Sean Lanigan <sean@lano.id.au>
|
||||||
|
Date: Fri, 4 May 2018 16:48:23 +1000
|
||||||
|
Subject: [PATCH] brcmfmac: Add support for bcm43364 wireless chipset
|
||||||
|
|
||||||
|
Add support for the BCM43364 chipset via an SDIO interface, as used in
|
||||||
|
e.g. the Murata 1FX module.
|
||||||
|
|
||||||
|
The BCM43364 uses the same firmware as the BCM43430 (which is already
|
||||||
|
included), the only difference is the omission of Bluetooth.
|
||||||
|
|
||||||
|
However, the SDIO_ID for the BCM43364 is 02D0:A9A4, giving it a MODALIAS
|
||||||
|
of sdio:c00v02D0dA9A4, which doesn't get recognised and hence doesn't
|
||||||
|
load the brcmfmac module. Adding the 'A9A4' ID in the appropriate place
|
||||||
|
triggers the brcmfmac driver to load, and then correctly use the
|
||||||
|
firmware file 'brcmfmac43430-sdio.bin'.
|
||||||
|
|
||||||
|
Signed-off-by: Sean Lanigan <sean@lano.id.au>
|
||||||
|
Acked-by: Ulf Hansson <ulf.hansson@linaro.org>
|
||||||
|
Signed-off-by: Kalle Valo <kvalo@codeaurora.org>
|
||||||
|
---
|
||||||
|
drivers/net/wireless/broadcom/brcm80211/brcmfmac/bcmsdh.c | 1 +
|
||||||
|
include/linux/mmc/sdio_ids.h | 1 +
|
||||||
|
2 files changed, 2 insertions(+)
|
||||||
|
|
||||||
|
--- a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/bcmsdh.c
|
||||||
|
+++ b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/bcmsdh.c
|
||||||
|
@@ -1097,6 +1097,7 @@ static const struct sdio_device_id brcmf
|
||||||
|
BRCMF_SDIO_DEVICE(SDIO_DEVICE_ID_BROADCOM_43340),
|
||||||
|
BRCMF_SDIO_DEVICE(SDIO_DEVICE_ID_BROADCOM_43341),
|
||||||
|
BRCMF_SDIO_DEVICE(SDIO_DEVICE_ID_BROADCOM_43362),
|
||||||
|
+ BRCMF_SDIO_DEVICE(SDIO_DEVICE_ID_BROADCOM_43364),
|
||||||
|
BRCMF_SDIO_DEVICE(SDIO_DEVICE_ID_BROADCOM_4335_4339),
|
||||||
|
BRCMF_SDIO_DEVICE(SDIO_DEVICE_ID_BROADCOM_4339),
|
||||||
|
BRCMF_SDIO_DEVICE(SDIO_DEVICE_ID_BROADCOM_43430),
|
||||||
|
--- a/include/linux/mmc/sdio_ids.h
|
||||||
|
+++ b/include/linux/mmc/sdio_ids.h
|
||||||
|
@@ -34,6 +34,7 @@
|
||||||
|
#define SDIO_DEVICE_ID_BROADCOM_4335_4339 0x4335
|
||||||
|
#define SDIO_DEVICE_ID_BROADCOM_4339 0x4339
|
||||||
|
#define SDIO_DEVICE_ID_BROADCOM_43362 0xa962
|
||||||
|
+#define SDIO_DEVICE_ID_BROADCOM_43364 0xa9a4
|
||||||
|
#define SDIO_DEVICE_ID_BROADCOM_43430 0xa9a6
|
||||||
|
#define SDIO_DEVICE_ID_BROADCOM_4345 0x4345
|
||||||
|
#define SDIO_DEVICE_ID_BROADCOM_43455 0xa9bf
|
@ -0,0 +1,75 @@
|
|||||||
|
From 88001968245c42c26416476bf0ef960442371605 Mon Sep 17 00:00:00 2001
|
||||||
|
From: =?UTF-8?q?Rafa=C5=82=20Mi=C5=82ecki?= <rafal@milecki.pl>
|
||||||
|
Date: Mon, 14 May 2018 08:48:20 +0200
|
||||||
|
Subject: [PATCH] brcmfmac: add debugfs entry for reading firmware capabilities
|
||||||
|
MIME-Version: 1.0
|
||||||
|
Content-Type: text/plain; charset=UTF-8
|
||||||
|
Content-Transfer-Encoding: 8bit
|
||||||
|
|
||||||
|
This allows reading all capabilities as reported by a firmware. They are
|
||||||
|
printed using native (raw) names, just like developers like it the most.
|
||||||
|
It's how firmware reports support for various features, e.g. supported
|
||||||
|
modes, supported standards, power saving details, max BSS-es.
|
||||||
|
|
||||||
|
Access to all that info is useful for trying new firmwares, comparing
|
||||||
|
them and debugging features AKA bugs.
|
||||||
|
|
||||||
|
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>
|
||||||
|
---
|
||||||
|
.../wireless/broadcom/brcm80211/brcmfmac/feature.c | 36 ++++++++++++++++++++++
|
||||||
|
1 file changed, 36 insertions(+)
|
||||||
|
|
||||||
|
--- a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/feature.c
|
||||||
|
+++ b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/feature.c
|
||||||
|
@@ -138,6 +138,41 @@ static void brcmf_feat_firmware_capabili
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
+/**
|
||||||
|
+ * brcmf_feat_fwcap_debugfs_read() - expose firmware capabilities to debugfs.
|
||||||
|
+ *
|
||||||
|
+ * @seq: sequence for debugfs entry.
|
||||||
|
+ * @data: raw data pointer.
|
||||||
|
+ */
|
||||||
|
+static int brcmf_feat_fwcap_debugfs_read(struct seq_file *seq, void *data)
|
||||||
|
+{
|
||||||
|
+ struct brcmf_bus *bus_if = dev_get_drvdata(seq->private);
|
||||||
|
+ struct brcmf_if *ifp = brcmf_get_ifp(bus_if->drvr, 0);
|
||||||
|
+ char caps[MAX_CAPS_BUFFER_SIZE + 1] = { };
|
||||||
|
+ char *tmp;
|
||||||
|
+ int err;
|
||||||
|
+
|
||||||
|
+ err = brcmf_fil_iovar_data_get(ifp, "cap", caps, sizeof(caps));
|
||||||
|
+ if (err) {
|
||||||
|
+ brcmf_err("could not get firmware cap (%d)\n", err);
|
||||||
|
+ return err;
|
||||||
|
+ }
|
||||||
|
+
|
||||||
|
+ /* Put every capability in a new line */
|
||||||
|
+ for (tmp = caps; *tmp; tmp++) {
|
||||||
|
+ if (*tmp == ' ')
|
||||||
|
+ *tmp = '\n';
|
||||||
|
+ }
|
||||||
|
+
|
||||||
|
+ /* Usually there is a space at the end of capabilities string */
|
||||||
|
+ seq_printf(seq, "%s", caps);
|
||||||
|
+ /* So make sure we don't print two line breaks */
|
||||||
|
+ if (tmp > caps && *(tmp - 1) != '\n')
|
||||||
|
+ seq_printf(seq, "\n");
|
||||||
|
+
|
||||||
|
+ return 0;
|
||||||
|
+}
|
||||||
|
+
|
||||||
|
void brcmf_feat_attach(struct brcmf_pub *drvr)
|
||||||
|
{
|
||||||
|
struct brcmf_if *ifp = brcmf_get_ifp(drvr, 0);
|
||||||
|
@@ -196,6 +231,7 @@ void brcmf_feat_attach(struct brcmf_pub
|
||||||
|
}
|
||||||
|
|
||||||
|
brcmf_debugfs_add_entry(drvr, "features", brcmf_feat_debugfs_read);
|
||||||
|
+ brcmf_debugfs_add_entry(drvr, "fwcap", brcmf_feat_fwcap_debugfs_read);
|
||||||
|
}
|
||||||
|
|
||||||
|
bool brcmf_feat_is_enabled(struct brcmf_if *ifp, enum brcmf_feat_id id)
|
@ -0,0 +1,74 @@
|
|||||||
|
From 8e072168f75ebce85b96cbcefea2b10ddbd5913f Mon Sep 17 00:00:00 2001
|
||||||
|
From: Arend Van Spriel <arend.vanspriel@broadcom.com>
|
||||||
|
Date: Wed, 16 May 2018 14:11:59 +0200
|
||||||
|
Subject: [PATCH] brcmfmac: add support for sysfs initiated coredump
|
||||||
|
|
||||||
|
The driver already supports device coredump initiated by firmware
|
||||||
|
event. Since commit 3c47d19ff4dc ("drivers: base: add coredump driver
|
||||||
|
ops") it is also possible to initiate it from user-space through
|
||||||
|
sysfs. This patch adds support for SDIO and PCIe devices.
|
||||||
|
|
||||||
|
Reviewed-by: Hante Meuleman <hante.meuleman@broadcom.com>
|
||||||
|
Reviewed-by: Pieter-Paul Giesberts <pieter-paul.giesberts@broadcom.com>
|
||||||
|
Reviewed-by: Franky Lin <franky.lin@broadcom.com>
|
||||||
|
Signed-off-by: Arend van Spriel <arend.vanspriel@broadcom.com>
|
||||||
|
Signed-off-by: Kalle Valo <kvalo@codeaurora.org>
|
||||||
|
---
|
||||||
|
drivers/net/wireless/broadcom/brcm80211/brcmfmac/bcmsdh.c | 1 +
|
||||||
|
drivers/net/wireless/broadcom/brcm80211/brcmfmac/bus.h | 2 ++
|
||||||
|
drivers/net/wireless/broadcom/brcm80211/brcmfmac/core.c | 8 ++++++++
|
||||||
|
drivers/net/wireless/broadcom/brcm80211/brcmfmac/pcie.c | 1 +
|
||||||
|
4 files changed, 12 insertions(+)
|
||||||
|
|
||||||
|
--- a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/bcmsdh.c
|
||||||
|
+++ b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/bcmsdh.c
|
||||||
|
@@ -1299,6 +1299,9 @@ static struct sdio_driver brcmf_sdmmc_dr
|
||||||
|
#ifdef CONFIG_PM_SLEEP
|
||||||
|
.pm = &brcmf_sdio_pm_ops,
|
||||||
|
#endif /* CONFIG_PM_SLEEP */
|
||||||
|
+#if LINUX_VERSION_CODE >= KERNEL_VERSION(4, 16, 0)
|
||||||
|
+ .coredump = brcmf_dev_coredump,
|
||||||
|
+#endif
|
||||||
|
},
|
||||||
|
};
|
||||||
|
|
||||||
|
--- a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/bus.h
|
||||||
|
+++ b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/bus.h
|
||||||
|
@@ -231,6 +231,8 @@ void brcmf_detach(struct device *dev);
|
||||||
|
void brcmf_dev_reset(struct device *dev);
|
||||||
|
/* Indication from bus module to change flow-control state */
|
||||||
|
void brcmf_txflowblock(struct device *dev, bool state);
|
||||||
|
+/* Request from bus module to initiate a coredump */
|
||||||
|
+void brcmf_dev_coredump(struct device *dev);
|
||||||
|
|
||||||
|
/* Notify the bus has transferred the tx packet to firmware */
|
||||||
|
void brcmf_txcomplete(struct device *dev, struct sk_buff *txp, bool success);
|
||||||
|
--- a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/core.c
|
||||||
|
+++ b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/core.c
|
||||||
|
@@ -1159,6 +1159,14 @@ void brcmf_dev_reset(struct device *dev)
|
||||||
|
brcmf_fil_cmd_int_set(drvr->iflist[0], BRCMF_C_TERMINATED, 1);
|
||||||
|
}
|
||||||
|
|
||||||
|
+void brcmf_dev_coredump(struct device *dev)
|
||||||
|
+{
|
||||||
|
+ struct brcmf_bus *bus_if = dev_get_drvdata(dev);
|
||||||
|
+
|
||||||
|
+ if (brcmf_debug_create_memdump(bus_if, NULL, 0) < 0)
|
||||||
|
+ brcmf_dbg(TRACE, "failed to create coredump\n");
|
||||||
|
+}
|
||||||
|
+
|
||||||
|
void brcmf_detach(struct device *dev)
|
||||||
|
{
|
||||||
|
s32 i;
|
||||||
|
--- a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/pcie.c
|
||||||
|
+++ b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/pcie.c
|
||||||
|
@@ -1995,6 +1995,9 @@ static struct pci_driver brcmf_pciedrvr
|
||||||
|
#ifdef CONFIG_PM
|
||||||
|
.driver.pm = &brcmf_pciedrvr_pm,
|
||||||
|
#endif
|
||||||
|
+#if LINUX_VERSION_CODE >= KERNEL_VERSION(4, 16, 0)
|
||||||
|
+ .driver.coredump = brcmf_dev_coredump,
|
||||||
|
+#endif
|
||||||
|
};
|
||||||
|
|
||||||
|
|
@ -0,0 +1,32 @@
|
|||||||
|
From d2af9b566554e01f9ad67b330ce569dbc130e5d3 Mon Sep 17 00:00:00 2001
|
||||||
|
From: Franky Lin <franky.lin@broadcom.com>
|
||||||
|
Date: Wed, 16 May 2018 14:12:01 +0200
|
||||||
|
Subject: [PATCH] brcmfmac: validate user provided data for memdump before
|
||||||
|
copying
|
||||||
|
|
||||||
|
In patch "brcmfmac: add support for sysfs initiated coredump", a new
|
||||||
|
scenario of brcmf_debug_create_memdump was added in which the user of
|
||||||
|
the function might not necessarily provide prefix data. Hence the
|
||||||
|
function should not assume the data is always valid and should perform a
|
||||||
|
check before copying.
|
||||||
|
|
||||||
|
Reviewed-by: Arend van Spriel <arend.vanspriel@broadcom.com>
|
||||||
|
Signed-off-by: Franky Lin <franky.lin@broadcom.com>
|
||||||
|
Signed-off-by: Arend van Spriel <arend.vanspriel@broadcom.com>
|
||||||
|
Signed-off-by: Kalle Valo <kvalo@codeaurora.org>
|
||||||
|
---
|
||||||
|
drivers/net/wireless/broadcom/brcm80211/brcmfmac/debug.c | 3 ++-
|
||||||
|
1 file changed, 2 insertions(+), 1 deletion(-)
|
||||||
|
|
||||||
|
--- a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/debug.c
|
||||||
|
+++ b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/debug.c
|
||||||
|
@@ -42,7 +42,8 @@ int brcmf_debug_create_memdump(struct br
|
||||||
|
if (!dump)
|
||||||
|
return -ENOMEM;
|
||||||
|
|
||||||
|
- memcpy(dump, data, len);
|
||||||
|
+ if (data && len > 0)
|
||||||
|
+ memcpy(dump, data, len);
|
||||||
|
err = brcmf_bus_get_memdump(bus, dump + len, ramsize);
|
||||||
|
if (err) {
|
||||||
|
vfree(dump);
|
@ -0,0 +1,38 @@
|
|||||||
|
From 8a3ab2f38f1669e3be6433a1f6b82a077b38c4c7 Mon Sep 17 00:00:00 2001
|
||||||
|
From: Franky Lin <franky.lin@broadcom.com>
|
||||||
|
Date: Wed, 16 May 2018 14:12:02 +0200
|
||||||
|
Subject: [PATCH] brcmfmac: trigger memory dump upon firmware halt signal
|
||||||
|
|
||||||
|
PCIe dongle firmware signals a halt/trap through mailbox interrupt.
|
||||||
|
Trigger a memory dump upon receiving such signal could help to provide
|
||||||
|
useful information for issue debug.
|
||||||
|
|
||||||
|
Reviewed-by: Arend van Spriel <arend.vanspriel@broadcom.com>
|
||||||
|
Signed-off-by: Franky Lin <franky.lin@broadcom.com>
|
||||||
|
Signed-off-by: Arend van Spriel <arend.vanspriel@broadcom.com>
|
||||||
|
Signed-off-by: Kalle Valo <kvalo@codeaurora.org>
|
||||||
|
---
|
||||||
|
drivers/net/wireless/broadcom/brcm80211/brcmfmac/pcie.c | 5 +++++
|
||||||
|
1 file changed, 5 insertions(+)
|
||||||
|
|
||||||
|
--- a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/pcie.c
|
||||||
|
+++ b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/pcie.c
|
||||||
|
@@ -180,6 +180,7 @@ static struct brcmf_firmware_mapping brc
|
||||||
|
#define BRCMF_D2H_DEV_D3_ACK 0x00000001
|
||||||
|
#define BRCMF_D2H_DEV_DS_ENTER_REQ 0x00000002
|
||||||
|
#define BRCMF_D2H_DEV_DS_EXIT_NOTE 0x00000004
|
||||||
|
+#define BRCMF_D2H_DEV_FWHALT 0x10000000
|
||||||
|
|
||||||
|
#define BRCMF_H2D_HOST_D3_INFORM 0x00000001
|
||||||
|
#define BRCMF_H2D_HOST_DS_ACK 0x00000002
|
||||||
|
@@ -715,6 +716,10 @@ static void brcmf_pcie_handle_mb_data(st
|
||||||
|
devinfo->mbdata_completed = true;
|
||||||
|
wake_up(&devinfo->mbdata_resp_wait);
|
||||||
|
}
|
||||||
|
+ if (dtoh_mb_data & BRCMF_D2H_DEV_FWHALT) {
|
||||||
|
+ brcmf_dbg(PCIE, "D2H_MB_DATA: FW HALT\n");
|
||||||
|
+ brcmf_dev_coredump(&devinfo->pdev->dev);
|
||||||
|
+ }
|
||||||
|
}
|
||||||
|
|
||||||
|
|
@ -0,0 +1,30 @@
|
|||||||
|
From b8248236e92790ac635caeb4156e46ea2417e037 Mon Sep 17 00:00:00 2001
|
||||||
|
From: Franky Lin <franky.lin@broadcom.com>
|
||||||
|
Date: Wed, 16 May 2018 14:12:03 +0200
|
||||||
|
Subject: [PATCH] brcmfmac: trigger memory dump on SDIO firmware halt message
|
||||||
|
|
||||||
|
Attempt to dump dongle memory for debug upon receiving firmware halt
|
||||||
|
message through dongle to host mail box interrupt.
|
||||||
|
|
||||||
|
Reviewed-by: Arend van Spriel <arend.vanspriel@broadcom.com>
|
||||||
|
Signed-off-by: Franky Lin <franky.lin@broadcom.com>
|
||||||
|
Signed-off-by: Arend van Spriel <arend.vanspriel@broadcom.com>
|
||||||
|
Signed-off-by: Kalle Valo <kvalo@codeaurora.org>
|
||||||
|
---
|
||||||
|
drivers/net/wireless/broadcom/brcm80211/brcmfmac/sdio.c | 4 +++-
|
||||||
|
1 file changed, 3 insertions(+), 1 deletion(-)
|
||||||
|
|
||||||
|
--- a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/sdio.c
|
||||||
|
+++ b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/sdio.c
|
||||||
|
@@ -1095,8 +1095,10 @@ static u32 brcmf_sdio_hostmail(struct br
|
||||||
|
bus->sdcnt.f1regdata += 2;
|
||||||
|
|
||||||
|
/* dongle indicates the firmware has halted/crashed */
|
||||||
|
- if (hmb_data & HMB_DATA_FWHALT)
|
||||||
|
+ if (hmb_data & HMB_DATA_FWHALT) {
|
||||||
|
brcmf_err("mailbox indicates firmware halted\n");
|
||||||
|
+ brcmf_dev_coredump(&sdiod->func1->dev);
|
||||||
|
+ }
|
||||||
|
|
||||||
|
/* Dongle recomposed rx frames, accept them again */
|
||||||
|
if (hmb_data & HMB_DATA_NAKHANDLED) {
|
@ -13,7 +13,7 @@ Signed-off-by: Rafał Miłecki <zajec5@gmail.com>
|
|||||||
|
|
||||||
--- a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/core.c
|
--- a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/core.c
|
||||||
+++ b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/core.c
|
+++ b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/core.c
|
||||||
@@ -1268,6 +1268,7 @@ int __init brcmf_core_init(void)
|
@@ -1276,6 +1276,7 @@ int __init brcmf_core_init(void)
|
||||||
{
|
{
|
||||||
if (!schedule_work(&brcmf_driver_work))
|
if (!schedule_work(&brcmf_driver_work))
|
||||||
return -EBUSY;
|
return -EBUSY;
|
||||||
|
Loading…
Reference in New Issue
Block a user