devicetree.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
* [PATCH v1 0/3] Set cqe off during suspend flow
@ 2020-11-12  7:52 Wenbin Mei
  2020-11-12  7:52 ` [PATCH v1 1/3] dt-bindings: mmc: Add optional cqe off properties Wenbin Mei
                   ` (2 more replies)
  0 siblings, 3 replies; 6+ messages in thread
From: Wenbin Mei @ 2020-11-12  7:52 UTC (permalink / raw)
  To: Ulf Hansson, Rob Herring
  Cc: Matthias Brugger, irq-linux, Wenbin Mei,
	Veerabhadrarao Badiganti, Yoshihiro Shimoda, Baolin Wang,
	Ludovic Barre, Krishna Konda, Bradley Bolen, Chaotian Jing,
	linux-mmc, devicetree, linux-kernel, linux-arm-kernel,
	linux-mediatek, srv_heupstream

Wenbin Mei (3):
  dt-bindings: mmc: Add optional cqe off properties
  arm64: dts: mt8192: Add cqe off flag
  mmc: core: Set cqe off during suspend flow
---
This patch depends on
[PATCH v7 3/4] arm64: dts: mt8192: add mmc device node

Please also accept this patch together with [1]
to avoid build and dt binding check error.
[1] https://patchwork.kernel.org/project/linux-mediatek/list/?series=364279
---
 Documentation/devicetree/bindings/mmc/mmc-controller.yaml | 7 +++++++
 arch/arm64/boot/dts/mediatek/mt8192-evb.dts               | 1 +
 drivers/mmc/core/host.c                                   | 2 ++
 drivers/mmc/core/mmc.c                                    | 5 +++++
 include/linux/mmc/pm.h                                    | 1 +
 5 files changed, 16 insertions(+)

--
2.18.0



^ permalink raw reply	[flat|nested] 6+ messages in thread

* [PATCH v1 1/3] dt-bindings: mmc: Add optional cqe off properties
  2020-11-12  7:52 [PATCH v1 0/3] Set cqe off during suspend flow Wenbin Mei
@ 2020-11-12  7:52 ` Wenbin Mei
  2020-11-16 19:28   ` Rob Herring
  2020-11-12  7:52 ` [PATCH v1 2/3] arm64: dts: mt8192: Add cqe off flag Wenbin Mei
  2020-11-12  7:52 ` [PATCH v1 3/3] mmc: core: Set cqe off during suspend flow Wenbin Mei
  2 siblings, 1 reply; 6+ messages in thread
From: Wenbin Mei @ 2020-11-12  7:52 UTC (permalink / raw)
  To: Ulf Hansson, Rob Herring
  Cc: Matthias Brugger, irq-linux, Wenbin Mei,
	Veerabhadrarao Badiganti, Yoshihiro Shimoda, Baolin Wang,
	Ludovic Barre, Krishna Konda, Bradley Bolen, Chaotian Jing,
	linux-mmc, devicetree, linux-kernel, linux-arm-kernel,
	linux-mediatek, srv_heupstream

Add optional properties for cqe hosts which are used to set cqe off
during suspend flow.

Signed-off-by: Wenbin Mei <wenbin.mei@mediatek.com>
---
 Documentation/devicetree/bindings/mmc/mmc-controller.yaml | 7 +++++++
 1 file changed, 7 insertions(+)

diff --git a/Documentation/devicetree/bindings/mmc/mmc-controller.yaml b/Documentation/devicetree/bindings/mmc/mmc-controller.yaml
index b96da0c7f819..457c9a84b988 100644
--- a/Documentation/devicetree/bindings/mmc/mmc-controller.yaml
+++ b/Documentation/devicetree/bindings/mmc/mmc-controller.yaml
@@ -164,6 +164,13 @@ properties:
     description:
       enable SDIO IRQ signalling on this interface
 
+  cqe-off-in-suspend:
+    $ref: /schemas/types.yaml#/definitions/flag
+    description:
+      After suspend, the mmc host is powered off by HW, and bring CQE register
+      to default state, so we add the flag to re-init CQE register after resume
+      back.
+
   full-pwr-cycle:
     $ref: /schemas/types.yaml#/definitions/flag
     description:
-- 
2.18.0


^ permalink raw reply related	[flat|nested] 6+ messages in thread

* [PATCH v1 2/3] arm64: dts: mt8192: Add cqe off flag
  2020-11-12  7:52 [PATCH v1 0/3] Set cqe off during suspend flow Wenbin Mei
  2020-11-12  7:52 ` [PATCH v1 1/3] dt-bindings: mmc: Add optional cqe off properties Wenbin Mei
@ 2020-11-12  7:52 ` Wenbin Mei
  2020-11-12  7:52 ` [PATCH v1 3/3] mmc: core: Set cqe off during suspend flow Wenbin Mei
  2 siblings, 0 replies; 6+ messages in thread
From: Wenbin Mei @ 2020-11-12  7:52 UTC (permalink / raw)
  To: Ulf Hansson, Rob Herring
  Cc: Matthias Brugger, irq-linux, Wenbin Mei,
	Veerabhadrarao Badiganti, Yoshihiro Shimoda, Baolin Wang,
	Ludovic Barre, Krishna Konda, Bradley Bolen, Chaotian Jing,
	linux-mmc, devicetree, linux-kernel, linux-arm-kernel,
	linux-mediatek, srv_heupstream

Add cqe off flag for MT8192 mmc nodes.

Signed-off-by: Wenbin Mei <wenbin.mei@mediatek.com>
---
 arch/arm64/boot/dts/mediatek/mt8192-evb.dts | 1 +
 1 file changed, 1 insertion(+)

diff --git a/arch/arm64/boot/dts/mediatek/mt8192-evb.dts b/arch/arm64/boot/dts/mediatek/mt8192-evb.dts
index a4279fa87c2b..0df78e4ea0d0 100644
--- a/arch/arm64/boot/dts/mediatek/mt8192-evb.dts
+++ b/arch/arm64/boot/dts/mediatek/mt8192-evb.dts
@@ -41,6 +41,7 @@
 	mmc-hs400-1_8v;
 	supports-cqe;
 	cap-mmc-hw-reset;
+	cqe-off-in-suspend;
 	no-sdio;
 	no-sd;
 	hs400-ds-delay = <0x12814>;
-- 
2.18.0


^ permalink raw reply related	[flat|nested] 6+ messages in thread

* [PATCH v1 3/3] mmc: core: Set cqe off during suspend flow
  2020-11-12  7:52 [PATCH v1 0/3] Set cqe off during suspend flow Wenbin Mei
  2020-11-12  7:52 ` [PATCH v1 1/3] dt-bindings: mmc: Add optional cqe off properties Wenbin Mei
  2020-11-12  7:52 ` [PATCH v1 2/3] arm64: dts: mt8192: Add cqe off flag Wenbin Mei
@ 2020-11-12  7:52 ` Wenbin Mei
  2 siblings, 0 replies; 6+ messages in thread
From: Wenbin Mei @ 2020-11-12  7:52 UTC (permalink / raw)
  To: Ulf Hansson, Rob Herring
  Cc: Matthias Brugger, irq-linux, Wenbin Mei,
	Veerabhadrarao Badiganti, Yoshihiro Shimoda, Baolin Wang,
	Ludovic Barre, Krishna Konda, Bradley Bolen, Chaotian Jing,
	linux-mmc, devicetree, linux-kernel, linux-arm-kernel,
	linux-mediatek, srv_heupstream

Before we got these errors on MT8192 platform:
[   59.153891] Restarting tasks ...
[   59.154540] done.
[   59.159175] PM: suspend exit
[   59.218724] mtk-msdc 11f60000.mmc: phase: [map:fffffffe] [maxlen:31]
[final:16]
[  119.776083] mmc0: cqhci: timeout for tag 9
[  119.780196] mmc0: cqhci: ============ CQHCI REGISTER DUMP ===========
[  119.786709] mmc0: cqhci: Caps:      0x100020b6 | Version:  0x00000510
[  119.793225] mmc0: cqhci: Config:    0x00000101 | Control:  0x00000000
[  119.799706] mmc0: cqhci: Int stat:  0x00000000 | Int enab: 0x00000000
[  119.806177] mmc0: cqhci: Int sig:   0x00000000 | Int Coal: 0x00000000
[  119.812670] mmc0: cqhci: TDL base:  0x00000000 | TDL up32: 0x00000000
[  119.819149] mmc0: cqhci: Doorbell:  0x003ffc00 | TCN:      0x00000200
[  119.825656] mmc0: cqhci: Dev queue: 0x00000000 | Dev Pend: 0x00000000
[  119.832155] mmc0: cqhci: Task clr:  0x00000000 | SSC1:     0x00001000
[  119.838627] mmc0: cqhci: SSC2:      0x00000000 | DCMD rsp: 0x00000000
[  119.845174] mmc0: cqhci: RED mask:  0xfdf9a080 | TERRI:    0x0000891c
[  119.851654] mmc0: cqhci: Resp idx:  0x00000000 | Resp arg: 0x00000000
[  119.865773] mmc0: cqhci: : ===========================================
[  119.872358] mmc0: running CQE recovery
From these logs, we found TDL base was back to the default value.

After suspend, the mmc host is powered off by HW, and bring CQE register
to the default value, so CQE need to be re-initialized after resuming back.

Signed-off-by: Wenbin Mei <wenbin.mei@mediatek.com>
---
 drivers/mmc/core/host.c | 2 ++
 drivers/mmc/core/mmc.c  | 5 +++++
 include/linux/mmc/pm.h  | 1 +
 3 files changed, 8 insertions(+)

diff --git a/drivers/mmc/core/host.c b/drivers/mmc/core/host.c
index ce43f7573d80..c98486c8fb3b 100644
--- a/drivers/mmc/core/host.c
+++ b/drivers/mmc/core/host.c
@@ -284,6 +284,8 @@ int mmc_of_parse(struct mmc_host *host)
 	if (device_property_read_bool(dev, "wakeup-source") ||
 	    device_property_read_bool(dev, "enable-sdio-wakeup")) /* legacy */
 		host->pm_caps |= MMC_PM_WAKE_SDIO_IRQ;
+	if (device_property_read_bool(dev, "cqe-off-in-suspend"))
+		host->pm_caps |= MMC_PM_CQE_OFF_IN_SUSPEND;
 	if (device_property_read_bool(dev, "mmc-ddr-3_3v"))
 		host->caps |= MMC_CAP_3_3V_DDR;
 	if (device_property_read_bool(dev, "mmc-ddr-1_8v"))
diff --git a/drivers/mmc/core/mmc.c b/drivers/mmc/core/mmc.c
index b3fa193de846..f5ae1f13a867 100644
--- a/drivers/mmc/core/mmc.c
+++ b/drivers/mmc/core/mmc.c
@@ -2047,6 +2047,11 @@ static int _mmc_suspend(struct mmc_host *host, bool is_suspend)
 		err = mmc_deselect_cards(host);
 
 	if (!err) {
+		if (host->cqe_enabled &&
+		    (host->pm_caps & MMC_PM_CQE_OFF_IN_SUSPEND)) {
+			host->cqe_ops->cqe_disable(host);
+			host->cqe_enabled = false;
+		}
 		mmc_power_off(host);
 		mmc_card_set_suspended(host->card);
 	}
diff --git a/include/linux/mmc/pm.h b/include/linux/mmc/pm.h
index 3549f8045784..3dd1046f2c8f 100644
--- a/include/linux/mmc/pm.h
+++ b/include/linux/mmc/pm.h
@@ -23,5 +23,6 @@ typedef unsigned int mmc_pm_flag_t;
 
 #define MMC_PM_KEEP_POWER	(1 << 0)	/* preserve card power during suspend */
 #define MMC_PM_WAKE_SDIO_IRQ	(1 << 1)	/* wake up host system on SDIO IRQ assertion */
+#define MMC_PM_CQE_OFF_IN_SUSPEND  (1 << 2)	/* cqe off during suspend */
 
 #endif /* LINUX_MMC_PM_H */
-- 
2.18.0


^ permalink raw reply related	[flat|nested] 6+ messages in thread

* Re: [PATCH v1 1/3] dt-bindings: mmc: Add optional cqe off properties
  2020-11-12  7:52 ` [PATCH v1 1/3] dt-bindings: mmc: Add optional cqe off properties Wenbin Mei
@ 2020-11-16 19:28   ` Rob Herring
  2020-11-18  3:26     ` Wenbin Mei
  0 siblings, 1 reply; 6+ messages in thread
From: Rob Herring @ 2020-11-16 19:28 UTC (permalink / raw)
  To: Wenbin Mei
  Cc: Ulf Hansson, Matthias Brugger, irq-linux,
	Veerabhadrarao Badiganti, Yoshihiro Shimoda, Baolin Wang,
	Ludovic Barre, Krishna Konda, Bradley Bolen, Chaotian Jing,
	linux-mmc, devicetree, linux-kernel, linux-arm-kernel,
	linux-mediatek, srv_heupstream

On Thu, Nov 12, 2020 at 03:52:06PM +0800, Wenbin Mei wrote:
> Add optional properties for cqe hosts which are used to set cqe off
> during suspend flow.
> 
> Signed-off-by: Wenbin Mei <wenbin.mei@mediatek.com>
> ---
>  Documentation/devicetree/bindings/mmc/mmc-controller.yaml | 7 +++++++
>  1 file changed, 7 insertions(+)
> 
> diff --git a/Documentation/devicetree/bindings/mmc/mmc-controller.yaml b/Documentation/devicetree/bindings/mmc/mmc-controller.yaml
> index b96da0c7f819..457c9a84b988 100644
> --- a/Documentation/devicetree/bindings/mmc/mmc-controller.yaml
> +++ b/Documentation/devicetree/bindings/mmc/mmc-controller.yaml
> @@ -164,6 +164,13 @@ properties:
>      description:
>        enable SDIO IRQ signalling on this interface
>  
> +  cqe-off-in-suspend:
> +    $ref: /schemas/types.yaml#/definitions/flag
> +    description:
> +      After suspend, the mmc host is powered off by HW, and bring CQE register
> +      to default state, so we add the flag to re-init CQE register after resume
> +      back.

The driver change is before suspend, but this says on resume...

In any case, this should be implied by the SoC specific compatible.

> +
>    full-pwr-cycle:
>      $ref: /schemas/types.yaml#/definitions/flag
>      description:
> -- 
> 2.18.0
> 

^ permalink raw reply	[flat|nested] 6+ messages in thread

* Re: [PATCH v1 1/3] dt-bindings: mmc: Add optional cqe off properties
  2020-11-16 19:28   ` Rob Herring
@ 2020-11-18  3:26     ` Wenbin Mei
  0 siblings, 0 replies; 6+ messages in thread
From: Wenbin Mei @ 2020-11-18  3:26 UTC (permalink / raw)
  To: Rob Herring
  Cc: Ulf Hansson, Matthias Brugger, irq-linux,
	Veerabhadrarao Badiganti, Yoshihiro Shimoda, Baolin Wang,
	Ludovic Barre, Krishna Konda, Bradley Bolen, Chaotian Jing,
	linux-mmc, devicetree, linux-kernel, linux-arm-kernel,
	linux-mediatek, srv_heupstream

On Mon, 2020-11-16 at 13:28 -0600, Rob Herring wrote:
> On Thu, Nov 12, 2020 at 03:52:06PM +0800, Wenbin Mei wrote:
> > Add optional properties for cqe hosts which are used to set cqe off
> > during suspend flow.
> > 
> > Signed-off-by: Wenbin Mei <wenbin.mei@mediatek.com>
> > ---
> >  Documentation/devicetree/bindings/mmc/mmc-controller.yaml | 7 +++++++
> >  1 file changed, 7 insertions(+)
> > 
> > diff --git a/Documentation/devicetree/bindings/mmc/mmc-controller.yaml b/Documentation/devicetree/bindings/mmc/mmc-controller.yaml
> > index b96da0c7f819..457c9a84b988 100644
> > --- a/Documentation/devicetree/bindings/mmc/mmc-controller.yaml
> > +++ b/Documentation/devicetree/bindings/mmc/mmc-controller.yaml
> > @@ -164,6 +164,13 @@ properties:
> >      description:
> >        enable SDIO IRQ signalling on this interface
> >  
> > +  cqe-off-in-suspend:
> > +    $ref: /schemas/types.yaml#/definitions/flag
> > +    description:
> > +      After suspend, the mmc host is powered off by HW, and bring CQE register
> > +      to default state, so we add the flag to re-init CQE register after resume
> > +      back.
> 
> The driver change is before suspend, but this says on resume...
> 
> In any case, this should be implied by the SoC specific compatible.
> 
Thanks for your reply, I will drop this patchset, and resend another
patchset for this issue.
> > +
> >    full-pwr-cycle:
> >      $ref: /schemas/types.yaml#/definitions/flag
> >      description:
> > -- 
> > 2.18.0
> > 


^ permalink raw reply	[flat|nested] 6+ messages in thread

end of thread, other threads:[~2020-11-18  3:27 UTC | newest]

Thread overview: 6+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2020-11-12  7:52 [PATCH v1 0/3] Set cqe off during suspend flow Wenbin Mei
2020-11-12  7:52 ` [PATCH v1 1/3] dt-bindings: mmc: Add optional cqe off properties Wenbin Mei
2020-11-16 19:28   ` Rob Herring
2020-11-18  3:26     ` Wenbin Mei
2020-11-12  7:52 ` [PATCH v1 2/3] arm64: dts: mt8192: Add cqe off flag Wenbin Mei
2020-11-12  7:52 ` [PATCH v1 3/3] mmc: core: Set cqe off during suspend flow Wenbin Mei

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).