From: Ard Biesheuvel <ardb@kernel.org>
To: linux-efi@vger.kernel.org
Cc: loongarch@lists.linux.dev, linux@armlinux.org.uk,
Ard Biesheuvel <ardb@kernel.org>, Arnd Bergmann <arnd@arndb.de>,
Ilias Apalodimas <ilias.apalodimas@linaro.org>,
Huacai Chen <chenhuacai@loongson.cn>,
Xi Ruoyao <xry111@xry111.site>
Subject: [PATCH 12/12] efi: loongarch: add support for DT hardware descriptions
Date: Sun, 18 Sep 2022 23:35:44 +0200 [thread overview]
Message-ID: <20220918213544.2176249-13-ardb@kernel.org> (raw)
In-Reply-To: <20220918213544.2176249-1-ardb@kernel.org>
Treat device tree data in the same way as we treat ACPI tables: discover
them from the EFI configuration table array, and parse the properties
that describe hardware. This means we omit /chosen and the /memory
nodes, which carry information that we should be receiving from EFI. not
from the device tree.
On the non-EFI boot path, parse the DT passed via the boot entrypoint as
usual: things like bootargs, initrd and other bootloader generated data
are all loaded from the DT /chosen node, along with memory descriptions
and other things we would otherwise get from EFI.
Note that this approach is similar to x86, which also supports FDT for
hardware descriptions but not for boottime generated data.
Signed-off-by: Ard Biesheuvel <ardb@kernel.org>
---
arch/loongarch/Kconfig | 2 ++
arch/loongarch/kernel/efi.c | 14 ++++++++++++++
arch/loongarch/kernel/env.c | 6 ++++++
3 files changed, 22 insertions(+)
diff --git a/arch/loongarch/Kconfig b/arch/loongarch/Kconfig
index 14a2a1ec8561..721b1dc38bdf 100644
--- a/arch/loongarch/Kconfig
+++ b/arch/loongarch/Kconfig
@@ -104,6 +104,8 @@ config LOONGARCH
select MODULES_USE_ELF_RELA if MODULES
select NEED_PER_CPU_EMBED_FIRST_CHUNK
select NEED_PER_CPU_PAGE_FIRST_CHUNK
+ select OF
+ select OF_EARLY_FLATTREE
select PCI
select PCI_DOMAINS_GENERIC
select PCI_ECAM if ACPI
diff --git a/arch/loongarch/kernel/efi.c b/arch/loongarch/kernel/efi.c
index 3b80675726ec..96c8621da2ba 100644
--- a/arch/loongarch/kernel/efi.c
+++ b/arch/loongarch/kernel/efi.c
@@ -17,6 +17,7 @@
#include <linux/io.h>
#include <linux/kobject.h>
#include <linux/memblock.h>
+#include <linux/of_fdt.h>
#include <linux/reboot.h>
#include <linux/uaccess.h>
@@ -28,10 +29,12 @@ static unsigned long efi_nr_tables;
static unsigned long efi_config_table;
static unsigned long __initdata boot_memmap = EFI_INVALID_TABLE_ADDR;
+static unsigned long __initdata boot_fdt = EFI_INVALID_TABLE_ADDR;
static efi_system_table_t *efi_systab;
static efi_config_table_type_t arch_tables[] __initdata = {
{LINUX_EFI_BOOT_MEMMAP_GUID, &boot_memmap, "MEMMAP" },
+ {DEVICE_TREE_GUID, &boot_fdt, "FDT" },
{},
};
@@ -100,4 +103,15 @@ void __init efi_init(void)
early_memunmap(tbl, sizeof(*tbl));
}
}
+
+ if (boot_fdt != EFI_INVALID_TABLE_ADDR) {
+ void *tbl;
+
+ tbl = early_memremap_ro(boot_fdt, sizeof(*tbl));
+ if (tbl) {
+ early_init_dt_verify(tbl);
+ early_init_dt_scan_root();
+ early_init_fdt_reserve_self();
+ }
+ }
}
diff --git a/arch/loongarch/kernel/env.c b/arch/loongarch/kernel/env.c
index 05c38d28476e..3267063df1f9 100644
--- a/arch/loongarch/kernel/env.c
+++ b/arch/loongarch/kernel/env.c
@@ -8,6 +8,7 @@
#include <linux/efi.h>
#include <linux/export.h>
#include <linux/memblock.h>
+#include <linux/of_fdt.h>
#include <asm/early_ioremap.h>
#include <asm/bootinfo.h>
#include <asm/loongson.h>
@@ -29,6 +30,11 @@ void __init init_environ(void)
efi_system_table = fw_arg1;
set_bit(EFI_BOOT, &efi.flags);
} else {
+ void *fdt_ptr = early_memremap_ro(fw_arg1, SZ_64K);
+
+ early_init_dt_scan(fdt_ptr);
+ early_init_fdt_reserve_self();
+
clear_bit(EFI_BOOT, &efi.flags);
}
}
--
2.35.1
prev parent reply other threads:[~2022-09-18 21:36 UTC|newest]
Thread overview: 40+ messages / expand[flat|nested] mbox.gz Atom feed top
2022-09-18 21:35 [PATCH 00/12] efi: disentangle the generic EFI stub from FDT Ard Biesheuvel
2022-09-18 21:35 ` [PATCH 01/12] efi: libstub: drop pointless get_memory_map() call Ard Biesheuvel
2022-09-18 21:35 ` [PATCH 02/12] efi/arm: libstub: move ARM specific code out of generic routines Ard Biesheuvel
2022-09-18 21:35 ` [PATCH 03/12] efi: libstub: fix up the last remaining open coded boot service call Ard Biesheuvel
2022-09-18 21:35 ` [PATCH 04/12] efi: libstub: fix type confusion for load_options_size Ard Biesheuvel
2022-09-18 21:35 ` [PATCH 05/12] efi: libstub: avoid efi_get_memory_map() for allocating the virt map Ard Biesheuvel
2022-09-18 21:35 ` [PATCH 06/12] efi: libstub: simplify efi_get_memory_map() and struct efi_boot_memmap Ard Biesheuvel
2022-09-18 21:35 ` [PATCH 07/12] efi: libstub: unify initrd loading between architectures Ard Biesheuvel
2022-09-18 21:35 ` [PATCH 08/12] efi: libstub: remove DT dependency from generic stub Ard Biesheuvel
2022-09-18 21:35 ` [PATCH 09/12] efi: libstub: install boot-time memory map as config table Ard Biesheuvel
2022-09-20 10:40 ` Joey Gouly
2022-09-20 11:37 ` Ard Biesheuvel
2022-09-18 21:35 ` [PATCH 10/12] efi: libstub: remove pointless goto kludge Ard Biesheuvel
2022-09-18 21:35 ` [PATCH 11/12] efi/loongarch: libstub: remove dependency on flattened DT Ard Biesheuvel
2022-09-19 1:58 ` Huacai Chen
2022-09-19 5:15 ` Ard Biesheuvel
2022-09-19 6:06 ` Huacai Chen
2022-09-19 6:22 ` Ard Biesheuvel
2022-09-19 6:33 ` Ard Biesheuvel
2022-09-19 10:33 ` Huacai Chen
2022-09-19 10:37 ` Ard Biesheuvel
2022-09-19 10:47 ` Huacai Chen
2022-09-19 10:49 ` Ard Biesheuvel
2022-09-19 11:15 ` Huacai Chen
2022-09-19 11:21 ` Ard Biesheuvel
2022-09-19 11:57 ` Huacai Chen
2022-09-19 12:10 ` Ard Biesheuvel
2022-09-19 12:14 ` Huacai Chen
2022-09-19 12:27 ` Ard Biesheuvel
2022-09-19 14:25 ` Huacai Chen
2022-09-19 14:32 ` Ard Biesheuvel
2022-09-19 14:43 ` Huacai Chen
2022-09-19 14:44 ` Ard Biesheuvel
2022-09-19 15:08 ` Huacai Chen
2022-09-19 15:50 ` Ard Biesheuvel
2022-09-20 1:44 ` Huacai Chen
2022-09-20 8:04 ` Ard Biesheuvel
2022-09-20 13:12 ` Huacai Chen
2022-09-20 14:53 ` Ard Biesheuvel
2022-09-18 21:35 ` Ard Biesheuvel [this message]
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20220918213544.2176249-13-ardb@kernel.org \
--to=ardb@kernel.org \
--cc=arnd@arndb.de \
--cc=chenhuacai@loongson.cn \
--cc=ilias.apalodimas@linaro.org \
--cc=linux-efi@vger.kernel.org \
--cc=linux@armlinux.org.uk \
--cc=loongarch@lists.linux.dev \
--cc=xry111@xry111.site \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox