On Mon, 9 Aug 2021 at 09:25, Derong Liu <derong.liu@xxxxxxxxxxxx> wrote: > > We found this issue on a 5G platform, during CMDQ error handling, if DMA status is active when it call msdc_reset_hw, it means mmc host hw reset and DMA transfer will be parallel, mmc host may access sram region unexpectedly. > > According to the programming guide of mtk mmc host,it needs to wait for dma stop done after set dma stop. > This change should be applied to all SoCs. > > Signed-off-by: Derong Liu <derong.liu@xxxxxxxxxxxx> > --- > drivers/mmc/host/mtk-sd.c | 2 ++ > 1 file changed, 2 insertions(+) > > diff --git a/drivers/mmc/host/mtk-sd.c b/drivers/mmc/host/mtk-sd.c > index 4dfc246c5f95..1dfd2842471b 100644 > --- a/drivers/mmc/host/mtk-sd.c > +++ b/drivers/mmc/host/mtk-sd.c > @@ -2339,6 +2339,8 @@ static void msdc_cqe_disable(struct mmc_host *mmc, bool recovery) > if (recovery) { > sdr_set_field(host->base + MSDC_DMA_CTRL, > MSDC_DMA_CTRL_STOP, 1); > + while (readl(host->base + MSDC_DMA_CFG) & MSDC_DMA_CFG_STS) > + cpu_relax(); I suggest you look into using readl_poll_timeout() - as we don't want to hang indefinitely, no matter what. > msdc_reset_hw(host); > } > } > -- > 2.18.0 Kind regards Uffe