ppc64 iSeries: Call early_setup() on iSeries
Misc steps to incorporate the flat device tree on iSeries. - define iseries_probe() - call build_iSeries_Memory_Map() earlier - return __pa() of the flat device tree from iSeries_early_setup() - actually call early_setup() for iSeries - add iseries_md to machdep_calls - build prom.o for iSeries - enable /proc/device-tree for iSeries Signed-off-by: Michael Ellerman <michael@ellerman.id.au> Signed-off-by: Stephen Rothwell <sfr@canb.auug.org.au>
This commit is contained in:
parent
c0a59491da
commit
4762713a93
5 changed files with 22 additions and 15 deletions
|
@ -357,7 +357,6 @@ config HOTPLUG_CPU
|
|||
|
||||
config PROC_DEVICETREE
|
||||
bool "Support for Open Firmware device tree in /proc"
|
||||
depends on !PPC_ISERIES
|
||||
help
|
||||
This option adds a device-tree directory under /proc which contains
|
||||
an image of the device tree that the kernel copies from Open
|
||||
|
|
|
@ -11,7 +11,7 @@ obj-y := setup.o entry.o traps.o irq.o idle.o dma.o \
|
|||
udbg.o binfmt_elf32.o sys_ppc32.o ioctl32.o \
|
||||
ptrace32.o signal32.o rtc.o init_task.o \
|
||||
lmb.o cputable.o cpu_setup_power4.o idle_power4.o \
|
||||
iommu.o sysfs.o vdso.o pmc.o firmware.o
|
||||
iommu.o sysfs.o vdso.o pmc.o firmware.o prom.o
|
||||
obj-y += vdso32/ vdso64/
|
||||
|
||||
obj-$(CONFIG_PPC_OF) += of_device.o
|
||||
|
@ -27,7 +27,7 @@ obj-$(CONFIG_PPC_ISERIES) += HvCall.o HvLpConfig.o LparData.o \
|
|||
mf.o HvLpEvent.o iSeries_proc.o iSeries_htab.o \
|
||||
iSeries_iommu.o
|
||||
|
||||
obj-$(CONFIG_PPC_MULTIPLATFORM) += nvram.o i8259.o prom_init.o prom.o
|
||||
obj-$(CONFIG_PPC_MULTIPLATFORM) += nvram.o i8259.o prom_init.o
|
||||
|
||||
obj-$(CONFIG_PPC_PSERIES) += pSeries_pci.o pSeries_lpar.o pSeries_hvCall.o \
|
||||
pSeries_nvram.o rtasd.o ras.o pSeries_reconfig.o \
|
||||
|
|
|
@ -1364,6 +1364,7 @@ _STATIC(__start_initialization_iSeries)
|
|||
addi r2,r2,0x4000
|
||||
|
||||
bl .iSeries_early_setup
|
||||
bl .early_setup
|
||||
|
||||
/* relocation is on at this point */
|
||||
|
||||
|
|
|
@ -359,12 +359,6 @@ static void __init iSeries_init_early(void)
|
|||
*/
|
||||
iommu_init_early_iSeries();
|
||||
|
||||
/*
|
||||
* Initialize the table which translate Linux physical addresses to
|
||||
* AS/400 absolute addresses
|
||||
*/
|
||||
build_iSeries_Memory_Map();
|
||||
|
||||
iSeries_get_cmdline();
|
||||
|
||||
/* Save unparsed command line copy for /proc/cmdline */
|
||||
|
@ -894,6 +888,11 @@ static int iseries_dedicated_idle(void)
|
|||
void __init iSeries_init_IRQ(void) { }
|
||||
#endif
|
||||
|
||||
static int __init iseries_probe(int platform)
|
||||
{
|
||||
return PLATFORM_ISERIES_LPAR == platform;
|
||||
}
|
||||
|
||||
struct machdep_calls __initdata iseries_md = {
|
||||
.setup_arch = iSeries_setup_arch,
|
||||
.get_cpuinfo = iSeries_get_cpuinfo,
|
||||
|
@ -909,6 +908,7 @@ struct machdep_calls __initdata iseries_md = {
|
|||
.get_rtc_time = iSeries_get_rtc_time,
|
||||
.calibrate_decr = iSeries_calibrate_decr,
|
||||
.progress = iSeries_progress,
|
||||
.probe = iseries_probe,
|
||||
/* XXX Implement enable_pmcs for iSeries */
|
||||
};
|
||||
|
||||
|
@ -1047,9 +1047,17 @@ void build_flat_dt(struct iseries_flat_dt *dt)
|
|||
dt_push_u32(dt, OF_DT_END);
|
||||
}
|
||||
|
||||
void __init iSeries_early_setup(void)
|
||||
void * __init iSeries_early_setup(void)
|
||||
{
|
||||
iSeries_fixup_klimit();
|
||||
|
||||
/*
|
||||
* Initialize the table which translate Linux physical addresses to
|
||||
* AS/400 absolute addresses
|
||||
*/
|
||||
build_iSeries_Memory_Map();
|
||||
|
||||
build_flat_dt(&iseries_dt);
|
||||
|
||||
return (void *) __pa(&iseries_dt);
|
||||
}
|
||||
|
|
|
@ -309,13 +309,11 @@ static void __init setup_cpu_maps(void)
|
|||
}
|
||||
#endif /* CONFIG_SMP */
|
||||
|
||||
|
||||
#ifdef CONFIG_PPC_MULTIPLATFORM
|
||||
|
||||
extern struct machdep_calls pSeries_md;
|
||||
extern struct machdep_calls pmac_md;
|
||||
extern struct machdep_calls maple_md;
|
||||
extern struct machdep_calls bpa_md;
|
||||
extern struct machdep_calls iseries_md;
|
||||
|
||||
/* Ultimately, stuff them in an elf section like initcalls... */
|
||||
static struct machdep_calls __initdata *machines[] = {
|
||||
|
@ -330,6 +328,9 @@ static struct machdep_calls __initdata *machines[] = {
|
|||
#endif /* CONFIG_PPC_MAPLE */
|
||||
#ifdef CONFIG_PPC_BPA
|
||||
&bpa_md,
|
||||
#endif
|
||||
#ifdef CONFIG_PPC_ISERIES
|
||||
&iseries_md,
|
||||
#endif
|
||||
NULL
|
||||
};
|
||||
|
@ -534,8 +535,6 @@ static void __init check_for_initrd(void)
|
|||
#endif /* CONFIG_BLK_DEV_INITRD */
|
||||
}
|
||||
|
||||
#endif /* CONFIG_PPC_MULTIPLATFORM */
|
||||
|
||||
/*
|
||||
* Do some initial setup of the system. The parameters are those which
|
||||
* were passed in from the bootloader.
|
||||
|
|
Loading…
Reference in a new issue