MIPS: Introduce plat_get_fdt a platform API to retrieve the FDT
authorMatt Redfearn <matt.redfearn@imgtec.com>
Thu, 31 Mar 2016 09:05:40 +0000 (10:05 +0100)
committerRalf Baechle <ralf@linux-mips.org>
Fri, 13 May 2016 12:02:03 +0000 (14:02 +0200)
Early access to the kernel command line requires early access to the FDT
for platforms which pass the command line within the device tree. There
was no common way to retrieve the location of the FDT without incurring
side effects, such as plat_mem_setup which, on Malta at least,
initializes a bunch of other stuff.

This patch adds plat_get_ftd() for IMG platforms.

Signed-off-by: Matt Redfearn <matt.redfearn@imgtec.com>
Cc: Paul Burton <paul.burton@imgtec.com>
Cc: linux-mips@linux-mips.org
Cc: kernel-hardening@lists.openwall.com
Cc: linux-kernel@vger.kernel.org
Patchwork: https://patchwork.linux-mips.org/patch/12988/
Signed-off-by: Ralf Baechle <ralf@linux-mips.org>
arch/mips/include/asm/bootinfo.h
arch/mips/mti-malta/malta-setup.c
arch/mips/mti-sead3/sead3-setup.c

index b603804caac5eba01a5c450200cead501b64125c..9f67033961a638acb4d845ba8e0f5fd204409929 100644 (file)
@@ -144,4 +144,22 @@ static inline void plat_swiotlb_setup(void) {}
 
 #endif /* CONFIG_SWIOTLB */
 
+#ifdef CONFIG_USE_OF
+/**
+ * plat_get_fdt() - Return a pointer to the platform's device tree blob
+ *
+ * This function provides a platform independent API to get a pointer to the
+ * flattened device tree blob. The interface between bootloader and kernel
+ * is not consistent across platforms so it is necessary to provide this
+ * API such that common startup code can locate the FDT.
+ *
+ * This is used by the KASLR code to get command line arguments and random
+ * seed from the device tree. Any platform wishing to use KASLR should
+ * provide this API and select SYS_SUPPORTS_RELOCATABLE.
+ *
+ * Return: Pointer to the flattened device tree blob.
+ */
+extern void *plat_get_fdt(void);
+#endif /* CONFIG_USE_OF */
+
 #endif /* _ASM_BOOTINFO_H */
index 4740c82fb97a14e95118d05590b66b3192e9f1f5..33d5ff5069e53b72f1bc5e2225d7e63759e945e8 100644 (file)
@@ -248,10 +248,15 @@ static void __init bonito_quirks_setup(void)
 #endif
 }
 
+void __init *plat_get_fdt(void)
+{
+       return (void *)__dtb_start;
+}
+
 void __init plat_mem_setup(void)
 {
        unsigned int i;
-       void *fdt = __dtb_start;
+       void *fdt = plat_get_fdt();
 
        fdt = malta_dt_shim(fdt);
        __dt_setup_arch(fdt);
index e43f4801a2455d175cc43695e8020138449a5195..9f2f9b2b23cedd5464b3a491128ef8b36424ea48 100644 (file)
@@ -83,6 +83,11 @@ static void __init parse_memsize_param(void)
        }
 }
 
+void __init *plat_get_fdt(void)
+{
+       return (void *)__dtb_start;
+}
+
 void __init plat_mem_setup(void)
 {
        /* allow command line/bootloader env to override memory size in DT */