[SLOF] [RFC PATCH qemu] spapr: Receive device tree blob from SLOF
Alexey Kardashevskiy
aik at ozlabs.ru
Fri Sep 29 19:11:10 AEST 2017
This is a debug patch for those who want to test:
"[PATCH slof] fdt: Pass the resulting device tree to QEMU"
Signed-off-by: Alexey Kardashevskiy <aik at ozlabs.ru>
---
include/hw/ppc/spapr.h | 3 ++-
hw/ppc/spapr_hcall.c | 25 +++++++++++++++++++++++++
2 files changed, 27 insertions(+), 1 deletion(-)
diff --git a/include/hw/ppc/spapr.h b/include/hw/ppc/spapr.h
index a805b817a5..15e865be38 100644
--- a/include/hw/ppc/spapr.h
+++ b/include/hw/ppc/spapr.h
@@ -400,7 +400,8 @@ struct sPAPRMachineState {
#define KVMPPC_H_LOGICAL_MEMOP (KVMPPC_HCALL_BASE + 0x1)
/* Client Architecture support */
#define KVMPPC_H_CAS (KVMPPC_HCALL_BASE + 0x2)
-#define KVMPPC_HCALL_MAX KVMPPC_H_CAS
+#define KVMPPC_H_UPDATE_DT (KVMPPC_HCALL_BASE + 0x5)
+#define KVMPPC_HCALL_MAX KVMPPC_H_UPDATE_DT
typedef struct sPAPRDeviceTreeUpdateHeader {
uint32_t version_id;
diff --git a/hw/ppc/spapr_hcall.c b/hw/ppc/spapr_hcall.c
index 57bb411394..599cbb99f7 100644
--- a/hw/ppc/spapr_hcall.c
+++ b/hw/ppc/spapr_hcall.c
@@ -1635,6 +1635,29 @@ static target_ulong h_client_architecture_support(PowerPCCPU *cpu,
return H_SUCCESS;
}
+static target_ulong h_update_dt(PowerPCCPU *cpu, sPAPRMachineState *spapr,
+ target_ulong opcode, target_ulong *args)
+{
+ target_ulong dt = ppc64_phys_to_real(args[0]);
+ struct fdt_header hdr;
+ void *dtb;
+ FILE *f;
+ uint32_t cb;
+
+ cpu_physical_memory_read(dt, &hdr, sizeof(hdr));
+ cb = be32_to_cpu(hdr.totalsize);
+ dtb = g_malloc0(cb);
+ cpu_physical_memory_read(dt, dtb, cb);
+
+ f = fopen("dbg.dtb", "wb");
+ fwrite(dtb, cb, 1, f);
+ fclose(f);
+ printf("+++Q+++ (%u) %s %u: DT at %lx (%lx) %d bytes\n", getpid(), __func__, __LINE__,
+ dt, args[0], cb);
+
+ return H_SUCCESS;
+}
+
static spapr_hcall_fn papr_hypercall_table[(MAX_HCALL_OPCODE / 4) + 1];
static spapr_hcall_fn kvmppc_hypercall_table[KVMPPC_HCALL_MAX - KVMPPC_HCALL_BASE + 1];
@@ -1732,6 +1755,8 @@ static void hypercall_register_types(void)
/* ibm,client-architecture-support support */
spapr_register_hypercall(KVMPPC_H_CAS, h_client_architecture_support);
+
+ spapr_register_hypercall(KVMPPC_H_UPDATE_DT, h_update_dt);
}
type_init(hypercall_register_types)
--
2.11.0
More information about the SLOF
mailing list