rpi4: Reserve resident BL31 region from non-secure world
authorAndre Przywara <andre.przywara@arm.com>
Sun, 21 Jul 2019 23:04:40 +0000 (00:04 +0100)
committerAndre Przywara <andre.przywara@arm.com>
Wed, 25 Sep 2019 10:45:35 +0000 (11:45 +0100)
The GPU firmware loads the armstub8.bin (BL31) image at address 0, the
beginning of DRAM. As this holds the resident PSCI code and the SMP
pens, the non-secure world should better know about this, to avoid
accessing memory owned by TF-A. This is particularly criticial as the
Raspberry Pi 4 does not feature a secure memory controller, so
overwriting code is a very real danger.

Use the newly introduced function to add a node into reserved-memory
node, where non-secure world can check for regions to be excluded from
its mappings.

Reserve the first 512KB of memory for now. We can refine this later if
need be.

Change-Id: I00e55e70c5c02615320d79ff35bc32b805d30770
Signed-off-by: Andre Przywara <andre.przywara@arm.com>
plat/rpi/rpi4/rpi4_bl31_setup.c

index e1b6c897643aabed48ca8f53782d4bfe8467a861..8dfadf73062583cd50d1ed25aa5e94d351d7b502 100644 (file)
@@ -245,6 +245,10 @@ static void rpi4_prepare_dtb(void)
                return;
        }
 
+       /* Reserve memory used by Trusted Firmware. */
+       if (fdt_add_reserved_memory(dtb, "atf@0", 0, 0x80000))
+               WARN("Failed to add reserved memory nodes to DT.\n");
+
        ret = fdt_pack(dtb);
        if (ret < 0)
                ERROR("Failed to pack Device Tree at %p: error %d\n", dtb, ret);