diff mbox series

[v8,15/24] MPIPL: Save crashing PIR

Message ID 20190616171024.22799-16-hegdevasant@linux.vnet.ibm.com
State Superseded
Headers show
Series MPIPL support | expand

Checks

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

Commit Message

Vasant Hegde June 16, 2019, 5:10 p.m. UTC
Crashing CPU PIR is required to get proper backtrace from core file.
Save crashing CPU PIR before triggering MPIPL. Post MPIPL OPAL will
pass saved PIR to kernel and kernel will use that to create OPAL dump.

Signed-off-by: Vasant Hegde <hegdevasant@linux.vnet.ibm.com>
---
 core/opal-dump.c    | 7 +++++++
 hw/sbe-p9.c         | 4 ++++
 include/opal-dump.h | 3 +++
 3 files changed, 14 insertions(+)
diff mbox series

Patch

diff --git a/core/opal-dump.c b/core/opal-dump.c
index 5c1ce0c7b..7036a424a 100644
--- a/core/opal-dump.c
+++ b/core/opal-dump.c
@@ -16,6 +16,7 @@ 
 
 #define pr_fmt(fmt)	"DUMP: " fmt
 
+#include <cpu.h>
 #include <device.h>
 #include <mem-map.h>
 #include <mem_region.h>
@@ -303,6 +304,12 @@  static int64_t opal_mpipl_update(enum mpipl_ops ops,
 	return rc;
 }
 
+void opal_mpipl_save_crashing_pir(void)
+{
+	mpipl_metadata->crashing_pir = this_cpu()->pir;
+	prlog(PR_NOTICE, "Crashing PIR = 0x%x\n", this_cpu()->pir);
+}
+
 void opal_mpipl_init(void)
 {
 	void *mdst_base = (void *)MDST_TABLE_BASE;
diff --git a/hw/sbe-p9.c b/hw/sbe-p9.c
index 58a296c00..01f41e8cb 100644
--- a/hw/sbe-p9.c
+++ b/hw/sbe-p9.c
@@ -50,6 +50,7 @@ 
 #include <errorlog.h>
 #include <lock.h>
 #include <opal.h>
+#include <opal-dump.h>
 #include <sbe-p9.h>
 #include <skiboot.h>
 #include <timebase.h>
@@ -961,6 +962,9 @@  void p9_sbe_terminate(void)
 	if (!dt_find_by_path(opal_node, "dump"))
 		return;
 
+	/* Save crashing CPU details */
+	opal_mpipl_save_crashing_pir();
+
 	/*
 	 * Send S0 interrupt to all SBE. Sequence:
 	 *   - S0 interrupt on secondary chip SBE
diff --git a/include/opal-dump.h b/include/opal-dump.h
index 9f5f102be..a7c825513 100644
--- a/include/opal-dump.h
+++ b/include/opal-dump.h
@@ -133,4 +133,7 @@  struct mpipl_metadata {
 /* init opal dump */
 extern void opal_mpipl_init(void);
 
+/* Save metadata before triggering MPIPL */
+void opal_mpipl_save_crashing_pir(void);
+
 #endif	/* __OPAL_DUMP_H */