diff --git a/drivers/mmc/host/mmci_stm32_sdmmc.c b/drivers/mmc/host/mmci_stm32_sdmmc.c index d18e50e2e39e59..503cfcaea98d37 100644 --- a/drivers/mmc/host/mmci_stm32_sdmmc.c +++ b/drivers/mmc/host/mmci_stm32_sdmmc.c @@ -535,10 +535,20 @@ static int sdmmc_dlyb_mp15_prepare(struct mmci_host *host) static int sdmmc_dlyb_mp25_enable(struct sdmmc_dlyb *dlyb) { u32 cr, sr; + int ret; cr = readl_relaxed(dlyb->base + SYSCFG_DLYBSD_CR); - cr |= DLYBSD_CR_EN; + cr &= ~DLYBSD_CR_EN; + writel_relaxed(cr, dlyb->base + SYSCFG_DLYBSD_CR); + + ret = readl_relaxed_poll_timeout(dlyb->base + SYSCFG_DLYBSD_SR, + sr, !(sr & DLYBSD_SR_LOCK), 1, + DLYBSD_TIMEOUT_1S_IN_US); + if (ret) + return ret; + + cr |= DLYBSD_CR_EN; writel_relaxed(cr, dlyb->base + SYSCFG_DLYBSD_CR); return readl_relaxed_poll_timeout(dlyb->base + SYSCFG_DLYBSD_SR,