Commit 4762713a authored by Michael Ellerman's avatar Michael Ellerman Committed by Stephen Rothwell

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: default avatarMichael Ellerman <michael@ellerman.id.au>
Signed-off-by: default avatarStephen Rothwell <sfr@canb.auug.org.au>
parent c0a59491
...@@ -357,7 +357,6 @@ config HOTPLUG_CPU ...@@ -357,7 +357,6 @@ config HOTPLUG_CPU
config PROC_DEVICETREE config PROC_DEVICETREE
bool "Support for Open Firmware device tree in /proc" bool "Support for Open Firmware device tree in /proc"
depends on !PPC_ISERIES
help help
This option adds a device-tree directory under /proc which contains This option adds a device-tree directory under /proc which contains
an image of the device tree that the kernel copies from Open 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 \ ...@@ -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 \ udbg.o binfmt_elf32.o sys_ppc32.o ioctl32.o \
ptrace32.o signal32.o rtc.o init_task.o \ ptrace32.o signal32.o rtc.o init_task.o \
lmb.o cputable.o cpu_setup_power4.o idle_power4.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-y += vdso32/ vdso64/
obj-$(CONFIG_PPC_OF) += of_device.o obj-$(CONFIG_PPC_OF) += of_device.o
...@@ -27,7 +27,7 @@ obj-$(CONFIG_PPC_ISERIES) += HvCall.o HvLpConfig.o LparData.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 \ mf.o HvLpEvent.o iSeries_proc.o iSeries_htab.o \
iSeries_iommu.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 \ obj-$(CONFIG_PPC_PSERIES) += pSeries_pci.o pSeries_lpar.o pSeries_hvCall.o \
pSeries_nvram.o rtasd.o ras.o pSeries_reconfig.o \ pSeries_nvram.o rtasd.o ras.o pSeries_reconfig.o \
......
...@@ -1364,6 +1364,7 @@ _STATIC(__start_initialization_iSeries) ...@@ -1364,6 +1364,7 @@ _STATIC(__start_initialization_iSeries)
addi r2,r2,0x4000 addi r2,r2,0x4000
bl .iSeries_early_setup bl .iSeries_early_setup
bl .early_setup
/* relocation is on at this point */ /* relocation is on at this point */
......
...@@ -359,12 +359,6 @@ static void __init iSeries_init_early(void) ...@@ -359,12 +359,6 @@ static void __init iSeries_init_early(void)
*/ */
iommu_init_early_iSeries(); iommu_init_early_iSeries();
/*
* Initialize the table which translate Linux physical addresses to
* AS/400 absolute addresses
*/
build_iSeries_Memory_Map();
iSeries_get_cmdline(); iSeries_get_cmdline();
/* Save unparsed command line copy for /proc/cmdline */ /* Save unparsed command line copy for /proc/cmdline */
...@@ -894,6 +888,11 @@ static int iseries_dedicated_idle(void) ...@@ -894,6 +888,11 @@ static int iseries_dedicated_idle(void)
void __init iSeries_init_IRQ(void) { } void __init iSeries_init_IRQ(void) { }
#endif #endif
static int __init iseries_probe(int platform)
{
return PLATFORM_ISERIES_LPAR == platform;
}
struct machdep_calls __initdata iseries_md = { struct machdep_calls __initdata iseries_md = {
.setup_arch = iSeries_setup_arch, .setup_arch = iSeries_setup_arch,
.get_cpuinfo = iSeries_get_cpuinfo, .get_cpuinfo = iSeries_get_cpuinfo,
...@@ -909,6 +908,7 @@ struct machdep_calls __initdata iseries_md = { ...@@ -909,6 +908,7 @@ struct machdep_calls __initdata iseries_md = {
.get_rtc_time = iSeries_get_rtc_time, .get_rtc_time = iSeries_get_rtc_time,
.calibrate_decr = iSeries_calibrate_decr, .calibrate_decr = iSeries_calibrate_decr,
.progress = iSeries_progress, .progress = iSeries_progress,
.probe = iseries_probe,
/* XXX Implement enable_pmcs for iSeries */ /* XXX Implement enable_pmcs for iSeries */
}; };
...@@ -1047,9 +1047,17 @@ void build_flat_dt(struct iseries_flat_dt *dt) ...@@ -1047,9 +1047,17 @@ void build_flat_dt(struct iseries_flat_dt *dt)
dt_push_u32(dt, OF_DT_END); dt_push_u32(dt, OF_DT_END);
} }
void __init iSeries_early_setup(void) void * __init iSeries_early_setup(void)
{ {
iSeries_fixup_klimit(); 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); build_flat_dt(&iseries_dt);
return (void *) __pa(&iseries_dt);
} }
...@@ -309,13 +309,11 @@ static void __init setup_cpu_maps(void) ...@@ -309,13 +309,11 @@ static void __init setup_cpu_maps(void)
} }
#endif /* CONFIG_SMP */ #endif /* CONFIG_SMP */
#ifdef CONFIG_PPC_MULTIPLATFORM
extern struct machdep_calls pSeries_md; extern struct machdep_calls pSeries_md;
extern struct machdep_calls pmac_md; extern struct machdep_calls pmac_md;
extern struct machdep_calls maple_md; extern struct machdep_calls maple_md;
extern struct machdep_calls bpa_md; extern struct machdep_calls bpa_md;
extern struct machdep_calls iseries_md;
/* Ultimately, stuff them in an elf section like initcalls... */ /* Ultimately, stuff them in an elf section like initcalls... */
static struct machdep_calls __initdata *machines[] = { static struct machdep_calls __initdata *machines[] = {
...@@ -330,6 +328,9 @@ static struct machdep_calls __initdata *machines[] = { ...@@ -330,6 +328,9 @@ static struct machdep_calls __initdata *machines[] = {
#endif /* CONFIG_PPC_MAPLE */ #endif /* CONFIG_PPC_MAPLE */
#ifdef CONFIG_PPC_BPA #ifdef CONFIG_PPC_BPA
&bpa_md, &bpa_md,
#endif
#ifdef CONFIG_PPC_ISERIES
&iseries_md,
#endif #endif
NULL NULL
}; };
...@@ -534,8 +535,6 @@ static void __init check_for_initrd(void) ...@@ -534,8 +535,6 @@ static void __init check_for_initrd(void)
#endif /* CONFIG_BLK_DEV_INITRD */ #endif /* CONFIG_BLK_DEV_INITRD */
} }
#endif /* CONFIG_PPC_MULTIPLATFORM */
/* /*
* Do some initial setup of the system. The parameters are those which * Do some initial setup of the system. The parameters are those which
* were passed in from the bootloader. * were passed in from the bootloader.
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment