blob: 93428ac2cbdaf4696356c55b28d5a2c98527d014 [file] [log] [blame]
Andre Przywarafb838332020-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 Przywara9de12222021-12-19 13:39:40 +000022
23 ret = fdt_open_into(fdt, fdt, 0x10000);
Andre Przywarafb838332020-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 Przywara9de12222021-12-19 13:39:40 +000029#ifdef SUNXI_BL31_IN_DRAM
Andre Przywarafb838332020-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");
34 return;
35 }
Andre Przywara9de12222021-12-19 13:39:40 +000036#endif
Andre Przywarafb838332020-12-14 12:06:24 +000037
38 ret = fdt_pack(fdt);
39 if (ret < 0) {
40 ERROR("Failed to pack devicetree at %p: error %d\n",
41 fdt, ret);
42 } else {
43 clean_dcache_range((uintptr_t)fdt, fdt_blob_size(fdt));
Andre Przywara9de12222021-12-19 13:39:40 +000044 INFO("Changed devicetree.\n");
Andre Przywarafb838332020-12-14 12:06:24 +000045 }
46}