[U-Boot] [PATCH] MIPS: implement device-tree handover to Linux kernel

Add device-tree handover to Linux kernel conforming with MIPS UHI [1]. Register $a0 will be set to the reserved value -2. The address of the device-tree blob will be stored as KSEG0 address in $a1. $a2 and $a3 are set to zero.
[1] http://prplfoundation.org/wiki/MIPS_documentation
Signed-off-by: Daniel Schwierzeck daniel.schwierzeck@gmail.com
---
arch/mips/Kconfig | 9 +++------ arch/mips/lib/bootm.c | 6 +++++- 2 files changed, 8 insertions(+), 7 deletions(-)
diff --git a/arch/mips/Kconfig b/arch/mips/Kconfig index bc4283d..b0a8a43 100644 --- a/arch/mips/Kconfig +++ b/arch/mips/Kconfig @@ -141,15 +141,12 @@ config MIPS_BOOT_ENV_LEGACY The address of the enviroment is stored in register $a2.
config MIPS_BOOT_FDT - bool "Hand over a flattened device tree to Linux kernel (INCOMPLETE)" + bool "Hand over a flattened device tree to Linux kernel" default n help Enable this option if you want U-Boot to hand over a flattened - device tree to the kernel. - - Note: the final hand over to the kernel is not yet implemented. After - the community agreed on the MIPS boot interface for device trees, - the corresponding code will be added. + device tree to the kernel. According to UHI register $a0 will be set + to -2 and the FDT address is stored in $a1.
endmenu
diff --git a/arch/mips/lib/bootm.c b/arch/mips/lib/bootm.c index d9d8396..e289799 100644 --- a/arch/mips/lib/bootm.c +++ b/arch/mips/lib/bootm.c @@ -317,7 +317,11 @@ static void boot_jump_linux(bootm_headers_t *images) bootstage_report(); #endif
- kernel(linux_argc, (ulong)linux_argv, (ulong)linux_env, linux_extra); + if (images->ft_len) + kernel(-2, (ulong)images->ft_addr, 0, 0); + else + kernel(linux_argc, (ulong)linux_argv, (ulong)linux_env, + linux_extra); }
int do_bootm_linux(int flag, int argc, char * const argv[],
participants (1)
-
Daniel Schwierzeck