On Mon, 20 Apr 2020 at 10:04, Marek Behún <marek.behun@xxxxxx> wrote: > > For some reason the Host Control2 register of the Xenon SDHCI controller > sometimes reports the bit representing 1.8V signaling as 0 when read > after it was written as 1. Subsequent read reports 1. > > This causes the sdhci_start_signal_voltage_switch function to report > 1.8V regulator output did not become stable > > When CONFIG_PM is enabled, the host is suspended and resumend many > times, and in each resume the switch to 1.8V is called, and so the > kernel log reports this message annoyingly often. > > Do an empty read of the Host Control2 register in Xenon's > .voltage_switch method to circumvent this. > > This patch fixes this particular problem on Turris MOX. > > Signed-off-by: Marek Behún <marek.behun@xxxxxx> > Fixes: 8d876bf472db ("mmc: sdhci-xenon: wait 5ms after set 1.8V...") > Cc: Zhoujie Wu <zjwu@xxxxxxxxxxx> > Cc: Ulf Hansson <ulf.hansson@xxxxxxxxxx> > Cc: Gregory CLEMENT <gregory.clement@xxxxxxxxxxxxxxxxxx> > Cc: Vladimir Oltean <vladimir.oltean@xxxxxxx> > Cc: Konstantin Porotchkin <kostap@xxxxxxxxxxx> > Cc: Tomasz Maciej Nowak <tmn505@xxxxxxxxx> > Cc: Miquel Raynal <miquel.raynal@xxxxxxxxxxx> Applied for fixes, thanks! Kind regards Uffe > --- > drivers/mmc/host/sdhci-xenon.c | 10 ++++++++++ > 1 file changed, 10 insertions(+) > > diff --git a/drivers/mmc/host/sdhci-xenon.c b/drivers/mmc/host/sdhci-xenon.c > index 1dea1ba66f7b..4703cd540c7f 100644 > --- a/drivers/mmc/host/sdhci-xenon.c > +++ b/drivers/mmc/host/sdhci-xenon.c > @@ -235,6 +235,16 @@ static void xenon_voltage_switch(struct sdhci_host *host) > { > /* Wait for 5ms after set 1.8V signal enable bit */ > usleep_range(5000, 5500); > + > + /* > + * For some reason the controller's Host Control2 register reports > + * the bit representing 1.8V signaling as 0 when read after it was > + * written as 1. Subsequent read reports 1. > + * > + * Since this may cause some issues, do an empty read of the Host > + * Control2 register here to circumvent this. > + */ > + sdhci_readw(host, SDHCI_HOST_CONTROL2); > } > > static const struct sdhci_ops sdhci_xenon_ops = { > -- > 2.24.1 >