diff options
author | Rafał Miłecki <rafal@milecki.pl> | 2019-02-12 13:43:06 +0100 |
---|---|---|
committer | Rafał Miłecki <rafal@milecki.pl> | 2019-02-12 13:50:40 +0100 |
commit | 0994e65c6a32ea7009d1fe89f7261cb5d106c7a3 (patch) | |
tree | e4a154b66c4dbc65e3db1e8a5f1c4d7385cf7ce3 /package/kernel/mac80211/patches/brcm/328-v5.0-0001-brcmfmac-add-credit-numbers-updating-support.patch | |
parent | 248797834bf21916ddf663edc96d86ee5377850e (diff) | |
download | upstream-0994e65c6a32ea7009d1fe89f7261cb5d106c7a3.tar.gz upstream-0994e65c6a32ea7009d1fe89f7261cb5d106c7a3.tar.bz2 upstream-0994e65c6a32ea7009d1fe89f7261cb5d106c7a3.zip |
mac80211: brcmfmac: backport remaining patches from the Linux 5.0
Signed-off-by: Rafał Miłecki <rafal@milecki.pl>
Diffstat (limited to 'package/kernel/mac80211/patches/brcm/328-v5.0-0001-brcmfmac-add-credit-numbers-updating-support.patch')
-rw-r--r-- | package/kernel/mac80211/patches/brcm/328-v5.0-0001-brcmfmac-add-credit-numbers-updating-support.patch | 95 |
1 files changed, 95 insertions, 0 deletions
diff --git a/package/kernel/mac80211/patches/brcm/328-v5.0-0001-brcmfmac-add-credit-numbers-updating-support.patch b/package/kernel/mac80211/patches/brcm/328-v5.0-0001-brcmfmac-add-credit-numbers-updating-support.patch new file mode 100644 index 0000000000..dd40ee2b1f --- /dev/null +++ b/package/kernel/mac80211/patches/brcm/328-v5.0-0001-brcmfmac-add-credit-numbers-updating-support.patch @@ -0,0 +1,95 @@ +From 153e22c0ff1260035cd7fe72c8aeead1f5fac757 Mon Sep 17 00:00:00 2001 +From: Wright Feng <Wright.Feng@cypress.com> +Date: Mon, 5 Nov 2018 05:51:54 +0000 +Subject: [PATCH] brcmfmac: add credit numbers updating support + +The credit numbers are static and tunable per chip in firmware side. +However the credit number may be changed that is based on packet pool +length and will send BRCMF_E_FIFO_CREDIT_MAP event to notify host driver +updates the credit numbers during interface up. +The purpose of this patch is making host driver has ability of updating +the credit numbers when receiving the BRCMF_E_FIFO_CREDIT_MAP event. + +Signed-off-by: Wright Feng <wright.feng@cypress.com> +Acked-by: Arend van Spriel <arend.vanspriel@broadcom.com> +Signed-off-by: Kalle Valo <kvalo@codeaurora.org> +--- + .../broadcom/brcm80211/brcmfmac/fwsignal.c | 23 ++++++++++++------- + 1 file changed, 15 insertions(+), 8 deletions(-) + +--- a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/fwsignal.c ++++ b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/fwsignal.c +@@ -511,6 +511,7 @@ struct brcmf_fws_info { + struct work_struct fws_dequeue_work; + u32 fifo_enqpkt[BRCMF_FWS_FIFO_COUNT]; + int fifo_credit[BRCMF_FWS_FIFO_COUNT]; ++ int init_fifo_credit[BRCMF_FWS_FIFO_COUNT]; + int credits_borrowed[BRCMF_FWS_FIFO_AC_VO + 1]; + int deq_node_pos[BRCMF_FWS_FIFO_COUNT]; + u32 fifo_credit_map; +@@ -1237,6 +1238,9 @@ static void brcmf_fws_return_credits(str + } + + fws->fifo_credit[fifo] += credits; ++ if (fws->fifo_credit[fifo] > fws->init_fifo_credit[fifo]) ++ fws->fifo_credit[fifo] = fws->init_fifo_credit[fifo]; ++ + } + + static void brcmf_fws_schedule_deq(struct brcmf_fws_info *fws) +@@ -1595,19 +1599,21 @@ static int brcmf_fws_notify_credit_map(s + brcmf_err("event payload too small (%d)\n", e->datalen); + return -EINVAL; + } +- if (fws->creditmap_received) +- return 0; + + fws->creditmap_received = true; + + brcmf_dbg(TRACE, "enter: credits %pM\n", credits); + brcmf_fws_lock(fws); + for (i = 0; i < ARRAY_SIZE(fws->fifo_credit); i++) { +- if (*credits) ++ fws->fifo_credit[i] += credits[i] - fws->init_fifo_credit[i]; ++ fws->init_fifo_credit[i] = credits[i]; ++ if (fws->fifo_credit[i] > 0) + fws->fifo_credit_map |= 1 << i; + else + fws->fifo_credit_map &= ~(1 << i); +- fws->fifo_credit[i] = *credits++; ++ WARN_ONCE(fws->fifo_credit[i] < 0, ++ "fifo_credit[%d] is negative(%d)\n", i, ++ fws->fifo_credit[i]); + } + brcmf_fws_schedule_deq(fws); + brcmf_fws_unlock(fws); +@@ -2013,7 +2019,7 @@ static int brcmf_fws_borrow_credit(struc + } + + for (lender_ac = 0; lender_ac <= BRCMF_FWS_FIFO_AC_VO; lender_ac++) { +- if (fws->fifo_credit[lender_ac]) { ++ if (fws->fifo_credit[lender_ac] > 0) { + fws->credits_borrowed[lender_ac]++; + fws->fifo_credit[lender_ac]--; + if (fws->fifo_credit[lender_ac] == 0) +@@ -2210,8 +2216,9 @@ static void brcmf_fws_dequeue_worker(str + } + continue; + } +- while ((fws->fifo_credit[fifo]) || ((!fws->bcmc_credit_check) && +- (fifo == BRCMF_FWS_FIFO_BCMC))) { ++ while ((fws->fifo_credit[fifo] > 0) || ++ ((!fws->bcmc_credit_check) && ++ (fifo == BRCMF_FWS_FIFO_BCMC))) { + skb = brcmf_fws_deq(fws, fifo); + if (!skb) + break; +@@ -2222,7 +2229,7 @@ static void brcmf_fws_dequeue_worker(str + break; + } + if ((fifo == BRCMF_FWS_FIFO_AC_BE) && +- (fws->fifo_credit[fifo] == 0) && ++ (fws->fifo_credit[fifo] <= 0) && + (!fws->bus_flow_blocked)) { + while (brcmf_fws_borrow_credit(fws) == 0) { + skb = brcmf_fws_deq(fws, fifo); |