:: commit 5cc85aa66f4f8adefba45d880228c4c52c133096

Kacper Słomiński <kacper.slominski72@gmail.com> — 2024-07-14 22:23

parents: f3247cb530

protos/linux_risc: Install memory reservation configuration table

This gets rid of some warnings when booting Linux on systems with a GIC v3
interrupt controller.
diff --git a/common/protos/linux_risc.c b/common/protos/linux_risc.c
index 9d1b9e5b..e5c4b0af 100644
--- a/common/protos/linux_risc.c
+++ b/common/protos/linux_risc.c
@@ -36,6 +36,12 @@ struct linux_header {
     uint32_t res4;
 } __attribute__((packed));
 
+struct linux_efi_memreserve {
+    int	size;
+    int count;
+    uint64_t next;
+};
+
 // End of Linux code
 
 #if defined(__riscv64)
@@ -154,6 +160,21 @@ void *prepare_device_tree_blob(char *config, char *cmdline) {
         panic(true, "linux: failed to set bootargs: '%s'", fdt_strerror(ret));
     }
 
+    {
+        struct linux_efi_memreserve *rsv = ext_mem_alloc(sizeof(struct linux_efi_memreserve));
+
+        rsv->size = 0;
+        rsv->count = 0;
+        rsv->next = 0;
+
+        EFI_GUID memreserve_table_guid = {0x888eb0c6, 0x8ede, 0x4ff5, {0xa8, 0xf0, 0x9a, 0xee, 0x5c, 0xb9, 0x77, 0xc2}};
+        EFI_STATUS ret = gBS->InstallConfigurationTable(&memreserve_table_guid, rsv);
+
+        if (ret != EFI_SUCCESS) {
+            panic(true, "linux: failed to install memory reservation configuration table: '%x'", ret);
+        }
+    }
+
     efi_exit_boot_services();
 
     // Tell Linux about the UEFI memory map and system table.
tab: 248 wrap: offon