mirror of
https://github.com/ARM-software/arm-trusted-firmware.git
synced 2025-05-01 08:05:46 +00:00
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:
commit
3f261a564e
3 changed files with 72 additions and 3 deletions
|
@ -101,7 +101,7 @@
|
||||||
* calculated using the current BL31 PROGBITS debug size plus the sizes of
|
* calculated using the current BL31 PROGBITS debug size plus the sizes of
|
||||||
* BL2 and BL1-RW
|
* BL2 and BL1-RW
|
||||||
*/
|
*/
|
||||||
#define PLAT_ARM_MAX_BL31_SIZE 0x3B000
|
#define PLAT_ARM_MAX_BL31_SIZE 0x48000
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Size of cacheable stacks
|
* Size of cacheable stacks
|
||||||
|
@ -287,4 +287,7 @@
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
/* SDS ID for unusable CPU MPID list structure */
|
||||||
|
#define SDS_ISOLATED_CPU_LIST_ID U(128)
|
||||||
|
|
||||||
#endif /* SGI_BASE_PLATFORM_DEF_H */
|
#endif /* SGI_BASE_PLATFORM_DEF_H */
|
||||||
|
|
|
@ -44,7 +44,8 @@ PLAT_BL_COMMON_SOURCES += ${CSS_ENT_BASE}/aarch64/sgi_helper.S
|
||||||
BL1_SOURCES += ${INTERCONNECT_SOURCES} \
|
BL1_SOURCES += ${INTERCONNECT_SOURCES} \
|
||||||
drivers/arm/sbsa/sbsa.c
|
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} \
|
BL31_SOURCES += ${INTERCONNECT_SOURCES} \
|
||||||
${ENT_GIC_SOURCES} \
|
${ENT_GIC_SOURCES} \
|
||||||
|
|
|
@ -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
|
* SPDX-License-Identifier: BSD-3-Clause
|
||||||
*/
|
*/
|
||||||
|
@ -9,16 +9,68 @@
|
||||||
#include <arch_helpers.h>
|
#include <arch_helpers.h>
|
||||||
#include <common/debug.h>
|
#include <common/debug.h>
|
||||||
#include <common/desc_image_load.h>
|
#include <common/desc_image_load.h>
|
||||||
|
#include <drivers/arm/css/sds.h>
|
||||||
#include <plat/arm/common/plat_arm.h>
|
#include <plat/arm/common/plat_arm.h>
|
||||||
#include <plat/common/platform.h>
|
#include <plat/common/platform.h>
|
||||||
|
|
||||||
|
#include <platform_def.h>
|
||||||
|
#include <sgi_base_platform_def.h>
|
||||||
#include <sgi_variant.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,
|
* This function inserts Platform information via device tree nodes as,
|
||||||
* system-id {
|
* system-id {
|
||||||
* platform-id = <0>;
|
* platform-id = <0>;
|
||||||
* config-id = <0>;
|
* config-id = <0>;
|
||||||
|
* isolated-cpu-list = <0>
|
||||||
* }
|
* }
|
||||||
******************************************************************************/
|
******************************************************************************/
|
||||||
static int plat_sgi_append_config_node(void)
|
static int plat_sgi_append_config_node(void)
|
||||||
|
@ -27,6 +79,7 @@ static int plat_sgi_append_config_node(void)
|
||||||
void *fdt;
|
void *fdt;
|
||||||
int nodeoffset, err;
|
int nodeoffset, err;
|
||||||
unsigned int platid = 0, platcfg = 0;
|
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);
|
mem_params = get_bl_mem_params_node(NT_FW_CONFIG_ID);
|
||||||
if (mem_params == NULL) {
|
if (mem_params == NULL) {
|
||||||
|
@ -69,6 +122,18 @@ static int plat_sgi_append_config_node(void)
|
||||||
return -1;
|
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);
|
flush_dcache_range((uintptr_t)fdt, mem_params->image_info.image_size);
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
|
|
Loading…
Add table
Reference in a new issue