diff options
author | Rob Herring <robh@kernel.org> | 2014-04-02 18:45:06 -0400 |
---|---|---|
committer | Rob Herring <robh@kernel.org> | 2014-04-30 01:55:53 -0400 |
commit | 8c97cec99033005cf1ede48a7b351e48a723749a (patch) | |
tree | 7a23d26671a91e8b392f88cd6bae660f3b643faf /arch/mips/cavium-octeon/setup.c | |
parent | a798c10faf62a505d24e5f6213fbaf904a39623f (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.c | 20 |
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) | |||
1053 | int octeon_prune_device_tree(void); | 1053 | int octeon_prune_device_tree(void); |
1054 | 1054 | ||
1055 | extern const char __dtb_octeon_3xxx_begin; | 1055 | extern const char __dtb_octeon_3xxx_begin; |
1056 | extern const char __dtb_octeon_3xxx_end; | ||
1057 | extern const char __dtb_octeon_68xx_begin; | 1056 | extern const char __dtb_octeon_68xx_begin; |
1058 | extern const char __dtb_octeon_68xx_end; | ||
1059 | void __init device_tree_init(void) | 1057 | void __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 | ||
1096 | static int __initdata disable_octeon_edac_p; | 1086 | static int __initdata disable_octeon_edac_p; |