From 89f2e589856f7626d210df409b466e0289dff133 Mon Sep 17 00:00:00 2001 From: Chandni Cherukuri Date: Wed, 14 Nov 2018 13:43:59 +0530 Subject: [PATCH] plat/arm: remove weak implemention of 'plat_arm_psci_override_pm_ops' function In order to allow Arm platforms to override the default list of PSCI callbacks, remove the existing weak implementation of 'plat_arm_psci_override_pm_ops' function and let all the Arm platforms implement their own 'plat_arm_psci_override_pm_ops' function. For platforms that support SCMI protocol, the function 'css_scmi_override_pm_ops' can be additionally used as well to override the default PSCI callbacks. Change-Id: If7c27468bd51a00ea9c2a3716b5894163f5a9f3c Signed-off-by: Chandni Cherukuri --- plat/arm/board/fvp/fvp_pm.c | 5 +++++ plat/arm/board/juno/juno_pm.c | 13 +++++++++++++ plat/arm/board/juno/platform.mk | 2 ++ plat/arm/board/juno/sp_min/sp_min-juno.mk | 1 + plat/arm/board/n1sdp/n1sdp_bl31_setup.c | 6 ++++++ plat/arm/common/arm_pm.c | 9 --------- plat/arm/css/drivers/scmi/scmi.h | 4 ++++ plat/arm/css/drivers/scp/css_pm_scmi.c | 2 +- plat/arm/css/sgi/sgi_bl31_setup.c | 5 +++++ plat/arm/css/sgm/sgm_bl31_setup.c | 5 +++++ 10 files changed, 42 insertions(+), 10 deletions(-) create mode 100644 plat/arm/board/juno/juno_pm.c diff --git a/plat/arm/board/fvp/fvp_pm.c b/plat/arm/board/fvp/fvp_pm.c index 7b85043b..78d30255 100644 --- a/plat/arm/board/fvp/fvp_pm.c +++ b/plat/arm/board/fvp/fvp_pm.c @@ -416,3 +416,8 @@ plat_psci_ops_t plat_arm_psci_pm_ops = { .read_mem_protect = arm_psci_read_mem_protect, .write_mem_protect = arm_nor_psci_write_mem_protect, }; + +const plat_psci_ops_t *plat_arm_psci_override_pm_ops(plat_psci_ops_t *ops) +{ + return ops; +} diff --git a/plat/arm/board/juno/juno_pm.c b/plat/arm/board/juno/juno_pm.c new file mode 100644 index 00000000..da2e92ba --- /dev/null +++ b/plat/arm/board/juno/juno_pm.c @@ -0,0 +1,13 @@ +/* + * Copyright (c) 2018, ARM Limited and Contributors. All rights reserved. + * + * SPDX-License-Identifier: BSD-3-Clause + */ + +#include +#include + +const plat_psci_ops_t *plat_arm_psci_override_pm_ops(plat_psci_ops_t *ops) +{ + return css_scmi_override_pm_ops(ops); +} diff --git a/plat/arm/board/juno/platform.mk b/plat/arm/board/juno/platform.mk index ba1acd42..ad955f67 100644 --- a/plat/arm/board/juno/platform.mk +++ b/plat/arm/board/juno/platform.mk @@ -27,6 +27,7 @@ endif CSS_USE_SCMI_SDS_DRIVER := 1 PLAT_INCLUDES := -Iplat/arm/board/juno/include \ + -Iplat/arm/css/drivers/scmi \ -Iplat/arm/css/drivers/sds PLAT_BL_COMMON_SOURCES := plat/arm/board/juno/${ARCH}/juno_helpers.S \ @@ -79,6 +80,7 @@ BL31_SOURCES += drivers/cfi/v2m/v2m_flash.c \ lib/cpus/aarch64/cortex_a57.S \ lib/cpus/aarch64/cortex_a72.S \ lib/utils/mem_region.c \ + plat/arm/board/juno/juno_pm.c \ plat/arm/board/juno/juno_topology.c \ plat/arm/common/arm_nor_psci_mem_protect.c \ ${JUNO_GIC_SOURCES} \ diff --git a/plat/arm/board/juno/sp_min/sp_min-juno.mk b/plat/arm/board/juno/sp_min/sp_min-juno.mk index 52781093..b3471c1f 100644 --- a/plat/arm/board/juno/sp_min/sp_min-juno.mk +++ b/plat/arm/board/juno/sp_min/sp_min-juno.mk @@ -10,6 +10,7 @@ BL32_SOURCES += drivers/cfi/v2m/v2m_flash.c \ lib/cpus/aarch32/cortex_a57.S \ lib/cpus/aarch32/cortex_a72.S \ lib/utils/mem_region.c \ + plat/arm/board/juno/juno_pm.c \ plat/arm/board/juno/juno_topology.c \ plat/arm/common/arm_nor_psci_mem_protect.c \ plat/arm/soc/common/soc_css_security.c \ diff --git a/plat/arm/board/n1sdp/n1sdp_bl31_setup.c b/plat/arm/board/n1sdp/n1sdp_bl31_setup.c index 65aad9cf..cdd0b63d 100644 --- a/plat/arm/board/n1sdp/n1sdp_bl31_setup.c +++ b/plat/arm/board/n1sdp/n1sdp_bl31_setup.c @@ -6,6 +6,7 @@ #include "../../css/drivers/scmi/scmi.h" #include "../../css/drivers/mhu/css_mhu_doorbell.h" +#include #include static scmi_channel_plat_info_t n1sdp_scmi_plat_info = { @@ -20,3 +21,8 @@ scmi_channel_plat_info_t *plat_css_get_scmi_info() { return &n1sdp_scmi_plat_info; } + +const plat_psci_ops_t *plat_arm_psci_override_pm_ops(plat_psci_ops_t *ops) +{ + return css_scmi_override_pm_ops(ops); +} diff --git a/plat/arm/common/arm_pm.c b/plat/arm/common/arm_pm.c index 6394bfb5..3be1b5d3 100644 --- a/plat/arm/common/arm_pm.c +++ b/plat/arm/common/arm_pm.c @@ -14,7 +14,6 @@ #include /* Allow ARM Standard platforms to override these functions */ -#pragma weak plat_arm_psci_override_pm_ops #pragma weak plat_arm_program_trusted_mailbox #if !ARM_RECOM_STATE_ID_ENC @@ -132,14 +131,6 @@ int arm_validate_psci_entrypoint(uintptr_t entrypoint) PSCI_E_INVALID_ADDRESS; } -/****************************************************************************** - * Default definition on ARM standard platforms to override the plat_psci_ops. - *****************************************************************************/ -const plat_psci_ops_t *plat_arm_psci_override_pm_ops(plat_psci_ops_t *ops) -{ - return ops; -} - /****************************************************************************** * Helper function to save the platform state before a system suspend. Save the * state of the system components which are not in the Always ON power domain. diff --git a/plat/arm/css/drivers/scmi/scmi.h b/plat/arm/css/drivers/scmi/scmi.h index e1358bfa..28dfc9ac 100644 --- a/plat/arm/css/drivers/scmi/scmi.h +++ b/plat/arm/css/drivers/scmi/scmi.h @@ -8,6 +8,7 @@ #define SCMI_H #include +#include #include #include #include @@ -162,4 +163,7 @@ int scmi_ap_core_get_reset_addr(void *p, uint64_t *reset_addr, uint32_t *attr); /* API to get the platform specific SCMI channel information. */ scmi_channel_plat_info_t *plat_css_get_scmi_info(); +/* API to override default PSCI callbacks for platforms that support SCMI. */ +const plat_psci_ops_t *css_scmi_override_pm_ops(plat_psci_ops_t *ops); + #endif /* SCMI_H */ diff --git a/plat/arm/css/drivers/scp/css_pm_scmi.c b/plat/arm/css/drivers/scp/css_pm_scmi.c index 956f583c..1397fd80 100644 --- a/plat/arm/css/drivers/scp/css_pm_scmi.c +++ b/plat/arm/css/drivers/scp/css_pm_scmi.c @@ -339,7 +339,7 @@ void __init plat_arm_pwrc_setup(void) * the SCMI driver, query capability via SCMI and modify the PSCI capability * based on that. *****************************************************************************/ -const plat_psci_ops_t *plat_arm_psci_override_pm_ops(plat_psci_ops_t *ops) +const plat_psci_ops_t *css_scmi_override_pm_ops(plat_psci_ops_t *ops) { uint32_t msg_attr; int ret; diff --git a/plat/arm/css/sgi/sgi_bl31_setup.c b/plat/arm/css/sgi/sgi_bl31_setup.c index ce850269..d44f89c7 100644 --- a/plat/arm/css/sgi/sgi_bl31_setup.c +++ b/plat/arm/css/sgi/sgi_bl31_setup.c @@ -101,3 +101,8 @@ void bl31_platform_setup(void) sgi_ras_intr_handler_setup(); #endif } + +const plat_psci_ops_t *plat_arm_psci_override_pm_ops(plat_psci_ops_t *ops) +{ + return css_scmi_override_pm_ops(ops); +} diff --git a/plat/arm/css/sgm/sgm_bl31_setup.c b/plat/arm/css/sgm/sgm_bl31_setup.c index 29c32e7c..952572e3 100644 --- a/plat/arm/css/sgm/sgm_bl31_setup.c +++ b/plat/arm/css/sgm/sgm_bl31_setup.c @@ -47,3 +47,8 @@ void bl31_early_platform_setup2(u_register_t arg0, u_register_t arg1, arm_bl31_early_platform_setup((void *)arg0, arg1, arg2, (void *)arg3); } + +const plat_psci_ops_t *plat_arm_psci_override_pm_ops(plat_psci_ops_t *ops) +{ + return css_scmi_override_pm_ops(ops); +} -- 2.30.2