[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
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 , 1 f
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
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 , 1 f
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 :
* 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 , 1 f
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
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:
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
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
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.