Re: [PATCH RFC] MIPS: add support for vmlinux appended DTB

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



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
> 


[Index of Archives]     [Linux MIPS Home]     [LKML Archive]     [Linux ARM Kernel]     [Linux ARM]     [Linux]     [Git]     [Yosemite News]     [Linux SCSI]     [Linux Hams]

  Powered by Linux