Patch "mmc: sdio: Don't re-initialize powered-on removable SDIO cards at resume" has been added to the 4.19-stable tree

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



This is a note to let you know that I've just added the patch titled

    mmc: sdio: Don't re-initialize powered-on removable SDIO cards at resume

to the 4.19-stable tree which can be found at:
    http://www.kernel.org/git/?p=linux/kernel/git/stable/stable-queue.git;a=summary

The filename of the patch is:
     mmc-sdio-don-t-re-initialize-powered-on-removable-sd.patch
and it can be found in the queue-4.19 subdirectory.

If you, or anyone else, feels it should not be added to the stable tree,
please let <stable@xxxxxxxxxxxxxxx> know about it.



commit 753670afdd7c1410868f365e488ae3fa2f6ed116
Author: Ulf Hansson <ulf.hansson@xxxxxxxxxx>
Date:   Tue Jun 18 00:52:59 2019 +0200

    mmc: sdio: Don't re-initialize powered-on removable SDIO cards at resume
    
    [ Upstream commit 6ebc581c3f9e6fd11a1c9da492a5e05bbe96885a ]
    
    It looks like the original idea behind always doing a re-initialization of
    a removable SDIO card during system resume in mmc_sdio_resume(), is to try
    to play safe to detect whether the card has been removed.
    
    However, this seems like a really a bad idea as it will most likely screw
    things up, especially when the card is expected to remain powered on during
    system suspend by the SDIO func driver.
    
    Let's fix this, simply by trusting that the detect work checks if the card
    is alive and inserted, which is being scheduled at the PM_POST_SUSPEND
    notification anyway.
    
    Signed-off-by: Ulf Hansson <ulf.hansson@xxxxxxxxxx>
    Tested-by: Douglas Anderson <dianders@xxxxxxxxxxxx>
    Reviewed-by: Douglas Anderson <dianders@xxxxxxxxxxxx>
    Stable-dep-of: 32a9cdb8869d ("mmc: core: sdio: hold retuning if sdio in 1-bit mode")
    Signed-off-by: Sasha Levin <sashal@xxxxxxxxxx>

diff --git a/drivers/mmc/core/sdio.c b/drivers/mmc/core/sdio.c
index 5f1ee88aa7615..5f6865717c9b4 100644
--- a/drivers/mmc/core/sdio.c
+++ b/drivers/mmc/core/sdio.c
@@ -963,7 +963,11 @@ static int mmc_sdio_resume(struct mmc_host *host)
 	/* Basic card reinitialization. */
 	mmc_claim_host(host);
 
-	/* Restore power if needed */
+	/*
+	 * Restore power and reinitialize the card when needed. Note that a
+	 * removable card is checked from a detect work later on in the resume
+	 * process.
+	 */
 	if (!mmc_card_keep_power(host)) {
 		mmc_power_up(host, host->card->ocr);
 		/*
@@ -977,12 +981,8 @@ static int mmc_sdio_resume(struct mmc_host *host)
 			pm_runtime_set_active(&host->card->dev);
 			pm_runtime_enable(&host->card->dev);
 		}
-	}
-
-	/* No need to reinitialize powered-resumed nonremovable cards */
-	if (mmc_card_is_removable(host) || !mmc_card_keep_power(host)) {
-		err = mmc_sdio_reinit_card(host, mmc_card_keep_power(host));
-	} else if (mmc_card_keep_power(host) && mmc_card_wake_sdio_irq(host)) {
+		err = mmc_sdio_reinit_card(host, 0);
+	} else if (mmc_card_wake_sdio_irq(host)) {
 		/* We may have switched to 1-bit mode during suspend */
 		err = sdio_enable_4bit_bus(host->card);
 	}



[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Index of Archives]     [Linux USB Devel]     [Linux Audio Users]     [Yosemite News]     [Linux Kernel]     [Linux SCSI]

  Powered by Linux