Skip to content

Commit

Permalink
MIPS: Add support for vmlinux.bin appended dtb
Browse files Browse the repository at this point in the history
Add support for detecting a vmlinux.bin appended dtb and overriding
the boot arguments to match the UHI interface.

Due to the PERCPU section being empty for !SMP, but still modifying
the current address by aligning it to the page size, do not define
it for !SMP builds to allow __appended_dtb to still point to
the actual end of the data.

Signed-off-by: Jonas Gorski <[email protected]>
Cc: [email protected]
Cc: [email protected]
Cc: John Crispin <[email protected]>
Cc: Kevin Cernekee <[email protected]>
Cc: Florian Fainelli <[email protected]>
Cc: Aaro Koskinen <[email protected]>
Cc: Markos Chandras <[email protected]>
Cc: Andrew Bresticker <[email protected]>
Cc: Daniel Schwierzeck <[email protected]>
Cc: Paul Burton <[email protected]>
Cc: James Hartley <[email protected]>
Patchwork: https://patchwork.linux-mips.org/patch/9739/
Signed-off-by: Ralf Baechle <[email protected]>
  • Loading branch information
KanjiMonster authored and ralfbaechle committed Jun 21, 2015
1 parent 01306ae commit 1da8f17
Show file tree
Hide file tree
Showing 3 changed files with 50 additions and 1 deletion.
27 changes: 27 additions & 0 deletions arch/mips/Kconfig
Original file line number Diff line number Diff line change
Expand Up @@ -2677,6 +2677,33 @@ config USE_OF
config BUILTIN_DTB
bool

choice
prompt "Kernel appended dtb support" if OF
default MIPS_NO_APPENDED_DTB

config MIPS_NO_APPENDED_DTB
bool "None"
help
Do not enable appended dtb support.

config MIPS_RAW_APPENDED_DTB
bool "vmlinux.bin"
help
With this option, the boot code will look for a device tree binary
DTB) appended to raw vmlinux.bin (without decompressor).
(e.g. cat vmlinux.bin <filename>.dtb > vmlinux_w_dtb).

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.bin. Do not leave this option active in a production kernel
if you don't intend to always append a DTB.
endchoice

endmenu

config LOCKDEP_SUPPORT
Expand Down
16 changes: 16 additions & 0 deletions arch/mips/kernel/head.S
Original file line number Diff line number Diff line change
Expand Up @@ -94,6 +94,22 @@ NESTED(kernel_entry, 16, sp) # kernel entry point
jr t0
0:

#ifdef CONFIG_MIPS_RAW_APPENDED_DTB
PTR_LA t0, __appended_dtb

#ifdef CONFIG_CPU_BIG_ENDIAN
li t1, 0xd00dfeed
#else
li t1, 0xedfe0dd0
#endif
lw t2, (t0)
bne t1, t2, not_found
nop

move a1, t0
PTR_LI a0, -2
not_found:
#endif
PTR_LA t0, __bss_start # clear .bss
LONG_S zero, (t0)
PTR_LA t1, __bss_stop - LONGSIZE
Expand Down
8 changes: 7 additions & 1 deletion arch/mips/kernel/vmlinux.lds.S
Original file line number Diff line number Diff line change
Expand Up @@ -125,8 +125,14 @@ SECTIONS
.exit.data : {
EXIT_DATA
}

#ifdef CONFIG_SMP
PERCPU_SECTION(1 << CONFIG_MIPS_L1_CACHE_SHIFT)
#endif
#ifdef CONFIG_MIPS_RAW_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
Expand Down

0 comments on commit 1da8f17

Please sign in to comment.