Set the "Thread Register State Entry Size" that is required by firmware
(OPAL), to know size of memory to allocate to capture CPU state, in the
event of a crash
Signed-off-by: Aditya Gupta <adityag@linux.ibm.com>
---
hw/ppc/pnv.c | 24 ++++++++++++++++++++++++
1 file changed, 24 insertions(+)
diff --git a/hw/ppc/pnv.c b/hw/ppc/pnv.c
index 895132da91bd..643558f374e9 100644
--- a/hw/ppc/pnv.c
+++ b/hw/ppc/pnv.c
@@ -780,6 +780,30 @@ static void pnv_reset(MachineState *machine, ResetType type)
_FDT((fdt_pack(fdt)));
}
+ if (!pnv->mpipl_state.is_next_boot_mpipl) {
+ /*
+ * Set the "Thread Register State Entry Size", so that firmware can
+ * allocate enough memory to capture CPU state in the event of a
+ * crash
+ */
+
+ MpiplProcDumpArea proc_area;
+
+ proc_area.version = PROC_DUMP_AREA_VERSION_P9;
+ proc_area.thread_size = cpu_to_be32(sizeof(MpiplPreservedCPUState));
+
+ /* These are to be allocated & assigned by the firmware */
+ proc_area.alloc_addr = 0;
+ proc_area.alloc_size = 0;
+
+ /* These get assigned after crash, when QEMU preserves the registers */
+ proc_area.dest_addr = 0;
+ proc_area.act_size = 0;
+
+ cpu_physical_memory_write(PROC_DUMP_AREA_OFF, &proc_area,
+ sizeof(proc_area));
+ }
+
cpu_physical_memory_write(PNV_FDT_ADDR, fdt, fdt_totalsize(fdt));
/* Update machine->fdt with latest fdt */
--
2.52.0