diff options
author | Madhukar Pappireddy <madhukar.pappireddy@arm.com> | 2022-06-22 17:45:45 +0200 |
---|---|---|
committer | TrustedFirmware Code Review <review@review.trustedfirmware.org> | 2022-06-22 17:45:45 +0200 |
commit | 3f261a564ec82a6a7ecf443232372a2bf0356521 (patch) | |
tree | 483514e45dafa14a93b85c1aa1ee9ad768584470 | |
parent | 0f93168c01d3971b340ed96559bb7f2a6141129e (diff) | |
parent | a62cc91aeedbdcfb3396983ed165eb35b8d4c3fa (diff) | |
download | trusted-firmware-a-3f261a564ec82a6a7ecf443232372a2bf0356521.tar.gz |
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
-rw-r--r-- | plat/arm/css/sgi/include/sgi_base_platform_def.h | 5 | ||||
-rw-r--r-- | plat/arm/css/sgi/sgi-common.mk | 3 | ||||
-rw-r--r-- | plat/arm/css/sgi/sgi_image_load.c | 67 |
3 files changed, 72 insertions, 3 deletions
diff --git a/plat/arm/css/sgi/include/sgi_base_platform_def.h b/plat/arm/css/sgi/include/sgi_base_platform_def.h index 93609b9e4b..58a153a78c 100644 --- a/plat/arm/css/sgi/include/sgi_base_platform_def.h +++ b/plat/arm/css/sgi/include/sgi_base_platform_def.h @@ -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 */ diff --git a/plat/arm/css/sgi/sgi-common.mk b/plat/arm/css/sgi/sgi-common.mk index 76c8025ba2..4af579ee6a 100644 --- a/plat/arm/css/sgi/sgi-common.mk +++ b/plat/arm/css/sgi/sgi-common.mk @@ -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} \ diff --git a/plat/arm/css/sgi/sgi_image_load.c b/plat/arm/css/sgi/sgi_image_load.c index 09f3b728db..ac4bfd2927 100644 --- a/plat/arm/css/sgi/sgi_image_load.c +++ b/plat/arm/css/sgi/sgi_image_load.c @@ -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; |