diff --git a/hw/ppc/spapr.c b/hw/ppc/spapr.c index d6cfb9acbc..6764730beb 100644 --- a/hw/ppc/spapr.c +++ b/hw/ppc/spapr.c @@ -904,6 +904,8 @@ static void spapr_dt_rtas_fadump(SpaprMachineState *spapr, void *fdt, int rtas) { MachineState *ms = MACHINE(spapr); MachineClass *mc = MACHINE_GET_CLASS(ms); + FadumpMemStruct *fdm = &spapr->registered_fdm; + uint16_t dump_status_flag; uint32_t max_possible_cpus = mc->possible_cpu_arch_ids(ms)->len; uint64_t fadump_cpu_state_size = 0; @@ -953,6 +955,16 @@ static void spapr_dt_rtas_fadump(SpaprMachineState *spapr, void *fdt, int rtas) fadump_versions, sizeof(fadump_versions)))); _FDT((fdt_setprop(fdt, rtas, "ibm,configure-kernel-dump-sizes", fadump_rgn_sizes, sizeof(fadump_rgn_sizes)))); + + dump_status_flag = be16_to_cpu(fdm->header.dump_status_flag); + if (dump_status_flag & FADUMP_STATUS_DUMP_TRIGGERED) { + uint64_t fdm_size = + sizeof(struct FadumpSectionHeader) + + (be16_to_cpu(fdm->header.dump_num_sections) * + sizeof(struct FadumpSection)); + + _FDT((fdt_setprop(fdt, rtas, "ibm,kernel-dump", fdm, fdm_size))); + } } static void spapr_dt_rtas(SpaprMachineState *spapr, void *fdt)