|
@@ -148,28 +148,37 @@ static void tegra_sdhci_reset(struct sdhci_host *host, u8 mask)
|
|
|
return;
|
|
|
|
|
|
misc_ctrl = sdhci_readl(host, SDHCI_TEGRA_VENDOR_MISC_CTRL);
|
|
|
- /* Erratum: Enable SDHCI spec v3.00 support */
|
|
|
- if (soc_data->nvquirks & NVQUIRK_ENABLE_SDHCI_SPEC_300)
|
|
|
- misc_ctrl |= SDHCI_MISC_CTRL_ENABLE_SDHCI_SPEC_300;
|
|
|
- /* Advertise UHS modes as supported by host */
|
|
|
- if (soc_data->nvquirks & NVQUIRK_ENABLE_SDR50)
|
|
|
- misc_ctrl |= SDHCI_MISC_CTRL_ENABLE_SDR50;
|
|
|
- else
|
|
|
- misc_ctrl &= ~SDHCI_MISC_CTRL_ENABLE_SDR50;
|
|
|
- if (soc_data->nvquirks & NVQUIRK_ENABLE_DDR50)
|
|
|
- misc_ctrl |= SDHCI_MISC_CTRL_ENABLE_DDR50;
|
|
|
- else
|
|
|
- misc_ctrl &= ~SDHCI_MISC_CTRL_ENABLE_DDR50;
|
|
|
- if (soc_data->nvquirks & NVQUIRK_ENABLE_SDR104)
|
|
|
- misc_ctrl |= SDHCI_MISC_CTRL_ENABLE_SDR104;
|
|
|
- else
|
|
|
- misc_ctrl &= ~SDHCI_MISC_CTRL_ENABLE_SDR104;
|
|
|
- sdhci_writel(host, misc_ctrl, SDHCI_TEGRA_VENDOR_MISC_CTRL);
|
|
|
-
|
|
|
clk_ctrl = sdhci_readl(host, SDHCI_TEGRA_VENDOR_CLOCK_CTRL);
|
|
|
+
|
|
|
+ misc_ctrl &= ~(SDHCI_MISC_CTRL_ENABLE_SDHCI_SPEC_300 |
|
|
|
+ SDHCI_MISC_CTRL_ENABLE_SDR50 |
|
|
|
+ SDHCI_MISC_CTRL_ENABLE_DDR50 |
|
|
|
+ SDHCI_MISC_CTRL_ENABLE_SDR104);
|
|
|
+
|
|
|
clk_ctrl &= ~SDHCI_CLOCK_CTRL_SPI_MODE_CLKEN_OVERRIDE;
|
|
|
- if (soc_data->nvquirks & SDHCI_MISC_CTRL_ENABLE_SDR50)
|
|
|
- clk_ctrl |= SDHCI_CLOCK_CTRL_SDR50_TUNING_OVERRIDE;
|
|
|
+
|
|
|
+ /*
|
|
|
+ * If the board does not define a regulator for the SDHCI
|
|
|
+ * IO voltage, then don't advertise support for UHS modes
|
|
|
+ * even if the device supports it because the IO voltage
|
|
|
+ * cannot be configured.
|
|
|
+ */
|
|
|
+ if (!IS_ERR(host->mmc->supply.vqmmc)) {
|
|
|
+ /* Erratum: Enable SDHCI spec v3.00 support */
|
|
|
+ if (soc_data->nvquirks & NVQUIRK_ENABLE_SDHCI_SPEC_300)
|
|
|
+ misc_ctrl |= SDHCI_MISC_CTRL_ENABLE_SDHCI_SPEC_300;
|
|
|
+ /* Advertise UHS modes as supported by host */
|
|
|
+ if (soc_data->nvquirks & NVQUIRK_ENABLE_SDR50)
|
|
|
+ misc_ctrl |= SDHCI_MISC_CTRL_ENABLE_SDR50;
|
|
|
+ if (soc_data->nvquirks & NVQUIRK_ENABLE_DDR50)
|
|
|
+ misc_ctrl |= SDHCI_MISC_CTRL_ENABLE_DDR50;
|
|
|
+ if (soc_data->nvquirks & NVQUIRK_ENABLE_SDR104)
|
|
|
+ misc_ctrl |= SDHCI_MISC_CTRL_ENABLE_SDR104;
|
|
|
+ if (soc_data->nvquirks & SDHCI_MISC_CTRL_ENABLE_SDR50)
|
|
|
+ clk_ctrl |= SDHCI_CLOCK_CTRL_SDR50_TUNING_OVERRIDE;
|
|
|
+ }
|
|
|
+
|
|
|
+ sdhci_writel(host, misc_ctrl, SDHCI_TEGRA_VENDOR_MISC_CTRL);
|
|
|
sdhci_writel(host, clk_ctrl, SDHCI_TEGRA_VENDOR_CLOCK_CTRL);
|
|
|
|
|
|
if (soc_data->nvquirks & NVQUIRK_HAS_PADCALIB)
|