123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132 |
- From 15f37e1588920e010f20b53f04af94e91b8ee714 Mon Sep 17 00:00:00 2001
- From: Jonas Gorski <jogo@openwrt.org>
- Date: Mon, 20 Jun 2016 11:27:37 +0200
- Subject: [PATCH] MIPS: store the appended dtb address in a variable
- Instead of rewriting the arguments to match the UHI spec, store the
- address of a appended or UHI supplied dtb in fw_supplied_dtb.
- That way the original bootloader arugments are kept intact while still
- making the use of an appended dtb invisible for mach code.
- Mach code can still find out if it is an appended dtb by comparing
- fw_arg1 with fw_supplied_dtb.
- Signed-off-by: Jonas Gorski <jogo@openwrt.org>
- Cc: Kevin Cernekee <cernekee@gmail.com>
- Cc: Florian Fainelli <f.fainelli@gmail.com>
- Cc: John Crispin <john@phrozen.org>
- Cc: Paul Burton <paul.burton@imgtec.com>
- Cc: James Hogan <james.hogan@imgtec.com>
- Cc: Alban Bedel <albeu@free.fr>
- Cc: Daniel Gimpelevich <daniel@gimpelevich.san-francisco.ca.us>
- Cc: Antony Pavlov <antonynpavlov@gmail.com>
- Cc: linux-mips@linux-mips.org
- Patchwork: https://patchwork.linux-mips.org/patch/13699/
- Signed-off-by: Ralf Baechle <ralf@linux-mips.org>
- ---
- arch/mips/ath79/setup.c | 4 ++--
- arch/mips/bmips/setup.c | 4 ++--
- arch/mips/include/asm/bootinfo.h | 4 ++++
- arch/mips/kernel/head.S | 21 ++++++++++++++-------
- arch/mips/kernel/setup.c | 4 ++++
- arch/mips/lantiq/prom.c | 4 ++--
- arch/mips/pic32/pic32mzda/init.c | 4 ++--
- 7 files changed, 30 insertions(+), 15 deletions(-)
- --- a/arch/mips/ath79/setup.c
- +++ b/arch/mips/ath79/setup.c
- @@ -207,6 +207,8 @@ void __init plat_mem_setup(void)
- fdt_start = fw_getenvl("fdt_start");
- if (fdt_start)
- __dt_setup_arch((void *)KSEG0ADDR(fdt_start));
- + else if (fw_passed_dtb)
- + __dt_setup_arch((void *)KSEG0ADDR(fw_passed_dtb));
- #ifdef CONFIG_BUILTIN_DTB
- else
- __dt_setup_arch(__dtb_start);
- --- a/arch/mips/bmips/setup.c
- +++ b/arch/mips/bmips/setup.c
- @@ -149,8 +149,8 @@ void __init plat_mem_setup(void)
- /* intended to somewhat resemble ARM; see Documentation/arm/Booting */
- if (fw_arg0 == 0 && fw_arg1 == 0xffffffff)
- dtb = phys_to_virt(fw_arg2);
- - else if (fw_arg0 == -2) /* UHI interface */
- - dtb = (void *)fw_arg1;
- + else if (fw_passed_dtb) /* UHI interface */
- + dtb = (void *)fw_passed_dtb;
- else if (__dtb_start != __dtb_end)
- dtb = (void *)__dtb_start;
- else
- --- a/arch/mips/include/asm/bootinfo.h
- +++ b/arch/mips/include/asm/bootinfo.h
- @@ -127,6 +127,10 @@ extern char arcs_cmdline[COMMAND_LINE_SI
- */
- extern unsigned long fw_arg0, fw_arg1, fw_arg2, fw_arg3;
-
- +#ifdef CONFIG_USE_OF
- +extern unsigned long fw_passed_dtb;
- +#endif
- +
- /*
- * Platform memory detection hook called by setup_arch
- */
- --- a/arch/mips/kernel/head.S
- +++ b/arch/mips/kernel/head.S
- @@ -94,21 +94,24 @@ NESTED(kernel_entry, 16, sp) # kernel
- jr t0
- 0:
-
- +#ifdef CONFIG_USE_OF
- #ifdef CONFIG_MIPS_RAW_APPENDED_DTB
- - PTR_LA t0, __appended_dtb
- + PTR_LA t2, __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:
- + lw t0, (t2)
- + beq t0, t1, dtb_found
- +#endif
- + li t1, -2
- + beq a0, t1, dtb_found
- + move t2, a1
- +
- + li t2, 0
- +dtb_found:
- #endif
- PTR_LA t0, __bss_start # clear .bss
- LONG_S zero, (t0)
- @@ -123,6 +126,10 @@ not_found:
- LONG_S a2, fw_arg2
- LONG_S a3, fw_arg3
-
- +#ifdef CONFIG_USE_OF
- + LONG_S t2, fw_passed_dtb
- +#endif
- +
- MTC0 zero, CP0_CONTEXT # clear context register
- PTR_LA $28, init_thread_union
- /* Set the SP after an empty pt_regs. */
- --- a/arch/mips/kernel/setup.c
- +++ b/arch/mips/kernel/setup.c
- @@ -886,6 +886,10 @@ void __init setup_arch(char **cmdline_p)
- unsigned long kernelsp[NR_CPUS];
- unsigned long fw_arg0, fw_arg1, fw_arg2, fw_arg3;
-
- +#ifdef CONFIG_USE_OF
- +unsigned long fw_passed_dtb;
- +#endif
- +
- #ifdef CONFIG_DEBUG_FS
- struct dentry *mips_debugfs_dir;
- static int __init debugfs_mips(void)
|