Message ID | 1504098251-27739-2-git-send-email-riteshh@codeaurora.org (mailing list archive) |
---|---|
State | New, archived |
Headers | show |
On 30/08/17 16:04, Ritesh Harjani wrote: > Without this patch the CQHCI registers are getting reset > again. > > Signed-off-by: Ritesh Harjani <riteshh@codeaurora.org> > --- > drivers/mmc/host/cqhci.c | 7 +++---- > 1 file changed, 3 insertions(+), 4 deletions(-) > > diff --git a/drivers/mmc/host/cqhci.c b/drivers/mmc/host/cqhci.c > index 8650a13..2a7351c 100644 > --- a/drivers/mmc/host/cqhci.c > +++ b/drivers/mmc/host/cqhci.c > @@ -262,6 +262,9 @@ static void __cqhci_enable(struct cqhci_host *cq_host) > > cqhci_writel(cq_host, cqcfg, CQHCI_CFG); > > + cqcfg |= CQHCI_ENABLE; > + cqhci_writel(cq_host, cqcfg, CQHCI_CFG); That doesn't follow the flow in the specification B.6.1. Command Queuing Initialization Sequence. Also in B.3.5 Task List, the spec. says "Changing the value of TDLBA is not allowed when command queue mode is enabled." So you will need to add a quirk for this. > + > cqhci_writel(cq_host, lower_32_bits(cq_host->desc_dma_base), > CQHCI_TDLBA); > cqhci_writel(cq_host, upper_32_bits(cq_host->desc_dma_base), > @@ -271,10 +274,6 @@ static void __cqhci_enable(struct cqhci_host *cq_host) > > cqhci_set_irqs(cq_host, 0); > > - cqcfg |= CQHCI_ENABLE; > - > - cqhci_writel(cq_host, cqcfg, CQHCI_CFG); > - > mmc->cqe_on = true; > > if (cq_host->ops->enable) > -- To unsubscribe from this list: send the line "unsubscribe linux-mmc" in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html
On 8/31/2017 11:31 AM, Adrian Hunter wrote: > On 30/08/17 16:04, Ritesh Harjani wrote: >> Without this patch the CQHCI registers are getting reset >> again. >> >> Signed-off-by: Ritesh Harjani <riteshh@codeaurora.org> >> --- >> drivers/mmc/host/cqhci.c | 7 +++---- >> 1 file changed, 3 insertions(+), 4 deletions(-) >> >> diff --git a/drivers/mmc/host/cqhci.c b/drivers/mmc/host/cqhci.c >> index 8650a13..2a7351c 100644 >> --- a/drivers/mmc/host/cqhci.c >> +++ b/drivers/mmc/host/cqhci.c >> @@ -262,6 +262,9 @@ static void __cqhci_enable(struct cqhci_host *cq_host) >> >> cqhci_writel(cq_host, cqcfg, CQHCI_CFG); >> >> + cqcfg |= CQHCI_ENABLE; >> + cqhci_writel(cq_host, cqcfg, CQHCI_CFG); > That doesn't follow the flow in the specification B.6.1. Command Queuing > Initialization Sequence. Also in B.3.5 Task List, the spec. says "Changing > the value of TDLBA is not allowed when command queue mode is enabled." > > So you will need to add a quirk for this. Sure. thanks. > >> + >> cqhci_writel(cq_host, lower_32_bits(cq_host->desc_dma_base), >> CQHCI_TDLBA); >> cqhci_writel(cq_host, upper_32_bits(cq_host->desc_dma_base), >> @@ -271,10 +274,6 @@ static void __cqhci_enable(struct cqhci_host *cq_host) >> >> cqhci_set_irqs(cq_host, 0); >> >> - cqcfg |= CQHCI_ENABLE; >> - >> - cqhci_writel(cq_host, cqcfg, CQHCI_CFG); >> - >> mmc->cqe_on = true; >> >> if (cq_host->ops->enable) >> >
diff --git a/drivers/mmc/host/cqhci.c b/drivers/mmc/host/cqhci.c index 8650a13..2a7351c 100644 --- a/drivers/mmc/host/cqhci.c +++ b/drivers/mmc/host/cqhci.c @@ -262,6 +262,9 @@ static void __cqhci_enable(struct cqhci_host *cq_host) cqhci_writel(cq_host, cqcfg, CQHCI_CFG); + cqcfg |= CQHCI_ENABLE; + cqhci_writel(cq_host, cqcfg, CQHCI_CFG); + cqhci_writel(cq_host, lower_32_bits(cq_host->desc_dma_base), CQHCI_TDLBA); cqhci_writel(cq_host, upper_32_bits(cq_host->desc_dma_base), @@ -271,10 +274,6 @@ static void __cqhci_enable(struct cqhci_host *cq_host) cqhci_set_irqs(cq_host, 0); - cqcfg |= CQHCI_ENABLE; - - cqhci_writel(cq_host, cqcfg, CQHCI_CFG); - mmc->cqe_on = true; if (cq_host->ops->enable)
Without this patch the CQHCI registers are getting reset again. Signed-off-by: Ritesh Harjani <riteshh@codeaurora.org> --- drivers/mmc/host/cqhci.c | 7 +++---- 1 file changed, 3 insertions(+), 4 deletions(-)