From 0a5ff911f00cdca553021ae4360b5d0fd57dfa3f Mon Sep 17 00:00:00 2001 From: Sarthak Garg Date: Wed, 20 Jan 2021 22:36:00 +0530 Subject: [PATCH] mmc: sdhci-msm: Always set max_busy_timeout as zero Qcom SDHC uses base clock in calculating the data-timeout value. So SDHCI_QUIRK_DATA_TIMEOUT_USES_SDCLK quirk is set. Moreover discard size calculation uses max_busy_timeout in deriving the value. So, we can ensure a larger discard size by setting this timeout as zero. If this timeout is zero then it takes max erase timeout vlaue (which is 60sec) in the discard size calculation. But when this quirk is set max_busy_timeout variable gets updated to non zero value leading to smaller discard size. Define get_max_timeout_count ops in sdhci_msm_ops which always sets max_busy_timeout to zero. Change-Id: Iec6013dde6082b2a8fdb449cacf503c290252d0b Signed-off-by: Sarthak Garg --- drivers/mmc/host/sdhci-msm.c | 18 +++++++++++------- 1 file changed, 11 insertions(+), 7 deletions(-) diff --git a/drivers/mmc/host/sdhci-msm.c b/drivers/mmc/host/sdhci-msm.c index be5394397e97..ffc10a63127c 100644 --- a/drivers/mmc/host/sdhci-msm.c +++ b/drivers/mmc/host/sdhci-msm.c @@ -1675,6 +1675,16 @@ static void sdhci_msm_set_uhs_signaling(struct sdhci_host *host, sdhci_msm_hs400(host, &mmc->ios); } +/* + * Ensure larger discard size by always setting max_busy_timeout to zero. + * This will always return max_busy_timeout as zero to the sdhci layer. + */ + +static unsigned int sdhci_msm_get_max_timeout_count(struct sdhci_host *host) +{ + return 0; +} + #define MAX_PROP_SIZE 32 static int sdhci_msm_dt_parse_vreg_info(struct device *dev, struct sdhci_msm_reg_data **vreg_data, const char *vreg_name) @@ -3456,7 +3466,7 @@ static const struct sdhci_ops sdhci_msm_ops = { .get_max_clock = sdhci_msm_get_max_clock, .set_bus_width = sdhci_set_bus_width, .set_uhs_signaling = sdhci_msm_set_uhs_signaling, - + .get_max_timeout_count = sdhci_msm_get_max_timeout_count, #if defined(CONFIG_SDC_QTI) .dump_vendor_regs = sdhci_msm_dump_vendor_regs, #endif @@ -4417,12 +4427,6 @@ static int sdhci_msm_probe(struct platform_device *pdev) goto pm_runtime_disable; sdhci_msm_set_regulator_caps(msm_host); - /* - * Ensure larger discard size by setting max_busy_timeout. - * This has to set only after sdhci_add_host so that our - * value won't be over-written. - */ - host->mmc->max_busy_timeout = 0; #if defined(CONFIG_SDC_QTI) sdhci_msm_init_sysfs(pdev); #endif