From a63907b3bbb07724d6526b20ae18ad90f351e954 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Rafa=C5=82=20Mi=C5=82ecki?= Date: Mon, 22 Jul 2019 10:45:38 +0200 Subject: mac80211: brcmfmac: rename v4.12 patches to allow more backports MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: Rafał Miłecki --- ...mac-restore-bus-state-when-enter_D3-fails.patch | 29 ---------- ...operly-align-buffers-on-certain-platforms.patch | 36 ------------- ...d-length-checks-in-scheduled-scan-result-.patch | 61 ---------------------- ...move-bogus-check-in-scheduled-scan-result.patch | 32 ------------ ...ly-add-channels-and-ssids-once-in-scan-re.patch | 56 -------------------- ...sure-pointer-correctly-set-if-skb-data-lo.patch | 39 -------------- ...mfmac-Make-skb-header-writable-before-use.patch | 48 ----------------- ...x-alignment-configuration-on-host-using-6.patch | 40 -------------- ...mac-restore-bus-state-when-enter_D3-fails.patch | 29 ++++++++++ ...operly-align-buffers-on-certain-platforms.patch | 36 +++++++++++++ ...d-length-checks-in-scheduled-scan-result-.patch | 61 ++++++++++++++++++++++ ...move-bogus-check-in-scheduled-scan-result.patch | 32 ++++++++++++ ...ly-add-channels-and-ssids-once-in-scan-re.patch | 56 ++++++++++++++++++++ ...sure-pointer-correctly-set-if-skb-data-lo.patch | 39 ++++++++++++++ ...mfmac-Make-skb-header-writable-before-use.patch | 48 +++++++++++++++++ ...x-alignment-configuration-on-host-using-6.patch | 40 ++++++++++++++ 16 files changed, 341 insertions(+), 341 deletions(-) delete mode 100644 package/kernel/mac80211/patches/319-v4.12-0005-brcmfmac-restore-bus-state-when-enter_D3-fails.patch delete mode 100644 package/kernel/mac80211/patches/319-v4.12-0006-brcmfmac-properly-align-buffers-on-certain-platforms.patch delete mode 100644 package/kernel/mac80211/patches/319-v4.12-0007-brcmfmac-add-length-checks-in-scheduled-scan-result-.patch delete mode 100644 package/kernel/mac80211/patches/319-v4.12-0008-brcmfmac-remove-bogus-check-in-scheduled-scan-result.patch delete mode 100644 package/kernel/mac80211/patches/319-v4.12-0009-brcmfmac-only-add-channels-and-ssids-once-in-scan-re.patch delete mode 100644 package/kernel/mac80211/patches/319-v4.12-0010-brcmfmac-Ensure-pointer-correctly-set-if-skb-data-lo.patch delete mode 100644 package/kernel/mac80211/patches/319-v4.12-0011-brcmfmac-Make-skb-header-writable-before-use.patch delete mode 100644 package/kernel/mac80211/patches/319-v4.12-0012-brcmfmac-fix-alignment-configuration-on-host-using-6.patch create mode 100644 package/kernel/mac80211/patches/319-v4.12-0023-brcmfmac-restore-bus-state-when-enter_D3-fails.patch create mode 100644 package/kernel/mac80211/patches/319-v4.12-0030-brcmfmac-properly-align-buffers-on-certain-platforms.patch create mode 100644 package/kernel/mac80211/patches/319-v4.12-0043-brcmfmac-add-length-checks-in-scheduled-scan-result-.patch create mode 100644 package/kernel/mac80211/patches/319-v4.12-0044-brcmfmac-remove-bogus-check-in-scheduled-scan-result.patch create mode 100644 package/kernel/mac80211/patches/319-v4.12-0045-brcmfmac-only-add-channels-and-ssids-once-in-scan-re.patch create mode 100644 package/kernel/mac80211/patches/319-v4.12-0051-brcmfmac-Ensure-pointer-correctly-set-if-skb-data-lo.patch create mode 100644 package/kernel/mac80211/patches/319-v4.12-0052-brcmfmac-Make-skb-header-writable-before-use.patch create mode 100644 package/kernel/mac80211/patches/319-v4.12-0053-brcmfmac-fix-alignment-configuration-on-host-using-6.patch diff --git a/package/kernel/mac80211/patches/319-v4.12-0005-brcmfmac-restore-bus-state-when-enter_D3-fails.patch b/package/kernel/mac80211/patches/319-v4.12-0005-brcmfmac-restore-bus-state-when-enter_D3-fails.patch deleted file mode 100644 index 689fcd71fd..0000000000 --- a/package/kernel/mac80211/patches/319-v4.12-0005-brcmfmac-restore-bus-state-when-enter_D3-fails.patch +++ /dev/null @@ -1,29 +0,0 @@ -From 49fe9b59f0e9b750f173fbe44637c436ba1030d2 Mon Sep 17 00:00:00 2001 -From: Arend Van Spriel -Date: Tue, 28 Mar 2017 11:43:27 +0100 -Subject: [PATCH] brcmfmac: restore bus state when enter_D3 fails - -In brcmf_pcie_suspend() we inform the firmware on the device that -it will enter in D3 state. Before this is done we already bring down -the bus state. However, When entering D3 fails we abort the suspend -and the bus state need to be restored. - -Reviewed-by: Hante Meuleman -Reviewed-by: Pieter-Paul Giesberts -Reviewed-by: Franky Lin -Signed-off-by: Arend van Spriel -Signed-off-by: Kalle Valo ---- - drivers/net/wireless/broadcom/brcm80211/brcmfmac/pcie.c | 1 + - 1 file changed, 1 insertion(+) - ---- a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/pcie.c -+++ b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/pcie.c -@@ -1877,6 +1877,7 @@ static int brcmf_pcie_pm_enter_D3(struct - BRCMF_PCIE_MBDATA_TIMEOUT); - if (!devinfo->mbdata_completed) { - brcmf_err("Timeout on response for entering D3 substate\n"); -+ brcmf_bus_change_state(bus, BRCMF_BUS_UP); - return -EIO; - } - diff --git a/package/kernel/mac80211/patches/319-v4.12-0006-brcmfmac-properly-align-buffers-on-certain-platforms.patch b/package/kernel/mac80211/patches/319-v4.12-0006-brcmfmac-properly-align-buffers-on-certain-platforms.patch deleted file mode 100644 index c5dc922ec9..0000000000 --- a/package/kernel/mac80211/patches/319-v4.12-0006-brcmfmac-properly-align-buffers-on-certain-platforms.patch +++ /dev/null @@ -1,36 +0,0 @@ -From 6e84ab604bdedaa16239bd1c6e5fcb5660309f02 Mon Sep 17 00:00:00 2001 -From: Heiner Kallweit -Date: Wed, 5 Apr 2017 20:33:26 +0200 -Subject: [PATCH] brcmfmac: properly align buffers on certain platforms with 64 - bit DMA - -Systems with 64 bit DMA at least partially require buffers to be used -for DMA to be 8-byte-aligned. One example is Amlogic Meson GX. -Switching the MMC/SDIO driver for this platform to SG DMA mode -resulted in problems due to unaligned buffers. - -Fortunately the brcmfmac driver has a global define for the alignment. -Changing it to 8 fixed the issues with Meson GX. - -Suggested-by: Helmut Klein -Tested-by: Helmut Klein -Signed-off-by: Heiner Kallweit -Signed-off-by: Kalle Valo ---- - drivers/net/wireless/broadcom/brcm80211/brcmfmac/sdio.c | 4 ++++ - 1 file changed, 4 insertions(+) - ---- a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/sdio.c -+++ b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/sdio.c -@@ -539,7 +539,11 @@ static int qcount[NUMPRIO]; - /* Limit on rounding up frames */ - static const uint max_roundup = 512; - -+#ifdef CONFIG_ARCH_DMA_ADDR_T_64BIT -+#define ALIGNMENT 8 -+#else - #define ALIGNMENT 4 -+#endif - - enum brcmf_sdio_frmtype { - BRCMF_SDIO_FT_NORMAL, diff --git a/package/kernel/mac80211/patches/319-v4.12-0007-brcmfmac-add-length-checks-in-scheduled-scan-result-.patch b/package/kernel/mac80211/patches/319-v4.12-0007-brcmfmac-add-length-checks-in-scheduled-scan-result-.patch deleted file mode 100644 index 2187de01c9..0000000000 --- a/package/kernel/mac80211/patches/319-v4.12-0007-brcmfmac-add-length-checks-in-scheduled-scan-result-.patch +++ /dev/null @@ -1,61 +0,0 @@ -From 4835f37e3bafc138f8bfa3cbed2920dd56fed283 Mon Sep 17 00:00:00 2001 -From: Arend Van Spriel -Date: Thu, 6 Apr 2017 13:14:40 +0100 -Subject: [PATCH] brcmfmac: add length checks in scheduled scan result handler - -Assure the event data buffer is long enough to hold the array -of netinfo items and that SSID length does not exceed the maximum -of 32 characters as per 802.11 spec. - -Reviewed-by: Hante Meuleman -Reviewed-by: Pieter-Paul Giesberts -Reviewed-by: Franky Lin -Signed-off-by: Arend van Spriel -Signed-off-by: Kalle Valo ---- - drivers/net/wireless/broadcom/brcm80211/brcmfmac/cfg80211.c | 13 +++++++++++-- - 1 file changed, 11 insertions(+), 2 deletions(-) - ---- a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/cfg80211.c -+++ b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/cfg80211.c -@@ -3300,6 +3300,7 @@ brcmf_notify_sched_scan_results(struct b - struct brcmf_pno_scanresults_le *pfn_result; - u32 result_count; - u32 status; -+ u32 datalen; - - brcmf_dbg(SCAN, "Enter\n"); - -@@ -3326,6 +3327,14 @@ brcmf_notify_sched_scan_results(struct b - brcmf_err("FALSE PNO Event. (pfn_count == 0)\n"); - goto out_err; - } -+ -+ netinfo_start = brcmf_get_netinfo_array(pfn_result); -+ datalen = e->datalen - ((void *)netinfo_start - (void *)pfn_result); -+ if (datalen < result_count * sizeof(*netinfo)) { -+ brcmf_err("insufficient event data\n"); -+ goto out_err; -+ } -+ - request = brcmf_alloc_internal_escan_request(wiphy, - result_count); - if (!request) { -@@ -3333,8 +3342,6 @@ brcmf_notify_sched_scan_results(struct b - goto out_err; - } - -- netinfo_start = brcmf_get_netinfo_array(pfn_result); -- - for (i = 0; i < result_count; i++) { - netinfo = &netinfo_start[i]; - if (!netinfo) { -@@ -3344,6 +3351,8 @@ brcmf_notify_sched_scan_results(struct b - goto out_err; - } - -+ if (netinfo->SSID_len > IEEE80211_MAX_SSID_LEN) -+ netinfo->SSID_len = IEEE80211_MAX_SSID_LEN; - brcmf_dbg(SCAN, "SSID:%.32s Channel:%d\n", - netinfo->SSID, netinfo->channel); - err = brcmf_internal_escan_add_info(request, diff --git a/package/kernel/mac80211/patches/319-v4.12-0008-brcmfmac-remove-bogus-check-in-scheduled-scan-result.patch b/package/kernel/mac80211/patches/319-v4.12-0008-brcmfmac-remove-bogus-check-in-scheduled-scan-result.patch deleted file mode 100644 index c5de1c3896..0000000000 --- a/package/kernel/mac80211/patches/319-v4.12-0008-brcmfmac-remove-bogus-check-in-scheduled-scan-result.patch +++ /dev/null @@ -1,32 +0,0 @@ -From 6594e1e8343645fe849a2ad42fcab94e2cf5b2c0 Mon Sep 17 00:00:00 2001 -From: Arend Van Spriel -Date: Thu, 6 Apr 2017 13:14:41 +0100 -Subject: [PATCH] brcmfmac: remove bogus check in scheduled scan result handler - -Checking whether the address of an array element is null is bogus -so removing it. - -Reviewed-by: Hante Meuleman -Reviewed-by: Pieter-Paul Giesberts -Reviewed-by: Franky Lin -Signed-off-by: Arend van Spriel -Signed-off-by: Kalle Valo ---- - drivers/net/wireless/broadcom/brcm80211/brcmfmac/cfg80211.c | 6 ------ - 1 file changed, 6 deletions(-) - ---- a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/cfg80211.c -+++ b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/cfg80211.c -@@ -3344,12 +3344,6 @@ brcmf_notify_sched_scan_results(struct b - - for (i = 0; i < result_count; i++) { - netinfo = &netinfo_start[i]; -- if (!netinfo) { -- brcmf_err("Invalid netinfo ptr. index: %d\n", -- i); -- err = -EINVAL; -- goto out_err; -- } - - if (netinfo->SSID_len > IEEE80211_MAX_SSID_LEN) - netinfo->SSID_len = IEEE80211_MAX_SSID_LEN; diff --git a/package/kernel/mac80211/patches/319-v4.12-0009-brcmfmac-only-add-channels-and-ssids-once-in-scan-re.patch b/package/kernel/mac80211/patches/319-v4.12-0009-brcmfmac-only-add-channels-and-ssids-once-in-scan-re.patch deleted file mode 100644 index 7bff17f904..0000000000 --- a/package/kernel/mac80211/patches/319-v4.12-0009-brcmfmac-only-add-channels-and-ssids-once-in-scan-re.patch +++ /dev/null @@ -1,56 +0,0 @@ -From 6ea51fc708aedcf411f355de65a704ecda501bc4 Mon Sep 17 00:00:00 2001 -From: Arend Van Spriel -Date: Thu, 6 Apr 2017 13:14:42 +0100 -Subject: [PATCH] brcmfmac: only add channels and ssids once in scan request - -When receiving pno results there may be duplicate channels and/or -ssids. Assure each is added only once when preparing the internal -escan request. - -Reviewed-by: Hante Meuleman -Reviewed-by: Pieter-Paul Giesberts -Reviewed-by: Franky Lin -Signed-off-by: Arend van Spriel -Signed-off-by: Kalle Valo ---- - .../wireless/broadcom/brcm80211/brcmfmac/cfg80211.c | 20 ++++++++++++++++---- - 1 file changed, 16 insertions(+), 4 deletions(-) - ---- a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/cfg80211.c -+++ b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/cfg80211.c -@@ -3216,7 +3216,7 @@ static int brcmf_internal_escan_add_info - { - struct ieee80211_channel *chan; - enum nl80211_band band; -- int freq; -+ int freq, i; - - if (channel <= CH_MAX_2G_CHANNEL) - band = NL80211_BAND_2GHZ; -@@ -3231,10 +3231,22 @@ static int brcmf_internal_escan_add_info - if (!chan) - return -EINVAL; - -- req->channels[req->n_channels++] = chan; -- memcpy(req->ssids[req->n_ssids].ssid, ssid, ssid_len); -- req->ssids[req->n_ssids++].ssid_len = ssid_len; -- -+ for (i = 0; i < req->n_channels; i++) { -+ if (req->channels[i] == chan) -+ break; -+ } -+ if (i == req->n_channels) -+ req->channels[req->n_channels++] = chan; -+ -+ for (i = 0; i < req->n_ssids; i++) { -+ if (req->ssids[i].ssid_len == ssid_len && -+ !memcmp(req->ssids[i].ssid, ssid, ssid_len)) -+ break; -+ } -+ if (i == req->n_ssids) { -+ memcpy(req->ssids[req->n_ssids].ssid, ssid, ssid_len); -+ req->ssids[req->n_ssids++].ssid_len = ssid_len; -+ } - return 0; - } - diff --git a/package/kernel/mac80211/patches/319-v4.12-0010-brcmfmac-Ensure-pointer-correctly-set-if-skb-data-lo.patch b/package/kernel/mac80211/patches/319-v4.12-0010-brcmfmac-Ensure-pointer-correctly-set-if-skb-data-lo.patch deleted file mode 100644 index 2fc7c409a8..0000000000 --- a/package/kernel/mac80211/patches/319-v4.12-0010-brcmfmac-Ensure-pointer-correctly-set-if-skb-data-lo.patch +++ /dev/null @@ -1,39 +0,0 @@ -From 455a1eb4654c24560eb9dfc634f29cba3d87601e Mon Sep 17 00:00:00 2001 -From: James Hughes -Date: Mon, 24 Apr 2017 12:40:50 +0100 -Subject: [PATCH] brcmfmac: Ensure pointer correctly set if skb data location - changes - -The incoming skb header may be resized if header space is -insufficient, which might change the data adddress in the skb. -Ensure that a cached pointer to that data is correctly set by -moving assignment to after any possible changes. - -Signed-off-by: James Hughes - -Acked-by: Arend van Spriel -Signed-off-by: Kalle Valo ---- - drivers/net/wireless/broadcom/brcm80211/brcmfmac/core.c | 4 +++- - 1 file changed, 3 insertions(+), 1 deletion(-) - ---- a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/core.c -+++ b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/core.c -@@ -198,7 +198,7 @@ static netdev_tx_t brcmf_netdev_start_xm - int ret; - struct brcmf_if *ifp = netdev_priv(ndev); - struct brcmf_pub *drvr = ifp->drvr; -- struct ethhdr *eh = (struct ethhdr *)(skb->data); -+ struct ethhdr *eh; - - brcmf_dbg(DATA, "Enter, bsscfgidx=%d\n", ifp->bsscfgidx); - -@@ -236,6 +236,8 @@ static netdev_tx_t brcmf_netdev_start_xm - goto done; - } - -+ eh = (struct ethhdr *)(skb->data); -+ - if (eh->h_proto == htons(ETH_P_PAE)) - atomic_inc(&ifp->pend_8021x_cnt); - diff --git a/package/kernel/mac80211/patches/319-v4.12-0011-brcmfmac-Make-skb-header-writable-before-use.patch b/package/kernel/mac80211/patches/319-v4.12-0011-brcmfmac-Make-skb-header-writable-before-use.patch deleted file mode 100644 index 1149015122..0000000000 --- a/package/kernel/mac80211/patches/319-v4.12-0011-brcmfmac-Make-skb-header-writable-before-use.patch +++ /dev/null @@ -1,48 +0,0 @@ -From 9cc4b7cb86cbcc6330a3faa8cd65268cd2d3c227 Mon Sep 17 00:00:00 2001 -From: James Hughes -Date: Tue, 25 Apr 2017 10:15:06 +0100 -Subject: [PATCH] brcmfmac: Make skb header writable before use - -The driver was making changes to the skb_header without -ensuring it was writable (i.e. uncloned). -This patch also removes some boiler plate header size -checking/adjustment code as that is also handled by the -skb_cow_header function used to make header writable. - -Signed-off-by: James Hughes -Acked-by: Arend van Spriel -Signed-off-by: Kalle Valo ---- - .../net/wireless/broadcom/brcm80211/brcmfmac/core.c | 19 +++++-------------- - 1 file changed, 5 insertions(+), 14 deletions(-) - ---- a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/core.c -+++ b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/core.c -@@ -211,22 +211,13 @@ static netdev_tx_t brcmf_netdev_start_xm - goto done; - } - -- /* Make sure there's enough room for any header */ -- if (skb_headroom(skb) < drvr->hdrlen) { -- struct sk_buff *skb2; -- -- brcmf_dbg(INFO, "%s: insufficient headroom\n", -+ /* Make sure there's enough writable headroom*/ -+ ret = skb_cow_head(skb, drvr->hdrlen); -+ if (ret < 0) { -+ brcmf_err("%s: skb_cow_head failed\n", - brcmf_ifname(ifp)); -- drvr->bus_if->tx_realloc++; -- skb2 = skb_realloc_headroom(skb, drvr->hdrlen); - dev_kfree_skb(skb); -- skb = skb2; -- if (skb == NULL) { -- brcmf_err("%s: skb_realloc_headroom failed\n", -- brcmf_ifname(ifp)); -- ret = -ENOMEM; -- goto done; -- } -+ goto done; - } - - /* validate length for ether packet */ diff --git a/package/kernel/mac80211/patches/319-v4.12-0012-brcmfmac-fix-alignment-configuration-on-host-using-6.patch b/package/kernel/mac80211/patches/319-v4.12-0012-brcmfmac-fix-alignment-configuration-on-host-using-6.patch deleted file mode 100644 index 6765c23083..0000000000 --- a/package/kernel/mac80211/patches/319-v4.12-0012-brcmfmac-fix-alignment-configuration-on-host-using-6.patch +++ /dev/null @@ -1,40 +0,0 @@ -From 1dbf647f31751a4e94fa0435c34f0f5ad5ce0adc Mon Sep 17 00:00:00 2001 -From: Arend Van Spriel -Date: Fri, 26 May 2017 13:02:55 +0200 -Subject: [PATCH] brcmfmac: fix alignment configuration on host using 64-bit - DMA - -For SDIO the alignment requirement for transfers from device to host -is configured in firmware. This configuration is limited to minimum -of 4-byte alignment. However, this is not correct for platforms using -64-bit DMA when the minimum alignment should be 8 bytes. This issue -appeared when the ALIGNMENT definition was set according the DMA -configuration. The configuration in firmware was not using that macro -defintion, but a hardcoded value of 4. Hence the driver reported -alignment failures for data coming from the device and causing -transfers to fail. - -Fixes: 6e84ab604bde ("brcmfmac: properly align buffers on certain platforms -Reported-by: Hans de Goede -Tested-by: Hans de Goede -Reviewed-by: Hante Meuleman -Reviewed-by: Pieter-Paul Giesberts -Reviewed-by: Franky Lin -Signed-off-by: Arend van Spriel -Signed-off-by: Hans de Goede -Signed-off-by: Kalle Valo ---- - drivers/net/wireless/broadcom/brcm80211/brcmfmac/sdio.c | 2 +- - 1 file changed, 1 insertion(+), 1 deletion(-) - ---- a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/sdio.c -+++ b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/sdio.c -@@ -3420,7 +3420,7 @@ static int brcmf_sdio_bus_preinit(struct - /* otherwise, set txglomalign */ - value = sdiodev->settings->bus.sdio.sd_sgentry_align; - /* SDIO ADMA requires at least 32 bit alignment */ -- value = max_t(u32, value, 4); -+ value = max_t(u32, value, ALIGNMENT); - err = brcmf_iovar_data_set(dev, "bus:txglomalign", &value, - sizeof(u32)); - } diff --git a/package/kernel/mac80211/patches/319-v4.12-0023-brcmfmac-restore-bus-state-when-enter_D3-fails.patch b/package/kernel/mac80211/patches/319-v4.12-0023-brcmfmac-restore-bus-state-when-enter_D3-fails.patch new file mode 100644 index 0000000000..689fcd71fd --- /dev/null +++ b/package/kernel/mac80211/patches/319-v4.12-0023-brcmfmac-restore-bus-state-when-enter_D3-fails.patch @@ -0,0 +1,29 @@ +From 49fe9b59f0e9b750f173fbe44637c436ba1030d2 Mon Sep 17 00:00:00 2001 +From: Arend Van Spriel +Date: Tue, 28 Mar 2017 11:43:27 +0100 +Subject: [PATCH] brcmfmac: restore bus state when enter_D3 fails + +In brcmf_pcie_suspend() we inform the firmware on the device that +it will enter in D3 state. Before this is done we already bring down +the bus state. However, When entering D3 fails we abort the suspend +and the bus state need to be restored. + +Reviewed-by: Hante Meuleman +Reviewed-by: Pieter-Paul Giesberts +Reviewed-by: Franky Lin +Signed-off-by: Arend van Spriel +Signed-off-by: Kalle Valo +--- + drivers/net/wireless/broadcom/brcm80211/brcmfmac/pcie.c | 1 + + 1 file changed, 1 insertion(+) + +--- a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/pcie.c ++++ b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/pcie.c +@@ -1877,6 +1877,7 @@ static int brcmf_pcie_pm_enter_D3(struct + BRCMF_PCIE_MBDATA_TIMEOUT); + if (!devinfo->mbdata_completed) { + brcmf_err("Timeout on response for entering D3 substate\n"); ++ brcmf_bus_change_state(bus, BRCMF_BUS_UP); + return -EIO; + } + diff --git a/package/kernel/mac80211/patches/319-v4.12-0030-brcmfmac-properly-align-buffers-on-certain-platforms.patch b/package/kernel/mac80211/patches/319-v4.12-0030-brcmfmac-properly-align-buffers-on-certain-platforms.patch new file mode 100644 index 0000000000..c5dc922ec9 --- /dev/null +++ b/package/kernel/mac80211/patches/319-v4.12-0030-brcmfmac-properly-align-buffers-on-certain-platforms.patch @@ -0,0 +1,36 @@ +From 6e84ab604bdedaa16239bd1c6e5fcb5660309f02 Mon Sep 17 00:00:00 2001 +From: Heiner Kallweit +Date: Wed, 5 Apr 2017 20:33:26 +0200 +Subject: [PATCH] brcmfmac: properly align buffers on certain platforms with 64 + bit DMA + +Systems with 64 bit DMA at least partially require buffers to be used +for DMA to be 8-byte-aligned. One example is Amlogic Meson GX. +Switching the MMC/SDIO driver for this platform to SG DMA mode +resulted in problems due to unaligned buffers. + +Fortunately the brcmfmac driver has a global define for the alignment. +Changing it to 8 fixed the issues with Meson GX. + +Suggested-by: Helmut Klein +Tested-by: Helmut Klein +Signed-off-by: Heiner Kallweit +Signed-off-by: Kalle Valo +--- + drivers/net/wireless/broadcom/brcm80211/brcmfmac/sdio.c | 4 ++++ + 1 file changed, 4 insertions(+) + +--- a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/sdio.c ++++ b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/sdio.c +@@ -539,7 +539,11 @@ static int qcount[NUMPRIO]; + /* Limit on rounding up frames */ + static const uint max_roundup = 512; + ++#ifdef CONFIG_ARCH_DMA_ADDR_T_64BIT ++#define ALIGNMENT 8 ++#else + #define ALIGNMENT 4 ++#endif + + enum brcmf_sdio_frmtype { + BRCMF_SDIO_FT_NORMAL, diff --git a/package/kernel/mac80211/patches/319-v4.12-0043-brcmfmac-add-length-checks-in-scheduled-scan-result-.patch b/package/kernel/mac80211/patches/319-v4.12-0043-brcmfmac-add-length-checks-in-scheduled-scan-result-.patch new file mode 100644 index 0000000000..2187de01c9 --- /dev/null +++ b/package/kernel/mac80211/patches/319-v4.12-0043-brcmfmac-add-length-checks-in-scheduled-scan-result-.patch @@ -0,0 +1,61 @@ +From 4835f37e3bafc138f8bfa3cbed2920dd56fed283 Mon Sep 17 00:00:00 2001 +From: Arend Van Spriel +Date: Thu, 6 Apr 2017 13:14:40 +0100 +Subject: [PATCH] brcmfmac: add length checks in scheduled scan result handler + +Assure the event data buffer is long enough to hold the array +of netinfo items and that SSID length does not exceed the maximum +of 32 characters as per 802.11 spec. + +Reviewed-by: Hante Meuleman +Reviewed-by: Pieter-Paul Giesberts +Reviewed-by: Franky Lin +Signed-off-by: Arend van Spriel +Signed-off-by: Kalle Valo +--- + drivers/net/wireless/broadcom/brcm80211/brcmfmac/cfg80211.c | 13 +++++++++++-- + 1 file changed, 11 insertions(+), 2 deletions(-) + +--- a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/cfg80211.c ++++ b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/cfg80211.c +@@ -3300,6 +3300,7 @@ brcmf_notify_sched_scan_results(struct b + struct brcmf_pno_scanresults_le *pfn_result; + u32 result_count; + u32 status; ++ u32 datalen; + + brcmf_dbg(SCAN, "Enter\n"); + +@@ -3326,6 +3327,14 @@ brcmf_notify_sched_scan_results(struct b + brcmf_err("FALSE PNO Event. (pfn_count == 0)\n"); + goto out_err; + } ++ ++ netinfo_start = brcmf_get_netinfo_array(pfn_result); ++ datalen = e->datalen - ((void *)netinfo_start - (void *)pfn_result); ++ if (datalen < result_count * sizeof(*netinfo)) { ++ brcmf_err("insufficient event data\n"); ++ goto out_err; ++ } ++ + request = brcmf_alloc_internal_escan_request(wiphy, + result_count); + if (!request) { +@@ -3333,8 +3342,6 @@ brcmf_notify_sched_scan_results(struct b + goto out_err; + } + +- netinfo_start = brcmf_get_netinfo_array(pfn_result); +- + for (i = 0; i < result_count; i++) { + netinfo = &netinfo_start[i]; + if (!netinfo) { +@@ -3344,6 +3351,8 @@ brcmf_notify_sched_scan_results(struct b + goto out_err; + } + ++ if (netinfo->SSID_len > IEEE80211_MAX_SSID_LEN) ++ netinfo->SSID_len = IEEE80211_MAX_SSID_LEN; + brcmf_dbg(SCAN, "SSID:%.32s Channel:%d\n", + netinfo->SSID, netinfo->channel); + err = brcmf_internal_escan_add_info(request, diff --git a/package/kernel/mac80211/patches/319-v4.12-0044-brcmfmac-remove-bogus-check-in-scheduled-scan-result.patch b/package/kernel/mac80211/patches/319-v4.12-0044-brcmfmac-remove-bogus-check-in-scheduled-scan-result.patch new file mode 100644 index 0000000000..c5de1c3896 --- /dev/null +++ b/package/kernel/mac80211/patches/319-v4.12-0044-brcmfmac-remove-bogus-check-in-scheduled-scan-result.patch @@ -0,0 +1,32 @@ +From 6594e1e8343645fe849a2ad42fcab94e2cf5b2c0 Mon Sep 17 00:00:00 2001 +From: Arend Van Spriel +Date: Thu, 6 Apr 2017 13:14:41 +0100 +Subject: [PATCH] brcmfmac: remove bogus check in scheduled scan result handler + +Checking whether the address of an array element is null is bogus +so removing it. + +Reviewed-by: Hante Meuleman +Reviewed-by: Pieter-Paul Giesberts +Reviewed-by: Franky Lin +Signed-off-by: Arend van Spriel +Signed-off-by: Kalle Valo +--- + drivers/net/wireless/broadcom/brcm80211/brcmfmac/cfg80211.c | 6 ------ + 1 file changed, 6 deletions(-) + +--- a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/cfg80211.c ++++ b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/cfg80211.c +@@ -3344,12 +3344,6 @@ brcmf_notify_sched_scan_results(struct b + + for (i = 0; i < result_count; i++) { + netinfo = &netinfo_start[i]; +- if (!netinfo) { +- brcmf_err("Invalid netinfo ptr. index: %d\n", +- i); +- err = -EINVAL; +- goto out_err; +- } + + if (netinfo->SSID_len > IEEE80211_MAX_SSID_LEN) + netinfo->SSID_len = IEEE80211_MAX_SSID_LEN; diff --git a/package/kernel/mac80211/patches/319-v4.12-0045-brcmfmac-only-add-channels-and-ssids-once-in-scan-re.patch b/package/kernel/mac80211/patches/319-v4.12-0045-brcmfmac-only-add-channels-and-ssids-once-in-scan-re.patch new file mode 100644 index 0000000000..7bff17f904 --- /dev/null +++ b/package/kernel/mac80211/patches/319-v4.12-0045-brcmfmac-only-add-channels-and-ssids-once-in-scan-re.patch @@ -0,0 +1,56 @@ +From 6ea51fc708aedcf411f355de65a704ecda501bc4 Mon Sep 17 00:00:00 2001 +From: Arend Van Spriel +Date: Thu, 6 Apr 2017 13:14:42 +0100 +Subject: [PATCH] brcmfmac: only add channels and ssids once in scan request + +When receiving pno results there may be duplicate channels and/or +ssids. Assure each is added only once when preparing the internal +escan request. + +Reviewed-by: Hante Meuleman +Reviewed-by: Pieter-Paul Giesberts +Reviewed-by: Franky Lin +Signed-off-by: Arend van Spriel +Signed-off-by: Kalle Valo +--- + .../wireless/broadcom/brcm80211/brcmfmac/cfg80211.c | 20 ++++++++++++++++---- + 1 file changed, 16 insertions(+), 4 deletions(-) + +--- a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/cfg80211.c ++++ b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/cfg80211.c +@@ -3216,7 +3216,7 @@ static int brcmf_internal_escan_add_info + { + struct ieee80211_channel *chan; + enum nl80211_band band; +- int freq; ++ int freq, i; + + if (channel <= CH_MAX_2G_CHANNEL) + band = NL80211_BAND_2GHZ; +@@ -3231,10 +3231,22 @@ static int brcmf_internal_escan_add_info + if (!chan) + return -EINVAL; + +- req->channels[req->n_channels++] = chan; +- memcpy(req->ssids[req->n_ssids].ssid, ssid, ssid_len); +- req->ssids[req->n_ssids++].ssid_len = ssid_len; +- ++ for (i = 0; i < req->n_channels; i++) { ++ if (req->channels[i] == chan) ++ break; ++ } ++ if (i == req->n_channels) ++ req->channels[req->n_channels++] = chan; ++ ++ for (i = 0; i < req->n_ssids; i++) { ++ if (req->ssids[i].ssid_len == ssid_len && ++ !memcmp(req->ssids[i].ssid, ssid, ssid_len)) ++ break; ++ } ++ if (i == req->n_ssids) { ++ memcpy(req->ssids[req->n_ssids].ssid, ssid, ssid_len); ++ req->ssids[req->n_ssids++].ssid_len = ssid_len; ++ } + return 0; + } + diff --git a/package/kernel/mac80211/patches/319-v4.12-0051-brcmfmac-Ensure-pointer-correctly-set-if-skb-data-lo.patch b/package/kernel/mac80211/patches/319-v4.12-0051-brcmfmac-Ensure-pointer-correctly-set-if-skb-data-lo.patch new file mode 100644 index 0000000000..2fc7c409a8 --- /dev/null +++ b/package/kernel/mac80211/patches/319-v4.12-0051-brcmfmac-Ensure-pointer-correctly-set-if-skb-data-lo.patch @@ -0,0 +1,39 @@ +From 455a1eb4654c24560eb9dfc634f29cba3d87601e Mon Sep 17 00:00:00 2001 +From: James Hughes +Date: Mon, 24 Apr 2017 12:40:50 +0100 +Subject: [PATCH] brcmfmac: Ensure pointer correctly set if skb data location + changes + +The incoming skb header may be resized if header space is +insufficient, which might change the data adddress in the skb. +Ensure that a cached pointer to that data is correctly set by +moving assignment to after any possible changes. + +Signed-off-by: James Hughes + +Acked-by: Arend van Spriel +Signed-off-by: Kalle Valo +--- + drivers/net/wireless/broadcom/brcm80211/brcmfmac/core.c | 4 +++- + 1 file changed, 3 insertions(+), 1 deletion(-) + +--- a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/core.c ++++ b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/core.c +@@ -198,7 +198,7 @@ static netdev_tx_t brcmf_netdev_start_xm + int ret; + struct brcmf_if *ifp = netdev_priv(ndev); + struct brcmf_pub *drvr = ifp->drvr; +- struct ethhdr *eh = (struct ethhdr *)(skb->data); ++ struct ethhdr *eh; + + brcmf_dbg(DATA, "Enter, bsscfgidx=%d\n", ifp->bsscfgidx); + +@@ -236,6 +236,8 @@ static netdev_tx_t brcmf_netdev_start_xm + goto done; + } + ++ eh = (struct ethhdr *)(skb->data); ++ + if (eh->h_proto == htons(ETH_P_PAE)) + atomic_inc(&ifp->pend_8021x_cnt); + diff --git a/package/kernel/mac80211/patches/319-v4.12-0052-brcmfmac-Make-skb-header-writable-before-use.patch b/package/kernel/mac80211/patches/319-v4.12-0052-brcmfmac-Make-skb-header-writable-before-use.patch new file mode 100644 index 0000000000..1149015122 --- /dev/null +++ b/package/kernel/mac80211/patches/319-v4.12-0052-brcmfmac-Make-skb-header-writable-before-use.patch @@ -0,0 +1,48 @@ +From 9cc4b7cb86cbcc6330a3faa8cd65268cd2d3c227 Mon Sep 17 00:00:00 2001 +From: James Hughes +Date: Tue, 25 Apr 2017 10:15:06 +0100 +Subject: [PATCH] brcmfmac: Make skb header writable before use + +The driver was making changes to the skb_header without +ensuring it was writable (i.e. uncloned). +This patch also removes some boiler plate header size +checking/adjustment code as that is also handled by the +skb_cow_header function used to make header writable. + +Signed-off-by: James Hughes +Acked-by: Arend van Spriel +Signed-off-by: Kalle Valo +--- + .../net/wireless/broadcom/brcm80211/brcmfmac/core.c | 19 +++++-------------- + 1 file changed, 5 insertions(+), 14 deletions(-) + +--- a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/core.c ++++ b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/core.c +@@ -211,22 +211,13 @@ static netdev_tx_t brcmf_netdev_start_xm + goto done; + } + +- /* Make sure there's enough room for any header */ +- if (skb_headroom(skb) < drvr->hdrlen) { +- struct sk_buff *skb2; +- +- brcmf_dbg(INFO, "%s: insufficient headroom\n", ++ /* Make sure there's enough writable headroom*/ ++ ret = skb_cow_head(skb, drvr->hdrlen); ++ if (ret < 0) { ++ brcmf_err("%s: skb_cow_head failed\n", + brcmf_ifname(ifp)); +- drvr->bus_if->tx_realloc++; +- skb2 = skb_realloc_headroom(skb, drvr->hdrlen); + dev_kfree_skb(skb); +- skb = skb2; +- if (skb == NULL) { +- brcmf_err("%s: skb_realloc_headroom failed\n", +- brcmf_ifname(ifp)); +- ret = -ENOMEM; +- goto done; +- } ++ goto done; + } + + /* validate length for ether packet */ diff --git a/package/kernel/mac80211/patches/319-v4.12-0053-brcmfmac-fix-alignment-configuration-on-host-using-6.patch b/package/kernel/mac80211/patches/319-v4.12-0053-brcmfmac-fix-alignment-configuration-on-host-using-6.patch new file mode 100644 index 0000000000..6765c23083 --- /dev/null +++ b/package/kernel/mac80211/patches/319-v4.12-0053-brcmfmac-fix-alignment-configuration-on-host-using-6.patch @@ -0,0 +1,40 @@ +From 1dbf647f31751a4e94fa0435c34f0f5ad5ce0adc Mon Sep 17 00:00:00 2001 +From: Arend Van Spriel +Date: Fri, 26 May 2017 13:02:55 +0200 +Subject: [PATCH] brcmfmac: fix alignment configuration on host using 64-bit + DMA + +For SDIO the alignment requirement for transfers from device to host +is configured in firmware. This configuration is limited to minimum +of 4-byte alignment. However, this is not correct for platforms using +64-bit DMA when the minimum alignment should be 8 bytes. This issue +appeared when the ALIGNMENT definition was set according the DMA +configuration. The configuration in firmware was not using that macro +defintion, but a hardcoded value of 4. Hence the driver reported +alignment failures for data coming from the device and causing +transfers to fail. + +Fixes: 6e84ab604bde ("brcmfmac: properly align buffers on certain platforms +Reported-by: Hans de Goede +Tested-by: Hans de Goede +Reviewed-by: Hante Meuleman +Reviewed-by: Pieter-Paul Giesberts +Reviewed-by: Franky Lin +Signed-off-by: Arend van Spriel +Signed-off-by: Hans de Goede +Signed-off-by: Kalle Valo +--- + drivers/net/wireless/broadcom/brcm80211/brcmfmac/sdio.c | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +--- a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/sdio.c ++++ b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/sdio.c +@@ -3420,7 +3420,7 @@ static int brcmf_sdio_bus_preinit(struct + /* otherwise, set txglomalign */ + value = sdiodev->settings->bus.sdio.sd_sgentry_align; + /* SDIO ADMA requires at least 32 bit alignment */ +- value = max_t(u32, value, 4); ++ value = max_t(u32, value, ALIGNMENT); + err = brcmf_iovar_data_set(dev, "bus:txglomalign", &value, + sizeof(u32)); + } -- cgit v1.2.3