On 27/08/20 12:33 pm, Chun-Hung Wu wrote: > CQHCI_ENABLE bit in CQHCI_CFG should be disabled > after msdc_cqe_disable(), and should be enabled before > msdc_ceq_enable() for MTK platform. > Add hook functions for cqhci_host_ops->pre_enable() and > cqhci_host_ops->post_disable(). > > Signed-off-by: Chun-Hung Wu <chun-hung.wu@xxxxxxxxxxxx> Acked-by: Adrian Hunter <adrian.hunter@xxxxxxxxx> > --- > drivers/mmc/host/mtk-sd.c | 22 ++++++++++++++++++++++ > 1 file changed, 22 insertions(+) > > diff --git a/drivers/mmc/host/mtk-sd.c b/drivers/mmc/host/mtk-sd.c > index 4e2583f..f53e11b 100644 > --- a/drivers/mmc/host/mtk-sd.c > +++ b/drivers/mmc/host/mtk-sd.c > @@ -2282,6 +2282,26 @@ static void msdc_cqe_disable(struct mmc_host *mmc, bool recovery) > } > } > > +static void msdc_cqe_pre_enable(struct mmc_host *mmc) > +{ > + struct cqhci_host *cq_host = mmc->cqe_private; > + u32 reg; > + > + reg = cqhci_readl(cq_host, CQHCI_CFG); > + reg |= CQHCI_ENABLE; > + cqhci_writel(cq_host, reg, CQHCI_CFG); > +} > + > +static void msdc_cqe_post_disable(struct mmc_host *mmc) > +{ > + struct cqhci_host *cq_host = mmc->cqe_private; > + u32 reg; > + > + reg = cqhci_readl(cq_host, CQHCI_CFG); > + reg &= ~CQHCI_ENABLE; > + cqhci_writel(cq_host, reg, CQHCI_CFG); > +} > + > static const struct mmc_host_ops mt_msdc_ops = { > .post_req = msdc_post_req, > .pre_req = msdc_pre_req, > @@ -2301,6 +2321,8 @@ static void msdc_cqe_disable(struct mmc_host *mmc, bool recovery) > static const struct cqhci_host_ops msdc_cmdq_ops = { > .enable = msdc_cqe_enable, > .disable = msdc_cqe_disable, > + .pre_enable = msdc_cqe_pre_enable, > + .post_disable = msdc_cqe_post_disable, > }; > > static void msdc_of_property_parse(struct platform_device *pdev, >