Can we get 1f311c94aabdb419c28e3147bcc8ab89269f1a7e merged into the stable tree? I have some compatibility issues on Realtek chips because of the missing initialization clocks. Thanks! Regards, Christian From: Ulf Hansson <ulf.hansson@xxxxxxxxxx> Sent: Monday, February 28, 2022 5:12 PM To: Ricky WU Cc: gregkh@xxxxxxxxxxxxxxxxxxx; kai.heng.feng@xxxxxxxxxxxxx; tommyhebb@xxxxxxxxx; linux-mmc@xxxxxxxxxxxxxxx; linux-kernel@xxxxxxxxxxxxxxx Subject: Re: [PATCH] mmc: rtsx: add 74 Clocks in power on flow On Tue, 22 Feb 2022 at 08:28, Ricky WU <ricky_wu@xxxxxxxxxxx> wrote: > > After 1ms stabilizing the voltage time > add "Host provides at least 74 Clocks > before issuing first command" that is > spec definition > > Signed-off-by: Ricky Wu <ricky_wu@xxxxxxxxxxx> > --- > drivers/mmc/host/rtsx_pci_sdmmc.c | 7 +++++++ > 1 file changed, 7 insertions(+) > > diff --git a/drivers/mmc/host/rtsx_pci_sdmmc.c b/drivers/mmc/host/rtsx_pci_sdmmc.c > index 2a3f14afe9f8..e016d720e453 100644 > --- a/drivers/mmc/host/rtsx_pci_sdmmc.c > +++ b/drivers/mmc/host/rtsx_pci_sdmmc.c > @@ -940,10 +940,17 @@ static int sd_power_on(struct realtek_pci_sdmmc *host) > if (err < 0) > return err; > > + mdelay(1); > + > err = rtsx_pci_write_register(pcr, CARD_OE, SD_OUTPUT_EN, SD_OUTPUT_EN); > if (err < 0) > return err; > > + /* send init 74 clocks */ > + rtsx_pci_write_register(pcr, SD_BUS_STAT, SD_CLK_TOGGLE_EN, SD_CLK_TOGGLE_EN); > + mdelay(5); > + rtsx_pci_write_register(pcr, SD_BUS_STAT, SD_CLK_TOGGLE_EN, 0); > + > if (PCI_PID(pcr) == PID_5261) { > /* > * If test mode is set switch to SD Express mandatorily, As you probably are aware of, the mmc core uses three power states (MMC_POWER_ON, MMC_POWER_UP and MMC_POWER_OFF) to manage the initialization, while it invokes the ->set_ios() callback for the mmc host driver. During these steps the core also tries to manage the different delays that are needed according to the eMMC/SD specs. You may have a look at mmc_power_up() in drivers/mmc/core/core.c. In the rtsx case, MMC_POWER_ON and MMC_POWER_UP are treated as one single step. Moreover, it has turned out that some mmc HWs are actually controlling these delays during the initialization themselves, which makes the delays in the core superfluous. Therefore we have made the delays configurable for host drivers. For DT based platforms, we have the DT property "post-power-on-delay-ms" and for others, it's perfectly fine to update host->power_delay_ms before calling mmc_add_host(). Would it be possible to take advantage of the above "features" from the core, to avoid hard coded and superfluous delays? Kind regards Uffe = Hyperstone GmbH | Reichenaustr. 39a | 78467 Konstanz Managing Director: Dr. Jan Peter Berns. Commercial register of local courts: Freiburg HRB381782