From 8231f67218e584be61d32b24bd17cc55e500638c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Rafa=C5=82=20Mi=C5=82ecki?= Date: Sun, 21 Jul 2019 23:09:53 +0200 Subject: mac80211: brcmfmac: backport fixes from kernel 5.4 MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit This fixes: 1) Crash during USB disconnect 2) Crash in brcmf_txfinalize() on rmmod with packets queued 3) Some errors in exit path Signed-off-by: Rafał Miłecki --- ...rcmfmac-add-160MHz-in-chandef_to_chanspec.patch | 55 ++++++++++++++++++++++ 1 file changed, 55 insertions(+) create mode 100644 package/kernel/mac80211/patches/468-v5.4-0001-brcmfmac-add-160MHz-in-chandef_to_chanspec.patch (limited to 'package/kernel/mac80211/patches/468-v5.4-0001-brcmfmac-add-160MHz-in-chandef_to_chanspec.patch') diff --git a/package/kernel/mac80211/patches/468-v5.4-0001-brcmfmac-add-160MHz-in-chandef_to_chanspec.patch b/package/kernel/mac80211/patches/468-v5.4-0001-brcmfmac-add-160MHz-in-chandef_to_chanspec.patch new file mode 100644 index 0000000000..a3a3006c90 --- /dev/null +++ b/package/kernel/mac80211/patches/468-v5.4-0001-brcmfmac-add-160MHz-in-chandef_to_chanspec.patch @@ -0,0 +1,55 @@ +From 46f24cd5980de4302982d38ebb6620560ead10b3 Mon Sep 17 00:00:00 2001 +From: Arend van Spriel +Date: Thu, 11 Jul 2019 10:45:30 +0200 +Subject: [PATCH 1/3] brcmfmac: add 160MHz in chandef_to_chanspec() + +The function chandef_to_chanspec() was not handling 160MHz bandwidth +resulting in wrong encoding of the channel. That resulting in firmware +rejecting the provided channel specification. + +Reviewed-by: Hante Meuleman +Reviewed-by: Pieter-Paul Giesberts +Reviewed-by: Franky Lin +Signed-off-by: Arend van Spriel +--- + .../broadcom/brcm80211/brcmfmac/cfg80211.c | 21 ++++++++++++++++++- + 1 file changed, 20 insertions(+), 1 deletion(-) + +--- a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/cfg80211.c ++++ b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/cfg80211.c +@@ -287,8 +287,26 @@ static u16 chandef_to_chanspec(struct br + else + ch_inf.sb = BRCMU_CHAN_SB_UU; + break; +- case NL80211_CHAN_WIDTH_80P80: + case NL80211_CHAN_WIDTH_160: ++ ch_inf.bw = BRCMU_CHAN_BW_160; ++ if (primary_offset == -70) ++ ch_inf.sb = BRCMU_CHAN_SB_LLL; ++ else if (primary_offset == -50) ++ ch_inf.sb = BRCMU_CHAN_SB_LLU; ++ else if (primary_offset == -30) ++ ch_inf.sb = BRCMU_CHAN_SB_LUL; ++ else if (primary_offset == -10) ++ ch_inf.sb = BRCMU_CHAN_SB_LUU; ++ else if (primary_offset == 10) ++ ch_inf.sb = BRCMU_CHAN_SB_ULL; ++ else if (primary_offset == 30) ++ ch_inf.sb = BRCMU_CHAN_SB_ULU; ++ else if (primary_offset == 50) ++ ch_inf.sb = BRCMU_CHAN_SB_UUL; ++ else ++ ch_inf.sb = BRCMU_CHAN_SB_UUU; ++ break; ++ case NL80211_CHAN_WIDTH_80P80: + case NL80211_CHAN_WIDTH_5: + case NL80211_CHAN_WIDTH_10: + default: +@@ -307,6 +325,7 @@ static u16 chandef_to_chanspec(struct br + } + d11inf->encchspec(&ch_inf); + ++ brcmf_dbg(TRACE, "chanspec: 0x%x\n", ch_inf.chspec); + return ch_inf.chspec; + } + -- cgit v1.2.3