| From 0dd8316037a2a6d85b2be208bef9991de7b42170 Mon Sep 17 00:00:00 2001 |
| From: Georgii Kruglov <georgy.kruglov@yandex.ru> |
| Date: Tue, 21 Mar 2023 23:37:15 +0300 |
| Subject: [PATCH] mmc: sdhci-of-esdhc: fix quirk to ignore command inhibit for data |
| Git-commit: 0dd8316037a2a6d85b2be208bef9991de7b42170 |
| Patch-mainline: v6.4-rc1 |
| References: git-fixes |
| |
| If spec_reg is equal to 'SDHCI_PRESENT_STATE', esdhc_readl_fixup() |
| fixes up register value and returns it immediately. As a result, the |
| further block |
| (spec_reg == SDHCI_PRESENT_STATE) |
| &&(esdhc->quirk_ignore_data_inhibit == true), |
| is never executed. |
| |
| The patch merges the second block into the first one. |
| |
| Found by Linux Verification Center (linuxtesting.org) with SVACE. |
| |
| Fixes: 1f1929f3f2fa ("mmc: sdhci-of-esdhc: add quirk to ignore command inhibit for data") |
| Signed-off-by: Georgii Kruglov <georgy.kruglov@yandex.ru> |
| Acked-by: Adrian Hunter <adrian.hunter@intel.com> |
| Link: https://lore.kernel.org/r/20230321203715.3975-1-georgy.kruglov@yandex.ru |
| Signed-off-by: Ulf Hansson <ulf.hansson@linaro.org> |
| Acked-by: Takashi Iwai <tiwai@suse.de> |
| |
| |
| drivers/mmc/host/sdhci-of-esdhc.c | 24 +++++++++++------------- |
| 1 file changed, 11 insertions(+), 13 deletions(-) |
| |
| diff --git a/drivers/mmc/host/sdhci-of-esdhc.c b/drivers/mmc/host/sdhci-of-esdhc.c |
| index 4712adac7f7c..48ca1cf15b19 100644 |
| |
| |
| @@ -133,6 +133,7 @@ static u32 esdhc_readl_fixup(struct sdhci_host *host, |
| return ret; |
| } |
| } |
| + |
| /* |
| * The DAT[3:0] line signal levels and the CMD line signal level are |
| * not compatible with standard SDHC register. The line signal levels |
| @@ -144,6 +145,16 @@ static u32 esdhc_readl_fixup(struct sdhci_host *host, |
| ret = value & 0x000fffff; |
| ret |= (value >> 4) & SDHCI_DATA_LVL_MASK; |
| ret |= (value << 1) & SDHCI_CMD_LVL; |
| + |
| + /* |
| + * Some controllers have unreliable Data Line Active |
| + * bit for commands with busy signal. This affects |
| + * Command Inhibit (data) bit. Just ignore it since |
| + * MMC core driver has already polled card status |
| + * with CMD13 after any command with busy siganl. |
| + */ |
| + if (esdhc->quirk_ignore_data_inhibit) |
| + ret &= ~SDHCI_DATA_INHIBIT; |
| return ret; |
| } |
| |
| @@ -158,19 +169,6 @@ static u32 esdhc_readl_fixup(struct sdhci_host *host, |
| return ret; |
| } |
| |
| - /* |
| - * Some controllers have unreliable Data Line Active |
| - * bit for commands with busy signal. This affects |
| - * Command Inhibit (data) bit. Just ignore it since |
| - * MMC core driver has already polled card status |
| - * with CMD13 after any command with busy siganl. |
| - */ |
| - if ((spec_reg == SDHCI_PRESENT_STATE) && |
| - (esdhc->quirk_ignore_data_inhibit == true)) { |
| - ret = value & ~SDHCI_DATA_INHIBIT; |
| - return ret; |
| - } |
| - |
| ret = value; |
| return ret; |
| } |
| -- |
| 2.35.3 |
| |