lkml.org 
[lkml]   [2021]   [Nov]   [15]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[PATCH 5.14 016/849] mmc: mtk-sd: Add wait dma stop done flow
    Date
    From: Derong Liu <derong.liu@mediatek.com>

    commit 43e5fee317f4b0a48992b8b07935b1a3ac20ce84 upstream.

    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-sd 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@mediatek.com>
    Cc: stable@vger.kernel.org
    Link: https://lore.kernel.org/r/20210827071537.1034-1-derong.liu@mediatek.com
    Signed-off-by: Ulf Hansson <ulf.hansson@linaro.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
    ---
    drivers/mmc/host/mtk-sd.c | 5 +++++
    1 file changed, 5 insertions(+)

    --- a/drivers/mmc/host/mtk-sd.c
    +++ b/drivers/mmc/host/mtk-sd.c
    @@ -8,6 +8,7 @@
    #include <linux/clk.h>
    #include <linux/delay.h>
    #include <linux/dma-mapping.h>
    +#include <linux/iopoll.h>
    #include <linux/ioport.h>
    #include <linux/irq.h>
    #include <linux/of_address.h>
    @@ -2330,6 +2331,7 @@ static void msdc_cqe_enable(struct mmc_h
    static void msdc_cqe_disable(struct mmc_host *mmc, bool recovery)
    {
    struct msdc_host *host = mmc_priv(mmc);
    + unsigned int val = 0;

    /* disable cmdq irq */
    sdr_clr_bits(host->base + MSDC_INTEN, MSDC_INT_CMDQ);
    @@ -2339,6 +2341,9 @@ static void msdc_cqe_disable(struct mmc_
    if (recovery) {
    sdr_set_field(host->base + MSDC_DMA_CTRL,
    MSDC_DMA_CTRL_STOP, 1);
    + if (WARN_ON(readl_poll_timeout(host->base + MSDC_DMA_CFG, val,
    + !(val & MSDC_DMA_CFG_STS), 1, 3000)))
    + return;
    msdc_reset_hw(host);
    }
    }

    \
     
     \ /
      Last update: 2021-11-15 22:29    [W:4.022 / U:0.660 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site