git: 48a7e53db782 - main - Merge the common parts of the SMCCC handlers

From: Andrew Turner <andrew_at_FreeBSD.org>
Date: Thu, 25 Aug 2022 11:17:41 UTC
The branch main has been updated by andrew:

URL: https://cgit.FreeBSD.org/src/commit/?id=48a7e53db78293ba2723cecfb3a3d5d23ea8e44d

commit 48a7e53db78293ba2723cecfb3a3d5d23ea8e44d
Author:     Andrew Turner <andrew@FreeBSD.org>
AuthorDate: 2022-08-22 17:09:28 +0000
Commit:     Andrew Turner <andrew@FreeBSD.org>
CommitDate: 2022-08-25 11:17:28 +0000

    Merge the common parts of the SMCCC handlers
    
    To simplify adding new handlers merge the common parts of the functions
    used to call into the arm SMCCC firmware.
    
    Sponsored by:   The FreeBSD Foundation
    Differential Revision: https://reviews.freebsd.org/D36297
---
 sys/dev/psci/smccc_arm.S   | 29 ++++++++---------------------
 sys/dev/psci/smccc_arm64.S | 25 ++++++++-----------------
 2 files changed, 16 insertions(+), 38 deletions(-)

diff --git a/sys/dev/psci/smccc_arm.S b/sys/dev/psci/smccc_arm.S
index ae5a94197718..dd7cd6a690bd 100644
--- a/sys/dev/psci/smccc_arm.S
+++ b/sys/dev/psci/smccc_arm.S
@@ -37,38 +37,25 @@ __FBSDID("$FreeBSD$");
 .arch_extension sec	/* For smc */
 .arch_extension virt	/* For hvc */
 
-/*
- * int arm_smccc_hvc(register_t, register_t, register_t, register_t,
- *     register_t, register_t, register_t, register_t,
- *     struct arm_smccc_res *res)
- */
-ENTRY(arm_smccc_hvc)
+.macro arm_smccc_1_0	insn
+ENTRY(arm_smccc_\insn)
 	mov	r12, sp
 	push	{r4-r7}
 	ldm	r12, {r4-r7}
-	hvc	#0
+	\insn	#0
 	pop	{r4-r7}
 	ldr	r12, [sp, #(4 * 4)]
 	cmp     r12, #0
 	beq	1f
 	stm	r12, {r0-r3}
 1:	bx	lr
-END(arm_smccc_hvc)
+END(arm_smccc_\insn)
+.endm
 
 /*
- * int arm_smccc_smc(register_t, register_t, register_t, register_t,
+ * int arm_smccc_hvc(register_t, register_t, register_t, register_t,
  *     register_t, register_t, register_t, register_t,
  *     struct arm_smccc_res *res)
  */
-ENTRY(arm_smccc_smc)
-	mov	r12, sp
-	push	{r4-r7}
-	ldm	r12, {r4-r7}
-	smc	#0
-	pop	{r4-r7}
-	ldr	r12, [sp, #(4 * 4)]
-	cmp     r12, #0
-	beq	1f
-	stm	r12, {r0-r3}
-1:	bx	lr
-END(arm_smccc_smc)
+arm_smccc_1_0	hvc
+arm_smccc_1_0	smc
diff --git a/sys/dev/psci/smccc_arm64.S b/sys/dev/psci/smccc_arm64.S
index 0b94a11fdf04..ba10f7493e71 100644
--- a/sys/dev/psci/smccc_arm64.S
+++ b/sys/dev/psci/smccc_arm64.S
@@ -33,30 +33,21 @@
 #include <machine/asm.h>
 __FBSDID("$FreeBSD$");
 
-/*
- * int arm_smccc_hvc(register_t, register_t, register_t, register_t,
- *     register_t, register_t, register_t, register_t,
- *     struct arm_smccc_res *res)
- */
-ENTRY(arm_smccc_hvc)
-	hvc	#0
+.macro arm_smccc_1_0	insn
+ENTRY(arm_smccc_\insn)
+	\insn	#0
 	ldr	x4, [sp]
 	cbz	x4, 1f
 	stp	x0, x1, [x4, #16 * 0]
 	stp	x2, x3, [x4, #16 * 1]
 1:	ret
-END(arm_smccc_hvc)
+END(arm_smccc_\insn)
+.endm
 
 /*
- * int arm_smccc_smc(register_t, register_t, register_t, register_t,
+ * int arm_smccc_*(register_t, register_t, register_t, register_t,
  *     register_t, register_t, register_t, register_t,
  *     struct arm_smccc_res *res)
  */
-ENTRY(arm_smccc_smc)
-	smc	#0
-	ldr	x4, [sp]
-	cbz	x4, 1f
-	stp	x0, x1, [x4, #16 * 0]
-	stp	x2, x3, [x4, #16 * 1]
-1:	ret
-END(arm_smccc_smc)
+arm_smccc_1_0	hvc
+arm_smccc_1_0	smc