On 11/04/2013 06:21 AM, Jayachandran C wrote: > 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. > > Signed-off-by: Jayachandran C <jchandra@xxxxxxxxxxxx> > --- > 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 > diff --git a/arch/mips/include/asm/netlogic/xlp-hal/xlp.h b/arch/mips/include/asm/netlogic/xlp-hal/xlp.h > index 17daffb2..470f209 100644 > --- a/arch/mips/include/asm/netlogic/xlp-hal/xlp.h > +++ b/arch/mips/include/asm/netlogic/xlp-hal/xlp.h > @@ -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) > diff --git a/arch/mips/netlogic/xlp/dt.c b/arch/mips/netlogic/xlp/dt.c > index 88df445..8316d54 100644 > --- a/arch/mips/netlogic/xlp/dt.c > +++ b/arch/mips/netlogic/xlp/dt.c > @@ -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); > diff --git a/arch/mips/netlogic/xlp/setup.c b/arch/mips/netlogic/xlp/setup.c > index 76a7131..6d981bb 100644 > --- a/arch/mips/netlogic/xlp/setup.c > +++ b/arch/mips/netlogic/xlp/setup.c > @@ -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"); >