Hi Jonas, On 08/07/14 16:14, Jonas Gorski wrote: > Add support for populating initial_device_params through a dtb initial_boot_params here and above? > blob appended to vmlinux. should that be vmlinux.bin? Presumably it isn't appended to the ELF file? > > Signed-off-by: Jonas Gorski <jogo@xxxxxxxxxxx> > --- > Mostly adapted from how ARM is doing it. > > Sent as an RFC PATCH because I am not sure if this is the right way to > it, and whether storing the pointer in initial_device_params is a good > idea, or a new variable should be introduced. > > The reasoning for initial_device_params is that there is no common > MIPS interface yet, so the next best thing was using that. This also > has the advantage of keeping the original fw_args intact. Does it matter that this will be ignored if the bootloader does provide a DT (initial_boot_params overwritten by early_init_dt_scan() call), and that if no DT is provided by the bootloader the of_scan_flat_dt() calls at the bottom of early_init_dt_scan will never happen? > > This patch works for me on bcm63xx, where the bootloade expects s/bootloade/bootloader/ > an lzma compressed kernel, so I wanted to not double compress using > the in-kernel compressed kernel support. > > Completely untested on anything except MIPS32 / big endian. > > arch/mips/Kconfig | 18 ++++++++++++++++++ > arch/mips/kernel/head.S | 19 +++++++++++++++++++ > arch/mips/kernel/vmlinux.lds.S | 6 ++++++ > 3 files changed, 43 insertions(+) > > diff --git a/arch/mips/Kconfig b/arch/mips/Kconfig > index 3f05b56..58527cd 100644 > --- a/arch/mips/Kconfig > +++ b/arch/mips/Kconfig > @@ -2476,6 +2476,24 @@ config USE_OF > select OF_EARLY_FLATTREE > select IRQ_DOMAIN > > +config MIPS_APPENDED_DTB > + bool "Use appended device tree blob to vmlinux (EXPERIMENTAL)" > + depends on OF > + help > + With this option, the boot code will look for a device tree binary > + DTB) appended to vmlinux s/DTB)/(DTB)/ vmlinux.bin again? > + (e.g. cat vmlinux <filename>.dtb > vmlinux_w_dtb). here too I think. > + > + This is meant as a backward compatibility convenience for those > + systems with a bootloader that can't be upgraded to accommodate > + the documented boot protocol using a device tree. > + > + Beware that there is very little in terms of protection against > + this option being confused by leftover garbage in memory that might > + look like a DTB header after a reboot if no actual DTB is appended > + to vmlinux. Do not leave this option active in a production kernel maybe same here too. Can't fault the rest though. Cheers James > + if you don't intend to always append a DTB. > + > endmenu > > config LOCKDEP_SUPPORT > diff --git a/arch/mips/kernel/head.S b/arch/mips/kernel/head.S > index 95afd66..72c1049 100644 > --- a/arch/mips/kernel/head.S > +++ b/arch/mips/kernel/head.S > @@ -93,7 +93,22 @@ NESTED(kernel_entry, 16, sp) # kernel entry point > PTR_LA t0, 0f > jr t0 > 0: > +#ifdef CONFIG_MIPS_APPENDED_DTB > + PTR_LA t0, __appended_dtb > + PTR_LI t3, 0 > > +#ifdef CONFIG_CPU_BIG_ENDIAN > + PTR_LI t1, 0xd00dfeed > +#else > + PTR_LI t1, 0xedfe0dd0 > +#endif > + LONG_L t2, (t0) > + bne t1, t2, not_found > + > + PTR_LA t3, __appended_dtb > + > +not_found: > +#endif > PTR_LA t0, __bss_start # clear .bss > LONG_S zero, (t0) > PTR_LA t1, __bss_stop - LONGSIZE > @@ -107,6 +122,10 @@ NESTED(kernel_entry, 16, sp) # kernel entry point > LONG_S a2, fw_arg2 > LONG_S a3, fw_arg3 > > +#ifdef CONFIG_MIPS_APPENDED_DTB > + LONG_S t3, initial_boot_params > +#endif > + > MTC0 zero, CP0_CONTEXT # clear context register > PTR_LA $28, init_thread_union > /* Set the SP after an empty pt_regs. */ > diff --git a/arch/mips/kernel/vmlinux.lds.S b/arch/mips/kernel/vmlinux.lds.S > index 3b46f7c..8009530 100644 > --- a/arch/mips/kernel/vmlinux.lds.S > +++ b/arch/mips/kernel/vmlinux.lds.S > @@ -127,6 +127,12 @@ SECTIONS > } > > PERCPU_SECTION(1 << CONFIG_MIPS_L1_CACHE_SHIFT) > + > +#ifdef CONFIG_MIPS_APPENDED_DTB > + __appended_dtb = .; > + /* leave space for appended DTB */ > + . = . + 0x100000; > +#endif > /* > * Align to 64K in attempt to eliminate holes before the > * .bss..swapper_pg_dir section at the start of .bss. This >