[RFC PATCH 6/7] hw/arm/virt: Use PSCI v0.2 function IDs when kernel supports its

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



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@xxxxxxxxxx>
Signed-off-by: Anup Patel <anup.patel@xxxxxxxxxx>
---
 hw/arm/virt.c |   25 ++++++++++++++++++++-----
 1 file changed, 20 insertions(+), 5 deletions(-)

diff --git a/hw/arm/virt.c b/hw/arm/virt.c
index 517f2fe..a818a80 100644
--- a/hw/arm/virt.c
+++ b/hw/arm/virt.c
@@ -187,11 +187,26 @@ 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",
+                                      PSCI_0_2_FN_CPU_SUSPEND);
+            qemu_fdt_setprop_cell(fdt, "/psci", "cpu_off",
+                                      PSCI_0_2_FN_CPU_OFF);
+            qemu_fdt_setprop_cell(fdt, "/psci", "cpu_on",
+                                      PSCI_0_2_FN_CPU_ON);
+            qemu_fdt_setprop_cell(fdt, "/psci", "migrate",
+                                      PSCI_0_2_FN_MIGRATE);
+            qemu_fdt_setprop_cell(fdt, "/psci", "system_off",
+                                      PSCI_0_2_FN_SYSTEM_OFF);
+            qemu_fdt_setprop_cell(fdt, "/psci", "system_reset",
+                                      PSCI_0_2_FN_SYSTEM_RESET);
+        } else {
+            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);
+        }
     }
 }
 
-- 
1.7.9.5

_______________________________________________
kvmarm mailing list
kvmarm@xxxxxxxxxxxxxxxxxxxxx
https://lists.cs.columbia.edu/cucslists/listinfo/kvmarm




[Index of Archives]     [Linux KVM]     [Spice Development]     [Libvirt]     [Libvirt Users]     [Linux USB Devel]     [Linux Audio Users]     [Yosemite News]     [Linux Kernel]     [Linux SCSI]

  Powered by Linux