Re: [RFC 1/4] mmc: cqhci: Move CQHCI_ENABLE before setting TDLBA/TDLBAU

2017-09-01 Thread Ritesh Harjani



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 
---
  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)






--
Qualcomm India Private Limited, on behalf of Qualcomm Innovation Center, 
Inc.
Qualcomm Innovation Center, Inc. is a member of Code Aurora Forum, a 
Linux Foundation Collaborative Project.


Re: [RFC 1/4] mmc: cqhci: Move CQHCI_ENABLE before setting TDLBA/TDLBAU

2017-09-01 Thread Ritesh Harjani



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 
---
  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)






--
Qualcomm India Private Limited, on behalf of Qualcomm Innovation Center, 
Inc.
Qualcomm Innovation Center, Inc. is a member of Code Aurora Forum, a 
Linux Foundation Collaborative Project.


Re: [RFC 1/4] mmc: cqhci: Move CQHCI_ENABLE before setting TDLBA/TDLBAU

2017-08-31 Thread Adrian Hunter
On 30/08/17 16:04, Ritesh Harjani wrote:
> Without this patch the CQHCI registers are getting reset
> again.
> 
> Signed-off-by: Ritesh Harjani 
> ---
>  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)
> 



Re: [RFC 1/4] mmc: cqhci: Move CQHCI_ENABLE before setting TDLBA/TDLBAU

2017-08-31 Thread Adrian Hunter
On 30/08/17 16:04, Ritesh Harjani wrote:
> Without this patch the CQHCI registers are getting reset
> again.
> 
> Signed-off-by: Ritesh Harjani 
> ---
>  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)
> 



[RFC 1/4] mmc: cqhci: Move CQHCI_ENABLE before setting TDLBA/TDLBAU

2017-08-30 Thread Ritesh Harjani
Without this patch the CQHCI registers are getting reset
again.

Signed-off-by: Ritesh Harjani 
---
 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);
+
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)
-- 
Qualcomm India Private Limited, on behalf of Qualcomm Innovation Center, Inc.
Qualcomm Innovation Center, Inc. is a member of Code Aurora Forum, a Linux 
Foundation Collaborative Project.



[RFC 1/4] mmc: cqhci: Move CQHCI_ENABLE before setting TDLBA/TDLBAU

2017-08-30 Thread Ritesh Harjani
Without this patch the CQHCI registers are getting reset
again.

Signed-off-by: Ritesh Harjani 
---
 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);
+
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)
-- 
Qualcomm India Private Limited, on behalf of Qualcomm Innovation Center, Inc.
Qualcomm Innovation Center, Inc. is a member of Code Aurora Forum, a Linux 
Foundation Collaborative Project.



[RFC 1/4] mmc: cqhci: Move CQHCI_ENABLE before setting TDLBA/TDLBAU

2017-08-30 Thread Ritesh Harjani
From: Ritesh Harjani 

Without this patch the CQHCI registers are getting reset
again.

Signed-off-by: Ritesh Harjani 
---
 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);
+
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)
-- 
Qualcomm India Private Limited, on behalf of Qualcomm Innovation Center, Inc.
Qualcomm Innovation Center, Inc. is a member of Code Aurora Forum, a Linux 
Foundation Collaborative Project.



[RFC 1/4] mmc: cqhci: Move CQHCI_ENABLE before setting TDLBA/TDLBAU

2017-08-30 Thread Ritesh Harjani
From: Ritesh Harjani 

Without this patch the CQHCI registers are getting reset
again.

Signed-off-by: Ritesh Harjani 
---
 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);
+
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)
-- 
Qualcomm India Private Limited, on behalf of Qualcomm Innovation Center, Inc.
Qualcomm Innovation Center, Inc. is a member of Code Aurora Forum, a Linux 
Foundation Collaborative Project.