user/linux-rm: add brcmfmac resume fix patch
This commit is contained in:
parent
4af6fde836
commit
a9536da00e
2 changed files with 224 additions and 1 deletions
|
@ -4,7 +4,7 @@
|
||||||
pkgname=linux-rm
|
pkgname=linux-rm
|
||||||
pkgver=5.4.70
|
pkgver=5.4.70
|
||||||
_rmver=1.3.3
|
_rmver=1.3.3
|
||||||
pkgrel=5
|
pkgrel=6
|
||||||
pkgdesc="Linux kernel with reMarkable patches"
|
pkgdesc="Linux kernel with reMarkable patches"
|
||||||
url=https://github.com/reMarkable/linux
|
url=https://github.com/reMarkable/linux
|
||||||
depends="initramfs-generator linux-firmware-brcm linux-firmware-cypress"
|
depends="initramfs-generator linux-firmware-brcm linux-firmware-cypress"
|
||||||
|
@ -18,6 +18,7 @@ source="
|
||||||
https://github.com/reMarkable/linux/archive/refs/tags/RM1XX_${pkgver}_v$_rmver.tar.gz
|
https://github.com/reMarkable/linux/archive/refs/tags/RM1XX_${pkgver}_v$_rmver.tar.gz
|
||||||
https://raw.githubusercontent.com/ichaozi/RemarkableFramebuffer/0f37dc8c06d340dc1af52ff2d4d6d5789ccf14bb/kernel-mxc-epdc-fb-reference/epdc_ES103CS1.fw
|
https://raw.githubusercontent.com/ichaozi/RemarkableFramebuffer/0f37dc8c06d340dc1af52ff2d4d6d5789ccf14bb/kernel-mxc-epdc-fb-reference/epdc_ES103CS1.fw
|
||||||
enable-automatic-partial-refreshing.patch
|
enable-automatic-partial-refreshing.patch
|
||||||
|
brcmfmac-fix-suspend-resume-when-power-is-cut-off.patch
|
||||||
config-changes-rm.armv7
|
config-changes-rm.armv7
|
||||||
config-changes-rm.armhf
|
config-changes-rm.armhf
|
||||||
"
|
"
|
||||||
|
@ -247,6 +248,7 @@ sha512sums="
|
||||||
80ab274ca3d30935d9913490662f17499c1ceedb438fe171554097d25ffc1cf85ee53f0c1642e94c0b833fdfb17636cd554bf685e4a6f5dac20cf122c1a25447 RM1XX_5.4.70_v1.3.3.tar.gz
|
80ab274ca3d30935d9913490662f17499c1ceedb438fe171554097d25ffc1cf85ee53f0c1642e94c0b833fdfb17636cd554bf685e4a6f5dac20cf122c1a25447 RM1XX_5.4.70_v1.3.3.tar.gz
|
||||||
ad4bd6f332319aceee7a1c7b71b49439e8217621214b6249c7e20198360d02ea442f31edfc8e1af1b85ed71e6f97c1cb7decf7b0885c9d0293361eef47f218b2 epdc_ES103CS1.fw
|
ad4bd6f332319aceee7a1c7b71b49439e8217621214b6249c7e20198360d02ea442f31edfc8e1af1b85ed71e6f97c1cb7decf7b0885c9d0293361eef47f218b2 epdc_ES103CS1.fw
|
||||||
0f47278c5bfafb939e46224fbf16f9491e3cc560ac128dcf430a1f6cf9064fb1c5bf5db1a3076c35d30c004aec525a7d6616a647564f197bb29c57701c1db982 enable-automatic-partial-refreshing.patch
|
0f47278c5bfafb939e46224fbf16f9491e3cc560ac128dcf430a1f6cf9064fb1c5bf5db1a3076c35d30c004aec525a7d6616a647564f197bb29c57701c1db982 enable-automatic-partial-refreshing.patch
|
||||||
|
27ec1bc1d916dbd2258192c1ed864eacbd2746b49caa554fbaf1124bac478bab0b729e7fabbab8705ae175bb098800f795d415f4de4964da921c1b802560b67a brcmfmac-fix-suspend-resume-when-power-is-cut-off.patch
|
||||||
7f118de35f63960c0d9dc8d8ed56c4097006a3545d4672b618b1d430a7a9c018dbda4c2bfe900cd013c5f65766ddd62b1638ddfeb1bafde307f77d25891bd438 config-changes-rm.armv7
|
7f118de35f63960c0d9dc8d8ed56c4097006a3545d4672b618b1d430a7a9c018dbda4c2bfe900cd013c5f65766ddd62b1638ddfeb1bafde307f77d25891bd438 config-changes-rm.armv7
|
||||||
7f118de35f63960c0d9dc8d8ed56c4097006a3545d4672b618b1d430a7a9c018dbda4c2bfe900cd013c5f65766ddd62b1638ddfeb1bafde307f77d25891bd438 config-changes-rm.armhf
|
7f118de35f63960c0d9dc8d8ed56c4097006a3545d4672b618b1d430a7a9c018dbda4c2bfe900cd013c5f65766ddd62b1638ddfeb1bafde307f77d25891bd438 config-changes-rm.armhf
|
||||||
"
|
"
|
||||||
|
|
|
@ -0,0 +1,221 @@
|
||||||
|
From patchwork Wed Sep 25 13:44:57 2019
|
||||||
|
Content-Type: text/plain; charset="utf-8"
|
||||||
|
MIME-Version: 1.0
|
||||||
|
Content-Transfer-Encoding: 7bit
|
||||||
|
X-Patchwork-Submitter: Adrian Ratiu <adrian.ratiu@collabora.com>
|
||||||
|
X-Patchwork-Id: 11160709
|
||||||
|
X-Patchwork-Delegate: kvalo@adurom.com
|
||||||
|
Return-Path: <SRS0=Sl5Z=XU=vger.kernel.org=linux-wireless-owner@kernel.org>
|
||||||
|
Received: from mail.kernel.org (pdx-korg-mail-1.web.codeaurora.org
|
||||||
|
[172.30.200.123])
|
||||||
|
by pdx-korg-patchwork-2.web.codeaurora.org (Postfix) with ESMTP id E6264924
|
||||||
|
for <patchwork-linux-wireless@patchwork.kernel.org>;
|
||||||
|
Wed, 25 Sep 2019 13:45:07 +0000 (UTC)
|
||||||
|
Received: from vger.kernel.org (vger.kernel.org [209.132.180.67])
|
||||||
|
by mail.kernel.org (Postfix) with ESMTP id CEE8421D7E
|
||||||
|
for <patchwork-linux-wireless@patchwork.kernel.org>;
|
||||||
|
Wed, 25 Sep 2019 13:45:07 +0000 (UTC)
|
||||||
|
Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand
|
||||||
|
id S2406776AbfIYNo5 (ORCPT
|
||||||
|
<rfc822;patchwork-linux-wireless@patchwork.kernel.org>);
|
||||||
|
Wed, 25 Sep 2019 09:44:57 -0400
|
||||||
|
Received: from bhuna.collabora.co.uk ([46.235.227.227]:57998 "EHLO
|
||||||
|
bhuna.collabora.co.uk" rhost-flags-OK-OK-OK-OK) by vger.kernel.org
|
||||||
|
with ESMTP id S2406646AbfIYNo5 (ORCPT
|
||||||
|
<rfc822;linux-wireless@vger.kernel.org>);
|
||||||
|
Wed, 25 Sep 2019 09:44:57 -0400
|
||||||
|
Received: from [127.0.0.1] (localhost [127.0.0.1])
|
||||||
|
(Authenticated sender: aratiu)
|
||||||
|
with ESMTPSA id 34818280400
|
||||||
|
From: Adrian Ratiu <adrian.ratiu@collabora.com>
|
||||||
|
To: brcm80211-dev-list.pdl@broadcom.com
|
||||||
|
Cc: linux-wireless@vger.kernel.org, netdev@vger.kernel.org,
|
||||||
|
linux-kernel@vger.kernel.org,
|
||||||
|
Martyn Welch <martyn.welch@collabora.com>
|
||||||
|
Subject: [PATCH 1/2] brcmfmac: don't WARN when there are no requests
|
||||||
|
Date: Wed, 25 Sep 2019 16:44:57 +0300
|
||||||
|
Message-Id: <20190925134458.1413790-1-adrian.ratiu@collabora.com>
|
||||||
|
X-Mailer: git-send-email 2.23.0
|
||||||
|
MIME-Version: 1.0
|
||||||
|
Sender: linux-wireless-owner@vger.kernel.org
|
||||||
|
Precedence: bulk
|
||||||
|
List-ID: <linux-wireless.vger.kernel.org>
|
||||||
|
X-Mailing-List: linux-wireless@vger.kernel.org
|
||||||
|
|
||||||
|
When n_reqs == 0 there is nothing to do so it doesn't make sense to
|
||||||
|
search for requests and issue a warning because none is found.
|
||||||
|
|
||||||
|
Signed-off-by: Martyn Welch <martyn.welch@collabora.com>
|
||||||
|
Signed-off-by: Adrian Ratiu <adrian.ratiu@collabora.com>
|
||||||
|
---
|
||||||
|
drivers/net/wireless/broadcom/brcm80211/brcmfmac/pno.c | 4 ++++
|
||||||
|
1 file changed, 4 insertions(+)
|
||||||
|
|
||||||
|
diff --git a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/pno.c b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/pno.c
|
||||||
|
index 14e530601ef3..fabfbb0b40b0 100644
|
||||||
|
--- a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/pno.c
|
||||||
|
+++ b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/pno.c
|
||||||
|
@@ -57,6 +57,10 @@ static int brcmf_pno_remove_request(struct brcmf_pno_info *pi, u64 reqid)
|
||||||
|
|
||||||
|
mutex_lock(&pi->req_lock);
|
||||||
|
|
||||||
|
+ /* Nothing to do if we have no requests */
|
||||||
|
+ if (pi->n_reqs == 0)
|
||||||
|
+ goto done;
|
||||||
|
+
|
||||||
|
/* find request */
|
||||||
|
for (i = 0; i < pi->n_reqs; i++) {
|
||||||
|
if (pi->reqs[i]->reqid == reqid)
|
||||||
|
|
||||||
|
From patchwork Wed Sep 25 13:44:58 2019
|
||||||
|
Content-Type: text/plain; charset="utf-8"
|
||||||
|
MIME-Version: 1.0
|
||||||
|
Content-Transfer-Encoding: 7bit
|
||||||
|
X-Patchwork-Submitter: Adrian Ratiu <adrian.ratiu@collabora.com>
|
||||||
|
X-Patchwork-Id: 11160707
|
||||||
|
X-Patchwork-Delegate: kvalo@adurom.com
|
||||||
|
Return-Path: <SRS0=Sl5Z=XU=vger.kernel.org=linux-wireless-owner@kernel.org>
|
||||||
|
Received: from mail.kernel.org (pdx-korg-mail-1.web.codeaurora.org
|
||||||
|
[172.30.200.123])
|
||||||
|
by pdx-korg-patchwork-2.web.codeaurora.org (Postfix) with ESMTP id 47A3C14DB
|
||||||
|
for <patchwork-linux-wireless@patchwork.kernel.org>;
|
||||||
|
Wed, 25 Sep 2019 13:45:03 +0000 (UTC)
|
||||||
|
Received: from vger.kernel.org (vger.kernel.org [209.132.180.67])
|
||||||
|
by mail.kernel.org (Postfix) with ESMTP id 2F3CC21D7F
|
||||||
|
for <patchwork-linux-wireless@patchwork.kernel.org>;
|
||||||
|
Wed, 25 Sep 2019 13:45:03 +0000 (UTC)
|
||||||
|
Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand
|
||||||
|
id S2406832AbfIYNo6 (ORCPT
|
||||||
|
<rfc822;patchwork-linux-wireless@patchwork.kernel.org>);
|
||||||
|
Wed, 25 Sep 2019 09:44:58 -0400
|
||||||
|
Received: from bhuna.collabora.co.uk ([46.235.227.227]:58004 "EHLO
|
||||||
|
bhuna.collabora.co.uk" rhost-flags-OK-OK-OK-OK) by vger.kernel.org
|
||||||
|
with ESMTP id S2406650AbfIYNo5 (ORCPT
|
||||||
|
<rfc822;linux-wireless@vger.kernel.org>);
|
||||||
|
Wed, 25 Sep 2019 09:44:57 -0400
|
||||||
|
Received: from [127.0.0.1] (localhost [127.0.0.1])
|
||||||
|
(Authenticated sender: aratiu)
|
||||||
|
with ESMTPSA id 8EFA628BCCF
|
||||||
|
From: Adrian Ratiu <adrian.ratiu@collabora.com>
|
||||||
|
To: brcm80211-dev-list.pdl@broadcom.com
|
||||||
|
Cc: linux-wireless@vger.kernel.org, netdev@vger.kernel.org,
|
||||||
|
linux-kernel@vger.kernel.org,
|
||||||
|
Gustavo Padovan <gustavo.padovan@collabora.com>
|
||||||
|
Subject: [PATCH 2/2] brcmfmac: fix suspend/resume when power is cut off
|
||||||
|
Date: Wed, 25 Sep 2019 16:44:58 +0300
|
||||||
|
Message-Id: <20190925134458.1413790-2-adrian.ratiu@collabora.com>
|
||||||
|
X-Mailer: git-send-email 2.23.0
|
||||||
|
In-Reply-To: <20190925134458.1413790-1-adrian.ratiu@collabora.com>
|
||||||
|
References: <20190925134458.1413790-1-adrian.ratiu@collabora.com>
|
||||||
|
MIME-Version: 1.0
|
||||||
|
Sender: linux-wireless-owner@vger.kernel.org
|
||||||
|
Precedence: bulk
|
||||||
|
List-ID: <linux-wireless.vger.kernel.org>
|
||||||
|
X-Mailing-List: linux-wireless@vger.kernel.org
|
||||||
|
|
||||||
|
brcmfmac assumed the wifi device always remains powered on and thus
|
||||||
|
hardcoded the MMC_PM_KEEP_POWER flag expecting the wifi device to
|
||||||
|
remain on even during suspend/resume cycles.
|
||||||
|
|
||||||
|
This is not always the case, some appliances cut power to everything
|
||||||
|
connected via SDIO for efficiency reasons and this leads to wifi not
|
||||||
|
being usable after coming out of suspend because the device was not
|
||||||
|
correctly reinitialized.
|
||||||
|
|
||||||
|
So we check for the keep_power capability and if it's not present then
|
||||||
|
we remove the device and probe it again during resume to mirror what's
|
||||||
|
happening in hardware and ensure correct reinitialization in the case
|
||||||
|
when MMC_PM_KEEP_POWER is not supported.
|
||||||
|
|
||||||
|
Suggested-by: Gustavo Padovan <gustavo.padovan@collabora.com>
|
||||||
|
Signed-off-by: Adrian Ratiu <adrian.ratiu@collabora.com>
|
||||||
|
---
|
||||||
|
.../broadcom/brcm80211/brcmfmac/bcmsdh.c | 53 ++++++++++++++-----
|
||||||
|
1 file changed, 39 insertions(+), 14 deletions(-)
|
||||||
|
|
||||||
|
diff --git a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/bcmsdh.c b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/bcmsdh.c
|
||||||
|
index 987731b..dac4685 100644
|
||||||
|
--- a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/bcmsdh.c
|
||||||
|
+++ b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/bcmsdh.c
|
||||||
|
@@ -1136,7 +1136,8 @@ static int brcmf_ops_sdio_suspend(struct device *dev)
|
||||||
|
struct sdio_func *func;
|
||||||
|
struct brcmf_bus *bus_if;
|
||||||
|
struct brcmf_sdio_dev *sdiodev;
|
||||||
|
- mmc_pm_flag_t sdio_flags;
|
||||||
|
+ mmc_pm_flag_t pm_caps, sdio_flags;
|
||||||
|
+ int ret = 0;
|
||||||
|
struct brcmf_cfg80211_info *config;
|
||||||
|
int retry = BRCMF_PM_WAIT_MAXRETRY;
|
||||||
|
|
||||||
|
@@ -1159,19 +1160,33 @@ static int brcmf_ops_sdio_suspend(struct device *dev)
|
||||||
|
|
||||||
|
sdiodev = bus_if->bus_priv.sdio;
|
||||||
|
|
||||||
|
- brcmf_sdiod_freezer_on(sdiodev);
|
||||||
|
- brcmf_sdio_wd_timer(sdiodev->bus, 0);
|
||||||
|
-
|
||||||
|
- sdio_flags = MMC_PM_KEEP_POWER;
|
||||||
|
- if (sdiodev->wowl_enabled) {
|
||||||
|
- if (sdiodev->settings->bus.sdio.oob_irq_supported)
|
||||||
|
- enable_irq_wake(sdiodev->settings->bus.sdio.oob_irq_nr);
|
||||||
|
- else
|
||||||
|
- sdio_flags |= MMC_PM_WAKE_SDIO_IRQ;
|
||||||
|
+ pm_caps = sdio_get_host_pm_caps(func);
|
||||||
|
+
|
||||||
|
+ if (pm_caps & MMC_PM_KEEP_POWER) {
|
||||||
|
+ /* preserve card power during suspend */
|
||||||
|
+ brcmf_sdiod_freezer_on(sdiodev);
|
||||||
|
+ brcmf_sdio_wd_timer(sdiodev->bus, 0);
|
||||||
|
+
|
||||||
|
+ sdio_flags = MMC_PM_KEEP_POWER;
|
||||||
|
+ if (sdiodev->wowl_enabled) {
|
||||||
|
+ if (sdiodev->settings->bus.sdio.oob_irq_supported)
|
||||||
|
+ enable_irq_wake(sdiodev->settings->bus.sdio.oob_irq_nr);
|
||||||
|
+ else
|
||||||
|
+ sdio_flags |= MMC_PM_WAKE_SDIO_IRQ;
|
||||||
|
+ }
|
||||||
|
+
|
||||||
|
+ if (sdio_set_host_pm_flags(sdiodev->func1, sdio_flags))
|
||||||
|
+ brcmf_err("Failed to set pm_flags %x\n", sdio_flags);
|
||||||
|
+
|
||||||
|
+ } else {
|
||||||
|
+ /* power will be cut so remove device, probe again in resume */
|
||||||
|
+ brcmf_sdiod_intr_unregister(sdiodev);
|
||||||
|
+ ret = brcmf_sdiod_remove(sdiodev);
|
||||||
|
+ if (ret)
|
||||||
|
+ brcmf_err("Failed to remove device on suspend\n");
|
||||||
|
}
|
||||||
|
- if (sdio_set_host_pm_flags(sdiodev->func1, sdio_flags))
|
||||||
|
- brcmf_err("Failed to set pm_flags %x\n", sdio_flags);
|
||||||
|
- return 0;
|
||||||
|
+
|
||||||
|
+ return ret;
|
||||||
|
}
|
||||||
|
|
||||||
|
static int brcmf_ops_sdio_resume(struct device *dev)
|
||||||
|
@@ -1179,13 +1194,23 @@ static int brcmf_ops_sdio_resume(struct device *dev)
|
||||||
|
struct brcmf_bus *bus_if = dev_get_drvdata(dev);
|
||||||
|
struct brcmf_sdio_dev *sdiodev = bus_if->bus_priv.sdio;
|
||||||
|
struct sdio_func *func = container_of(dev, struct sdio_func, dev);
|
||||||
|
+ mmc_pm_flag_t pm_caps = sdio_get_host_pm_caps(func);
|
||||||
|
+ int ret = 0;
|
||||||
|
|
||||||
|
brcmf_dbg(SDIO, "Enter: F%d\n", func->num);
|
||||||
|
if (func->num != 2)
|
||||||
|
return 0;
|
||||||
|
|
||||||
|
- brcmf_sdiod_freezer_off(sdiodev);
|
||||||
|
- return 0;
|
||||||
|
+ if (!(pm_caps & MMC_PM_KEEP_POWER)) {
|
||||||
|
+ /* bus was powered off and device removed, probe again */
|
||||||
|
+ ret = brcmf_sdiod_probe(sdiodev);
|
||||||
|
+ if (ret)
|
||||||
|
+ brcmf_err("Failed to probe device on resume\n");
|
||||||
|
+ } else {
|
||||||
|
+ brcmf_sdiod_freezer_off(sdiodev);
|
||||||
|
+ }
|
||||||
|
+
|
||||||
|
+ return ret;
|
||||||
|
}
|
||||||
|
|
||||||
|
static const struct dev_pm_ops brcmf_sdio_pm_ops = {
|
Loading…
Reference in a new issue