Skip to contentSkip to conversation

Tegra30+ CPU suspend-resume bug-fixes

PATCH Superseded Dmitry Osipenko 2 participants 6 messages Jul 7, 2019 – Jul 25, 2019

Subsystems (3)

v1 of 2 Superseded Latest is v2 →

lore
Share & tools
lore
#0 lore raw

cover Tegra30+ CPU suspend-resume bug-fixes

Hello,

This small series addresses two suspend-resume bugs: one affects Tegra30+ due to a typo in the code, other fixes CPU hang on Tegra30 specifically.

Please review and apply, thanks!

Dmitry Osipenko (2):
ARM: tegra: Fix FLOW_CTLR_HALT register clobbering by tegra_resume()
ARM: tegra: Use WFE for power-gating on Tegra30

 arch/arm/mach-tegra/reset-handler.S |  6 +++---
 arch/arm/mach-tegra/sleep-tegra30.S |  4 +++-
 drivers/soc/tegra/flowctrl.c        | 19 +++++++++++++++++--
 3 files changed, 23 insertions(+), 6 deletions(-)
Signature · 1 line
2.22.0
#1 lore raw

PATCH 1/2 ARM: tegra: Fix FLOW_CTLR_HALT register clobbering by tegra_resume()

There is an unfortunate typo in the code that results in writing to FLOW_CTLR_HALT instead of FLOW_CTLR_CSR.

---
 arch/arm/mach-tegra/reset-handler.S | 6 +++---
 1 file changed, 3 insertions(+), 3 deletions(-)
arch/arm/mach-tegra/reset-handler.S +3 -3
index df44828a34d3..53123ae4ac3b 100644
@@ -44,16 +44,16 @@ ENTRY(tegra_resume)
 	cmp	r6, #TEGRA20
 	beq	1f				@ Yes
 	/* Clear the flow controller flags for this CPU. */
-	cpu_to_csr_reg r1, r0
+	cpu_to_csr_reg r3, r0
 	mov32	r2, TEGRA_FLOW_CTRL_BASE
-	ldr	r1, [r2, r1]
+	ldr	r1, [r2, r3]
 	/* Clear event & intr flag */
 	orr	r1, r1, \
 		#FLOW_CTRL_CSR_INTR_FLAG | FLOW_CTRL_CSR_EVENT_FLAG
 	movw	r0, #0x3FFD	@ enable, cluster_switch, immed, bitmaps
 				@ & ext flags for CPU power mgnt
 	bic	r1, r1, r0
-	str	r1, [r2]
+	str	r1, [r2, r3]
 1:
 
 	mov32	r9, 0xc09
Signature · 1 line
2.22.0
#2 lore raw

PATCH 2/2 ARM: tegra: Use WFE for power-gating on Tegra30

In reply to Dmitry Osipenko

Turned out that WFI doesn't work reliably on Tegra30 as a trigger for the power-gating, it causes CPU hang under some circumstances like having memory controller running of PLLP. The TRM doc states that WFI should be used for the Big-Little "Cluster Switch", while WFE for the power-gating. Hence let's use the WFE for CPU0 power-gating, like it is done for the power-gating of a secondary cores. This fixes CPU hang after entering LP2 with memory running off PLLP.

---
 arch/arm/mach-tegra/sleep-tegra30.S |  4 +++-
 drivers/soc/tegra/flowctrl.c        | 19 +++++++++++++++++--
 2 files changed, 20 insertions(+), 3 deletions(-)
arch/arm/mach-tegra/sleep-tegra30.S +3 -1
index e95e46d65e8c..2e42f2bc0630 100644
@@ -683,10 +683,12 @@ tegra30_enter_sleep:
 	dsb
 	ldr	r0, [r6, r2] /* memory barrier */
 
+	cmp	r10, #TEGRA30
 halted:
 	isb
 	dsb
-	wfi	/* CPU should be power gated here */
+	wfine	/* CPU should be power gated here */
+	wfeeq
 
 	/* !!!FIXME!!! Implement halt failure handler */
 	b	halted
drivers/soc/tegra/flowctrl.c +17 -2
index b6bdeef33db1..b62ff4c1b997 100644
@@ -91,8 +91,23 @@ void flowctrl_cpu_suspend_enter(unsigned int cpuid)
 		reg &= ~TEGRA30_FLOW_CTRL_CSR_WFE_BITMAP;
 		/* clear wfi bitmap */
 		reg &= ~TEGRA30_FLOW_CTRL_CSR_WFI_BITMAP;
-		/* pwr gating on wfi */
-		reg |= TEGRA30_FLOW_CTRL_CSR_WFI_CPU0 << cpuid;
+
+		if (tegra_get_chip_id() == TEGRA30) {
+			/*
+			 * The wfi doesn't work well on Tegra30 because
+			 * CPU hangs under some odd circumstances after
+			 * power-gating (like memory running off PLLP),
+			 * hence use wfe that is working perfectly well.
+			 * Note that Tegra30 TRM doc clearly stands that
+			 * wfi should be used for "Cluster Switching",
+			 * while wfe for the power-gating just like it is
+			 * done on Tegra20.
+			 */
+			reg |= TEGRA20_FLOW_CTRL_CSR_WFE_CPU0 << cpuid;
+		} else {
+			/* pwr gating on wfi */
+			reg |= TEGRA30_FLOW_CTRL_CSR_WFI_CPU0 << cpuid;
+		}
 		break;
 	}
 	reg |= FLOW_CTRL_CSR_INTR_FLAG;			/* clear intr flag */
Signature · 1 line
2.22.0
#3 lore raw
In reply to Dmitry Osipenko

08.07.2019 2:03, Dmitry Osipenko пишет:

Quoted 7 lines

Hello,

This small series addresses two suspend-resume bugs: one affects Tegra30+ due to a typo in the code, other fixes CPU hang on Tegra30 specifically.

Please review and apply, thanks!

Quoted 9 lines

Dmitry Osipenko (2):
ARM: tegra: Fix FLOW_CTLR_HALT register clobbering by tegra_resume()
ARM: tegra: Use WFE for power-gating on Tegra30

 arch/arm/mach-tegra/reset-handler.S |  6 +++---
 arch/arm/mach-tegra/sleep-tegra30.S |  4 +++-
 drivers/soc/tegra/flowctrl.c        | 19 +++++++++++++++++--
 3 files changed, 23 insertions(+), 6 deletions(-)

Hello Peter,

We were talking about these fixes on the IRC not so long time ago, does it look good to you? Care to give an ACK?

#4 lore raw
Quoted 18 lines · Dmitry Osipenko

08.07.2019 2:03, Dmitry Osipenko пишет:

Quoted 7 lines

Hello,

This small series addresses two suspend-resume bugs: one affects Tegra30+ due to a typo in the code, other fixes CPU hang on Tegra30 specifically.

Please review and apply, thanks!

Quoted 9 lines

Dmitry Osipenko (2):
ARM: tegra: Fix FLOW_CTLR_HALT register clobbering by tegra_resume()
ARM: tegra: Use WFE for power-gating on Tegra30

 arch/arm/mach-tegra/reset-handler.S |  6 +++---
 arch/arm/mach-tegra/sleep-tegra30.S |  4 +++-
 drivers/soc/tegra/flowctrl.c        | 19 +++++++++++++++++--
 3 files changed, 23 insertions(+), 6 deletions(-)
Quoted 4 lines

Hello Peter,

We were talking about these fixes on the IRC not so long time ago, does it look good to you? Care to give an ACK?

Acked-By Peter De Schrijver <[email protected]>

#5 lore raw

25.07.2019 12:40, Peter De Schrijver пишет:

Quoted 19 lines · Dmitry Osipenko
Quoted 18 lines

08.07.2019 2:03, Dmitry Osipenko пишет:

Quoted 16 lines

Hello,

This small series addresses two suspend-resume bugs: one affects Tegra30+ due to a typo in the code, other fixes CPU hang on Tegra30 specifically.

Please review and apply, thanks!

Dmitry Osipenko (2):
ARM: tegra: Fix FLOW_CTLR_HALT register clobbering by tegra_resume()
ARM: tegra: Use WFE for power-gating on Tegra30

 arch/arm/mach-tegra/reset-handler.S |  6 +++---
 arch/arm/mach-tegra/sleep-tegra30.S |  4 +++-
 drivers/soc/tegra/flowctrl.c        | 19 +++++++++++++++++--
 3 files changed, 23 insertions(+), 6 deletions(-)
Quoted 7 lines
Quoted 4 lines

Hello Peter,

We were talking about these fixes on the IRC not so long time ago, does it look good to you? Care to give an ACK?

Acked-By Peter De Schrijver <[email protected]>

Thanks!