[Skiboot] [PATCH] hdat: Fix XSCOM nodes for P9

Benjamin Herrenschmidt benh at kernel.crashing.org
Sat Jan 14 05:03:58 AEDT 2017


The address mapping for multiple chips is different

Signed-off-by: Benjamin Herrenschmidt <benh at kernel.crashing.org>
---
 hdata/spira.c | 20 +++++++++++++++++++-
 1 file changed, 19 insertions(+), 1 deletion(-)

diff --git a/hdata/spira.c b/hdata/spira.c
index efd5e1f..91f2958 100644
--- a/hdata/spira.c
+++ b/hdata/spira.c
@@ -233,7 +233,21 @@ static struct dt_node *add_xscom_node(uint64_t base, uint32_t hw_id,
 	uint64_t addr, size;
 	uint64_t freq;
 
-	addr = base | ((uint64_t)hw_id << PPC_BITLSHIFT(28));
+	switch (proc_gen) {
+	case proc_gen_p7:
+	case proc_gen_p8:
+		/* On P7 and P8 all the chip SCOMs share single region */
+		addr = base | ((uint64_t)hw_id << PPC_BITLSHIFT(28));
+		break;
+	case proc_gen_p9:
+	default:
+		/* On P9 we need to put the chip ID in the natural powerbus
+		 * position.
+		 */
+		addr = base | (((uint64_t)hw_id) << 42);
+		break;
+	};
+
 	size = (u64)1 << PPC_BITLSHIFT(28);
 
 	prlog(PR_INFO, "XSCOM: Found HW ID 0x%x (PCID 0x%x) @ 0x%llx\n",
@@ -258,6 +272,10 @@ static struct dt_node *add_xscom_node(uint64_t base, uint32_t hw_id,
 		dt_add_property_strings(node, "compatible",
 					"ibm,xscom", "ibm,power8-xscom");
 		break;
+	case proc_gen_p9:
+		dt_add_property_strings(node, "compatible",
+					"ibm,xscom", "ibm,power9-xscom");
+		break;
 	default:
 		dt_add_property_strings(node, "compatible", "ibm,xscom");
 	}



More information about the Skiboot mailing list