Merge changes from topic "ns/cpu_info" into integration

* changes:
  feat(plat/arm/sgi): increase memory reserved for bl31 image
  feat(plat/arm/sgi): read isolated cpu mpid list from sds
This commit is contained in:
Madhukar Pappireddy 2022-06-22 17:45:45 +02:00 committed by TrustedFirmware Code Review
commit 3f261a564e
3 changed files with 72 additions and 3 deletions

View file

@ -101,7 +101,7 @@
* calculated using the current BL31 PROGBITS debug size plus the sizes of
* BL2 and BL1-RW
*/
#define PLAT_ARM_MAX_BL31_SIZE 0x3B000
#define PLAT_ARM_MAX_BL31_SIZE 0x48000
/*
* Size of cacheable stacks
@ -287,4 +287,7 @@
#endif
/* SDS ID for unusable CPU MPID list structure */
#define SDS_ISOLATED_CPU_LIST_ID U(128)
#endif /* SGI_BASE_PLATFORM_DEF_H */

View file

@ -44,7 +44,8 @@ PLAT_BL_COMMON_SOURCES += ${CSS_ENT_BASE}/aarch64/sgi_helper.S
BL1_SOURCES += ${INTERCONNECT_SOURCES} \
drivers/arm/sbsa/sbsa.c
BL2_SOURCES += ${CSS_ENT_BASE}/sgi_image_load.c
BL2_SOURCES += ${CSS_ENT_BASE}/sgi_image_load.c \
drivers/arm/css/sds/sds.c
BL31_SOURCES += ${INTERCONNECT_SOURCES} \
${ENT_GIC_SOURCES} \

View file

@ -1,5 +1,5 @@
/*
* Copyright (c) 2018-2020, ARM Limited and Contributors. All rights reserved.
* Copyright (c) 2018-2022, ARM Limited and Contributors. All rights reserved.
*
* SPDX-License-Identifier: BSD-3-Clause
*/
@ -9,16 +9,68 @@
#include <arch_helpers.h>
#include <common/debug.h>
#include <common/desc_image_load.h>
#include <drivers/arm/css/sds.h>
#include <plat/arm/common/plat_arm.h>
#include <plat/common/platform.h>
#include <platform_def.h>
#include <sgi_base_platform_def.h>
#include <sgi_variant.h>
/*
* Information about the isolated CPUs obtained from SDS.
*/
struct isolated_cpu_mpid_list {
uint64_t num_entries; /* Number of entries in the list */
uint64_t mpid_list[PLATFORM_CORE_COUNT]; /* List of isolated CPU MPIDs */
};
/* Function to read isolated CPU MPID list from SDS. */
void plat_arm_sgi_get_isolated_cpu_list(struct isolated_cpu_mpid_list *list)
{
int ret;
ret = sds_init();
if (ret != SDS_OK) {
ERROR("SDS initialization failed, error: %d\n", ret);
panic();
}
ret = sds_struct_read(SDS_ISOLATED_CPU_LIST_ID, 0, &list->num_entries,
sizeof(list->num_entries), SDS_ACCESS_MODE_CACHED);
if (ret != SDS_OK) {
INFO("SDS CPU num elements read failed, error: %d\n", ret);
list->num_entries = 0;
return;
}
if (list->num_entries > PLATFORM_CORE_COUNT) {
ERROR("Isolated CPU list count %ld greater than max"
" number supported %d\n",
list->num_entries, PLATFORM_CORE_COUNT);
panic();
} else if (list->num_entries == 0) {
INFO("SDS isolated CPU list is empty\n");
return;
}
ret = sds_struct_read(SDS_ISOLATED_CPU_LIST_ID,
sizeof(list->num_entries),
&list->mpid_list,
sizeof(list->mpid_list[0]) * list->num_entries,
SDS_ACCESS_MODE_CACHED);
if (ret != SDS_OK) {
ERROR("SDS CPU list read failed. error: %d\n", ret);
panic();
}
}
/*******************************************************************************
* This function inserts Platform information via device tree nodes as,
* system-id {
* platform-id = <0>;
* config-id = <0>;
* isolated-cpu-list = <0>
* }
******************************************************************************/
static int plat_sgi_append_config_node(void)
@ -27,6 +79,7 @@ static int plat_sgi_append_config_node(void)
void *fdt;
int nodeoffset, err;
unsigned int platid = 0, platcfg = 0;
struct isolated_cpu_mpid_list cpu_mpid_list = {0};
mem_params = get_bl_mem_params_node(NT_FW_CONFIG_ID);
if (mem_params == NULL) {
@ -69,6 +122,18 @@ static int plat_sgi_append_config_node(void)
return -1;
}
plat_arm_sgi_get_isolated_cpu_list(&cpu_mpid_list);
if (cpu_mpid_list.num_entries > 0) {
err = fdt_setprop(fdt, nodeoffset, "isolated-cpu-list",
&cpu_mpid_list,
(sizeof(cpu_mpid_list.num_entries) *
(cpu_mpid_list.num_entries + 1)));
if (err < 0) {
ERROR("Failed to set isolated-cpu-list, error: %d\n",
err);
}
}
flush_dcache_range((uintptr_t)fdt, mem_params->image_info.image_size);
return 0;