diff --git a/tools/kvm/arm/fdt.c b/tools/kvm/arm/fdt.c index 5e18c11..4433829 100644 --- a/tools/kvm/arm/fdt.c +++ b/tools/kvm/arm/fdt.c @@ -160,6 +160,8 @@ static int setup_fdt(struct kvm *kvm) _FDT(fdt_property_cell(fdt, "cpu_off", KVM_PSCI_FN_CPU_OFF)); _FDT(fdt_property_cell(fdt, "cpu_on", KVM_PSCI_FN_CPU_ON)); _FDT(fdt_property_cell(fdt, "migrate", KVM_PSCI_FN_MIGRATE)); + _FDT(fdt_property_cell(fdt, "system_off", KVM_PSCI_FN_SYSTEM_OFF)); + _FDT(fdt_property_cell(fdt, "system_reset", KVM_PSCI_FN_SYSTEM_RESET)); _FDT(fdt_end_node(fdt)); /* Finalise. */ diff --git a/tools/kvm/kvm-cpu.c b/tools/kvm/kvm-cpu.c index be05c49..ce0b49a 100644 --- a/tools/kvm/kvm-cpu.c +++ b/tools/kvm/kvm-cpu.c @@ -154,6 +154,22 @@ int kvm_cpu__start(struct kvm_cpu *cpu) goto exit_kvm; case KVM_EXIT_SHUTDOWN: goto exit_kvm; + case KVM_EXIT_PSCI: + switch (cpu->kvm_run->psci.fn) { + case KVM_PSCI_FN_SYSTEM_OFF: + printf("KVMTOOL: PSCI SYSTEM_OFF\n"); + goto exit_kvm; + break; + case KVM_PSCI_FN_SYSTEM_RESET: + printf("KVMTOOL: PSCI SYSTEM_RESET\n"); + goto exit_kvm; + break; + default: + printf("KVMTOOL: PSCI Unknown fn=0x%08x\n", + cpu->kvm_run->psci.fn); + break; + } + break; default: { bool ret; diff --git a/tools/kvm/kvm.c b/tools/kvm/kvm.c index cfd30dd..bbf98a4 100644 --- a/tools/kvm/kvm.c +++ b/tools/kvm/kvm.c @@ -55,6 +55,7 @@ const char *kvm_exit_reasons[] = { #ifdef CONFIG_PPC64 DEFINE_KVM_EXIT_REASON(KVM_EXIT_PAPR_HCALL), #endif + DEFINE_KVM_EXIT_REASON(KVM_EXIT_PSCI), }; static int pause_event;