[linux-yocto] [PATCH 16/29] mmc: sdhci: Force BYT SDCARD host to run with SDR25 mode
Kamble, Nitin A
nitin.a.kamble at intel.com
Wed Apr 9 16:46:02 PDT 2014
On 4/7/2014 8:18 AM, rebecca.swee.fun.chang at intel.com wrote:
> From: "Chew, Kean Ho" <kean.ho.chew at intel.com>
>
> The clock appears to be unstable when SDCARD host running with
> DDR50 mode, thus causing CRC issue. This is to introduce a new
> quirk to force host with broken DDR50 mode to run with SDR25
> mode.
The "appears" word is very feeble for pushing such commit upstream. Instead
you can rewrite the commit as:
When the SDCARD host is running in DDR50 mode, instabilities have been
observed
in the clock, resulting in CRC issues.
Introduce a new quirk to avoid the issue by disabling the DDR550 mode
on the broken hosts. It will use the SDR25 mode instead.
Nitin
> Signed-off-by: Chew, Kean Ho <kean.ho.chew at intel.com>
> Signed-off-by: Chew, Chiau Ee <chiau.ee.chew at intel.com>
> Signed-off-by: Maurice Petallo <mauricex.r.petallo at intel.com>
> ---
> drivers/mmc/host/sdhci-acpi.c | 3 ++-
> drivers/mmc/host/sdhci-pci.c | 3 ++-
> drivers/mmc/host/sdhci.c | 3 ++-
> include/linux/mmc/sdhci.h | 2 ++
> 4 files changed, 8 insertions(+), 3 deletions(-)
>
> diff --git a/drivers/mmc/host/sdhci-acpi.c b/drivers/mmc/host/sdhci-acpi.c
> index cdd4ce0..c108d38 100644
> --- a/drivers/mmc/host/sdhci-acpi.c
> +++ b/drivers/mmc/host/sdhci-acpi.c
> @@ -130,7 +130,8 @@ static const struct sdhci_acpi_slot sdhci_acpi_slot_int_sdio = {
>
> static const struct sdhci_acpi_slot sdhci_acpi_slot_int_sd = {
> .flags = SDHCI_ACPI_SD_CD | SDHCI_ACPI_RUNTIME_PM,
> - .quirks2 = SDHCI_QUIRK2_CARD_ON_NEEDS_BUS_ON,
> + .quirks2 = SDHCI_QUIRK2_CARD_ON_NEEDS_BUS_ON |
> + SDHCI_QUIRK2_BROKEN_DDR50,
> };
>
> struct sdhci_acpi_uid_slot {
> diff --git a/drivers/mmc/host/sdhci-pci.c b/drivers/mmc/host/sdhci-pci.c
> index 33593e7..8848182 100644
> --- a/drivers/mmc/host/sdhci-pci.c
> +++ b/drivers/mmc/host/sdhci-pci.c
> @@ -354,7 +354,8 @@ static const struct sdhci_pci_fixes sdhci_intel_byt_sdio = {
> };
>
> static const struct sdhci_pci_fixes sdhci_intel_byt_sd = {
> - .quirks2 = SDHCI_QUIRK2_CARD_ON_NEEDS_BUS_ON,
> + .quirks2 = SDHCI_QUIRK2_CARD_ON_NEEDS_BUS_ON |
> + SDHCI_QUIRK2_BROKEN_DDR50,
> .allow_runtime_pm = true,
> .own_cd_for_runtime_pm = true,
> };
> diff --git a/drivers/mmc/host/sdhci.c b/drivers/mmc/host/sdhci.c
> index c81c2a2..4e36df8 100644
> --- a/drivers/mmc/host/sdhci.c
> +++ b/drivers/mmc/host/sdhci.c
> @@ -3000,7 +3000,8 @@ int sdhci_add_host(struct sdhci_host *host)
> else if (caps[1] & SDHCI_SUPPORT_SDR50)
> mmc->caps |= MMC_CAP_UHS_SDR50;
>
> - if (caps[1] & SDHCI_SUPPORT_DDR50)
> + if ((caps[1] & SDHCI_SUPPORT_DDR50) &&
> + !(host->quirks2 & SDHCI_QUIRK2_BROKEN_DDR50))
> mmc->caps |= MMC_CAP_UHS_DDR50;
>
> /* Does the host need tuning for SDR50? */
> diff --git a/include/linux/mmc/sdhci.h b/include/linux/mmc/sdhci.h
> index ba35bdb..7c9d2d1 100644
> --- a/include/linux/mmc/sdhci.h
> +++ b/include/linux/mmc/sdhci.h
> @@ -96,6 +96,8 @@ struct sdhci_host {
> #define SDHCI_QUIRK2_NO_1_8_V (1<<2)
> #define SDHCI_QUIRK2_PRESET_VALUE_BROKEN (1<<3)
> #define SDHCI_QUIRK2_CARD_ON_NEEDS_BUS_ON (1<<4)
> +/* Controller has a broken DDR50 Time Spec */
> +#define SDHCI_QUIRK2_BROKEN_DDR50 (1<<6)
>
> int irq; /* Device IRQ */
> void __iomem *ioaddr; /* Mapped address */
More information about the linux-yocto
mailing list