lkml.org 
[lkml]   [2020]   [Jun]   [8]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[PATCH AUTOSEL 5.7 076/274] mmc: mmci_sdmmc: fix power on issue due to pwr_reg initialization
    Date
    From: Ludovic Barre <ludovic.barre@st.com>

    [ Upstream commit 33ba6fec0012e47f4e72bfab922b99327373f210 ]

    This patch fix a power-on issue, and avoid to retry the power sequence.

    In power off sequence: sdmmc must set pwr_reg in "power-cycle" state
    (value 0x2), to prevent the card from being supplied through the signal
    lines (all the lines are driven low).

    In power on sequence: when the power is stable, sdmmc must set pwr_reg
    in "power-off" state (value 0x0) to drive all signal to high before to
    set "power-on".

    To avoid writing the same value to the power register several times, this
    register is cached by the pwr_reg variable. At probe pwr_reg is initialized
    to 0 by kzalloc of mmc_alloc_host.

    Like pwr_reg value is 0 at probing, the power on sequence fail because
    the "power-off" state is not writes (value 0x0) and the lines
    remain drive to low.

    This patch initializes "pwr_reg" variable with power register value.
    This it done in sdmmc variant init to not disturb default mmci behavior.

    Signed-off-by: Ludovic Barre <ludovic.barre@st.com>
    Link: https://lore.kernel.org/r/20200420161831.5043-1-ludovic.barre@st.com
    Signed-off-by: Ulf Hansson <ulf.hansson@linaro.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>
    ---
    drivers/mmc/host/mmci_stm32_sdmmc.c | 1 +
    1 file changed, 1 insertion(+)

    diff --git a/drivers/mmc/host/mmci_stm32_sdmmc.c b/drivers/mmc/host/mmci_stm32_sdmmc.c
    index d33e62bd6153..14f99d8aa3f0 100644
    --- a/drivers/mmc/host/mmci_stm32_sdmmc.c
    +++ b/drivers/mmc/host/mmci_stm32_sdmmc.c
    @@ -519,6 +519,7 @@ void sdmmc_variant_init(struct mmci_host *host)
    struct sdmmc_dlyb *dlyb;

    host->ops = &sdmmc_variant_ops;
    + host->pwr_reg = readl_relaxed(host->base + MMCIPOWER);

    base_dlyb = devm_of_iomap(mmc_dev(host->mmc), np, 1, NULL);
    if (IS_ERR(base_dlyb))
    --
    2.25.1
    \
     
     \ /
      Last update: 2020-06-09 01:08    [W:4.033 / U:0.016 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site