diff options
author | Rafał Miłecki <rafal@milecki.pl> | 2020-02-06 11:36:15 +0100 |
---|---|---|
committer | Rafał Miłecki <rafal@milecki.pl> | 2020-02-06 11:36:15 +0100 |
commit | aca274091ad3b50b770c0dd44f3ceefe8095d528 (patch) | |
tree | c9f2b67316f49194ef59737dab771d4af4b366d2 /package/kernel/mac80211/patches/brcm/116-v5.6-brcmfmac-Keep-OOB-wake-interrupt-disabled-when-it-sh.patch | |
parent | 71de48bd375bbde9b70ccf94b03c3f9c2aae5f21 (diff) | |
download | upstream-aca274091ad3b50b770c0dd44f3ceefe8095d528.tar.gz upstream-aca274091ad3b50b770c0dd44f3ceefe8095d528.tar.bz2 upstream-aca274091ad3b50b770c0dd44f3ceefe8095d528.zip |
mac80211: brcm: backport remaining 5.6 kernel patches
Signed-off-by: Rafał Miłecki <rafal@milecki.pl>
Diffstat (limited to 'package/kernel/mac80211/patches/brcm/116-v5.6-brcmfmac-Keep-OOB-wake-interrupt-disabled-when-it-sh.patch')
-rw-r--r-- | package/kernel/mac80211/patches/brcm/116-v5.6-brcmfmac-Keep-OOB-wake-interrupt-disabled-when-it-sh.patch | 66 |
1 files changed, 66 insertions, 0 deletions
diff --git a/package/kernel/mac80211/patches/brcm/116-v5.6-brcmfmac-Keep-OOB-wake-interrupt-disabled-when-it-sh.patch b/package/kernel/mac80211/patches/brcm/116-v5.6-brcmfmac-Keep-OOB-wake-interrupt-disabled-when-it-sh.patch new file mode 100644 index 0000000000..f579e16a7f --- /dev/null +++ b/package/kernel/mac80211/patches/brcm/116-v5.6-brcmfmac-Keep-OOB-wake-interrupt-disabled-when-it-sh.patch @@ -0,0 +1,66 @@ +From a32de68edab7b73ded850bcf76cdf6858e92a7e5 Mon Sep 17 00:00:00 2001 +From: Dmitry Osipenko <digetx@gmail.com> +Date: Sun, 15 Dec 2019 21:42:24 +0300 +Subject: [PATCH] brcmfmac: Keep OOB wake-interrupt disabled when it shouldn't + be enabled + +NVIDIA Tegra SoCs do not like when OOB wake is enabled and WiFi interface +is in DOWN state during suspend. This results in a CPU hang on programming +OOB wake-up state of the GPIO controller during of system's suspend. + +The solution is trivial: don't enable wake for the OOB interrupt when it +should be disabled. + +This fixes hang on Tegra20 (Acer A500) and Tegra30 (Nexus 7) devices which +are using BCM4329 and BCM4330 WiFi chips respectively. + +Signed-off-by: Dmitry Osipenko <digetx@gmail.com> +Signed-off-by: Kalle Valo <kvalo@codeaurora.org> +--- + .../net/wireless/broadcom/brcm80211/brcmfmac/bcmsdh.c | 10 +++++----- + .../net/wireless/broadcom/brcm80211/brcmfmac/sdio.h | 1 - + 2 files changed, 5 insertions(+), 6 deletions(-) + +--- a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/bcmsdh.c ++++ b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/bcmsdh.c +@@ -120,7 +120,7 @@ int brcmf_sdiod_intr_register(struct brc + brcmf_err("enable_irq_wake failed %d\n", ret); + return ret; + } +- sdiodev->irq_wake = true; ++ disable_irq_wake(pdata->oob_irq_nr); + + sdio_claim_host(sdiodev->func1); + +@@ -179,10 +179,6 @@ void brcmf_sdiod_intr_unregister(struct + sdio_release_host(sdiodev->func1); + + sdiodev->oob_irq_requested = false; +- if (sdiodev->irq_wake) { +- disable_irq_wake(pdata->oob_irq_nr); +- sdiodev->irq_wake = false; +- } + free_irq(pdata->oob_irq_nr, &sdiodev->func1->dev); + sdiodev->irq_en = false; + sdiodev->oob_irq_requested = false; +@@ -1173,6 +1169,10 @@ static int brcmf_ops_sdio_resume(struct + if (ret) + brcmf_err("Failed to probe device on resume\n"); + } else { ++ if (sdiodev->wowl_enabled && ++ sdiodev->settings->bus.sdio.oob_irq_supported) ++ disable_irq_wake(sdiodev->settings->bus.sdio.oob_irq_nr); ++ + brcmf_sdiod_freezer_off(sdiodev); + } + +--- a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/sdio.h ++++ b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/sdio.h +@@ -178,7 +178,6 @@ struct brcmf_sdio_dev { + bool sd_irq_requested; + bool irq_en; /* irq enable flags */ + spinlock_t irq_en_lock; +- bool irq_wake; /* irq wake enable flags */ + bool sg_support; + uint max_request_size; + ushort max_segment_count; |