From: Andrew Davis Date: Wed, 16 Nov 2022 00:08:16 +0000 (-0600) Subject: feat(ti): add PSCI system_off support X-Git-Tag: baikal/aarch64/sdk5.10~1^2~264^2~4 X-Git-Url: https://git.baikalelectronics.ru/?a=commitdiff_plain;h=0bdef264c2bd356e2a89fc5ac7c438694618d272;p=arm-tf.git feat(ti): add PSCI system_off support Send a TI-SCI control message to system firmware to power down the board. Signed-off-by: Andrew Davis Change-Id: I6b8fa64baa94da078db82fc8e115630c9f200b3d --- diff --git a/plat/ti/k3/board/generic/include/board_def.h b/plat/ti/k3/board/generic/include/board_def.h index 4ff687cd8..e118cc3e8 100644 --- a/plat/ti/k3/board/generic/include/board_def.h +++ b/plat/ti/k3/board/generic/include/board_def.h @@ -39,5 +39,6 @@ #define PLAT_PROC_START_ID U(32) #define PLAT_PROC_DEVICE_START_ID U(202) #define PLAT_CLUSTER_DEVICE_START_ID U(198) +#define PLAT_BOARD_DEVICE_ID U(157) #endif /* BOARD_DEF_H */ diff --git a/plat/ti/k3/board/j784s4/include/board_def.h b/plat/ti/k3/board/j784s4/include/board_def.h index c2debc70e..5683fc0b1 100644 --- a/plat/ti/k3/board/j784s4/include/board_def.h +++ b/plat/ti/k3/board/j784s4/include/board_def.h @@ -39,5 +39,6 @@ #define PLAT_PROC_DEVICE_START_ID U(202) #define PLAT_CLUSTER_DEVICE_START_ID U(198) +#define PLAT_BOARD_DEVICE_ID U(157) #endif /* BOARD_DEF_H */ diff --git a/plat/ti/k3/board/lite/include/board_def.h b/plat/ti/k3/board/lite/include/board_def.h index fd4e5b1c4..b300c0833 100644 --- a/plat/ti/k3/board/lite/include/board_def.h +++ b/plat/ti/k3/board/lite/include/board_def.h @@ -41,5 +41,6 @@ #define PLAT_PROC_START_ID U(32) #define PLAT_PROC_DEVICE_START_ID U(135) #define PLAT_CLUSTER_DEVICE_START_ID U(134) +#define PLAT_BOARD_DEVICE_ID U(157) #endif /* BOARD_DEF_H */ diff --git a/plat/ti/k3/common/k3_bl31_setup.c b/plat/ti/k3/common/k3_bl31_setup.c index 457c95dd6..6436e7a66 100644 --- a/plat/ti/k3/common/k3_bl31_setup.c +++ b/plat/ti/k3/common/k3_bl31_setup.c @@ -120,6 +120,10 @@ void bl31_platform_setup(void) k3_gic_init(); ti_sci_init(); + + if (ti_sci_device_get(PLAT_BOARD_DEVICE_ID)) { + WARN("Unable to take system power reference\n"); + } } void platform_mem_init(void) diff --git a/plat/ti/k3/common/k3_psci.c b/plat/ti/k3/common/k3_psci.c index 6febbc6d3..4eb3ab562 100644 --- a/plat/ti/k3/common/k3_psci.c +++ b/plat/ti/k3/common/k3_psci.c @@ -205,7 +205,14 @@ void k3_pwr_domain_on_finish(const psci_power_state_t *target_state) static void __dead2 k3_system_off(void) { - ERROR("System Off: operation not handled.\n"); + int ret; + + /* Queue up the system shutdown request */ + ret = ti_sci_device_put_no_wait(PLAT_BOARD_DEVICE_ID); + if (ret != 0) { + ERROR("Sending system shutdown message failed (%d)\n", ret); + } + while (true) wfi(); }