Merge "fix(plat/arm): fix SP count limit without dual root CoT" into integration

This commit is contained in:
Manish Pandey 2022-03-22 11:40:17 +01:00 committed by TrustedFirmware Code Review
commit c5edb59de9
1 changed files with 17 additions and 6 deletions

View File

@ -1,5 +1,5 @@
/*
* Copyright (c) 2020-2021, ARM Limited and Contributors. All rights reserved.
* Copyright (c) 2020-2022, ARM Limited and Contributors. All rights reserved.
*
* SPDX-License-Identifier: BSD-3-Clause
*/
@ -30,13 +30,16 @@ int fconf_populate_arm_sp(uintptr_t config)
union uuid_helper_t uuid_helper;
unsigned int index = 0;
uint32_t val32;
bool is_plat_owned = false;
const unsigned int sip_start = SP_PKG1_ID;
unsigned int sip_index = sip_start;
#if defined(ARM_COT_dualroot)
const unsigned int sip_end = sip_start + MAX_SP_IDS / 2;
/* Allocating index range for platform SPs */
const unsigned int plat_start = SP_PKG5_ID;
unsigned int plat_index = plat_start;
const unsigned int plat_end = plat_start + MAX_SP_IDS / 2;
bool is_plat_owned = false;
#endif /* ARM_COT_dualroot */
/* As libfdt use void *, we can't avoid this cast */
const void *dtb = (void *)config;
@ -51,12 +54,18 @@ int fconf_populate_arm_sp(uintptr_t config)
}
fdt_for_each_subnode(sp_node, dtb, node) {
if ((index == MAX_SP_IDS) || (sip_index == sip_end)
|| (plat_index == plat_end)) {
if (index == MAX_SP_IDS) {
ERROR("FCONF: Reached max number of SPs\n");
return -1;
}
#if defined(ARM_COT_dualroot)
if ((sip_index == sip_end) || (plat_index == plat_end)) {
ERROR("FCONF: Reached max number of plat/SiP SPs\n");
return -1;
}
#endif /* ARM_COT_dualroot */
/* Read UUID */
err = fdtw_read_uuid(dtb, sp_node, "uuid", 16,
(uint8_t *)&uuid_helper);
@ -96,7 +105,7 @@ int fconf_populate_arm_sp(uintptr_t config)
/* Owner is an optional field, no need to catch error */
fdtw_read_string(dtb, sp_node, "owner",
arm_sp.owner[index], ARM_SP_OWNER_NAME_LEN);
#endif
/* If owner is empty mark it as SiP owned */
if ((strncmp(arm_sp.owner[index], "SiP",
ARM_SP_OWNER_NAME_LEN) == 0) ||
@ -121,7 +130,9 @@ int fconf_populate_arm_sp(uintptr_t config)
policies[plat_index].dev_handle = &fip_dev_handle;
policies[plat_index].check = open_fip;
plat_index++;
} else {
} else
#endif /* ARM_COT_dualroot */
{
sp_mem_params_descs[index].image_id = sip_index;
policies[sip_index].image_spec =
(uintptr_t)&arm_sp.uuids[index];