On Thu, 24 Jun 2021 at 18:31, Al Cooper <alcooperx@xxxxxxxxx> wrote: > > When an eMMC device is being run in HS400 mode, any access to the > RPMB device will cause the error message "mmc1: Invalid UHS-I mode > selected". This happens as a result of tuning being disabled before > RPMB access and then re-enabled after the RPMB access is complete. > When tuning is re-enabled, the system has to switch from HS400 > to HS200 to do the tuning and then back to HS400. As part of > sequence to switch from HS400 to HS200 the system is temporarily > put into HS mode. When switching to HS mode, sdhci_get_preset_value() > is called and does not have support for HS mode and prints the warning > message and returns the preset for SDR12. The fix is to add support > for MMC and SD HS modes to sdhci_get_preset_value(). > > This can be reproduced on any system running eMMC in HS400 mode > (not HS400ES) by using the "mmc" utility to run the following > command: "mmc rpmb read-counter /dev/mmcblk0rpmb". > > Signed-off-by: Al Cooper <alcooperx@xxxxxxxxx> I assume we want this for stable kernels, but it would be nice to add a fixes tag as well. Do you know if there is a specific commit that this fixes? Kind regards Uffe > --- > drivers/mmc/host/sdhci.c | 4 ++++ > drivers/mmc/host/sdhci.h | 1 + > 2 files changed, 5 insertions(+) > > diff --git a/drivers/mmc/host/sdhci.c b/drivers/mmc/host/sdhci.c > index bf238ade1602..6b39126fbf06 100644 > --- a/drivers/mmc/host/sdhci.c > +++ b/drivers/mmc/host/sdhci.c > @@ -1812,6 +1812,10 @@ static u16 sdhci_get_preset_value(struct sdhci_host *host) > u16 preset = 0; > > switch (host->timing) { > + case MMC_TIMING_MMC_HS: > + case MMC_TIMING_SD_HS: > + preset = sdhci_readw(host, SDHCI_PRESET_FOR_HIGH_SPEED); > + break; > case MMC_TIMING_UHS_SDR12: > preset = sdhci_readw(host, SDHCI_PRESET_FOR_SDR12); > break; > diff --git a/drivers/mmc/host/sdhci.h b/drivers/mmc/host/sdhci.h > index 0770c036e2ff..960fed78529e 100644 > --- a/drivers/mmc/host/sdhci.h > +++ b/drivers/mmc/host/sdhci.h > @@ -253,6 +253,7 @@ > > /* 60-FB reserved */ > > +#define SDHCI_PRESET_FOR_HIGH_SPEED 0x64 > #define SDHCI_PRESET_FOR_SDR12 0x66 > #define SDHCI_PRESET_FOR_SDR25 0x68 > #define SDHCI_PRESET_FOR_SDR50 0x6A > > base-commit: 7426cedc7dad67bf3c71ea6cc29ab7822e1a453f > -- > 2.17.1 >