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>
 
 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
 
                        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
                             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 \
 
        addi    r2,r2,0x4000
 
        bl      .iSeries_early_setup
+       bl      .early_setup
 
        /* relocation is on at this point */
 
 
         */
        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 */
 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,
        .get_rtc_time   = iSeries_get_rtc_time,
        .calibrate_decr = iSeries_calibrate_decr,
        .progress       = iSeries_progress,
+       .probe          = iseries_probe,
        /* XXX Implement enable_pmcs for iSeries */
 };
 
        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);
 }
 
 }
 #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[] = {
 #endif /* CONFIG_PPC_MAPLE */
 #ifdef CONFIG_PPC_BPA
        &bpa_md,
+#endif
+#ifdef CONFIG_PPC_ISERIES
+       &iseries_md,
 #endif
        NULL
 };
 #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.