mirror of
https://github.com/ARM-software/arm-trusted-firmware.git
synced 2025-04-16 17:44:19 +00:00
allwinner: H616: Add reserved-memory node to DT
When the BL31 for the Allwinner H616 runs in DRAM, we need to make sure we tell the non-secure world about the memory region it uses. Add a reserved-memory node to the DT, which covers the area that BL31 could occupy. The "no-map" property will prevent OSes from mapping the area, so there would be no speculative accesses. Change-Id: I808f3e1a8089da53bbe4fc6435a808e9159831e1 Signed-off-by: Andre Przywara <andre.przywara@arm.com>
This commit is contained in:
parent
26123ca353
commit
0be10ee373
5 changed files with 59 additions and 2 deletions
|
@ -41,4 +41,12 @@ void sunxi_set_gpio_out(char port, int pin, bool level_high);
|
|||
int sunxi_init_platform_r_twi(uint16_t socid, bool use_rsb);
|
||||
void sunxi_execute_arisc_code(uint32_t *code, size_t size, uint16_t param);
|
||||
|
||||
#ifdef SUNXI_BL31_IN_DRAM
|
||||
void sunxi_prepare_dtb(void *fdt);
|
||||
#else
|
||||
static inline void sunxi_prepare_dtb(void *fdt)
|
||||
{
|
||||
}
|
||||
#endif
|
||||
|
||||
#endif /* SUNXI_PRIVATE_H */
|
||||
|
|
|
@ -13,6 +13,8 @@
|
|||
#include <arch.h>
|
||||
#include <arch_helpers.h>
|
||||
#include <common/debug.h>
|
||||
#include <common/fdt_fixup.h>
|
||||
#include <common/fdt_wrappers.h>
|
||||
#include <drivers/arm/gicv2.h>
|
||||
#include <drivers/console.h>
|
||||
#include <drivers/generic_delay_timer.h>
|
||||
|
@ -175,6 +177,8 @@ void bl31_platform_setup(void)
|
|||
|
||||
sunxi_pmic_setup(soc_id, fdt);
|
||||
|
||||
sunxi_prepare_dtb(fdt);
|
||||
|
||||
INFO("BL31: Platform setup done\n");
|
||||
}
|
||||
|
||||
|
|
|
@ -26,7 +26,7 @@ static const mmap_region_t sunxi_mmap[PLATFORM_MMAP_REGIONS + 1] = {
|
|||
MAP_REGION(SUNXI_DRAM_BASE, SUNXI_DRAM_VIRT_BASE, SUNXI_DRAM_SEC_SIZE,
|
||||
MT_RW_DATA | MT_SECURE),
|
||||
MAP_REGION(PRELOADED_BL33_BASE, SUNXI_BL33_VIRT_BASE,
|
||||
SUNXI_DRAM_MAP_SIZE, MT_RO_DATA | MT_NS),
|
||||
SUNXI_DRAM_MAP_SIZE, MT_RW_DATA | MT_NS),
|
||||
{},
|
||||
};
|
||||
|
||||
|
|
|
@ -17,6 +17,8 @@ ifeq (${SUNXI_PSCI_USE_SCPI}, 1)
|
|||
endif
|
||||
|
||||
BL31_SOURCES += drivers/allwinner/axp/axp805.c \
|
||||
drivers/allwinner/sunxi_rsb.c
|
||||
drivers/allwinner/sunxi_rsb.c \
|
||||
common/fdt_fixup.c \
|
||||
${AW_PLAT}/${PLAT}/prepare_dtb.c
|
||||
|
||||
$(eval $(call add_define,SUNXI_BL31_IN_DRAM))
|
||||
|
|
43
plat/allwinner/sun50i_h616/prepare_dtb.c
Normal file
43
plat/allwinner/sun50i_h616/prepare_dtb.c
Normal file
|
@ -0,0 +1,43 @@
|
|||
/*
|
||||
* Copyright (c) 2021, ARM Limited. All rights reserved.
|
||||
*
|
||||
* SPDX-License-Identifier: BSD-3-Clause
|
||||
*/
|
||||
|
||||
#include <libfdt.h>
|
||||
|
||||
#include <common/debug.h>
|
||||
#include <common/fdt_fixup.h>
|
||||
#include <common/fdt_wrappers.h>
|
||||
|
||||
#include <sunxi_private.h>
|
||||
|
||||
void sunxi_prepare_dtb(void *fdt)
|
||||
{
|
||||
int ret;
|
||||
|
||||
if (fdt == NULL || fdt_check_header(fdt) != 0) {
|
||||
return;
|
||||
}
|
||||
ret = fdt_open_into(fdt, fdt, 0x100000);
|
||||
if (ret < 0) {
|
||||
ERROR("Preparing devicetree at %p: error %d\n", fdt, ret);
|
||||
return;
|
||||
}
|
||||
|
||||
/* Reserve memory used by Trusted Firmware. */
|
||||
if (fdt_add_reserved_memory(fdt, "tf-a@40000000", BL31_BASE,
|
||||
BL31_LIMIT - BL31_BASE)) {
|
||||
WARN("Failed to add reserved memory nodes to DT.\n");
|
||||
return;
|
||||
}
|
||||
|
||||
ret = fdt_pack(fdt);
|
||||
if (ret < 0) {
|
||||
ERROR("Failed to pack devicetree at %p: error %d\n",
|
||||
fdt, ret);
|
||||
} else {
|
||||
clean_dcache_range((uintptr_t)fdt, fdt_blob_size(fdt));
|
||||
INFO("Changed devicetree to reserve BL31 memory.\n");
|
||||
}
|
||||
}
|
Loading…
Add table
Reference in a new issue