mirror of
https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git
synced 2024-12-29 09:16:33 +00:00
LoongArch: Allow device trees be built into the kernel
During the upstream progress of those DT-based drivers, DT properties are changed a lot so very different from those in existing bootloaders. It is inevitably that some existing systems do not provide a standard, canonical device tree to the kernel at boot time. So let's provide a device tree table in the kernel, keyed by the dts filename, containing the relevant DTBs. We can use the built-in dts files as references. Each SoC has only one built-in dts file which describes all possible device information of that SoC, so the dts files are good examples during development. And as a reference, our built-in dts file only enables the most basic bootable combinations (so it is generic enough), acts as an alternative in case the dts in the bootloader is unexpected. Signed-off-by: Binbin Zhou <zhoubinbin@loongson.cn> Signed-off-by: Huacai Chen <chenhuacai@loongson.cn>
This commit is contained in:
parent
db8ce24070
commit
5f346a6e59
@ -4,6 +4,7 @@ obj-y += net/
|
|||||||
obj-y += vdso/
|
obj-y += vdso/
|
||||||
|
|
||||||
obj-$(CONFIG_KVM) += kvm/
|
obj-$(CONFIG_KVM) += kvm/
|
||||||
|
obj-$(CONFIG_BUILTIN_DTB) += boot/dts/
|
||||||
|
|
||||||
# for cleaning
|
# for cleaning
|
||||||
subdir- += boot
|
subdir- += boot
|
||||||
|
@ -375,6 +375,24 @@ config CMDLINE_FORCE
|
|||||||
|
|
||||||
endchoice
|
endchoice
|
||||||
|
|
||||||
|
config BUILTIN_DTB
|
||||||
|
bool "Enable built-in dtb in kernel"
|
||||||
|
depends on OF
|
||||||
|
help
|
||||||
|
Some existing systems do not provide a canonical device tree to
|
||||||
|
the kernel at boot time. Let's provide a device tree table in the
|
||||||
|
kernel, keyed by the dts filename, containing the relevant DTBs.
|
||||||
|
|
||||||
|
Built-in DTBs are generic enough and can be used as references.
|
||||||
|
|
||||||
|
config BUILTIN_DTB_NAME
|
||||||
|
string "Source file for built-in dtb"
|
||||||
|
depends on BUILTIN_DTB
|
||||||
|
help
|
||||||
|
Base name (without suffix, relative to arch/loongarch/boot/dts/)
|
||||||
|
for the DTS file that will be used to produce the DTB linked into
|
||||||
|
the kernel.
|
||||||
|
|
||||||
config DMI
|
config DMI
|
||||||
bool "Enable DMI scanning"
|
bool "Enable DMI scanning"
|
||||||
select DMI_SCAN_MACHINE_NON_EFI_FALLBACK
|
select DMI_SCAN_MACHINE_NON_EFI_FALLBACK
|
||||||
|
@ -6,6 +6,7 @@
|
|||||||
boot := arch/loongarch/boot
|
boot := arch/loongarch/boot
|
||||||
|
|
||||||
KBUILD_DEFCONFIG := loongson3_defconfig
|
KBUILD_DEFCONFIG := loongson3_defconfig
|
||||||
|
KBUILD_DTBS := dtbs
|
||||||
|
|
||||||
image-name-y := vmlinux
|
image-name-y := vmlinux
|
||||||
image-name-$(CONFIG_EFI_ZBOOT) := vmlinuz
|
image-name-$(CONFIG_EFI_ZBOOT) := vmlinuz
|
||||||
@ -144,7 +145,7 @@ endif
|
|||||||
|
|
||||||
vdso-install-y += arch/loongarch/vdso/vdso.so.dbg
|
vdso-install-y += arch/loongarch/vdso/vdso.so.dbg
|
||||||
|
|
||||||
all: $(notdir $(KBUILD_IMAGE))
|
all: $(notdir $(KBUILD_IMAGE)) $(KBUILD_DTBS)
|
||||||
|
|
||||||
vmlinuz.efi: vmlinux.efi
|
vmlinuz.efi: vmlinux.efi
|
||||||
|
|
||||||
|
@ -1,4 +1,3 @@
|
|||||||
# SPDX-License-Identifier: GPL-2.0-only
|
# SPDX-License-Identifier: GPL-2.0-only
|
||||||
dtstree := $(srctree)/$(src)
|
|
||||||
|
|
||||||
dtb-y := $(patsubst $(dtstree)/%.dts,%.dtb, $(wildcard $(dtstree)/*.dts))
|
obj-$(CONFIG_BUILTIN_DTB) += $(addsuffix .dtb.o, $(CONFIG_BUILTIN_DTB_NAME))
|
||||||
|
@ -295,8 +295,12 @@ static void __init fdt_setup(void)
|
|||||||
if (acpi_os_get_root_pointer())
|
if (acpi_os_get_root_pointer())
|
||||||
return;
|
return;
|
||||||
|
|
||||||
/* Look for a device tree configuration table entry */
|
/* Prefer to use built-in dtb, checking its legality first. */
|
||||||
fdt_pointer = efi_fdt_pointer();
|
if (!fdt_check_header(__dtb_start))
|
||||||
|
fdt_pointer = __dtb_start;
|
||||||
|
else
|
||||||
|
fdt_pointer = efi_fdt_pointer(); /* Fallback to firmware dtb */
|
||||||
|
|
||||||
if (!fdt_pointer || fdt_check_header(fdt_pointer))
|
if (!fdt_pointer || fdt_check_header(fdt_pointer))
|
||||||
return;
|
return;
|
||||||
|
|
||||||
@ -330,7 +334,9 @@ static void __init bootcmdline_init(char **cmdline_p)
|
|||||||
if (boot_command_line[0])
|
if (boot_command_line[0])
|
||||||
strlcat(boot_command_line, " ", COMMAND_LINE_SIZE);
|
strlcat(boot_command_line, " ", COMMAND_LINE_SIZE);
|
||||||
|
|
||||||
strlcat(boot_command_line, init_command_line, COMMAND_LINE_SIZE);
|
if (!strstr(boot_command_line, init_command_line))
|
||||||
|
strlcat(boot_command_line, init_command_line, COMMAND_LINE_SIZE);
|
||||||
|
|
||||||
goto out;
|
goto out;
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
Loading…
Reference in New Issue
Block a user