On Tue, 21 Mar 2023 at 21:37, Georgii Kruglov <georgy.kruglov@xxxxxxxxx> wrote: > > 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@xxxxxxxxx> Next time, please include acks according to earlier replies. This time I have added Adrian's ack. Applied for next, thanks! Kind regards Uffe > --- > v2: Drop the redundant '== true' as Adrian Hunter <adrian.hunter@xxxxxxxxx> suggested. > 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 > --- a/drivers/mmc/host/sdhci-of-esdhc.c > +++ b/drivers/mmc/host/sdhci-of-esdhc.c > @@ -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.34.1 >