63 lines
2.1 KiB
Diff
63 lines
2.1 KiB
Diff
From 2ffae54825fb8a86d377c51632995e5cfadb2307 Mon Sep 17 00:00:00 2001
|
|
From: Sarthak Garg <quic_sartgarg@quicinc.com>
|
|
Date: Thu, 7 Nov 2024 13:35:05 +0530
|
|
Subject: [PATCH] mmc: sdhci-msm: Limit HS mode frequency to 37.5MHz
|
|
|
|
For Qualcomm SoCs with level shifter delays are seen on receivers data
|
|
path due to latency added by level shifter.
|
|
|
|
To bring these delays in normal range and avoid CMD CRC errors
|
|
reduce frequency for HS mode SD cards to 37.5MHz for targets which has
|
|
level shifter.
|
|
|
|
Signed-off-by: Sarthak Garg <quic_sartgarg@quicinc.com>
|
|
---
|
|
drivers/mmc/host/sdhci-msm.c | 10 ++++++++++
|
|
1 file changed, 10 insertions(+)
|
|
|
|
diff --git a/drivers/mmc/host/sdhci-msm.c b/drivers/mmc/host/sdhci-msm.c
|
|
index a6c9e9b60812..9473039ccb13 100644
|
|
--- a/drivers/mmc/host/sdhci-msm.c
|
|
+++ b/drivers/mmc/host/sdhci-msm.c
|
|
@@ -147,6 +147,8 @@
|
|
/* Max load for SD Vdd-io supply */
|
|
#define SD_VQMMC_MAX_LOAD_UA 22000
|
|
|
|
+#define LEVEL_SHIFTER_HIGH_SPEED_FREQ 37500000
|
|
+
|
|
#define msm_host_readl(msm_host, host, offset) \
|
|
msm_host->var_ops->msm_readl_relaxed(host, offset)
|
|
|
|
@@ -296,6 +298,7 @@ struct sdhci_msm_host {
|
|
bool use_cdr;
|
|
u32 transfer_mode;
|
|
bool updated_ddr_cfg;
|
|
+ bool uses_level_shifter;
|
|
bool uses_tassadar_dll;
|
|
u32 dll_config;
|
|
u32 ddr_config;
|
|
@@ -375,6 +378,11 @@ static void msm_set_clock_rate_for_bus_mode(struct sdhci_host *host,
|
|
|
|
mult = msm_get_clock_mult_for_bus_mode(host);
|
|
desired_rate = clock * mult;
|
|
+
|
|
+ if (timing == MMC_TIMING_SD_HS && desired_rate == 50000000
|
|
+ && msm_host->uses_level_shifter)
|
|
+ desired_rate = LEVEL_SHIFTER_HIGH_SPEED_FREQ;
|
|
+
|
|
rc = dev_pm_opp_set_rate(mmc_dev(host->mmc), desired_rate);
|
|
if (rc) {
|
|
pr_err("%s: Failed to set clock at rate %u at timing %d\n",
|
|
@@ -2421,6 +2429,8 @@ static inline void sdhci_msm_get_of_property(struct platform_device *pdev,
|
|
|
|
of_property_read_u32(node, "qcom,dll-config", &msm_host->dll_config);
|
|
|
|
+ msm_host->uses_level_shifter = of_property_read_bool(node, "qcom,use-level-shifter");
|
|
+
|
|
if (of_device_is_compatible(node, "qcom,msm8916-sdhci"))
|
|
host->quirks2 |= SDHCI_QUIRK2_BROKEN_64_BIT_DMA;
|
|
}
|
|
--
|
|
2.34.1
|
|
|