diff mbox series

[v5,03/10] chip: Fix pir_to_thread_id for fused cores

Message ID 20200422050419.72957-4-svaidy@linux.ibm.com
State Superseded
Headers show
Series Initial fused-core support for POWER9 | expand

Checks

Context Check Description
snowpatch_ozlabs/apply_patch success Successfully applied on branch master (9547b3da44d546f0083dd3aeb5436226fccf81e3)
snowpatch_ozlabs/snowpatch_job_snowpatch-skiboot success Test snowpatch/job/snowpatch-skiboot on branch master
snowpatch_ozlabs/snowpatch_job_snowpatch-skiboot-dco success Signed-off-by present

Commit Message

Vaidyanathan Srinivasan April 22, 2020, 5:04 a.m. UTC
From: Benjamin Herrenschmidt <benh@kernel.crashing.org>

pir_to_core_id() and pir_to_thread_id() are extensively
used by the direct controls code and are expected to return
the "normal" (non-fused, aka EC) core/thread IDs.

Signed-off-by: Benjamin Herrenschmidt <benh@kernel.crashing.org>
Signed-off-by: Michael Neuling <mikey@neuling.org>
---
 core/chip.c    | 6 +++---
 include/chip.h | 7 +++++++
 2 files changed, 10 insertions(+), 3 deletions(-)
diff mbox series

Patch

diff --git a/core/chip.c b/core/chip.c
index 277d3a01..c57694ab 100644
--- a/core/chip.c
+++ b/core/chip.c
@@ -23,12 +23,12 @@  uint32_t pir_to_chip_id(uint32_t pir)
 
 uint32_t pir_to_core_id(uint32_t pir)
 {
-	if (proc_gen == proc_gen_p9)
+	if (proc_gen == proc_gen_p9) {
 		if (this_cpu()->is_fused_core)
 			return P9_PIRFUSED2NORMALCOREID(pir);
 		else
 			return P9_PIR2COREID(pir);
-	else if (proc_gen == proc_gen_p8)
+	} else if (proc_gen == proc_gen_p8)
 		return P8_PIR2COREID(pir);
 	else
 		assert(false);
@@ -38,7 +38,7 @@  uint32_t pir_to_thread_id(uint32_t pir)
 {
 	if (proc_gen == proc_gen_p9) {
 		if (this_cpu()->is_fused_core)
-			return P9_PIR2FUSEDTHREADID(pir);
+			return P9_PIRFUSED2NORMALTHREADID(pir);
 		else
 			return P9_PIR2THREADID(pir);
 	} else if (proc_gen == proc_gen_p8)
diff --git a/include/chip.h b/include/chip.h
index 28b770e4..eed3839d 100644
--- a/include/chip.h
+++ b/include/chip.h
@@ -98,6 +98,8 @@ 
 	(P9_PIR2FUSEDCOREID(pir) << 1) | \
 	(P9_PIR2FUSEDTHREADID(pir) & 1)
 
+#define P9_PIRFUSED2NORMALTHREADID(pir) (((pir) >> 1) & 0x3)
+
 /* P9 specific ones mostly used by XIVE */
 #define P9_PIR2LOCALCPU(pir) ((pir) & 0xff)
 #define P9_PIRFROMLOCALCPU(chip, cpu)	(((chip) << 8) | (cpu))
@@ -226,6 +228,11 @@  struct proc_chip {
 };
 
 extern uint32_t pir_to_chip_id(uint32_t pir);
+
+/*
+ * Note: In P9 fused-core mode, these will return the "normal"
+ * core ID and thread ID (ie, thread ID 0..3)
+ */
 extern uint32_t pir_to_core_id(uint32_t pir);
 extern uint32_t pir_to_thread_id(uint32_t pir);