diff mbox series

mmc: sdhci-pci: Fix eMMC driver strength for BYT-based controllers

Message ID 20200422111629.4899-1-adrian.hunter@intel.com (mailing list archive)
State New, archived
Headers show
Series mmc: sdhci-pci: Fix eMMC driver strength for BYT-based controllers | expand

Commit Message

Adrian Hunter April 22, 2020, 11:16 a.m. UTC
BIOS writers have begun the practice of setting 40 ohm eMMC driver strength
even though the eMMC may not support it, on the assumption that the kernel
will validate the value against the eMMC (Extended CSD DRIVER_STRENGTH
[offset 197]) and revert to the default 50 ohm value if 40 ohm is invalid.

This is done to avoid changing the value for different boards.

Putting aside the merits of this approach, it is clear the eMMC's mask
of supported driver strengths is more reliable than the value provided
by BIOS. Add validation accordingly.

Signed-off-by: Adrian Hunter <adrian.hunter@intel.com>
Fixes: 51ced59cc02e ("mmc: sdhci-pci: Use ACPI DSM to get driver strength for some Intel devices")
Cc: stable@vger.kernel.org
---
 drivers/mmc/host/sdhci-pci-core.c | 3 +++
 1 file changed, 3 insertions(+)

Comments

Ulf Hansson April 22, 2020, 4:03 p.m. UTC | #1
On Wed, 22 Apr 2020 at 13:17, Adrian Hunter <adrian.hunter@intel.com> wrote:
>
> BIOS writers have begun the practice of setting 40 ohm eMMC driver strength
> even though the eMMC may not support it, on the assumption that the kernel
> will validate the value against the eMMC (Extended CSD DRIVER_STRENGTH
> [offset 197]) and revert to the default 50 ohm value if 40 ohm is invalid.
>
> This is done to avoid changing the value for different boards.
>
> Putting aside the merits of this approach, it is clear the eMMC's mask
> of supported driver strengths is more reliable than the value provided
> by BIOS. Add validation accordingly.
>
> Signed-off-by: Adrian Hunter <adrian.hunter@intel.com>
> Fixes: 51ced59cc02e ("mmc: sdhci-pci: Use ACPI DSM to get driver strength for some Intel devices")
> Cc: stable@vger.kernel.org

Applied for fixes, thanks!

Kind regards
Uffe


> ---
>  drivers/mmc/host/sdhci-pci-core.c | 3 +++
>  1 file changed, 3 insertions(+)
>
> diff --git a/drivers/mmc/host/sdhci-pci-core.c b/drivers/mmc/host/sdhci-pci-core.c
> index a98c9476bfc8..af736afb4b91 100644
> --- a/drivers/mmc/host/sdhci-pci-core.c
> +++ b/drivers/mmc/host/sdhci-pci-core.c
> @@ -597,6 +597,9 @@ static int intel_select_drive_strength(struct mmc_card *card,
>         struct sdhci_pci_slot *slot = sdhci_priv(host);
>         struct intel_host *intel_host = sdhci_pci_priv(slot);
>
> +       if (!(mmc_driver_type_mask(intel_host->drv_strength) & card_drv))
> +               return 0;
> +
>         return intel_host->drv_strength;
>  }
>
> --
> 2.17.1
>
diff mbox series

Patch

diff --git a/drivers/mmc/host/sdhci-pci-core.c b/drivers/mmc/host/sdhci-pci-core.c
index a98c9476bfc8..af736afb4b91 100644
--- a/drivers/mmc/host/sdhci-pci-core.c
+++ b/drivers/mmc/host/sdhci-pci-core.c
@@ -597,6 +597,9 @@  static int intel_select_drive_strength(struct mmc_card *card,
 	struct sdhci_pci_slot *slot = sdhci_priv(host);
 	struct intel_host *intel_host = sdhci_pci_priv(slot);
 
+	if (!(mmc_driver_type_mask(intel_host->drv_strength) & card_drv))
+		return 0;
+
 	return intel_host->drv_strength;
 }