Message ID | 1396353232-3835-7-git-send-email-pranavkumar@linaro.org |
---|---|
State | New |
Headers | show |
Hi Rob/Mark, On 1 April 2014 17:23, Pranavkumar Sawargaonkar <pranavkumar@linaro.org> wrote: > If we have in-kernel emulation of PSCI v0.2 for KVM ARM/ARM64 then > we enable PSCI v0.2 for each VCPU at the time of VCPU init hence we > need to provide PSCI v0.2 function IDs via generated DTB. > > This patch updates generated DTB to have PSCI v0.2 function IDs when > we have in-kernel emulation PSCI v0.2 for KVM ARM/ARM64. > > Signed-off-by: Pranavkumar Sawargaonkar <pranavkumar@linaro.org> > Signed-off-by: Anup Patel <anup.patel@linaro.org> > --- > hw/arm/virt.c | 28 +++++++++++++++++++++++----- > 1 file changed, 23 insertions(+), 5 deletions(-) > > diff --git a/hw/arm/virt.c b/hw/arm/virt.c > index 2bbc931..cf6a774 100644 > --- a/hw/arm/virt.c > +++ b/hw/arm/virt.c > @@ -187,11 +187,29 @@ static void create_fdt(VirtBoardInfo *vbi) > qemu_fdt_add_subnode(fdt, "/psci"); > qemu_fdt_setprop_string(fdt, "/psci", "compatible", "arm,psci"); I have not updated compatible string to arm,psci-0,2 because still stable dt bindings are not available in linux kernel. Once they are available I will update this patch accordingly. > qemu_fdt_setprop_string(fdt, "/psci", "method", "hvc"); > - qemu_fdt_setprop_cell(fdt, "/psci", "cpu_suspend", > - PSCI_FN_CPU_SUSPEND); > - qemu_fdt_setprop_cell(fdt, "/psci", "cpu_off", PSCI_FN_CPU_OFF); > - qemu_fdt_setprop_cell(fdt, "/psci", "cpu_on", PSCI_FN_CPU_ON); > - qemu_fdt_setprop_cell(fdt, "/psci", "migrate", PSCI_FN_MIGRATE); > + if (kvm_check_extension(kvm_state, KVM_CAP_ARM_PSCI_0_2)) { > + qemu_fdt_setprop_cell(fdt, "/psci", "cpu_suspend", > + QEMU_PSCI_0_2_FN_CPU_SUSPEND); > + qemu_fdt_setprop_cell(fdt, "/psci", "cpu_off", > + QEMU_PSCI_0_2_FN_CPU_OFF); > + qemu_fdt_setprop_cell(fdt, "/psci", "cpu_on", > + QEMU_PSCI_0_2_FN_CPU_ON); > + qemu_fdt_setprop_cell(fdt, "/psci", "migrate", > + QEMU_PSCI_0_2_FN_MIGRATE); > + qemu_fdt_setprop_cell(fdt, "/psci", "system_off", > + QEMU_PSCI_0_2_FN_SYSTEM_OFF); > + qemu_fdt_setprop_cell(fdt, "/psci", "system_reset", > + QEMU_PSCI_0_2_FN_SYSTEM_RESET); > + } else { > + qemu_fdt_setprop_cell(fdt, "/psci", "cpu_suspend", > + QEMU_PSCI_FN_CPU_SUSPEND); > + qemu_fdt_setprop_cell(fdt, "/psci", "cpu_off", > + QEMU_PSCI_FN_CPU_OFF); > + qemu_fdt_setprop_cell(fdt, "/psci", "cpu_on", > + QEMU_PSCI_FN_CPU_ON); > + qemu_fdt_setprop_cell(fdt, "/psci", "migrate", > + QEMU_PSCI_FN_MIGRATE); > + } > } > } > > -- > 1.7.9.5 > Thanks, Pranav
diff --git a/hw/arm/virt.c b/hw/arm/virt.c index 2bbc931..cf6a774 100644 --- a/hw/arm/virt.c +++ b/hw/arm/virt.c @@ -187,11 +187,29 @@ static void create_fdt(VirtBoardInfo *vbi) qemu_fdt_add_subnode(fdt, "/psci"); qemu_fdt_setprop_string(fdt, "/psci", "compatible", "arm,psci"); qemu_fdt_setprop_string(fdt, "/psci", "method", "hvc"); - qemu_fdt_setprop_cell(fdt, "/psci", "cpu_suspend", - PSCI_FN_CPU_SUSPEND); - qemu_fdt_setprop_cell(fdt, "/psci", "cpu_off", PSCI_FN_CPU_OFF); - qemu_fdt_setprop_cell(fdt, "/psci", "cpu_on", PSCI_FN_CPU_ON); - qemu_fdt_setprop_cell(fdt, "/psci", "migrate", PSCI_FN_MIGRATE); + if (kvm_check_extension(kvm_state, KVM_CAP_ARM_PSCI_0_2)) { + qemu_fdt_setprop_cell(fdt, "/psci", "cpu_suspend", + QEMU_PSCI_0_2_FN_CPU_SUSPEND); + qemu_fdt_setprop_cell(fdt, "/psci", "cpu_off", + QEMU_PSCI_0_2_FN_CPU_OFF); + qemu_fdt_setprop_cell(fdt, "/psci", "cpu_on", + QEMU_PSCI_0_2_FN_CPU_ON); + qemu_fdt_setprop_cell(fdt, "/psci", "migrate", + QEMU_PSCI_0_2_FN_MIGRATE); + qemu_fdt_setprop_cell(fdt, "/psci", "system_off", + QEMU_PSCI_0_2_FN_SYSTEM_OFF); + qemu_fdt_setprop_cell(fdt, "/psci", "system_reset", + QEMU_PSCI_0_2_FN_SYSTEM_RESET); + } else { + qemu_fdt_setprop_cell(fdt, "/psci", "cpu_suspend", + QEMU_PSCI_FN_CPU_SUSPEND); + qemu_fdt_setprop_cell(fdt, "/psci", "cpu_off", + QEMU_PSCI_FN_CPU_OFF); + qemu_fdt_setprop_cell(fdt, "/psci", "cpu_on", + QEMU_PSCI_FN_CPU_ON); + qemu_fdt_setprop_cell(fdt, "/psci", "migrate", + QEMU_PSCI_FN_MIGRATE); + } } }