156d1857eSAmit Nagal /* 256d1857eSAmit Nagal * Copyright (c) 2023, Advanced Micro Devices, Inc. All rights reserved. 356d1857eSAmit Nagal * 456d1857eSAmit Nagal * SPDX-License-Identifier: BSD-3-Clause 556d1857eSAmit Nagal * 656d1857eSAmit Nagal */ 7744d60aaSAkshay Belsare #include <common/debug.h> 856d1857eSAmit Nagal #include <common/fdt_fixup.h> 956d1857eSAmit Nagal #include <common/fdt_wrappers.h> 10744d60aaSAkshay Belsare #include <libfdt.h> 117ca7fb1bSAmit Nagal #include <lib/xlat_tables/xlat_tables_v2.h> 1256d1857eSAmit Nagal 1356d1857eSAmit Nagal #include <plat_fdt.h> 1456d1857eSAmit Nagal #include <platform_def.h> 1556d1857eSAmit Nagal 1656d1857eSAmit Nagal void prepare_dtb(void) 1756d1857eSAmit Nagal { 18*1a5b58e7SAmit Nagal #if defined(XILINX_OF_BOARD_DTB_ADDR) 19fdf8f929SAmit Nagal void *dtb; 20*1a5b58e7SAmit Nagal int map_ret = 0; 21*1a5b58e7SAmit Nagal int ret = 0; 22*1a5b58e7SAmit Nagal 23fdf8f929SAmit Nagal dtb = (void *)XILINX_OF_BOARD_DTB_ADDR; 24*1a5b58e7SAmit Nagal 25*1a5b58e7SAmit Nagal if (!IS_TFA_IN_OCM(BL31_BASE)) { 2656d1857eSAmit Nagal 277ca7fb1bSAmit Nagal #if defined(PLAT_XLAT_TABLES_DYNAMIC) 28*1a5b58e7SAmit Nagal map_ret = mmap_add_dynamic_region((unsigned long long)dtb, 297ca7fb1bSAmit Nagal (uintptr_t)dtb, 307ca7fb1bSAmit Nagal XILINX_OF_BOARD_DTB_MAX_SIZE, 317ca7fb1bSAmit Nagal MT_MEMORY | MT_RW | MT_NS); 32*1a5b58e7SAmit Nagal if (map_ret != 0) { 33*1a5b58e7SAmit Nagal WARN("Failed to add dynamic region for dtb: error %d\n", 34*1a5b58e7SAmit Nagal map_ret); 357ca7fb1bSAmit Nagal } 367ca7fb1bSAmit Nagal #endif 377ca7fb1bSAmit Nagal 38*1a5b58e7SAmit Nagal if (!map_ret) { 3956d1857eSAmit Nagal /* Return if no device tree is detected */ 4056d1857eSAmit Nagal if (fdt_check_header(dtb) != 0) { 4156d1857eSAmit Nagal NOTICE("Can't read DT at %p\n", dtb); 42*1a5b58e7SAmit Nagal } else { 43*1a5b58e7SAmit Nagal ret = fdt_open_into(dtb, dtb, XILINX_OF_BOARD_DTB_MAX_SIZE); 44*1a5b58e7SAmit Nagal 45*1a5b58e7SAmit Nagal if (ret < 0) { 46*1a5b58e7SAmit Nagal ERROR("Invalid Device Tree at %p: error %d\n", 47*1a5b58e7SAmit Nagal dtb, ret); 48*1a5b58e7SAmit Nagal } else { 49*1a5b58e7SAmit Nagal 50*1a5b58e7SAmit Nagal if (dt_add_psci_node(dtb)) { 51*1a5b58e7SAmit Nagal WARN("Failed to add PSCI Device Tree node\n"); 5256d1857eSAmit Nagal } 5356d1857eSAmit Nagal 54*1a5b58e7SAmit Nagal if (dt_add_psci_cpu_enable_methods(dtb)) { 55*1a5b58e7SAmit Nagal WARN("Failed to add PSCI cpu enable methods in DT\n"); 5656d1857eSAmit Nagal } 5756d1857eSAmit Nagal 5856d1857eSAmit Nagal /* Reserve memory used by Trusted Firmware. */ 59*1a5b58e7SAmit Nagal ret = fdt_add_reserved_memory(dtb, 60*1a5b58e7SAmit Nagal "tf-a", 61*1a5b58e7SAmit Nagal BL31_BASE, 62*1a5b58e7SAmit Nagal BL31_LIMIT 63*1a5b58e7SAmit Nagal - 64*1a5b58e7SAmit Nagal BL31_BASE); 65*1a5b58e7SAmit Nagal if (ret < 0) { 6656d1857eSAmit Nagal WARN("Failed to add reserved memory nodes for BL31 to DT.\n"); 6756d1857eSAmit Nagal } 6856d1857eSAmit Nagal 6956d1857eSAmit Nagal ret = fdt_pack(dtb); 7056d1857eSAmit Nagal if (ret < 0) { 71*1a5b58e7SAmit Nagal WARN("Failed to pack dtb at %p: error %d\n", 72*1a5b58e7SAmit Nagal dtb, ret); 73*1a5b58e7SAmit Nagal } 74*1a5b58e7SAmit Nagal flush_dcache_range((uintptr_t)dtb, 75*1a5b58e7SAmit Nagal fdt_blob_size(dtb)); 76*1a5b58e7SAmit Nagal 77*1a5b58e7SAmit Nagal INFO("Changed device tree to advertise PSCI and reserved memories.\n"); 78*1a5b58e7SAmit Nagal 79*1a5b58e7SAmit Nagal } 8056d1857eSAmit Nagal } 8156d1857eSAmit Nagal 82*1a5b58e7SAmit Nagal } 83*1a5b58e7SAmit Nagal 847ca7fb1bSAmit Nagal 857ca7fb1bSAmit Nagal #if defined(PLAT_XLAT_TABLES_DYNAMIC) 86*1a5b58e7SAmit Nagal if (!map_ret) { 877ca7fb1bSAmit Nagal ret = mmap_remove_dynamic_region((uintptr_t)dtb, 887ca7fb1bSAmit Nagal XILINX_OF_BOARD_DTB_MAX_SIZE); 897ca7fb1bSAmit Nagal if (ret != 0) { 90*1a5b58e7SAmit Nagal WARN("Failed to remove dynamic region for dtb:error %d\n", 91*1a5b58e7SAmit Nagal ret); 92*1a5b58e7SAmit Nagal } 937ca7fb1bSAmit Nagal } 947ca7fb1bSAmit Nagal #endif 95*1a5b58e7SAmit Nagal } 967ca7fb1bSAmit Nagal 97*1a5b58e7SAmit Nagal #endif 9856d1857eSAmit Nagal } 99