Module Name: src
Committed By: jmcneill
Date: Mon Dec 30 19:09:49 UTC 2024
Modified Files:
src/sys/arch/arm/arm: psci.c psci.h
Log Message:
psci: Add support for PSCI_CPU_SUSPEND
To generate a diff of this commit:
cvs rdiff -u -r1.7 -r1.8 src/sys/arch/arm/arm/psci.c
cvs rdiff -u -r1.4 -r1.5 src/sys/arch/arm/arm/psci.h
Please note that diffs are not public domain; they are subject to the
copyright notices on the relevant files.
Modified files:
Index: src/sys/arch/arm/arm/psci.c
diff -u src/sys/arch/arm/arm/psci.c:1.7 src/sys/arch/arm/arm/psci.c:1.8
--- src/sys/arch/arm/arm/psci.c:1.7 Sat Aug 7 21:20:14 2021
+++ src/sys/arch/arm/arm/psci.c Mon Dec 30 19:09:49 2024
@@ -1,4 +1,4 @@
-/* $NetBSD: psci.c,v 1.7 2021/08/07 21:20:14 jmcneill Exp $ */
+/* $NetBSD: psci.c,v 1.8 2024/12/30 19:09:49 jmcneill Exp $ */
/*-
* Copyright (c) 2017 Jared McNeill <[email protected]>
@@ -27,7 +27,7 @@
*/
#include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: psci.c,v 1.7 2021/08/07 21:20:14 jmcneill Exp $");
+__KERNEL_RCSID(0, "$NetBSD: psci.c,v 1.8 2024/12/30 19:09:49 jmcneill Exp $");
#include <sys/param.h>
#include <sys/bus.h>
@@ -41,8 +41,10 @@ __KERNEL_RCSID(0, "$NetBSD: psci.c,v 1.7
#define PSCI_SYSTEM_OFF 0x84000008
#define PSCI_SYSTEM_RESET 0x84000009
#if defined(__aarch64__)
+#define PSCI_CPU_SUSPEND 0xc4000001
#define PSCI_CPU_ON 0xc4000003
#else
+#define PSCI_CPU_SUSPEND 0x84000001
#define PSCI_CPU_ON 0x84000003
#endif
#define PSCI_FEATURES 0x8400000a
@@ -53,6 +55,7 @@ static uint32_t psci_functions[PSCI_FUNC
[PSCI_FUNC_VERSION] = PSCI_VERSION,
[PSCI_FUNC_SYSTEM_OFF] = PSCI_SYSTEM_OFF,
[PSCI_FUNC_SYSTEM_RESET] = PSCI_SYSTEM_RESET,
+ [PSCI_FUNC_CPU_SUSPEND] = PSCI_CPU_SUSPEND,
[PSCI_FUNC_CPU_ON] = PSCI_CPU_ON,
[PSCI_FUNC_FEATURES] = PSCI_FEATURES,
};
@@ -100,6 +103,13 @@ psci_cpu_on(register_t target_cpu, regis
entry_point_address, context_id);
}
+int
+psci_cpu_suspend(uint32_t power_state)
+{
+ return psci_call(psci_functions[PSCI_FUNC_CPU_SUSPEND], power_state,
+ 0, 0);
+}
+
void
psci_system_off(void)
{
Index: src/sys/arch/arm/arm/psci.h
diff -u src/sys/arch/arm/arm/psci.h:1.4 src/sys/arch/arm/arm/psci.h:1.5
--- src/sys/arch/arm/arm/psci.h:1.4 Sat Aug 7 21:20:14 2021
+++ src/sys/arch/arm/arm/psci.h Mon Dec 30 19:09:49 2024
@@ -1,4 +1,4 @@
-/* $NetBSD: psci.h,v 1.4 2021/08/07 21:20:14 jmcneill Exp $ */
+/* $NetBSD: psci.h,v 1.5 2024/12/30 19:09:49 jmcneill Exp $ */
/*-
* Copyright (c) 2017 Jared McNeill <[email protected]>
@@ -34,6 +34,7 @@
*/
enum psci_function {
PSCI_FUNC_VERSION,
+ PSCI_FUNC_CPU_SUSPEND,
PSCI_FUNC_CPU_ON,
PSCI_FUNC_SYSTEM_OFF,
PSCI_FUNC_SYSTEM_RESET,
@@ -114,6 +115,11 @@ uint32_t psci_version(void);
int psci_cpu_on(register_t, register_t, register_t);
/*
+ * Suspend a core. Args: power_state
+ */
+int psci_cpu_suspend(uint32_t);
+
+/*
* Shut down the system.
*/
void psci_system_off(void);