Patch "mmc: sdhci-acpi: Fix card detect race for Intel BXT/APL" has been added to the 4.4-stable tree
Subsystems (3)
This is a note to let you know that I've just added the patch titled
mmc: sdhci-acpi: Fix card detect race for Intel BXT/APL
to the 4.4-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-sdhci-acpi-fix-card-detect-race-for-intel-bxt-apl.patch
and it can be found in the queue-4.4 subdirectory.
If you, or anyone else, feels it should not be added to the stable tree, please let <[email protected]> know about it.
Quoted 1 line
From
6a645dd87a5a506779810d7d9935c25fc2ef4687Mon Sep 17 00:00:00 2001
From: Adrian Hunter <[email protected]>
Date: Tue, 9 Feb 2016 16:12:38 +0200
Subject: mmc: sdhci-acpi: Fix card detect race for Intel BXT/APL
From: Adrian Hunter <[email protected]>
commit 6a645dd87a5a506779810d7d9935c25fc2ef4687 upstream.
Intel BXT/APL use a card detect GPIO however the host controller will not enable bus power unless it's card detect also reflects the presence of a card. Unfortunately those 2 things race which can result in commands not starting, after which the controller does nothing and there is a 10 second wait for the driver's 10-second timer to timeout.
That is fixed by having the driver look also at the present state register to determine if the card is present. Consequently, provide a 'get_cd' mmc host operation for BXT/APL that does that.
--- drivers/mmc/host/sdhci-acpi.c | 30 ++++++++++++++++++++++++++++++ 1 file changed, 30 insertions(+)
drivers/mmc/host/sdhci-acpi.c +30 -0
@@ -146,6 +146,33 @@ static const struct sdhci_acpi_chip sdhc .ops = &sdhci_acpi_ops_int, }; +static int bxt_get_cd (struct mmc_host *mmc) +{ +int gpio_cd =mmc_gpio_get_cd (mmc); +struct sdhci_host *host =mmc_priv (mmc); +unsigned long flags; +int ret =0 ; + +if (!gpio_cd) +return 0 ; + +pm_runtime_get_sync (mmc->parent); + +spin_lock_irqsave (&host->lock, flags); + +if (host->flags &SDHCI_DEVICE_DEAD ) + goto out; + + ret = !!(sdhci_readl (host,SDHCI_PRESENT_STATE ) &SDHCI_CARD_PRESENT ); +out: +spin_unlock_irqrestore (&host->lock, flags); + +pm_runtime_mark_last_busy (mmc->parent); +pm_runtime_put_autosuspend (mmc->parent); + +return ret; +} +static int sdhci_acpi_emmc_probe_slot (struct platform_device *pdev,const char *hid,const char *uid) {
@@ -196,6 +223,9 @@ static int sdhci_acpi_sd_probe_slot(stru/* Platform specific code during sd probe slot goes here */ +if (hid && !strcmp (hid,"80865ACA" )) + host->mmc_host_ops.get_cd = bxt_get_cd; +return 0 ; }
Patches currently in stable-queue which might be from [email protected] are
queue-4.4/mmc-sdhci-acpi-fix-card-detect-race-for-intel-bxt-apl.patch queue-4.4/mmc-mmc-fix-incorrect-use-of-driver-strength-switching-hs200-and-hs400.patch queue-4.4/mmc-sdhci-allow-override-of-get_cd-called-from-sdhci_request.patch queue-4.4/mmc-sdhci-pci-do-not-default-to-33-ohm-driver-strength-for-intel-spt.patch queue-4.4/mmc-sdio-fix-invalid-vdd-in-voltage-switch-power-cycle.patch queue-4.4/mmc-sdhci-fix-sdhci_runtime_pm_bus_on-off.patch queue-4.4/mmc-sdhci-allow-override-of-mmc-host-operations.patch queue-4.4/mmc-sdhci-fix-dma-descriptor-with-zero-data-length.patch queue-4.4/mmc-sdhci-pci-fix-card-detect-race-for-intel-bxt-apl.patch