瀏覽代碼

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>
Daniel Schwierzeck 10 年之前
父節點
當前提交
90b1c9fad7
共有 2 個文件被更改,包括 8 次插入7 次删除
  1. 3 6
      arch/mips/Kconfig
  2. 5 1
      arch/mips/lib/bootm.c

+ 3 - 6
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
 

+ 5 - 1
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[],