plat/arm/sgi: add system-id node in HW_CONFIG dts
Dynamically populating the 'system-id' node in the HW_CONFIG dts makes it difficult to enforce memory overlap checks. So add the system-id node in the HW_CONFIG dts file as a place holder with 'platform-id' and 'config-id' set to zero. The code at BL2 stage determines the values of 'platform-id' and 'config-id' at runtime and updates the corresponding fields in the system-id node of HW_CONFIG dts. Change-Id: I2ca9980b994ac418da8afa0c72716ede10aff68a Signed-off-by: Chandni Cherukuri <chandni.cherukuri@arm.com>
This commit is contained in:
parent
63197d0140
commit
8c7b55f932
|
@ -8,4 +8,14 @@
|
|||
/ {
|
||||
/* compatible string */
|
||||
compatible = "arm,sgi575";
|
||||
|
||||
/*
|
||||
* Place holder for system-id node with default values. The
|
||||
* value of platform-id and config-id will be set to the
|
||||
* correct values during the BL2 stage of boot.
|
||||
*/
|
||||
system-id {
|
||||
platform-id = <0x0>;
|
||||
config-id = <0x0>;
|
||||
};
|
||||
};
|
||||
|
|
|
@ -4,6 +4,7 @@
|
|||
* SPDX-License-Identifier: BSD-3-Clause
|
||||
*/
|
||||
|
||||
#include <arch_helpers.h>
|
||||
#include <debug.h>
|
||||
#include <desc_image_load.h>
|
||||
#include <libfdt.h>
|
||||
|
@ -13,6 +14,7 @@
|
|||
* This function inserts Platform information via device tree nodes as,
|
||||
* system-id {
|
||||
* platform-id = <0>;
|
||||
* config-id = <0>;
|
||||
* }
|
||||
******************************************************************************/
|
||||
static int plat_sgi_append_config_node(void)
|
||||
|
@ -20,7 +22,7 @@ static int plat_sgi_append_config_node(void)
|
|||
bl_mem_params_node_t *mem_params;
|
||||
void *fdt;
|
||||
int nodeoffset, err;
|
||||
unsigned int platid = 0;
|
||||
unsigned int platid = 0, platcfg = 0;
|
||||
char *platform_name;
|
||||
|
||||
mem_params = get_bl_mem_params_node(HW_CONFIG_ID);
|
||||
|
@ -45,31 +47,34 @@ static int plat_sgi_append_config_node(void)
|
|||
}
|
||||
|
||||
if (strcmp(platform_name, "arm,sgi575") == 0) {
|
||||
platid = mmio_read_32(SSC_VERSION);
|
||||
platid = mmio_read_32(SSC_VERSION) & SSC_VERSION_PART_NUM_MASK;
|
||||
platcfg = (mmio_read_32(SSC_VERSION) >> SSC_VERSION_CONFIG_SHIFT)
|
||||
& SSC_VERSION_CONFIG_MASK;
|
||||
} else {
|
||||
WARN("Invalid platform\n");
|
||||
return -1;
|
||||
}
|
||||
|
||||
/* Increase DTB blob by 512 byte */
|
||||
err = fdt_open_into(fdt, fdt, mem_params->image_info.image_size + 512);
|
||||
if (err < 0) {
|
||||
ERROR("Failed to open HW_CONFIG DTB\n");
|
||||
return -1;
|
||||
}
|
||||
|
||||
/* Create "/system-id" node */
|
||||
nodeoffset = fdt_add_subnode(fdt, 0, "system-id");
|
||||
nodeoffset = fdt_subnode_offset(fdt, 0, "system-id");
|
||||
if (nodeoffset < 0) {
|
||||
ERROR("Failed to add node system-id\n");
|
||||
ERROR("Failed to get system-id node offset\n");
|
||||
return -1;
|
||||
}
|
||||
|
||||
err = fdt_setprop_u32(fdt, nodeoffset, "platform-id", platid);
|
||||
if (err < 0) {
|
||||
ERROR("Failed to add node platform-id\n");
|
||||
ERROR("Failed to set platform-id\n");
|
||||
return -1;
|
||||
}
|
||||
|
||||
err = fdt_setprop_u32(fdt, nodeoffset, "config-id", platcfg);
|
||||
if (err < 0) {
|
||||
ERROR("Failed to set config-id\n");
|
||||
return -1;
|
||||
}
|
||||
|
||||
flush_dcache_range((uintptr_t)fdt, mem_params->image_info.image_size);
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
|
Loading…
Reference in New Issue