summaryrefslogtreecommitdiffstats
path: root/arch
diff options
context:
space:
mode:
authorRob Herring <robh@kernel.org>2014-04-02 17:52:43 -0500
committerRob Herring <robh@kernel.org>2014-04-30 00:55:59 -0500
commite1b77baed6b170b190a72821b39a2e91a66f1e54 (patch)
treea1bcde81ba1eccb4a99ebc7c9cf949c93a4a3247 /arch
parent10fbdaab3f51359c5377495b1ab0698bb8e64df9 (diff)
downloadlinux-e1b77baed6b170b190a72821b39a2e91a66f1e54.tar.gz
linux-e1b77baed6b170b190a72821b39a2e91a66f1e54.tar.bz2
linux-e1b77baed6b170b190a72821b39a2e91a66f1e54.zip
mips: xlp: copy built-in DTB out of init section
The existing code is buggy because built-in DTBs are in init memory. It is also broken because the reserved bootmem was then freed after unflattening, but the unflattened tree points to data in the flat tree. Fix this by using the unflatten_and_copy_device_tree function. This removes all accesses to FDT header data by the arch code. Signed-off-by: Rob Herring <robh@kernel.org> Cc: Ralf Baechle <ralf@linux-mips.org> Cc: linux-mips@linux-mips.org Tested-by: Grant Likely <grant.likely@linaro.org>
Diffstat (limited to 'arch')
-rw-r--r--arch/mips/netlogic/xlp/dt.c17
1 files changed, 1 insertions, 16 deletions
diff --git a/arch/mips/netlogic/xlp/dt.c b/arch/mips/netlogic/xlp/dt.c
index 5754097b9cde..7f9615a712fb 100644
--- a/arch/mips/netlogic/xlp/dt.c
+++ b/arch/mips/netlogic/xlp/dt.c
@@ -87,22 +87,7 @@ void __init xlp_early_init_devtree(void)
void __init device_tree_init(void)
{
- unsigned long base, size;
- struct boot_param_header *fdtp = xlp_fdt_blob;
-
- if (!fdtp)
- return;
-
- base = virt_to_phys(fdtp);
- size = be32_to_cpu(fdtp->totalsize);
-
- /* Before we do anything, lets reserve the dt blob */
- reserve_bootmem(base, size, BOOTMEM_DEFAULT);
-
- unflatten_device_tree();
-
- /* free the space reserved for the dt blob */
- free_bootmem(base, size);
+ unflatten_and_copy_device_tree();
}
static struct of_device_id __initdata xlp_ids[] = {