aboutsummaryrefslogtreecommitdiffstats
path: root/tools/testing/selftests/kvm/aarch64/psci_test.c
diff options
context:
space:
mode:
authorOliver Upton <oupton@google.com>2022-05-04 03:24:43 +0000
committerMarc Zyngier <maz@kernel.org>2022-05-04 09:28:45 +0100
commit694e3dcc47471b8b409a0ef647319b746eabcb3a (patch)
tree1e80ad9de36a60041c9e1c551c7fc393e0b789e8 /tools/testing/selftests/kvm/aarch64/psci_test.c
parentselftests: KVM: Rename psci_cpu_on_test to psci_test (diff)
downloadlinux-dev-694e3dcc47471b8b409a0ef647319b746eabcb3a.tar.xz
linux-dev-694e3dcc47471b8b409a0ef647319b746eabcb3a.zip
selftests: KVM: Create helper for making SMCCC calls
The PSCI and PV stolen time tests both need to make SMCCC calls within the guest. Create a helper for making SMCCC calls and rework the existing tests to use the library function. Signed-off-by: Oliver Upton <oupton@google.com> Reviewed-by: Andrew Jones <drjones@redhat.com> Signed-off-by: Marc Zyngier <maz@kernel.org> Link: https://lore.kernel.org/r/20220504032446.4133305-10-oupton@google.com
Diffstat (limited to 'tools/testing/selftests/kvm/aarch64/psci_test.c')
-rw-r--r--tools/testing/selftests/kvm/aarch64/psci_test.c25
1 files changed, 8 insertions, 17 deletions
diff --git a/tools/testing/selftests/kvm/aarch64/psci_test.c b/tools/testing/selftests/kvm/aarch64/psci_test.c
index 4c5f6814030f..8c998f0b802c 100644
--- a/tools/testing/selftests/kvm/aarch64/psci_test.c
+++ b/tools/testing/selftests/kvm/aarch64/psci_test.c
@@ -26,32 +26,23 @@
static uint64_t psci_cpu_on(uint64_t target_cpu, uint64_t entry_addr,
uint64_t context_id)
{
- register uint64_t x0 asm("x0") = PSCI_0_2_FN64_CPU_ON;
- register uint64_t x1 asm("x1") = target_cpu;
- register uint64_t x2 asm("x2") = entry_addr;
- register uint64_t x3 asm("x3") = context_id;
+ struct arm_smccc_res res;
- asm("hvc #0"
- : "=r"(x0)
- : "r"(x0), "r"(x1), "r"(x2), "r"(x3)
- : "memory");
+ smccc_hvc(PSCI_0_2_FN64_CPU_ON, target_cpu, entry_addr, context_id,
+ 0, 0, 0, 0, &res);
- return x0;
+ return res.a0;
}
static uint64_t psci_affinity_info(uint64_t target_affinity,
uint64_t lowest_affinity_level)
{
- register uint64_t x0 asm("x0") = PSCI_0_2_FN64_AFFINITY_INFO;
- register uint64_t x1 asm("x1") = target_affinity;
- register uint64_t x2 asm("x2") = lowest_affinity_level;
+ struct arm_smccc_res res;
- asm("hvc #0"
- : "=r"(x0)
- : "r"(x0), "r"(x1), "r"(x2)
- : "memory");
+ smccc_hvc(PSCI_0_2_FN64_AFFINITY_INFO, target_affinity, lowest_affinity_level,
+ 0, 0, 0, 0, 0, &res);
- return x0;
+ return res.a0;
}
static void guest_main(uint64_t target_cpu)