]> xenbits.xensource.com Git - qemu-upstream-4.6-testing.git/commitdiff
target-arm: Introduce per-CPU field for PSCI version
authorPranavkumar Sawargaonkar <pranavkumar@linaro.org>
Thu, 19 Jun 2014 17:06:26 +0000 (18:06 +0100)
committerPeter Maydell <peter.maydell@linaro.org>
Thu, 19 Jun 2014 17:33:04 +0000 (18:33 +0100)
We require to know the PSCI version available to given CPU at
potentially many places. Currently, we need to know PSCI version
when generating DTB for virt machine.

This patch introduce per-CPU 32bit field representing the PSCI
version available to the CPU. The encoding of this 32bit field
is same as described in PSCI v0.2 spec.

Signed-off-by: Pranavkumar Sawargaonkar <pranavkumar@linaro.org>
Signed-off-by: Anup Patel <anup.patel@linaro.org>
Reviewed-by: Peter Maydell <peter.maydell@linaro.org>
Message-id: 1402901605-24551-8-git-send-email-pranavkumar@linaro.org
Signed-off-by: Peter Maydell <peter.maydell@linaro.org>
target-arm/cpu-qom.h
target-arm/cpu.c
target-arm/kvm32.c
target-arm/kvm64.c

index 2bd7df8bfd84cedb83da9f67cec0998b33b5550e..eaee9447ee598f6236dd862f6654e945d59ca554 100644 (file)
@@ -94,6 +94,12 @@ typedef struct ARMCPU {
     /* 'compatible' string for this CPU for Linux device trees */
     const char *dtb_compatible;
 
+    /* PSCI version for this CPU
+     * Bits[31:16] = Major Version
+     * Bits[15:0] = Minor Version
+     */
+    uint32_t psci_version;
+
     /* Should CPU start in PSCI powered-off state? */
     bool start_powered_off;
 
index b8778350f7e5bb14a786c0b632aca19a5ac5e007..05e52e0e835eae03a9f1f4eaf98a969aa7fe5297 100644 (file)
@@ -260,6 +260,7 @@ static void arm_cpu_initfn(Object *obj)
      * picky DTB consumer will also provide a helpful error message.
      */
     cpu->dtb_compatible = "qemu,unknown";
+    cpu->psci_version = 1; /* By default assume PSCI v0.1 */
     cpu->kvm_target = QEMU_KVM_ARM_TARGET_NONE;
 
     if (tcg_enabled() && !inited) {
index 52d626c47685b8e61028f105146e7a2d63b1259e..068af7db57ead6123b3722047ac7cb4ab9fb9bbf 100644 (file)
@@ -184,6 +184,7 @@ int kvm_arch_init_vcpu(CPUState *cs)
         cpu->kvm_init_features[0] |= 1 << KVM_ARM_VCPU_POWER_OFF;
     }
     if (kvm_check_extension(cs->kvm_state, KVM_CAP_ARM_PSCI_0_2)) {
+        cpu->psci_version = 2;
         cpu->kvm_init_features[0] |= 1 << KVM_ARM_VCPU_PSCI_0_2;
     }
 
index fca5f587e24056dd5a415f4ea4921bfa5efc1389..5d217ca2ad1f024c9c6e6b303a40a5c0c2002eeb 100644 (file)
@@ -92,6 +92,7 @@ int kvm_arch_init_vcpu(CPUState *cs)
         cpu->kvm_init_features[0] |= 1 << KVM_ARM_VCPU_POWER_OFF;
     }
     if (kvm_check_extension(cs->kvm_state, KVM_CAP_ARM_PSCI_0_2)) {
+        cpu->psci_version = 2;
         cpu->kvm_init_features[0] |= 1 << KVM_ARM_VCPU_PSCI_0_2;
     }