Index: sys/arm64/arm64/smccc-call.S
===================================================================
--- /dev/null
+++ sys/arm64/arm64/smccc-call.S
@@ -0,0 +1,58 @@
+/*-
+ * SPDX-License-Identifier: BSD-2-Clause
+ *
+ * Copyright (c) 2019 Ruslan Bukin
+ *
+ * This software was developed by SRI International and the University of
+ * Cambridge Computer Laboratory (Department of Computer Science and
+ * Technology) under DARPA contract HR0011-18-C-0016 ("ECATS"), as part of the
+ * DARPA SSITH research programme.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
+ * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
+ * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+ * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+ * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+ * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+ * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+ * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+ * SUCH DAMAGE.
+ */
+
+#include
+__FBSDID("$FreeBSD$");
+
+/*
+ * uint64_t arm_smccc_hvc(uint64_t, uint64_t, uint64_t, uint64_t, uint64_t,
+ * uint64_t, uint64_t, uint64_t, uint64_t *res)
+ */
+ENTRY(arm_smccc_hvc)
+ hvc #0
+ ldr x4, [sp]
+ stp x0, x1, [x4, #16 * 0]
+ stp x2, x3, [x4, #16 * 1]
+ ret
+END(arm_smccc_hvc)
+
+/*
+ * uint64_t arm_smccc_smc(uint64_t, uint64_t, uint64_t, uint64_t, uint64_t,
+ * uint64_t, uint64_t, uint64_t, uint64_t *res)
+ */
+ENTRY(arm_smccc_smc)
+ smc #0
+ ldr x4, [sp]
+ stp x0, x1, [x4, #16 * 0]
+ stp x2, x3, [x4, #16 * 1]
+ ret
+END(arm_smccc_smc)
Index: sys/arm64/include/arm-smccc.h
===================================================================
--- /dev/null
+++ sys/arm64/include/arm-smccc.h
@@ -0,0 +1,72 @@
+/*-
+ * SPDX-License-Identifier: BSD-2-Clause
+ *
+ * Copyright (c) 2018 Andrew Turner
+ *
+ * This software was developed by SRI International and the University of
+ * Cambridge Computer Laboratory under DARPA/AFRL contract FA8750-10-C-0237
+ * ("CTSRD"), as part of the DARPA CRASH research programme.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
+ * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
+ * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+ * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+ * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+ * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+ * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+ * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+ * SUCH DAMAGE.
+ *
+ * $FreeBSD$
+ */
+
+#ifndef _MACHINE_SMCCC_H_
+#define _MACHINE_SMCCC_H_
+
+#define SMCCC_VERSION_MAJOR(ver) (((ver) >> 16) & 0x7fff)
+#define SMCCC_VERSION_MINOR(ver) ((ver) & 0xffff)
+
+#define SMCCC_FUNC_ID(type, call_conv, range, func) \
+ (((type) << 31) | \
+ ((call_conv) << 30) | \
+ (((range) & 0x3f) << 24) | \
+ ((func) & 0xffff))
+
+#define SMCCC_YIELDING_CALL 0
+#define SMCCC_FAST_CALL 1
+
+#define SMCCC_32BIT_CALL 0
+#define SMCCC_64BIT_CALL 1
+
+#define SMCCC_ARM_ARCH_CALLS 0
+#define SMCCC_CPU_SERVICE_CALLS 1
+#define SMCCC_SIP_SERVICE_CALLS 2
+#define SMCCC_OEM_SERVICE_CALLS 3
+#define SMCCC_STD_SECURE_SERVICE_CALLS 4
+#define SMCCC_STD_HYP_SERVICE_CALLS 5
+#define SMCCC_VENDOR_HYP_SERVICE_CALLS 6
+
+struct arm_smccc_res {
+ uint64_t a0;
+ uint64_t a1;
+ uint64_t a2;
+ uint64_t a3;
+};
+
+uint64_t arm_smccc_smc(uint64_t, uint64_t, uint64_t, uint64_t, uint64_t,
+ uint64_t, uint64_t, uint64_t, struct arm_smccc_res *res);
+uint64_t arm_smccc_hvc(uint64_t, uint64_t, uint64_t, uint64_t, uint64_t,
+ uint64_t, uint64_t, uint64_t, struct arm_smccc_res *res);
+
+#endif /* !_MACHINE_SMCCC_H_ */
Index: sys/conf/files.arm64
===================================================================
--- sys/conf/files.arm64
+++ sys/conf/files.arm64
@@ -149,6 +149,7 @@
arm64/arm64/nexus.c standard
arm64/arm64/ofw_machdep.c optional fdt
arm64/arm64/pmap.c standard
+arm64/arm64/smccc-call.S standard
arm64/arm64/stack_machdep.c optional ddb | stack
arm64/arm64/support.S standard
arm64/arm64/swtch.S standard
Index: sys/dev/psci/smccc.h
===================================================================
--- sys/dev/psci/smccc.h
+++ sys/dev/psci/smccc.h
@@ -34,20 +34,7 @@
#ifndef _PSCI_SMCCC_H_
#define _PSCI_SMCCC_H_
-#define SMCCC_VERSION_MAJOR(ver) (((ver) >> 16) & 0x7fff)
-#define SMCCC_VERSION_MINOR(ver) ((ver) & 0xffff)
-
-#define SMCCC_FUNC_ID(type, call_conv, range, func) \
- (((type) << 31) | \
- ((call_conv) << 30) | \
- (((range) & 0x3f) << 24) | \
- ((func) & 0xffff))
-
-#define SMCCC_YIELDING_CALL 0
-#define SMCCC_FAST_CALL 1
-
-#define SMCCC_32BIT_CALL 0
-#define SMCCC_64BIT_CALL 1
+#include
/*
* Arm Architecture Calls.
@@ -71,5 +58,4 @@
int smccc_arch_workaround_1(void);
int smccc_arch_workaround_2(int);
-
#endif /* _PSCI_SMCCC_H_ */