]> xenbits.xensource.com Git - people/royger/xen.git/commitdiff
xen/arm: vpsci: Introduce and use PSCI_INVALID_ADDRESS
authorJulien Grall <julien.grall@arm.com>
Fri, 23 Feb 2018 18:57:28 +0000 (18:57 +0000)
committerStefano Stabellini <sstabellini@kernel.org>
Mon, 26 Feb 2018 22:59:09 +0000 (14:59 -0800)
PSCI 1.0 added the error return PSCI_INVALID_ADDRESS. It is used to
indicate the entry point address is known to be invalid.

In Xen case, this error could be returned when a 64-bit vCPU is using a
Thumb entry address.

For PSCI 0.1 implementation, return PSCI_INVALID_PARAMETERS instead.

Suggested-by: mirela.simonovic@aggios.com
Signed-off-by: Julien Grall <julien.grall@arm.com>
Reviewed-by: Stefano Stabellini <sstabellini@kernel.org>
Cc: mirela.simonovic@aggios.com
xen/arch/arm/vpsci.c
xen/include/asm-arm/psci.h

index 9a082aa6eee958e9ae9958f943d910899ed829b3..1729f7071e5c1321085bd402b7d2e98d4b57a3df 100644 (file)
@@ -38,7 +38,7 @@ static int do_common_cpu_on(register_t target_cpu, register_t entry_point,
 
     /* THUMB set is not allowed with 64-bit domain */
     if ( is_64bit_domain(d) && is_thumb )
-        return PSCI_INVALID_PARAMETERS;
+        return PSCI_INVALID_ADDRESS;
 
     if ( !test_bit(_VPF_down, &v->pause_flags) )
         return PSCI_ALREADY_ON;
@@ -99,10 +99,14 @@ static int32_t do_psci_cpu_on(uint32_t vcpuid, register_t entry_point)
 
     ret = do_common_cpu_on(vcpuid, entry_point, 0);
     /*
-     * PSCI 0.1 does not define the return code PSCI_ALREADY_ON.
+     * PSCI 0.1 does not define the return codes PSCI_ALREADY_ON and
+     * PSCI_INVALID_ADDRESS.
      * Instead, return PSCI_INVALID_PARAMETERS.
      */
-    return (ret == PSCI_ALREADY_ON) ? PSCI_INVALID_PARAMETERS : ret;
+    if ( ret == PSCI_ALREADY_ON || ret == PSCI_INVALID_ADDRESS )
+        ret = PSCI_INVALID_PARAMETERS;
+
+    return ret;
 }
 
 static int32_t do_psci_cpu_off(uint32_t power_state)
index e2629eed01f5f00db3c00b20fcc0cce8fdfe4f65..9ac820e94adf8d5b18d425d71ee5a53d83e23105 100644 (file)
@@ -13,6 +13,7 @@
 #define PSCI_INTERNAL_FAILURE       -6
 #define PSCI_NOT_PRESENT            -7
 #define PSCI_DISABLED               -8
+#define PSCI_INVALID_ADDRESS        -9
 
 /* availability of PSCI on the host for SMP bringup */
 extern uint32_t psci_ver;