1 /* 2 * Copyright (c) 2023, Advanced Micro Devices, Inc. All rights reserved. 3 * 4 * SPDX-License-Identifier: BSD-3-Clause 5 * 6 */ 7 #include <common/debug.h> 8 #include <common/fdt_fixup.h> 9 #include <common/fdt_wrappers.h> 10 #include <libfdt.h> 11 12 #include <plat_fdt.h> 13 #include <platform_def.h> 14 15 void prepare_dtb(void) 16 { 17 void *dtb; 18 int ret; 19 #if !defined(XILINX_OF_BOARD_DTB_ADDR) 20 return; 21 #else 22 dtb = (void *)XILINX_OF_BOARD_DTB_ADDR; 23 #endif 24 if (IS_TFA_IN_OCM(BL31_BASE)) 25 return; 26 27 /* Return if no device tree is detected */ 28 if (fdt_check_header(dtb) != 0) { 29 NOTICE("Can't read DT at %p\n", dtb); 30 return; 31 } 32 33 ret = fdt_open_into(dtb, dtb, XILINX_OF_BOARD_DTB_MAX_SIZE); 34 if (ret < 0) { 35 ERROR("Invalid Device Tree at %p: error %d\n", dtb, ret); 36 return; 37 } 38 39 /* Reserve memory used by Trusted Firmware. */ 40 if (fdt_add_reserved_memory(dtb, "tf-a", BL31_BASE, BL31_LIMIT - BL31_BASE)) { 41 WARN("Failed to add reserved memory nodes for BL31 to DT.\n"); 42 return; 43 } 44 45 ret = fdt_pack(dtb); 46 if (ret < 0) { 47 ERROR("Failed to pack Device Tree at %p: error %d\n", dtb, ret); 48 return; 49 } 50 51 clean_dcache_range((uintptr_t)dtb, fdt_blob_size(dtb)); 52 INFO("Changed device tree to advertise PSCI and reserved memories.\n"); 53 } 54