arm64: mvebu: do not map firmware RT service region
authorGrzegorz Jaszczyk <jaz@semihalf.com>
Fri, 30 Apr 2021 13:29:48 +0000 (15:29 +0200)
committerStefan Roese <sr@denx.de>
Sun, 16 May 2021 04:48:45 +0000 (06:48 +0200)
There is region left by ATF, which needs to remain in memory to provide RT
services. To prevent overwriting it by u-boot, do not provide any mapping
for this memory region, so any attempt to access it will trigger
synchronous exception.

Update sr 2021-04-12:
Don't update armada3700/cpu.c mmu table, as this has specific changes
included in mainline.

Signed-off-by: Grzegorz Jaszczyk <jaz@semihalf.com>
Signed-off-by: Stefan Roese <sr@denx.de>
arch/arm/mach-mvebu/armada8k/cpu.c
arch/arm/mach-mvebu/include/mach/fw_info.h [new file with mode: 0644]

index 9953171..d76e176 100644 (file)
@@ -14,6 +14,7 @@
 #include <asm/arch/cpu.h>
 #include <asm/arch/soc.h>
 #include <asm/armv8/mmu.h>
+#include <mach/fw_info.h>
 
 /* Armada 7k/8k */
 #define MVEBU_RFU_BASE                 (MVEBU_REGISTER(0x6f0000))
 static struct mm_region mvebu_mem_map[] = {
        /* Armada 80x0 memory regions include the CP1 (slave) units */
        {
-               /* RAM */
+               /* RAM 0-64MB */
                .phys = 0x0UL,
                .virt = 0x0UL,
+               .size = ATF_REGION_START,
+               .attrs = PTE_BLOCK_MEMTYPE(MT_NORMAL) |
+                        PTE_BLOCK_INNER_SHARE
+       },
+       /* ATF and TEE region 0x4000000-0x5400000 not mapped */
+       {
+               /* RAM 66MB-2GB */
+               .phys = ATF_REGION_END,
+               .virt = ATF_REGION_END,
                .size = SZ_2G,
                .attrs = PTE_BLOCK_MEMTYPE(MT_NORMAL) |
                         PTE_BLOCK_INNER_SHARE
diff --git a/arch/arm/mach-mvebu/include/mach/fw_info.h b/arch/arm/mach-mvebu/include/mach/fw_info.h
new file mode 100644 (file)
index 0000000..ab2bb91
--- /dev/null
@@ -0,0 +1,13 @@
+/* SPDX-License-Identifier: GPL-2.0 */
+/*
+ * Copyright (C) 2018 Marvell International Ltd.
+ */
+
+#ifndef _FW_INFO_H_
+#define _FW_INFO_H_
+
+/* Protected ATF and TEE region */
+#define ATF_REGION_START               0x4000000
+#define ATF_REGION_END                 0x5400000
+
+#endif /* _FW_INFO_H_ */