On Fri, 2 Jul 2021 at 14:34, Alan Cooper <alcooperx@xxxxxxxxx> wrote: > > On Wed, Jun 30, 2021 at 10:21 AM Ulf Hansson <ulf.hansson@xxxxxxxxxx> wrote: > > > > 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? > > The function sdhci_get_preset_value(), which is missing the HS modes, > was added in 52983382c74f5 for v3.9. Should I add a fixes tag for that > commit? Thanks for checking this! I have amended the patch to add a fixes/stable tag and applied it for fixes. Kind regards Uffe > > Thanks > Al > > > > > 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 > > >