[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