aboutsummaryrefslogtreecommitdiffstats
path: root/arch/mips/cavium-octeon/setup.c
diff options
context:
space:
mode:
authorRob Herring <robh@kernel.org>2014-04-02 18:45:06 -0400
committerRob Herring <robh@kernel.org>2014-04-30 01:55:53 -0400
commit8c97cec99033005cf1ede48a7b351e48a723749a (patch)
tree7a23d26671a91e8b392f88cd6bae660f3b643faf /arch/mips/cavium-octeon/setup.c
parenta798c10faf62a505d24e5f6213fbaf904a39623f (diff)
mips: octeon: convert to use unflatten_and_copy_device_tree
The octeon FDT code can be simplified by using 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/mips/cavium-octeon/setup.c')
-rw-r--r--arch/mips/cavium-octeon/setup.c20
1 files changed, 5 insertions, 15 deletions
diff --git a/arch/mips/cavium-octeon/setup.c b/arch/mips/cavium-octeon/setup.c
index 331b837cec57..f1bec00d5a85 100644
--- a/arch/mips/cavium-octeon/setup.c
+++ b/arch/mips/cavium-octeon/setup.c
@@ -1053,36 +1053,26 @@ void prom_free_prom_memory(void)
1053int octeon_prune_device_tree(void); 1053int octeon_prune_device_tree(void);
1054 1054
1055extern const char __dtb_octeon_3xxx_begin; 1055extern const char __dtb_octeon_3xxx_begin;
1056extern const char __dtb_octeon_3xxx_end;
1057extern const char __dtb_octeon_68xx_begin; 1056extern const char __dtb_octeon_68xx_begin;
1058extern const char __dtb_octeon_68xx_end;
1059void __init device_tree_init(void) 1057void __init device_tree_init(void)
1060{ 1058{
1061 int dt_size; 1059 const void *fdt;
1062 struct boot_param_header *fdt;
1063 bool do_prune; 1060 bool do_prune;
1064 1061
1065 if (octeon_bootinfo->minor_version >= 3 && octeon_bootinfo->fdt_addr) { 1062 if (octeon_bootinfo->minor_version >= 3 && octeon_bootinfo->fdt_addr) {
1066 fdt = phys_to_virt(octeon_bootinfo->fdt_addr); 1063 fdt = phys_to_virt(octeon_bootinfo->fdt_addr);
1067 if (fdt_check_header(fdt)) 1064 if (fdt_check_header(fdt))
1068 panic("Corrupt Device Tree passed to kernel."); 1065 panic("Corrupt Device Tree passed to kernel.");
1069 dt_size = be32_to_cpu(fdt->totalsize);
1070 do_prune = false; 1066 do_prune = false;
1071 } else if (OCTEON_IS_MODEL(OCTEON_CN68XX)) { 1067 } else if (OCTEON_IS_MODEL(OCTEON_CN68XX)) {
1072 fdt = (struct boot_param_header *)&__dtb_octeon_68xx_begin; 1068 fdt = &__dtb_octeon_68xx_begin;
1073 dt_size = &__dtb_octeon_68xx_end - &__dtb_octeon_68xx_begin;
1074 do_prune = true; 1069 do_prune = true;
1075 } else { 1070 } else {
1076 fdt = (struct boot_param_header *)&__dtb_octeon_3xxx_begin; 1071 fdt = &__dtb_octeon_3xxx_begin;
1077 dt_size = &__dtb_octeon_3xxx_end - &__dtb_octeon_3xxx_begin;
1078 do_prune = true; 1072 do_prune = true;
1079 } 1073 }
1080 1074
1081 /* Copy the default tree from init memory. */ 1075 initial_boot_params = (void *)fdt;
1082 initial_boot_params = early_init_dt_alloc_memory_arch(dt_size, 8);
1083 if (initial_boot_params == NULL)
1084 panic("Could not allocate initial_boot_params");
1085 memcpy(initial_boot_params, fdt, dt_size);
1086 1076
1087 if (do_prune) { 1077 if (do_prune) {
1088 octeon_prune_device_tree(); 1078 octeon_prune_device_tree();
@@ -1090,7 +1080,7 @@ void __init device_tree_init(void)
1090 } else { 1080 } else {
1091 pr_info("Using passed Device Tree.\n"); 1081 pr_info("Using passed Device Tree.\n");
1092 } 1082 }
1093 unflatten_device_tree(); 1083 unflatten_and_copy_device_tree();
1094} 1084}
1095 1085
1096static int __initdata disable_octeon_edac_p; 1086static int __initdata disable_octeon_edac_p;