diff --git a/drivers/mmc/host/sdhci-msm.c b/drivers/mmc/host/sdhci-msm.c index 7c62538ed0ee..c6f885895906 100644 --- a/drivers/mmc/host/sdhci-msm.c +++ b/drivers/mmc/host/sdhci-msm.c @@ -2132,6 +2132,7 @@ static int sdhci_msm_probe(struct platform_device *pdev) host->quirks |= SDHCI_QUIRK_CAP_CLOCK_BASE_BROKEN; host->quirks2 |= SDHCI_QUIRK2_ALWAYS_USE_BASE_CLOCK; host->quirks2 |= SDHCI_QUIRK2_IGNORE_CMDCRC_FOR_TUNING; + host->quirks2 |= SDHCI_QUIRK2_USE_MAX_DISCARD_SIZE; host_version = readl_relaxed((host->ioaddr + SDHCI_HOST_VERSION)); dev_dbg(&pdev->dev, "Host Version: 0x%x Vendor Version 0x%x\n", diff --git a/drivers/mmc/host/sdhci.c b/drivers/mmc/host/sdhci.c index 7c52867bc5c3..a9a24f460274 100644 --- a/drivers/mmc/host/sdhci.c +++ b/drivers/mmc/host/sdhci.c @@ -3235,6 +3235,10 @@ int sdhci_add_host(struct sdhci_host *host) if (override_timeout_clk) host->timeout_clk = override_timeout_clk; + + if (!(host->quirks2 & SDHCI_QUIRK2_USE_MAX_DISCARD_SIZE)) + mmc->max_busy_timeout = (1 << 27) / host->timeout_clk; + mmc->caps |= MMC_CAP_SDIO_IRQ | MMC_CAP_ERASE | MMC_CAP_CMD23; mmc->caps2 |= MMC_CAP2_SDIO_IRQ_NOTHREAD; diff --git a/drivers/mmc/host/sdhci.h b/drivers/mmc/host/sdhci.h index 1329531767ec..c08ed7fac8df 100644 --- a/drivers/mmc/host/sdhci.h +++ b/drivers/mmc/host/sdhci.h @@ -436,6 +436,8 @@ struct sdhci_host { #define SDHCI_QUIRK2_ALWAYS_USE_BASE_CLOCK (1<<19) +#define SDHCI_QUIRK2_USE_MAX_DISCARD_SIZE (1<<20) + int irq; /* Device IRQ */ void __iomem *ioaddr; /* Mapped address */