Commit 71e7a4e5 authored by Jeenu Viswambharan's avatar Jeenu Viswambharan
Browse files

ARM platforms: Make arm_validate_ns_entrypoint() common


The function arm_validate_ns_entrypoint() validates a given non-secure
physical address. This function however specifically returns PSCI error
codes.

Non-secure physical address validation is potentially useful across ARM
platforms, even for non-PSCI use cases. Therefore make this function
common by returning 0 for success or -1 otherwise.

Having made the function common, make arm_validate_psci_entrypoint() a
wrapper around arm_validate_ns_entrypoint() which only translates return
value into PSCI error codes. This wrapper is now used where
arm_validate_ns_entrypoint() was currently used for PSCI entry point
validation.

Change-Id: Ic781fc3105d6d199fd8f53f01aba5baea0ebc310
Signed-off-by: default avatarJeenu Viswambharan <jeenu.viswambharan@arm.com>
parent b7cb133e
Showing with 18 additions and 9 deletions
+18 -9
...@@ -119,6 +119,7 @@ void arm_configure_sys_timer(void); ...@@ -119,6 +119,7 @@ void arm_configure_sys_timer(void);
/* PM utility functions */ /* PM utility functions */
int arm_validate_power_state(unsigned int power_state, int arm_validate_power_state(unsigned int power_state,
psci_power_state_t *req_state); psci_power_state_t *req_state);
int arm_validate_psci_entrypoint(uintptr_t entrypoint);
int arm_validate_ns_entrypoint(uintptr_t entrypoint); int arm_validate_ns_entrypoint(uintptr_t entrypoint);
void arm_system_pwr_domain_save(void); void arm_system_pwr_domain_save(void);
void arm_system_pwr_domain_resume(void); void arm_system_pwr_domain_resume(void);
......
...@@ -398,7 +398,7 @@ plat_psci_ops_t plat_arm_psci_pm_ops = { ...@@ -398,7 +398,7 @@ plat_psci_ops_t plat_arm_psci_pm_ops = {
.system_off = fvp_system_off, .system_off = fvp_system_off,
.system_reset = fvp_system_reset, .system_reset = fvp_system_reset,
.validate_power_state = fvp_validate_power_state, .validate_power_state = fvp_validate_power_state,
.validate_ns_entrypoint = arm_validate_ns_entrypoint, .validate_ns_entrypoint = arm_validate_psci_entrypoint,
.translate_power_state_by_mpidr = fvp_translate_power_state_by_mpidr, .translate_power_state_by_mpidr = fvp_translate_power_state_by_mpidr,
.get_node_hw_state = fvp_node_hw_state, .get_node_hw_state = fvp_node_hw_state,
.get_sys_suspend_power_state = fvp_get_sys_suspend_power_state, .get_sys_suspend_power_state = fvp_get_sys_suspend_power_state,
......
/* /*
* Copyright (c) 2015-2016, ARM Limited and Contributors. All rights reserved. * Copyright (c) 2015-2017, ARM Limited and Contributors. All rights reserved.
* *
* SPDX-License-Identifier: BSD-3-Clause * SPDX-License-Identifier: BSD-3-Clause
*/ */
...@@ -112,7 +112,7 @@ int arm_validate_power_state(unsigned int power_state, ...@@ -112,7 +112,7 @@ int arm_validate_power_state(unsigned int power_state,
/******************************************************************************* /*******************************************************************************
* ARM standard platform handler called to check the validity of the non secure * ARM standard platform handler called to check the validity of the non secure
* entrypoint. * entrypoint. Returns 0 if the entrypoint is valid, or -1 otherwise.
******************************************************************************/ ******************************************************************************/
int arm_validate_ns_entrypoint(uintptr_t entrypoint) int arm_validate_ns_entrypoint(uintptr_t entrypoint)
{ {
...@@ -121,15 +121,23 @@ int arm_validate_ns_entrypoint(uintptr_t entrypoint) ...@@ -121,15 +121,23 @@ int arm_validate_ns_entrypoint(uintptr_t entrypoint)
* secure DRAM. * secure DRAM.
*/ */
if ((entrypoint >= ARM_NS_DRAM1_BASE) && (entrypoint < if ((entrypoint >= ARM_NS_DRAM1_BASE) && (entrypoint <
(ARM_NS_DRAM1_BASE + ARM_NS_DRAM1_SIZE))) (ARM_NS_DRAM1_BASE + ARM_NS_DRAM1_SIZE))) {
return PSCI_E_SUCCESS; return 0;
}
#ifndef AARCH32 #ifndef AARCH32
if ((entrypoint >= ARM_DRAM2_BASE) && (entrypoint < if ((entrypoint >= ARM_DRAM2_BASE) && (entrypoint <
(ARM_DRAM2_BASE + ARM_DRAM2_SIZE))) (ARM_DRAM2_BASE + ARM_DRAM2_SIZE))) {
return PSCI_E_SUCCESS; return 0;
}
#endif #endif
return PSCI_E_INVALID_ADDRESS; return -1;
}
int arm_validate_psci_entrypoint(uintptr_t entrypoint)
{
return arm_validate_ns_entrypoint(entrypoint) == 0 ? PSCI_E_SUCCESS :
PSCI_E_INVALID_ADDRESS;
} }
/****************************************************************************** /******************************************************************************
......
...@@ -299,7 +299,7 @@ plat_psci_ops_t plat_arm_psci_pm_ops = { ...@@ -299,7 +299,7 @@ plat_psci_ops_t plat_arm_psci_pm_ops = {
.system_off = css_system_off, .system_off = css_system_off,
.system_reset = css_system_reset, .system_reset = css_system_reset,
.validate_power_state = css_validate_power_state, .validate_power_state = css_validate_power_state,
.validate_ns_entrypoint = arm_validate_ns_entrypoint, .validate_ns_entrypoint = arm_validate_psci_entrypoint,
.translate_power_state_by_mpidr = css_translate_power_state_by_mpidr, .translate_power_state_by_mpidr = css_translate_power_state_by_mpidr,
.get_node_hw_state = css_node_hw_state, .get_node_hw_state = css_node_hw_state,
.get_sys_suspend_power_state = css_get_sys_suspend_power_state, .get_sys_suspend_power_state = css_get_sys_suspend_power_state,
......
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment