From: Greg Kroah-Hartman Date: Tue, 10 May 2022 12:41:09 +0000 (+0200) Subject: 4.19-stable patches X-Git-Tag: v4.9.313~6 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=39a858ea99402d7c8c0a1cd6d0c03506419a70f5;p=thirdparty%2Fkernel%2Fstable-queue.git 4.19-stable patches added patches: mmc-rtsx-add-74-clocks-in-power-on-flow.patch --- diff --git a/queue-4.19/mmc-rtsx-add-74-clocks-in-power-on-flow.patch b/queue-4.19/mmc-rtsx-add-74-clocks-in-power-on-flow.patch new file mode 100644 index 00000000000..f12ac8692c1 --- /dev/null +++ b/queue-4.19/mmc-rtsx-add-74-clocks-in-power-on-flow.patch @@ -0,0 +1,114 @@ +From 1f311c94aabdb419c28e3147bcc8ab89269f1a7e Mon Sep 17 00:00:00 2001 +From: Ricky WU +Date: Wed, 2 Mar 2022 09:43:01 +0000 +Subject: mmc: rtsx: add 74 Clocks in power on flow + +From: Ricky WU + +commit 1f311c94aabdb419c28e3147bcc8ab89269f1a7e upstream. + +SD spec definition: +"Host provides at least 74 Clocks before issuing first command" +After 1ms for the voltage stable then start issuing the Clock signals + +if POWER STATE is +MMC_POWER_OFF to MMC_POWER_UP to issue Clock signal to card +MMC_POWER_UP to MMC_POWER_ON to stop issuing signal to card + +Signed-off-by: Ricky Wu +Link: https://lore.kernel.org/r/1badf10aba764191a1a752edcbf90389@realtek.com +Signed-off-by: Ulf Hansson +Signed-off-by: Christian Loehle +Signed-off-by: Greg Kroah-Hartman +--- + drivers/mmc/host/rtsx_pci_sdmmc.c | 31 +++++++++++++++++++++---------- + 1 file changed, 21 insertions(+), 10 deletions(-) + +--- a/drivers/mmc/host/rtsx_pci_sdmmc.c ++++ b/drivers/mmc/host/rtsx_pci_sdmmc.c +@@ -49,10 +49,7 @@ struct realtek_pci_sdmmc { + bool double_clk; + bool eject; + bool initial_mode; +- int power_state; +-#define SDMMC_POWER_ON 1 +-#define SDMMC_POWER_OFF 0 +- ++ int prev_power_state; + int sg_count; + s32 cookie; + int cookie_sg_count; +@@ -914,14 +911,21 @@ static int sd_set_bus_width(struct realt + return err; + } + +-static int sd_power_on(struct realtek_pci_sdmmc *host) ++static int sd_power_on(struct realtek_pci_sdmmc *host, unsigned char power_mode) + { + struct rtsx_pcr *pcr = host->pcr; + int err; + +- if (host->power_state == SDMMC_POWER_ON) ++ if (host->prev_power_state == MMC_POWER_ON) + return 0; + ++ if (host->prev_power_state == MMC_POWER_UP) { ++ rtsx_pci_write_register(pcr, SD_BUS_STAT, SD_CLK_TOGGLE_EN, 0); ++ goto finish; ++ } ++ ++ msleep(100); ++ + rtsx_pci_init_cmd(pcr); + rtsx_pci_add_cmd(pcr, WRITE_REG_CMD, CARD_SELECT, 0x07, SD_MOD_SEL); + rtsx_pci_add_cmd(pcr, WRITE_REG_CMD, CARD_SHARE_MODE, +@@ -940,11 +944,17 @@ static int sd_power_on(struct realtek_pc + 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; + +- host->power_state = SDMMC_POWER_ON; ++ /* send at least 74 clocks */ ++ rtsx_pci_write_register(pcr, SD_BUS_STAT, SD_CLK_TOGGLE_EN, SD_CLK_TOGGLE_EN); ++ ++finish: ++ host->prev_power_state = power_mode; + return 0; + } + +@@ -953,7 +963,7 @@ static int sd_power_off(struct realtek_p + struct rtsx_pcr *pcr = host->pcr; + int err; + +- host->power_state = SDMMC_POWER_OFF; ++ host->prev_power_state = MMC_POWER_OFF; + + rtsx_pci_init_cmd(pcr); + +@@ -979,7 +989,7 @@ static int sd_set_power_mode(struct real + if (power_mode == MMC_POWER_OFF) + err = sd_power_off(host); + else +- err = sd_power_on(host); ++ err = sd_power_on(host, power_mode); + + return err; + } +@@ -1414,10 +1424,11 @@ static int rtsx_pci_sdmmc_drv_probe(stru + + host = mmc_priv(mmc); + host->pcr = pcr; ++ mmc->ios.power_delay_ms = 5; + host->mmc = mmc; + host->pdev = pdev; + host->cookie = -1; +- host->power_state = SDMMC_POWER_OFF; ++ host->prev_power_state = MMC_POWER_OFF; + INIT_WORK(&host->work, sd_request); + platform_set_drvdata(pdev, host); + pcr->slots[RTSX_SD_CARD].p_dev = pdev; diff --git a/queue-4.19/series b/queue-4.19/series index 5824067444b..2207c56824b 100644 --- a/queue-4.19/series +++ b/queue-4.19/series @@ -87,3 +87,4 @@ dm-fix-mempool-null-pointer-race-when-completing-io.patch dm-interlock-pending-dm_io-and-dm_wait_for_bios_completion.patch pci-aardvark-clear-all-msis-at-setup.patch pci-aardvark-fix-reading-msi-interrupt-number.patch +mmc-rtsx-add-74-clocks-in-power-on-flow.patch