[PATCH] POWER9 PMU stops after idle workaround

Subsystems: linux for powerpc (32-bit and 64-bit), the rest

STALE3246d

7 messages, 7 authors, 2017-09-13 · open the first message on its own page

[PATCH] POWER9 PMU stops after idle workaround

From: Nicholas Piggin <npiggin@gmail.com>
Date: 2017-07-20 01:53:52

POWER9 DD2 PMU can stop after a state-loss idle in some conditions.

A solution is to set then clear MMCRA[60] after wake from state-loss
idle.

Signed-off-by: Nicholas Piggin <npiggin@gmail.com>
---
 arch/powerpc/kernel/idle_book3s.S | 8 +++++++-
 1 file changed, 7 insertions(+), 1 deletion(-)
diff --git a/arch/powerpc/kernel/idle_book3s.S b/arch/powerpc/kernel/idle_book3s.S
index 516ebef905c0..e6252c5a57a4 100644
--- a/arch/powerpc/kernel/idle_book3s.S
+++ b/arch/powerpc/kernel/idle_book3s.S
@@ -460,11 +460,17 @@ pnv_restore_hyp_resource_arch300:
 	/*
 	 * Workaround for POWER9, if we lost resources, the ERAT
 	 * might have been mixed up and needs flushing. We also need
-	 * to reload MMCR0 (see comment above).
+	 * to reload MMCR0 (see comment above). We also need to set
+	 * then clear bit 60 in MMCRA to ensure the PMU starts running.
 	 */
 	blt	cr3,1f
 	PPC_INVALIDATE_ERAT
 	ld	r1,PACAR1(r13)
+	mfspr	r4,SPRN_MMCRA
+	ori	r4,r4,(1 << (63-60))
+	mtspr	SPRN_MMCRA,r4
+	xori	r4,r4,(1 << (63-60))
+	mtspr	SPRN_MMCRA,r4
 	ld	r4,_MMCR0(r1)
 	mtspr	SPRN_MMCR0,r4
 1:
-- 
2.11.0

Re: [PATCH] POWER9 PMU stops after idle workaround

From: Madhavan Srinivasan <hidden>
Date: 2017-07-20 04:13:35


On Thursday 20 July 2017 07:23 AM, Nicholas Piggin wrote:
POWER9 DD2 PMU can stop after a state-loss idle in some conditions.

A solution is to set then clear MMCRA[60] after wake from state-loss
idle.
Acked-by: Madhavan Srinivasan <redacted>
quoted hunk
Signed-off-by: Nicholas Piggin <npiggin@gmail.com>
---
  arch/powerpc/kernel/idle_book3s.S | 8 +++++++-
  1 file changed, 7 insertions(+), 1 deletion(-)
diff --git a/arch/powerpc/kernel/idle_book3s.S b/arch/powerpc/kernel/idle_book3s.S
index 516ebef905c0..e6252c5a57a4 100644
--- a/arch/powerpc/kernel/idle_book3s.S
+++ b/arch/powerpc/kernel/idle_book3s.S
@@ -460,11 +460,17 @@ pnv_restore_hyp_resource_arch300:
  	/*
  	 * Workaround for POWER9, if we lost resources, the ERAT
  	 * might have been mixed up and needs flushing. We also need
-	 * to reload MMCR0 (see comment above).
+	 * to reload MMCR0 (see comment above). We also need to set
+	 * then clear bit 60 in MMCRA to ensure the PMU starts running.
  	 */
  	blt	cr3,1f
  	PPC_INVALIDATE_ERAT
  	ld	r1,PACAR1(r13)
+	mfspr	r4,SPRN_MMCRA
+	ori	r4,r4,(1 << (63-60))
+	mtspr	SPRN_MMCRA,r4
+	xori	r4,r4,(1 << (63-60))
+	mtspr	SPRN_MMCRA,r4
  	ld	r4,_MMCR0(r1)
  	mtspr	SPRN_MMCR0,r4
  1:

Re: [PATCH] POWER9 PMU stops after idle workaround

From: Vaidyanathan Srinivasan <hidden>
Date: 2017-07-20 05:06:50

* Nicholas Piggin [off-list ref] [2017-07-20 11:53:22]:
POWER9 DD2 PMU can stop after a state-loss idle in some conditions.

A solution is to set then clear MMCRA[60] after wake from state-loss
idle.

Signed-off-by: Nicholas Piggin <npiggin@gmail.com>
Reviewed-by: Vaidyanathan Srinivasan <redacted>

quoted hunk
---
 arch/powerpc/kernel/idle_book3s.S | 8 +++++++-
 1 file changed, 7 insertions(+), 1 deletion(-)
diff --git a/arch/powerpc/kernel/idle_book3s.S b/arch/powerpc/kernel/idle_book3s.S
index 516ebef905c0..e6252c5a57a4 100644
--- a/arch/powerpc/kernel/idle_book3s.S
+++ b/arch/powerpc/kernel/idle_book3s.S
@@ -460,11 +460,17 @@ pnv_restore_hyp_resource_arch300:
 	/*
 	 * Workaround for POWER9, if we lost resources, the ERAT
 	 * might have been mixed up and needs flushing. We also need
-	 * to reload MMCR0 (see comment above).
+	 * to reload MMCR0 (see comment above). We also need to set
+	 * then clear bit 60 in MMCRA to ensure the PMU starts running.
 	 */
 	blt	cr3,1f
 	PPC_INVALIDATE_ERAT
 	ld	r1,PACAR1(r13)
+	mfspr	r4,SPRN_MMCRA
+	ori	r4,r4,(1 << (63-60))
+	mtspr	SPRN_MMCRA,r4
+	xori	r4,r4,(1 << (63-60))
+	mtspr	SPRN_MMCRA,r4

Timing is ok to resolve the issue?  Does back-to-back bit flip of
MMCRA[60] gets the job done for all cases?  Just asking since this
issue in itself is a corner case ;)

--Vaidy

Re: [PATCH] POWER9 PMU stops after idle workaround

From: Anton Blanchard <hidden>
Date: 2017-08-02 04:30:32

Hi Nick,
POWER9 DD2 PMU can stop after a state-loss idle in some conditions.

A solution is to set then clear MMCRA[60] after wake from state-loss
idle.
Looks good.

Acked-by: Anton Blanchard <redacted>

Anton
quoted hunk
Signed-off-by: Nicholas Piggin <npiggin@gmail.com>
---
 arch/powerpc/kernel/idle_book3s.S | 8 +++++++-
 1 file changed, 7 insertions(+), 1 deletion(-)
diff --git a/arch/powerpc/kernel/idle_book3s.S
b/arch/powerpc/kernel/idle_book3s.S index 516ebef905c0..e6252c5a57a4
100644 --- a/arch/powerpc/kernel/idle_book3s.S
+++ b/arch/powerpc/kernel/idle_book3s.S
@@ -460,11 +460,17 @@ pnv_restore_hyp_resource_arch300:
 	/*
 	 * Workaround for POWER9, if we lost resources, the ERAT
 	 * might have been mixed up and needs flushing. We also need
-	 * to reload MMCR0 (see comment above).
+	 * to reload MMCR0 (see comment above). We also need to set
+	 * then clear bit 60 in MMCRA to ensure the PMU starts
running. */
 	blt	cr3,1f
 	PPC_INVALIDATE_ERAT
 	ld	r1,PACAR1(r13)
+	mfspr	r4,SPRN_MMCRA
+	ori	r4,r4,(1 << (63-60))
+	mtspr	SPRN_MMCRA,r4
+	xori	r4,r4,(1 << (63-60))
+	mtspr	SPRN_MMCRA,r4
 	ld	r4,_MMCR0(r1)
 	mtspr	SPRN_MMCR0,r4
 1:

Re: POWER9 PMU stops after idle workaround

From: Michael Ellerman <hidden>
Date: 2017-08-03 10:19:38

On Thu, 2017-07-20 at 01:53:22 UTC, Nicholas Piggin wrote:
POWER9 DD2 PMU can stop after a state-loss idle in some conditions.

A solution is to set then clear MMCRA[60] after wake from state-loss
idle.

Signed-off-by: Nicholas Piggin <npiggin@gmail.com>
Acked-by: Madhavan Srinivasan <redacted>
Reviewed-by: Vaidyanathan Srinivasan <redacted>
Acked-by: Anton Blanchard <redacted>
Applied to powerpc fixes, thanks.

https://git.kernel.org/powerpc/c/bdd21ddb919d28f9c62cdc6286cac9

cheers

Re: POWER9 PMU stops after idle workaround

From: Michal Suchánek <hidden>
Date: 2017-09-13 16:11:23

On Thu,  3 Aug 2017 20:19:38 +1000 (AEST)
Michael Ellerman [off-list ref] wrote:
On Thu, 2017-07-20 at 01:53:22 UTC, Nicholas Piggin wrote:
quoted
POWER9 DD2 PMU can stop after a state-loss idle in some conditions.

A solution is to set then clear MMCRA[60] after wake from state-loss
idle.

Signed-off-by: Nicholas Piggin <npiggin@gmail.com>
Acked-by: Madhavan Srinivasan <redacted>
Reviewed-by: Vaidyanathan Srinivasan <redacted>
Acked-by: Anton Blanchard <redacted>  
Applied to powerpc fixes, thanks.

https://git.kernel.org/powerpc/c/bdd21ddb919d28f9c62cdc6286cac9

cheers
Not there anymore. I see this only in the merge branch.

Thanks

Michal

Re: POWER9 PMU stops after idle workaround

From: Michael Ellerman <hidden>
Date: 2017-09-13 20:45:24

Yeah I messed up the subject when comitting, from memory, so I had to rebase and force push.

I think this is it:

https://git.kernel.org/pub/scm/linux/kernel/git/powerpc/linux.git/commit/?id=09539f9b123652e969894d6299ae0df2fe12cb5d

cheers



On 14 September 2017 2:11:16 am AEST, "Michal Suchánek" [off-list ref] wrote:
On Thu,  3 Aug 2017 20:19:38 +1000 (AEST)
Michael Ellerman [off-list ref] wrote:
quoted
On Thu, 2017-07-20 at 01:53:22 UTC, Nicholas Piggin wrote:
quoted
POWER9 DD2 PMU can stop after a state-loss idle in some conditions.

A solution is to set then clear MMCRA[60] after wake from
state-loss
quoted
quoted
idle.

Signed-off-by: Nicholas Piggin <npiggin@gmail.com>
Acked-by: Madhavan Srinivasan <redacted>
Reviewed-by: Vaidyanathan Srinivasan <redacted>
Acked-by: Anton Blanchard <redacted>  
Applied to powerpc fixes, thanks.

https://git.kernel.org/powerpc/c/bdd21ddb919d28f9c62cdc6286cac9

cheers
Not there anymore. I see this only in the merge branch.

Thanks

Michal
-- 
Sent from my Android phone with K-9 Mail. Please excuse my brevity.
Keyboard shortcuts
hback out one level
jnext message in thread
kprevious message in thread
ldrill in
Escclose help / fold thread tree
?toggle this help