mirror of
https://github.com/hardkernel/linux.git
synced 2026-06-09 12:17:12 +09:00
mmc: sdhci-of-esdhc: fix quirk to ignore command inhibit for data
[ Upstream commit0dd8316037] 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:1f1929f3f2("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> Signed-off-by: Sasha Levin <sashal@kernel.org>
This commit is contained in:
committed by
Greg Kroah-Hartman
parent
1975bf0259
commit
98893ae40b
@@ -126,6 +126,7 @@ static u32 esdhc_readl_fixup(struct sdhci_host *host,
|
|||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* The DAT[3:0] line signal levels and the CMD line signal level are
|
* The DAT[3:0] line signal levels and the CMD line signal level are
|
||||||
* not compatible with standard SDHC register. The line signal levels
|
* not compatible with standard SDHC register. The line signal levels
|
||||||
@@ -137,6 +138,16 @@ static u32 esdhc_readl_fixup(struct sdhci_host *host,
|
|||||||
ret = value & 0x000fffff;
|
ret = value & 0x000fffff;
|
||||||
ret |= (value >> 4) & SDHCI_DATA_LVL_MASK;
|
ret |= (value >> 4) & SDHCI_DATA_LVL_MASK;
|
||||||
ret |= (value << 1) & SDHCI_CMD_LVL;
|
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;
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -151,19 +162,6 @@ static u32 esdhc_readl_fixup(struct sdhci_host *host,
|
|||||||
return ret;
|
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;
|
ret = value;
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user