summaryrefslogtreecommitdiffstats
path: root/package/kernel/mac80211/patches/339-v5.1-0005-brcmfmac-print-firmware-reported-ring-status-errors.patch
diff options
context:
space:
mode:
Diffstat (limited to 'package/kernel/mac80211/patches/339-v5.1-0005-brcmfmac-print-firmware-reported-ring-status-errors.patch')
-rw-r--r--package/kernel/mac80211/patches/339-v5.1-0005-brcmfmac-print-firmware-reported-ring-status-errors.patch67
1 files changed, 67 insertions, 0 deletions
diff --git a/package/kernel/mac80211/patches/339-v5.1-0005-brcmfmac-print-firmware-reported-ring-status-errors.patch b/package/kernel/mac80211/patches/339-v5.1-0005-brcmfmac-print-firmware-reported-ring-status-errors.patch
new file mode 100644
index 0000000000..f6410a6eab
--- /dev/null
+++ b/package/kernel/mac80211/patches/339-v5.1-0005-brcmfmac-print-firmware-reported-ring-status-errors.patch
@@ -0,0 +1,67 @@
+From c988b78244df8216902e20de536434e2f474a37e Mon Sep 17 00:00:00 2001
+From: =?UTF-8?q?Rafa=C5=82=20Mi=C5=82ecki?= <rafal@milecki.pl>
+Date: Fri, 8 Feb 2019 15:24:39 +0100
+Subject: [PATCH] brcmfmac: print firmware reported ring status errors
+MIME-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+
+Firmware is capable of reporting ring status. It's used e.g. to signal
+some problem with a specific ring setup. This patch adds support for
+printing ring & error number which may be useful for debugging setup
+issues.
+
+Signed-off-by: Rafał Miłecki <rafal@milecki.pl>
+Signed-off-by: Kalle Valo <kvalo@codeaurora.org>
+---
+ .../broadcom/brcm80211/brcmfmac/msgbuf.c | 25 +++++++++++++++++++
+ 1 file changed, 25 insertions(+)
+
+--- a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/msgbuf.c
++++ b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/msgbuf.c
+@@ -134,6 +134,14 @@ struct msgbuf_completion_hdr {
+ __le16 flow_ring_id;
+ };
+
++/* Data struct for the MSGBUF_TYPE_RING_STATUS */
++struct msgbuf_ring_status {
++ struct msgbuf_common_hdr msg;
++ struct msgbuf_completion_hdr compl_hdr;
++ __le16 write_idx;
++ __le32 rsvd0[5];
++};
++
+ struct msgbuf_rx_event {
+ struct msgbuf_common_hdr msg;
+ struct msgbuf_completion_hdr compl_hdr;
+@@ -1178,6 +1186,19 @@ brcmf_msgbuf_process_rx_complete(struct
+ brcmf_netif_rx(ifp, skb);
+ }
+
++static void brcmf_msgbuf_process_ring_status(struct brcmf_msgbuf *msgbuf,
++ void *buf)
++{
++ struct msgbuf_ring_status *ring_status = buf;
++ int err;
++
++ err = le16_to_cpu(ring_status->compl_hdr.status);
++ if (err) {
++ int ring = le16_to_cpu(ring_status->compl_hdr.flow_ring_id);
++
++ brcmf_err("Firmware reported ring %d error: %d\n", ring, err);
++ }
++}
+
+ static void
+ brcmf_msgbuf_process_flow_ring_create_response(struct brcmf_msgbuf *msgbuf,
+@@ -1239,6 +1260,10 @@ static void brcmf_msgbuf_process_msgtype
+
+ msg = (struct msgbuf_common_hdr *)buf;
+ switch (msg->msgtype) {
++ case MSGBUF_TYPE_RING_STATUS:
++ brcmf_dbg(MSGBUF, "MSGBUF_TYPE_RING_STATUS\n");
++ brcmf_msgbuf_process_ring_status(msgbuf, buf);
++ break;
+ case MSGBUF_TYPE_FLOW_RING_CREATE_CMPLT:
+ brcmf_dbg(MSGBUF, "MSGBUF_TYPE_FLOW_RING_CREATE_CMPLT\n");
+ brcmf_msgbuf_process_flow_ring_create_response(msgbuf, buf);