+++ /dev/null
-From 83293386bc95cf5e9f0c0175794455835bd1cb4a Mon Sep 17 00:00:00 2001
-From: Ulf Hansson <ulf.hansson@linaro.org>
-Date: Tue, 18 Jun 2019 14:05:17 +0200
-Subject: mmc: core: Prevent processing SDIO IRQs when the card is suspended
-
-From: Ulf Hansson <ulf.hansson@linaro.org>
-
-commit 83293386bc95cf5e9f0c0175794455835bd1cb4a upstream.
-
-Processing of SDIO IRQs must obviously be prevented while the card is
-system suspended, otherwise we may end up trying to communicate with an
-uninitialized SDIO card.
-
-Reports throughout the years shows that this is not only a theoretical
-problem, but a real issue. So, let's finally fix this problem, by keeping
-track of the state for the card and bail out before processing the SDIO
-IRQ, in case the card is suspended.
-
-Cc: stable@vger.kernel.org
-Reported-by: Douglas Anderson <dianders@chromium.org>
-Tested-by: Douglas Anderson <dianders@chromium.org>
-Signed-off-by: Ulf Hansson <ulf.hansson@linaro.org>
-Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
-
----
- drivers/mmc/core/sdio.c | 13 ++++++++++++-
- drivers/mmc/core/sdio_irq.c | 4 ++++
- 2 files changed, 16 insertions(+), 1 deletion(-)
-
---- a/drivers/mmc/core/sdio.c
-+++ b/drivers/mmc/core/sdio.c
-@@ -897,6 +897,10 @@ static int mmc_sdio_pre_suspend(struct m
- */
- static int mmc_sdio_suspend(struct mmc_host *host)
- {
-+ /* Prevent processing of SDIO IRQs in suspended state. */
-+ mmc_card_set_suspended(host->card);
-+ cancel_delayed_work_sync(&host->sdio_irq_work);
-+
- mmc_claim_host(host);
-
- if (mmc_card_keep_power(host) && mmc_card_wake_sdio_irq(host))
-@@ -955,13 +959,20 @@ static int mmc_sdio_resume(struct mmc_ho
- err = sdio_enable_4bit_bus(host->card);
- }
-
-- if (!err && host->sdio_irqs) {
-+ if (err)
-+ goto out;
-+
-+ /* Allow SDIO IRQs to be processed again. */
-+ mmc_card_clr_suspended(host->card);
-+
-+ if (host->sdio_irqs) {
- if (!(host->caps2 & MMC_CAP2_SDIO_IRQ_NOTHREAD))
- wake_up_process(host->sdio_irq_thread);
- else if (host->caps & MMC_CAP_SDIO_IRQ)
- host->ops->enable_sdio_irq(host, 1);
- }
-
-+out:
- mmc_release_host(host);
-
- host->pm_flags &= ~MMC_PM_KEEP_POWER;
---- a/drivers/mmc/core/sdio_irq.c
-+++ b/drivers/mmc/core/sdio_irq.c
-@@ -35,6 +35,10 @@ static int process_sdio_pending_irqs(str
- unsigned char pending;
- struct sdio_func *func;
-
-+ /* Don't process SDIO IRQs if the card is suspended. */
-+ if (mmc_card_suspended(card))
-+ return 0;
-+
- /*
- * Optimization, if there is only 1 function interrupt registered
- * and we know an IRQ was signaled then call irq handler directly.
tracing-silence-gcc-9-array-bounds-warning.patch
gcc-9-silence-address-of-packed-member-warning.patch
-mmc-core-prevent-processing-sdio-irqs-when-the-card-is-suspended.patch
usb-chipidea-udc-workaround-for-endpoint-conflict-issue.patch
+++ /dev/null
-From 83293386bc95cf5e9f0c0175794455835bd1cb4a Mon Sep 17 00:00:00 2001
-From: Ulf Hansson <ulf.hansson@linaro.org>
-Date: Tue, 18 Jun 2019 14:05:17 +0200
-Subject: mmc: core: Prevent processing SDIO IRQs when the card is suspended
-
-From: Ulf Hansson <ulf.hansson@linaro.org>
-
-commit 83293386bc95cf5e9f0c0175794455835bd1cb4a upstream.
-
-Processing of SDIO IRQs must obviously be prevented while the card is
-system suspended, otherwise we may end up trying to communicate with an
-uninitialized SDIO card.
-
-Reports throughout the years shows that this is not only a theoretical
-problem, but a real issue. So, let's finally fix this problem, by keeping
-track of the state for the card and bail out before processing the SDIO
-IRQ, in case the card is suspended.
-
-Cc: stable@vger.kernel.org
-Reported-by: Douglas Anderson <dianders@chromium.org>
-Tested-by: Douglas Anderson <dianders@chromium.org>
-Signed-off-by: Ulf Hansson <ulf.hansson@linaro.org>
-Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
-
----
- drivers/mmc/core/sdio.c | 13 ++++++++++++-
- drivers/mmc/core/sdio_irq.c | 4 ++++
- 2 files changed, 16 insertions(+), 1 deletion(-)
-
---- a/drivers/mmc/core/sdio.c
-+++ b/drivers/mmc/core/sdio.c
-@@ -895,6 +895,10 @@ static int mmc_sdio_pre_suspend(struct m
- */
- static int mmc_sdio_suspend(struct mmc_host *host)
- {
-+ /* Prevent processing of SDIO IRQs in suspended state. */
-+ mmc_card_set_suspended(host->card);
-+ cancel_delayed_work_sync(&host->sdio_irq_work);
-+
- mmc_claim_host(host);
-
- if (mmc_card_keep_power(host) && mmc_card_wake_sdio_irq(host))
-@@ -953,13 +957,20 @@ static int mmc_sdio_resume(struct mmc_ho
- err = sdio_enable_4bit_bus(host->card);
- }
-
-- if (!err && host->sdio_irqs) {
-+ if (err)
-+ goto out;
-+
-+ /* Allow SDIO IRQs to be processed again. */
-+ mmc_card_clr_suspended(host->card);
-+
-+ if (host->sdio_irqs) {
- if (!(host->caps2 & MMC_CAP2_SDIO_IRQ_NOTHREAD))
- wake_up_process(host->sdio_irq_thread);
- else if (host->caps & MMC_CAP_SDIO_IRQ)
- host->ops->enable_sdio_irq(host, 1);
- }
-
-+out:
- mmc_release_host(host);
-
- host->pm_flags &= ~MMC_PM_KEEP_POWER;
---- a/drivers/mmc/core/sdio_irq.c
-+++ b/drivers/mmc/core/sdio_irq.c
-@@ -35,6 +35,10 @@ static int process_sdio_pending_irqs(str
- unsigned char pending;
- struct sdio_func *func;
-
-+ /* Don't process SDIO IRQs if the card is suspended. */
-+ if (mmc_card_suspended(card))
-+ return 0;
-+
- /*
- * Optimization, if there is only 1 function interrupt registered
- * and we know an IRQ was signaled then call irq handler directly.
tracing-silence-gcc-9-array-bounds-warning.patch
gcc-9-silence-address-of-packed-member-warning.patch
-mmc-core-prevent-processing-sdio-irqs-when-the-card-is-suspended.patch
scsi-ufs-avoid-runtime-suspend-possibly-being-blocked-forever.patch
usb-chipidea-udc-workaround-for-endpoint-conflict-issue.patch