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 <[email protected]> --- 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
