Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 190fe191 authored by Rich Felker's avatar Rich Felker
Browse files

sh: add support for linking a builtin device tree blob in the kernel



Signed-off-by: default avatarRich Felker <dalias@libc.org>
parent ff18143c
Loading
Loading
Loading
Loading
+20 −0
Original line number Diff line number Diff line
@@ -739,6 +739,26 @@ endmenu

menu "Boot options"

config USE_BUILTIN_DTB
	bool "Use builtin DTB"
	default n
	depends on SH_DEVICE_TREE
	help
	  Link a device tree blob for particular hardware into the kernel,
	  suppressing use of the DTB pointer provided by the bootloader.
	  This option should only be used with legacy bootloaders that are
	  not capable of providing a DTB to the kernel, or for experimental
	  hardware without stable device tree bindings.

config BUILTIN_DTB_SOURCE
	string "Source file for builtin DTB"
	default ""
	depends on USE_BUILTIN_DTB
	help
	  Base name (without suffix, relative to arch/sh/boot/dts) for the
	  a DTS file that will be used to produce the DTB linked into the
	  kernel.

config ZERO_PAGE_OFFSET
	hex
	default "0x00010000" if PAGE_SIZE_64KB || SH_RTS7751R2D || \
+2 −0
Original line number Diff line number Diff line
@@ -130,6 +130,8 @@ head-y := arch/sh/kernel/head_$(BITS).o
core-y				+= arch/sh/kernel/ arch/sh/mm/ arch/sh/boards/
core-$(CONFIG_SH_FPU_EMU)	+= arch/sh/math-emu/

core-$(CONFIG_USE_BUILTIN_DTB)	+= arch/sh/boot/dts/

# Mach groups
machdir-$(CONFIG_SOLUTION_ENGINE)		+= mach-se
machdir-$(CONFIG_SH_HP6XX)			+= mach-hp6xx
+12 −3
Original line number Diff line number Diff line
@@ -124,13 +124,22 @@ static void __init sh_of_time_init(void)

static void __init sh_of_setup(char **cmdline_p)
{
	struct device_node *root;

#ifdef CONFIG_USE_BUILTIN_DTB
	unflatten_and_copy_device_tree();
#else
	unflatten_device_tree();
#endif

	board_time_init = sh_of_time_init;

	sh_mv.mv_name = of_flat_dt_get_machine_name();
	if (!sh_mv.mv_name)
	sh_mv.mv_name = "Unknown SH model";
	root = of_find_node_by_path("/");
	if (root) {
		of_property_read_string(root, "model", &sh_mv.mv_name);
		of_node_put(root);
	}

	sh_of_smp_probe();
}
+3 −0
Original line number Diff line number Diff line
obj-$(CONFIG_USE_BUILTIN_DTB) += $(patsubst "%",%,$(CONFIG_BUILTIN_DTB_SOURCE)).dtb.o

clean-files := *.dtb.S
+4 −0
Original line number Diff line number Diff line
@@ -251,7 +251,11 @@ void __ref sh_fdt_init(phys_addr_t dt_phys)
	/* Avoid calling an __init function on secondary cpus. */
	if (done) return;

#ifdef CONFIG_USE_BUILTIN_DTB
	dt_virt = __dtb_start;
#else
	dt_virt = phys_to_virt(dt_phys);
#endif

	if (!dt_virt || !early_init_dt_scan(dt_virt)) {
		pr_crit("Error: invalid device tree blob"