From dea8ee0d3f13f8d1638745b76e86bd7617bf92e7 Mon Sep 17 00:00:00 2001 From: Ruchika Gupta Date: Fri, 8 Apr 2022 13:16:16 +0530 Subject: [PATCH 1/2] feat(fdt-wrappers): add function to find or add a sudnode This change adds a new utility function - `fdtw_find_or_add_subnode` to find a subnode. If the subnode is not present, the function adds it in the flattened device tree. Signed-off-by: Ruchika Gupta Change-Id: Idf3ceddc57761ac015763d4a8b004877bcad766a --- common/fdt_wrappers.c | 23 ++++++++++++++++++++++- include/common/fdt_wrappers.h | 4 +++- 2 files changed, 25 insertions(+), 2 deletions(-) diff --git a/common/fdt_wrappers.c b/common/fdt_wrappers.c index 2a9673f01..1b065b1e2 100644 --- a/common/fdt_wrappers.c +++ b/common/fdt_wrappers.c @@ -1,5 +1,5 @@ /* - * Copyright (c) 2018-2021, ARM Limited and Contributors. All rights reserved. + * Copyright (c) 2018-2022, ARM Limited and Contributors. All rights reserved. * * SPDX-License-Identifier: BSD-3-Clause */ @@ -618,3 +618,24 @@ int fdtw_for_each_cpu(const void *dtb, return ret; } + +/* + * Find a given node in device tree. If not present, add it. + * Returns offset of node found/added on success, and < 0 on error. + */ +int fdtw_find_or_add_subnode(void *fdt, int parentoffset, const char *name) +{ + int offset; + + offset = fdt_subnode_offset(fdt, parentoffset, name); + + if (offset == -FDT_ERR_NOTFOUND) { + offset = fdt_add_subnode(fdt, parentoffset, name); + } + + if (offset < 0) { + ERROR("%s: %s: %s\n", __func__, name, fdt_strerror(offset)); + } + + return offset; +} diff --git a/include/common/fdt_wrappers.h b/include/common/fdt_wrappers.h index 9c7180c5e..2929fc23d 100644 --- a/include/common/fdt_wrappers.h +++ b/include/common/fdt_wrappers.h @@ -1,5 +1,5 @@ /* - * Copyright (c) 2018-2021, ARM Limited and Contributors. All rights reserved. + * Copyright (c) 2018-2022, ARM Limited and Contributors. All rights reserved. * * SPDX-License-Identifier: BSD-3-Clause */ @@ -44,6 +44,8 @@ uint64_t fdtw_translate_address(const void *dtb, int bus_node, int fdtw_for_each_cpu(const void *fdt, int (*callback)(const void *dtb, int node, uintptr_t mpidr)); +int fdtw_find_or_add_subnode(void *fdt, int parentoffset, const char *name); + static inline uint32_t fdt_blob_size(const void *dtb) { const uint32_t *dtb_header = dtb; From 861250c3b26d64f859f5f37686e453d5074fa976 Mon Sep 17 00:00:00 2001 From: Manish V Badarkhe Date: Tue, 19 Apr 2022 09:40:15 +0100 Subject: [PATCH 2/2] fix(arm): fix fvp and juno build with USE_ROMLIB option Change-Id: I8a9b30a952be594435003f0d684e3faad484e8b8 Signed-off-by: Manish V Badarkhe --- plat/arm/board/fvp/jmptbl.i | 4 +++- plat/arm/board/juno/jmptbl.i | 4 +++- 2 files changed, 6 insertions(+), 2 deletions(-) diff --git a/plat/arm/board/fvp/jmptbl.i b/plat/arm/board/fvp/jmptbl.i index b72bdab4a..85e6e3a27 100644 --- a/plat/arm/board/fvp/jmptbl.i +++ b/plat/arm/board/fvp/jmptbl.i @@ -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 # @@ -35,6 +35,8 @@ fdt fdt_get_alias_namelen fdt fdt_get_name fdt fdt_get_alias fdt fdt_node_offset_by_phandle +fdt fdt_subnode_offset +fdt fdt_add_subnode mbedtls mbedtls_asn1_get_alg mbedtls mbedtls_asn1_get_alg_null mbedtls mbedtls_asn1_get_bitstring_null diff --git a/plat/arm/board/juno/jmptbl.i b/plat/arm/board/juno/jmptbl.i index 393a64816..8932aa021 100644 --- a/plat/arm/board/juno/jmptbl.i +++ b/plat/arm/board/juno/jmptbl.i @@ -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 # @@ -34,6 +34,8 @@ fdt fdt_size_cells fdt fdt_get_name fdt fdt_get_alias fdt fdt_node_offset_by_phandle +fdt fdt_subnode_offset +fdt fdt_add_subnode mbedtls mbedtls_asn1_get_alg mbedtls mbedtls_asn1_get_alg_null mbedtls mbedtls_asn1_get_bitstring_null