blob: fc2e561fbbe880835966edf59799c654b8006ab4 [file] [log] [blame]
Andre Przywara0be10ee2020-12-14 12:06:24 +00001/*
2 * Copyright (c) 2021, ARM Limited. All rights reserved.
3 *
4 * SPDX-License-Identifier: BSD-3-Clause
5 */
6
7#include <libfdt.h>
8
9#include <common/debug.h>
10#include <common/fdt_fixup.h>
11#include <common/fdt_wrappers.h>
12
13#include <sunxi_private.h>
14
15void sunxi_prepare_dtb(void *fdt)
16{
17 int ret;
18
19 if (fdt == NULL || fdt_check_header(fdt) != 0) {
20 return;
21 }
Andre Przywara6fa8e722021-12-19 13:39:40 +000022
23 ret = fdt_open_into(fdt, fdt, 0x10000);
Andre Przywara0be10ee2020-12-14 12:06:24 +000024 if (ret < 0) {
25 ERROR("Preparing devicetree at %p: error %d\n", fdt, ret);
26 return;
27 }
28
Andre Przywara6fa8e722021-12-19 13:39:40 +000029#ifdef SUNXI_BL31_IN_DRAM
Andre Przywara0be10ee2020-12-14 12:06:24 +000030 /* Reserve memory used by Trusted Firmware. */
31 if (fdt_add_reserved_memory(fdt, "tf-a@40000000", BL31_BASE,
32 BL31_LIMIT - BL31_BASE)) {
33 WARN("Failed to add reserved memory nodes to DT.\n");
Andre Przywara0be10ee2020-12-14 12:06:24 +000034 }
Andre Przywara6fa8e722021-12-19 13:39:40 +000035#endif
Andre Przywara0be10ee2020-12-14 12:06:24 +000036
37 ret = fdt_pack(fdt);
38 if (ret < 0) {
39 ERROR("Failed to pack devicetree at %p: error %d\n",
40 fdt, ret);
Andre Przywara0be10ee2020-12-14 12:06:24 +000041 }
Samuel Holland79808f12022-01-23 16:30:08 -060042
43 clean_dcache_range((uintptr_t)fdt, fdt_blob_size(fdt));
44 INFO("Changed devicetree.\n");
Andre Przywara0be10ee2020-12-14 12:06:24 +000045}