Build breakage in latest -next
Comments regarding Rob's build fix below appreciated.
Thanks,
Ralf
Date: Tue, 29 Oct 2013 17:55:04 -0500
From: Rob Herring <[email protected]>
Subject: Re: Build breakage in latest -next
Quoted 17 lines · Ralf Baechle
nlm_xlp_defconfigfails with:LINK vmlinux
LD vmlinux.o
MODPOST vmlinux.oGEN .version CHK include/generated/compile.h UPD include/generated/compile.h CC init/version.o LD init/built-in.o
arch/mips/built-in.o: In function `plat_mem_setup':
(.init.text+0x5b0): undefined reference to `early_init_devtree' make[2]: *** [vmlinux] Error 1
make[1]: *** [sub-make] Error 2
make: *** [all] Error 2
make: Leaving directory `/home/ralf/src/linux/obj/nlm_xlp-build'
Quoted 3 lines
It appears this was caused by
f75813c0127bbef41ac3152f64a72ba212a5514c[mips: useearly_init_dt_scan] which removes theearly_init_devtreefunction but doesn't the call inarch/mips/netlogic/xlp/setup.c.
I could change this to a call to device_tree_init, but the way it was done results in scanning the DT twice. I would like to move the device_tree_init call to be earlier instead to avoid this. I think this should be functionally equivalent, but could use more eyes on it.
Rob
arch/mips/kernel/setup.c +2 -1
@@ -602,6 +602,8 @@ static void __init arch_mem_init(char **cmdline_p) {extern void plat_mem_setup (void ); +device_tree_init (); +/* call board setup routine */ plat_mem_setup ();
@@ -662,7 +664,6 @@ static void __init arch_mem_init(char **cmdline_p) crashk_res.end - crashk_res.start +1 , BOOTMEM_DEFAULT);#endif -device_tree_init ();sparse_init ();plat_swiotlb_setup ();paging_init ();
arch/mips/netlogic/xlp/setup.c +0 -3
@@ -97,9 +97,6 @@ void __init plat_mem_setup(void) _machine_halt = nlm_linux_exit; pm_power_off = nlm_linux_exit; -/* memory and bootargs from DT */ -early_init_devtree (initial_boot_params); -if (boot_mem_map.nr_map ==0 ) {pr_info ("Using DRAM BARs for memory map.\n" );xlp_init_mem_from_bars ();
PATCH 1/1 MIPS: Netlogic: replace early_init_devtree() call
The early_init_devtree() API was removed in linux-next for 3.13 with commit "mips: use early_init_dt_scan". This causes Netlogic XLP compile to fail:
arch/mips/netlogic/xlp/setup.c:101: undefined reference to `early_init_devtree'
Add xlp_early_init_devtree() which uses the __dt_setup_arch() to handle early device tree related initialization to fix this.
--- arch/mips/include/asm/netlogic/xlp-hal/xlp.h | 1 + arch/mips/netlogic/xlp/dt.c | 18 ++++++++++++++---- arch/mips/netlogic/xlp/setup.c | 2 +- 3 files changed, 16 insertions(+), 5 deletions(-)
arch/mips/include/asm/netlogic/xlp-hal/xlp.h +1 -0
@@ -69,6 +69,7 @@ void nlm_hal_init(void);int xlp_get_dram_map (int n,uint64_t *dram_map);/* Device tree related */ +void xlp_early_init_devtree (void );void *xlp_dt_init (void *fdtp);static inline int cpu_is_xlpii (void )
arch/mips/netlogic/xlp/dt.c +14 -4
@@ -39,8 +39,11 @@#include <linux/of_platform.h> #include <linux/of_device.h> +#include <asm/prom.h> +extern u32 __dtb_xlp_evp_begin[], __dtb_xlp_svp_begin[], __dtb_xlp_fvp_begin[], __dtb_start[]; +static void *xlp_fdt_blob;void __init *xlp_dt_init (void *fdtp) {
@@ -67,19 +70,26 @@ void __init *xlp_dt_init(void *fdtp)break ; } } - initial_boot_params = fdtp; + xlp_fdt_blob = fdtp;return fdtp; } +void __init xlp_early_init_devtree (void ) +{ +__dt_setup_arch (xlp_fdt_blob); +strlcpy (arcs_cmdline, boot_command_line,COMMAND_LINE_SIZE ); +} +void __init device_tree_init (void ) {unsigned long base, size; +struct boot_param_header *fdtp = xlp_fdt_blob; -if (!initial_boot_params) +if (!fdtp)return ; - base =virt_to_phys ((void *)initial_boot_params); - size =be32_to_cpu (initial_boot_params->totalsize); + 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 );
arch/mips/netlogic/xlp/setup.c +1 -1
@@ -98,7 +98,7 @@ void __init plat_mem_setup(void) pm_power_off = nlm_linux_exit;/* memory and bootargs from DT */ -early_init_devtree (initial_boot_params); +xlp_early_init_devtree ();if (boot_mem_map.nr_map ==0 ) {pr_info ("Using DRAM BARs for memory map.\n" );
Signature · 1 line
1.7.9.5
Re: [PATCH] MIPS: Netlogic: replace early_init_devtree() call
Quoted 9 lines · Jayachandran C
The
early_init_devtree()API was removed in linux-next for 3.13 with commit "mips: useearly_init_dt_scan". This causes Netlogic XLP compile to fail:
arch/mips/netlogic/xlp/setup.c:101: undefined reference to `early_init_devtree'Add
xlp_early_init_devtree()which uses the__dt_setup_arch()to handle early device tree related initialization to fix this.
Quoted 6 lines
Signed-off-by Jayachandran C <[email protected]>--- arch/mips/include/asm/netlogic/xlp-hal/xlp.h | 1 + arch/mips/netlogic/xlp/dt.c | 18 ++++++++++++++---- arch/mips/netlogic/xlp/setup.c | 2 +- 3 files changed, 16 insertions(+), 5 deletions(-)
If there are no objections, I'll apply this to my tree. I don't really like this being platform specific, but I can't make sense of all the per platform stuff in MIPS land to come up with a better solution. It shouldn't really be a platform decision when to do DT scanning and initialization. Just looking at the command line handling makes me run away.
Rob
Quoted 73 lines
arch/mips/include/asm/netlogic/xlp-hal/xlp.h +1
-0@@ -69,6 +69,7 @@ void nlm_hal_init(void);int xlp_get_dram_map (int n,uint64_t *dram_map);/* Device tree related */ +void xlp_early_init_devtree (void );void *xlp_dt_init (void *fdtp);static inline int cpu_is_xlpii (void )arch/mips/netlogic/xlp/dt.c +14
-4@@ -39,8 +39,11 @@#include <linux/of_platform.h> #include <linux/of_device.h> +#include <asm/prom.h> +extern u32 __dtb_xlp_evp_begin[], __dtb_xlp_svp_begin[], __dtb_xlp_fvp_begin[], __dtb_start[]; +static void *xlp_fdt_blob;void __init *xlp_dt_init (void *fdtp) {@@ -67,19 +70,26 @@ void __init *xlp_dt_init(void *fdtp)break ; } } - initial_boot_params = fdtp; + xlp_fdt_blob = fdtp;return fdtp; } +void __init xlp_early_init_devtree (void ) +{ +__dt_setup_arch (xlp_fdt_blob); +strlcpy (arcs_cmdline, boot_command_line,COMMAND_LINE_SIZE ); +} +void __init device_tree_init (void ) {unsigned long base, size; +struct boot_param_header *fdtp = xlp_fdt_blob; -if (!initial_boot_params) +if (!fdtp)return ; - base =virt_to_phys ((void *)initial_boot_params); - size =be32_to_cpu (initial_boot_params->totalsize); + 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 );arch/mips/netlogic/xlp/setup.c +1
-1@@ -98,7 +98,7 @@ void __init plat_mem_setup(void) pm_power_off = nlm_linux_exit;/* memory and bootargs from DT */ -early_init_devtree (initial_boot_params); +xlp_early_init_devtree ();if (boot_mem_map.nr_map ==0 ) {pr_info ("Using DRAM BARs for memory map.\n" );