efi_loader: refactor switch to non-secure mode
[oweals/u-boot.git] / arch / arm / mach-tegra / board2.c
index 5ecadf705e7ebaffa35a2c97f1a2df4532a0b3eb..12257a42b51b645da544dd5f1b9fc458ccde7681 100644 (file)
@@ -6,6 +6,7 @@
 
 #include <common.h>
 #include <dm.h>
+#include <efi_loader.h>
 #include <errno.h>
 #include <ns16550.h>
 #include <usb.h>
@@ -210,6 +211,19 @@ int board_early_init_f(void)
 
 int board_late_init(void)
 {
+#if CONFIG_IS_ENABLED(EFI_LOADER)
+       if (gd->bd->bi_dram[1].start) {
+               /*
+                * Only bank 0 is below board_get_usable_ram_top(), so all of
+                * bank 1 is not mapped by the U-Boot MMU configuration, and so
+                * we must prevent EFI from using it.
+                */
+               efi_add_memory_map(gd->bd->bi_dram[1].start,
+                                  gd->bd->bi_dram[1].size >> EFI_PAGE_SHIFT,
+                                  EFI_BOOT_SERVICES_DATA, false);
+       }
+#endif
+
 #if defined(CONFIG_TEGRA_SUPPORT_NON_SECURE)
        if (tegra_cpu_is_non_secure()) {
                printf("CPU is in NS mode\n");
@@ -252,7 +266,7 @@ static ulong carveout_size(void)
 #elif defined(CONFIG_ARMV7_SECURE_RESERVE_SIZE)
        // BASE+SIZE might not == 4GB. If so, we want the carveout to cover
        // from BASE to 4GB, not BASE to BASE+SIZE.
-       return (0 - CONFIG_ARMV7_SECURE_BASE);
+       return (0 - CONFIG_ARMV7_SECURE_BASE) & ~(SZ_2M - 1);
 #else
        return 0;
 #endif