diff --git a/arch/ppc64/Makefile b/arch/ppc64/Makefile
index 84fa0c34d8b6c06897c526560ecd875b7dd70420..3ba80c9682cf7f769f487f5099c1ff64bec6075f 100644
--- a/arch/ppc64/Makefile
+++ b/arch/ppc64/Makefile
@@ -13,61 +13,47 @@
 # Adjusted for PPC64 by Tom Gall
 #
 
-KERNELLOAD	=0xc000000000000000
+KERNELLOAD	= 0xc000000000000000
 
 LDFLAGS		:= -m elf64ppc
-LDFLAGS_vmlinux	= -Bstatic \
-		-e $(KERNELLOAD) -Ttext $(KERNELLOAD)
+LDFLAGS_vmlinux	= -Bstatic -e $(KERNELLOAD) -Ttext $(KERNELLOAD)
 LDFLAGS_BLOB	:= --format binary --oformat elf64-powerpc
-CFLAGS		:= $(CFLAGS) -msoft-float -pipe \
+CFLAGS		+= -msoft-float -pipe \
 		-Wno-uninitialized -mminimal-toc -mtraceback=full \
 		-finline-limit-2000 -mcpu=power4
-CPP		= $(CC) -E $(CFLAGS)
-
 
 HEAD := arch/ppc64/kernel/head.o
 
-core-y			+= arch/ppc64/kernel/ arch/ppc64/mm/ arch/ppc64/lib/
-core-$(CONFIG_XMON)	+= arch/ppc64/xmon/
-
-# FIXME: is drivers- right ?
-drivers-$(CONFIG_OPROFILE)		+= arch/ppc64/oprofile/
-
-makeboot = $(call descend,arch/ppc64/boot,$(1))
-
-ifdef CONFIG_PPC_PSERIES
-BOOT_TARGETS = zImage zImage.initrd
-endif
+libs-y				+= arch/ppc64/lib/
+core-y				+= arch/ppc64/kernel/
+core-y				+= arch/ppc64/mm/
+core-$(CONFIG_XMON)		+= arch/ppc64/xmon/
+drivers-$(CONFIG_OPROFILE)	+= arch/ppc64/oprofile/
 
-ifdef CONFIG_PPC_ISERIES
-BOOT_TARGETS = vmlinux.sminitrd vmlinux.initrd vmlinux.sm
-endif
+makeboot =$(Q)$(MAKE) -f scripts/Makefile.build obj=arch/ppc64/boot $(1)
 
-$(BOOT_TARGETS): vmlinux
-	@$(call makeboot,arch/ppc64/boot/$@)
+boottarget-$(CONFIG_PPC_PSERIES) := zImage zImage.initrd
+boottarget-$(CONFIG_PPC_ISERIES) := vmlinux.sminitrd vmlinux.initrd vmlinux.sm
+$(boottarget-y): vmlinux
+	$(call makeboot,arch/ppc64/boot/$@)
 
 %_config: arch/ppc64/configs/%_defconfig
 	rm -f .config arch/ppc64/defconfig
 	cp -f arch/ppc64/configs/$(@:config=defconfig) arch/ppc64/defconfig
 
 archclean:
-	@$(call makeboot,clean)
+	$(Q)$(MAKE) -f scripts/Makefile.clean obj=arch/ppc64/boot
 
-archmrproper:
+prepare: include/asm-ppc64/offsets.h
 
-
-prepare: include/asm-$(ARCH)/offsets.h
-
-arch/$(ARCH)/kernel/asm-offsets.s: include/asm include/linux/version.h \
+arch/ppc64/kernel/asm-offsets.s: include/asm include/linux/version.h \
 				   include/config/MARKER
 
-include/asm-$(ARCH)/offsets.h.tmp: arch/$(ARCH)/kernel/asm-offsets.s
-	@$(generate-asm-offsets.h) < $< > $@
-
-include/asm-$(ARCH)/offsets.h: include/asm-$(ARCH)/offsets.h.tmp
+include/asm-ppc64/offsets.h: arch/ppc64/kernel/asm-offsets.s
 	@echo -n '  Generating $@'
+	@$(generate-asm-offsets.h) < $< > $@.tmp
 	@$(update-if-changed)
 
-CLEAN_FILES += include/asm-$(ARCH)/offsets.h.tmp \
-	       include/asm-$(ARCH)/offsets.h
+CLEAN_FILES += include/asm-ppc64/offsets.h.tmp \
+	       include/asm-ppc64/offsets.h
 
diff --git a/arch/ppc64/boot/Makefile b/arch/ppc64/boot/Makefile
index 8172219a09b5d8f3fa73c7dfa77f8d6713fb53ce..ac1f5a109a8a3ee57e5ce00f2b571065dbf931b7 100644
--- a/arch/ppc64/boot/Makefile
+++ b/arch/ppc64/boot/Makefile
@@ -23,92 +23,88 @@
 CROSS32_COMPILE =
 #CROSS32_COMPILE = /usr/local/ppc/bin/powerpc-linux-
 
-BOOTCC = $(CROSS32_COMPILE)gcc
-BOOTCFLAGS = $(HOSTCFLAGS) -I$(objtree)/include
-BOOTLD = $(CROSS32_COMPILE)ld
-BOOTAS = $(CROSS32_COMPILE)as
-BOOTAFLAGS = -D__ASSEMBLY__ $(HOSTCFLAGS)
-
-$(obj)/start.o:	$(obj)/start.c
-	$(BOOTCC) $(BOOTCFLAGS) -c -o $*.o $<
-
-$(obj)/main.o:	$(obj)/main.c
-	$(BOOTCC) $(BOOTCFLAGS) -c -o $*.o $<
-
-$(obj)/zlib.o:	$(obj)/zlib.c
-	$(BOOTCC) $(BOOTCFLAGS) -c -o $*.o $<
-
-$(obj)/imagesize.o:	$(obj)/imagesize.c
-	$(BOOTCC) $(BOOTCFLAGS) -c -o $*.o $<
-
-$(obj)/no_initrd.o:	$(obj)/no_initrd.c
-	$(BOOTCC) $(BOOTCFLAGS) -c -o $*.o $<
-
-$(obj)/crt0.o:	$(obj)/crt0.S
-	$(BOOTCC) $(BOOTAFLAGS) -traditional -c -o $*.o $<
-
-CFLAGS	= $(CPPFLAGS) -O -fno-builtin -DSTDC_HEADERS
-LD_ARGS = -Ttext 0x00400000 -e _start
-OBJCOPYFLAGS := -S -O binary
-
-OBJS = $(addprefix $(obj)/,crt0.o start.o main.o zlib.o image.o imagesize.o)
-
-ifeq ($(CONFIG_PPC_ISERIES),y)
-
-boot:	vmlinux.sm
-
-$(obj)/addSystemMap: $(obj)/addSystemMap.c
-	$(HOSTCC) $(HOSTCFLAGS) -o $@ $<
-
-$(obj)/vmlinux.sm: vmlinux $(obj)/addSystemMap
-	$(obj)/addSystemMap System.map vmlinux $(obj)/vmlinux.sm
-
-$(obj)/addRamDisk: $(obj)/addRamDisk.c
-	$(HOSTCC) $(HOSTCFLAGS) -o $@ $<
-
-$(obj)/vmlinux.initrd: vmlinux $(obj)/addRamDisk $(obj)/ramdisk.image.gz System.map
-	$(obj)/addRamDisk $(obj)/ramdisk.image.gz System.map vmlinux $(obj)/vmlinux.initrd
-
-$(obj)/vmlinux.sminitrd: $(obj)/vmlinux.sm $(obj)/addRamDisk $(obj)/ramdisk.image.gz System.map
-	$(obj)/addRamDisk $(obj)/ramdisk.image.gz System.map $(obj)/vmlinux.sm $(obj)/vmlinux.sminitrd
-
-else
-boot:	zImage
-endif
-
-$(obj)/piggyback: $(obj)/piggyback.c
-	$(HOSTCC) $(HOSTCFLAGS) -DKERNELBASE=$(KERNELBASE) -o $@ $<
-
-$(obj)/addnote: $(obj)/addnote.c
-	$(HOSTCC) $(HOSTCFLAGS) -o $@ $<
-
-$(obj)/image.o: $(obj)/piggyback $(obj)/vmlinux.gz
-	$(obj)/piggyback $(obj)/image < $(obj)/vmlinux.gz | $(BOOTAS) -o $@
-
-$(obj)/sysmap.o: $(obj)/piggyback System.map
-	$(obj)/piggyback $(obj)/sysmap < System.map | $(BOOTAS) -o $(obj)/sysmap.o
-
-$(obj)/initrd.o: $(obj)/ramdisk.image.gz $(obj)/piggyback
-	$(obj)/piggyback $(obj)/initrd < $(obj)/ramdisk.image.gz | $(BOOTAS) -o $(obj)/initrd.o
-
-$(obj)/zImage: $(OBJS) $(obj)/no_initrd.o $(obj)/addnote
-	$(BOOTLD) $(LD_ARGS) -T $(obj)/zImage.lds -o $@ $(OBJS) $(obj)/no_initrd.o
-	$(obj)/addnote $@
-
-$(obj)/zImage.initrd: $(OBJS) $(obj)/initrd.o $(obj)/addnote
-	$(BOOTLD) $(LD_ARGS) -T $(obj)/zImage.lds -o $@ $(OBJS) $(obj)/initrd.o
-	./addnote $@
-
-$(obj)/vmlinux.gz: vmlinux
-	$(OBJCOPY) $(OBJCOPYFLAGS) vmlinux $(obj)/vmlinux
-	ls -l $(obj)/vmlinux | awk '{printf "/* generated -- do not edit! */\nint uncompressed_size = %d;\n", $$5}' > $(obj)/imagesize.c
-	$(CROSS_COMPILE)nm -n vmlinux | tail -1 | awk '{printf "long vmlinux_end = 0x%s;\n", substr($$1,8)}' >> $(obj)/imagesize.c
-	gzip -vf9 $(obj)/vmlinux
-
-$(obj)/imagesize.c: $(obj)/vmlinux.gz
-
-clean:
-	@rm -f $(OBJS)
-	@rm -f $(addprefix $(obj)/,piggyback note addnote zImage \
-		zImage.initrd vmlinux.gz no_initrd.o imagesize.c addSystemMap \
-		vmlinux.sm addRamDisk vmlinux.initrd vmlinux.sminitrd)
+BOOTCC		:= $(CROSS32_COMPILE)gcc
+BOOTCFLAGS	:= $(HOSTCFLAGS) -Iinclude
+BOOTLD		:= $(CROSS32_COMPILE)ld
+BOOTAS		:= $(CROSS32_COMPILE)as
+BOOTAFLAGS	:= -D__ASSEMBLY__ $(HOSTCFLAGS)
+
+CFLAGS		:= $(CPPFLAGS) -O -fno-builtin -DSTDC_HEADERS
+LD_ARGS		:= -Ttext 0x00400000 -e _start
+OBJCOPYFLAGS	:= -S -O binary
+
+obj-boot := start.o main.o zlib.o imagesize.o no_initrd.o
+OBJS     := crt0.o start.o main.o zlib.o imagesize.o image.o
+obj-boot := $(addprefix $(obj)/,$(obj-boot))
+OBJS     := $(addprefix $(obj)/,$(OBJS))
+targets  += $(obj-boot) $(addprefix $(obj)/,image.c image.o)
+
+quiet_cmd_bootcc = BOOTCC  $@
+      cmd_bootcc = $(BOOTCC) -Wp,-MD,$(depfile) $(BOOTCFLAGS) -c -o $@ $<
+$(obj-boot): %.o: %.c FORCE
+	$(call if_changed_dep,bootcc)
+
+quiet_cmd_bootas = BOOTAS  $@
+      cmd_bootas = $(BOOTCC) -Wp,-MD,$(depfile) $(BOOTAFLAGS) -traditional \
+						-c -o $@ $<
+$(obj)/crt0.o: %.o: %.S FORCE
+	$(call if_changed_dep,bootas)
+
+host-progs		:= piggyback addnote addSystemMap addRamDisk
+HOSTCFLAGS_piggyback.o	:= -DKERNELBASE=$(KERNELBASE)
+EXTRA_TARGETS 		+= zImage zImage.initrd vmlinux.bin vmlinux.gz \
+			   vmlinux.sm vmlinux.initrd vmlinux.sminitrd \
+			   sysmap.o initrd.o
+
+quiet_cmd_sysmap = SYSMAP   $@
+      cmd_sysmap = $(obj)/addSystemMap System.map $< $@
+$(obj)/vmlinux.sm: vmlinux $(obj)/addSystemMap System.map FORCE
+	$(call if_changed,sysmap)
+
+quiet_cmd_ramdisk = RAMDISK $@
+      cmd_ramdisk = $(obj)/addRamDisk $(obj)/ramdisk.image.gz System.map $< $@
+$(obj)/vmlinux.initrd: vmlinux $(obj)/addRamDisk $(obj)/ramdisk.image.gz System.map FORCE
+	$(call if_changed,ramdisk)
+
+$(obj)/vmlinux.sminitrd: $(obj)/vmlinux.sm $(obj)/addRamDisk $(obj)/ramdisk.image.gz FORCE
+	$(call if_changed,ramdisk)
+
+
+quiet_cmd_piggy = PIGGY   $@
+      cmd_piggy = $(obj)/piggyback $(@:.o=) < $< | $(BOOTAS) -o $@
+
+$(obj)/image.o: $(obj)/vmlinux.gz $(obj)/piggyback FORCE
+	$(call if_changed,piggy)
+
+$(obj)/sysmap.o: System.map $(obj)/piggyback FORCE
+	$(call if_changed,piggy)
+
+$(obj)/initrd.o: $(obj)/ramdisk.image.gz $(obj)/piggyback FORCE
+	$(call if_changed,piggy)
+
+quiet_cmd_addnote = ADDNOTE $@ 
+      cmd_addnote = $(BOOTLD) $(LD_ARGS) -T $(obj)/zImage.lds -o $@ $(OBJS) $<\
+		    && $(obj)/addnote $@
+
+$(obj)/zImage: $(obj)/no_initrd.o $(OBJS) $(obj)/addnote FORCE
+	$(call if_changed,addnote)
+
+$(obj)/zImage.initrd: $(obj)/initrd.o $(OBJS) $(obj)/addnote FORCE
+	$(call if_changed,addnote)
+
+$(obj)/vmlinux.bin: vmlinux FORCE
+	$(call if_changed,objcopy)
+
+$(obj)/vmlinux.gz: $(obj)/vmlinux.bin FORCE
+	$(call if_changed,gzip)
+
+$(obj)/imagesize.c: vmlinux
+	@echo Generating $@
+	ls -l vmlinux | \
+	awk '{printf "/* generated -- do not edit! */\n" \
+		"int uncompressed_size = %d;\n", $$5}' > $(obj)/imagesize.c
+	$(CROSS_COMPILE)nm -n vmlinux | tail -1 | \
+	awk '{printf "long vmlinux_end = 0x%s;\n", substr($$1,8)}' \
+		>> $(obj)/imagesize.c
+
+clean-files :=  $(targets)
diff --git a/arch/ppc64/boot/main.c b/arch/ppc64/boot/main.c
index be0f398681ee727495324190a27f42b4de917e55..8d14d7172480b2a9be0907825695d447e79be5cd 100644
--- a/arch/ppc64/boot/main.c
+++ b/arch/ppc64/boot/main.c
@@ -14,6 +14,8 @@
 #include <asm/page.h>
 #include <asm/bootinfo.h>
 
+#undef DEBUG
+
 void memmove(void *dst, void *im, int len);
 
 extern void *finddevice(const char *);
@@ -90,7 +92,9 @@ chrpboot(unsigned long a1, unsigned long a2, void *prom)
 	for(claim_addr = PROG_START; 
 	    claim_addr <= PROG_START * 8; 
 	    claim_addr += 0x100000) {
+#ifdef DEBUG
 		printf("    trying: 0x%08lx\n\r", claim_addr);
+#endif
 		dst = claim(claim_addr, uncompressed_size, 0);
 		if (dst != (void *)-1) break;
 	}
@@ -118,6 +122,7 @@ chrpboot(unsigned long a1, unsigned long a2, void *prom)
 	bi_recs = make_bi_recs((unsigned long)dst + vmlinux_end);
 
 	kernel_entry = (kernel_entry_t)dst;
+#ifdef DEBUG
 	printf( "kernel:\n\r"
 		"        entry addr = 0x%lx\n\r"
 		"        a1         = 0x%lx,\n\r"
@@ -126,6 +131,7 @@ chrpboot(unsigned long a1, unsigned long a2, void *prom)
 		"        bi_recs    = 0x%lx,\n\r",
 		(unsigned long)kernel_entry, a1, a2,
 		(unsigned long)prom, (unsigned long)bi_recs);
+#endif
 
 	kernel_entry( a1, a2, prom, bi_recs );
 
diff --git a/arch/ppc64/kernel/Makefile b/arch/ppc64/kernel/Makefile
index a92f400bedbdbf60e0aa701d736e3f5203abcd7b..e044b9cf60038fcc25d1dc6118743ba4bdd04e76 100644
--- a/arch/ppc64/kernel/Makefile
+++ b/arch/ppc64/kernel/Makefile
@@ -1,40 +1,32 @@
 #
-# Makefile for the linux kernel.
+# Makefile for the linux ppc64 kernel.
 #
 
-EXTRA_CFLAGS = -mno-minimal-toc
-
-KHEAD := head.o
-
-EXTRA_TARGETS	:= $(KHEAD)
-
-export-objs         := ppc_ksyms.o
+EXTRA_CFLAGS	+= -mno-minimal-toc
+EXTRA_TARGETS	:= head.o
+export-objs	:= ppc_ksyms.o
 
 obj-y               :=	ppc_ksyms.o setup.o entry.o traps.o irq.o idle.o \
 			time.o process.o signal.o syscalls.o misc.o ptrace.o \
 			align.o semaphore.o bitops.o stab.o htab.o pacaData.o \
-			LparData.o udbg.o binfmt_elf32.o sys_ppc32.o sys32.o \
-			ioctl32.o ptrace32.o signal32.o open_pic.o xics.o \
-			pmc.o mf_proc.o proc_pmc.o iSeries_setup.o \
-			ItLpQueue.o hvCall.o mf.o HvLpEvent.o ras.o \
-			iSeries_proc.o HvCall.o HvLpConfig.o \
-			rtc.o init_task.o pSeries_htab.o
-
-obj-$(CONFIG_PCI) +=  pci.o pci_dn.o pci_dma.o
-
-ifeq ($(CONFIG_PPC_ISERIES),y)
-obj-$(CONFIG_PCI) += iSeries_pci.o iSeries_pci_reset.o iSeries_IoMmTable.o iSeries_irq.o iSeries_VpdInfo.o XmPciLpEvent.o 
-endif
-ifeq ($(CONFIG_PPC_PSERIES),y)
-obj-$(CONFIG_PCI) += pSeries_pci.o pSeries_lpar.o pSeries_hvCall.o eeh.o
-
-obj-y += rtasd.o nvram.o
-endif
-
-obj-$(CONFIG_RTAS_FLASH) += rtas_flash.o
-
-obj-$(CONFIG_SMP) += smp.o
-
-obj-$(CONFIG_PROFILING)	+= profile.o
-
-obj-y += prom.o lmb.o rtas.o rtas-proc.o chrp_setup.o i8259.o
+			udbg.o binfmt_elf32.o sys_ppc32.o sys32.o ioctl32.o \
+			ptrace32.o signal32.o pmc.o rtc.o init_task.o \
+			lmb.o pci.o pci_dn.o pci_dma.o
+
+obj-$(CONFIG_PPC_ISERIES) += iSeries_pci.o       iSeries_pci_reset.o \
+			     iSeries_IoMmTable.o iSeries_irq.o \
+			     iSeries_VpdInfo.o   XmPciLpEvent.o \
+			     HvCall.o HvLpConfig.o LparData.o mf_proc.o \
+			     proc_pmc.o iSeries_setup.o ItLpQueue.o hvCall.o \
+			     mf.o HvLpEvent.o iSeries_proc.o 
+
+obj-$(CONFIG_PPC_PSERIES) += pSeries_pci.o pSeries_lpar.o pSeries_hvCall.o \
+			     eeh.o rtasd.o nvram.o
+
+# Change this to pSeries only once we've got iSeries up to date
+obj-y			  += open_pic.o xics.o pSeries_htab.o rtas.o \
+			     rtas-proc.o chrp_setup.o i8259.o ras.o prom.o 
+
+obj-$(CONFIG_RTAS_FLASH)	+= rtas_flash.o
+obj-$(CONFIG_SMP)		+= smp.o
+obj-$(CONFIG_PROFILING)		+= profile.o
diff --git a/arch/ppc64/kernel/chrp_setup.c b/arch/ppc64/kernel/chrp_setup.c
index 121429be09f7cef4c1e185205303332c2e70588b..a387af93058da390c5f69363faf6da8e2196d392 100644
--- a/arch/ppc64/kernel/chrp_setup.c
+++ b/arch/ppc64/kernel/chrp_setup.c
@@ -60,7 +60,7 @@
 
 #include "i8259.h"
 #include "open_pic.h"
-#include "xics.h"
+#include <asm/xics.h>
 #include <asm/ppcdebug.h>
 
 extern volatile unsigned char *chrp_int_ack_special;
diff --git a/arch/ppc64/kernel/head.S b/arch/ppc64/kernel/head.S
index ab0821860c4a39e34902d79f0a6d3c7fd1ff8c87..3f89ee8d2ab1caca9adb11a7b214cf086863c14e 100644
--- a/arch/ppc64/kernel/head.S
+++ b/arch/ppc64/kernel/head.S
@@ -79,7 +79,7 @@
 _stext:
 _STATIC(__start)
 	b .__start_initialization_pSeries
-
+#ifdef CONFIG_PPC_ISERIES
 	/* At offset 0x20, there is a pointer to iSeries LPAR data.
 	 * This is required by the hypervisor */
 	. = 0x20
@@ -90,9 +90,7 @@ _STATIC(__start)
 	 * between physical addresses and absolute addresses) and
 	 * to the pidhash table (also used by the debugger) */
 	.llong msChunks-KERNELBASE
-#ifdef CONFIG_PPC_ISERIES
 	.llong pidhash-KERNELBASE
-#endif
 
 	/* Offset 0x38 - Pointer to start of embedded System.map */
 	.globl	embedded_sysmap_start
@@ -102,6 +100,7 @@ embedded_sysmap_start:
 	.globl	embedded_sysmap_end
 embedded_sysmap_end:
 	.llong	0
+#endif
 
 	/* Secondary processors spin on this value until it goes to 1. */
 	.globl  __secondary_hold_spinloop
@@ -365,11 +364,15 @@ __start_interupts:
 	 * point to itVpdAreas.  On pSeries native, this value is not used.
 	 */
 	. = 0x4000
-	.globl __end_interupts
+	.globl __end_interrupts
 	.globl __start_naca
 __end_interupts:
 __start_naca:
+#ifdef CONFIG_PPC_ISERIES
 	.llong itVpdAreas
+#else
+	.llong 0x0
+#endif
 	.llong 0x0
 	.llong 0x0
 	.llong paca
@@ -390,6 +393,7 @@ __start_stab:
 	.globl __end_stab
 __end_stab:
 
+#ifdef CONFIG_PPC_ISERIES
 	/*
 	 * The iSeries LPAR map is at this fixed address
 	 * so that the HvReleaseData structure can address
@@ -503,7 +507,7 @@ maskable_exception_exit:
 	mfspr	r21,SPRG1
 	mfspr	r20,SPRG2
 	rfid
-
+#endif
 /*
  * Data area reserved for FWNMI option.
  */
@@ -1217,7 +1221,7 @@ _GLOBAL(pseries_secondary_smp_init)
 #endif
 #endif
 	b 	1b			 /* Loop until told to go         */
-
+#ifdef CONFIG_PPC_ISERIES
 _GLOBAL(__start_initialization_iSeries)
 
 	LOADADDR(r1,init_thread_union)
@@ -1241,6 +1245,7 @@ _GLOBAL(__start_initialization_iSeries)
 	bl      .iSeries_fixup_klimit
 
 	b	.start_here_common
+#endif
 
 _GLOBAL(__start_initialization_pSeries)
 	mr	r31,r3			/* save parameters */
@@ -1248,9 +1253,6 @@ _GLOBAL(__start_initialization_pSeries)
 	mr	r29,r5
 	mr	r28,r6
 	mr	r27,r7
-	mr	r26,r8                  /* YABOOT: debug_print() routine */
-	mr	r25,r9                  /* YABOOT: debug_delay() routine */
-	mr	r24,r10                 /* YABOOT: debug_prom() routine */
 
 	bl	.enable_64b_mode
 
@@ -1295,9 +1297,6 @@ _GLOBAL(__start_initialization_pSeries)
 	mr	r5,r29
 	mr	r6,r28
 	mr	r7,r27
-	mr	r8,r26
-	mr	r9,r25
-	mr	r10,r24
 
 	bl	.prom_init
 
diff --git a/arch/ppc64/kernel/ioctl32.c b/arch/ppc64/kernel/ioctl32.c
index f78eb2dfaeeb36ad9231f05dde5f2f066c100e00..00e9d511d8b8f3db798bf107e36b9953705c5fe6 100644
--- a/arch/ppc64/kernel/ioctl32.c
+++ b/arch/ppc64/kernel/ioctl32.c
@@ -1722,9 +1722,9 @@ out:	if (data)
 
 struct loop_info32 {
 	int			lo_number;      /* ioctl r/o */
-	__kernel_dev_t32	lo_device;      /* ioctl r/o */
+	compat_dev_t	lo_device;      /* ioctl r/o */
 	unsigned int		lo_inode;       /* ioctl r/o */
-	__kernel_dev_t32	lo_rdevice;     /* ioctl r/o */
+	compat_dev_t	lo_rdevice;     /* ioctl r/o */
 	int			lo_offset;
 	int			lo_encrypt_type;
 	int			lo_encrypt_key_size;    /* ioctl w/o */
@@ -2054,7 +2054,7 @@ static int do_smb_getmountuid(unsigned int fd, unsigned int cmd, unsigned long a
 	set_fs(old_fs);
 
 	if (err >= 0)
-		err = put_user(kuid, (__kernel_uid_t32 *)arg);
+		err = put_user(kuid, (compat_uid_t *)arg);
 
 	return err;
 }
@@ -3656,7 +3656,7 @@ struct ioctl_trans {
 #define HANDLE_IOCTL(cmd,handler) { cmd, (unsigned long)handler, 0 }
 
 #define AUTOFS_IOC_SETTIMEOUT32 _IOWR(0x93,0x64,unsigned int)
-#define SMB_IOC_GETMOUNTUID_32 _IOR('u', 1, __kernel_uid_t32)
+#define SMB_IOC_GETMOUNTUID_32 _IOR('u', 1, compat_uid_t)
 
 static struct ioctl_trans ioctl_translations[] = {
     /* List here explicitly which ioctl's need translation,
@@ -3705,6 +3705,7 @@ COMPATIBLE_IOCTL(TIOCSSERIAL),
 COMPATIBLE_IOCTL(TIOCSERGETLSR),
 COMPATIBLE_IOCTL(TIOCSLTC),
 /* Big F */
+#if 0
 COMPATIBLE_IOCTL(FBIOGET_VSCREENINFO),
 COMPATIBLE_IOCTL(FBIOPUT_VSCREENINFO),
 COMPATIBLE_IOCTL(FBIOPAN_DISPLAY),
@@ -3715,6 +3716,7 @@ COMPATIBLE_IOCTL(FBIOGET_CURSORSTATE),
 COMPATIBLE_IOCTL(FBIOPUT_CURSORSTATE),
 COMPATIBLE_IOCTL(FBIOGET_CON2FBMAP),
 COMPATIBLE_IOCTL(FBIOPUT_CON2FBMAP),
+#endif
 #if 0
 COMPATIBLE_IOCTL(FBIOBLANK),
 #endif
@@ -4391,10 +4393,12 @@ HANDLE_IOCTL(GIO_FONTX, do_fontx_ioctl),
 HANDLE_IOCTL(PIO_UNIMAP, do_unimap_ioctl),
 HANDLE_IOCTL(GIO_UNIMAP, do_unimap_ioctl),
 HANDLE_IOCTL(KDFONTOP, do_kdfontop_ioctl),
+#if 0
 HANDLE_IOCTL(FBIOGET_FSCREENINFO, do_fbioget_fscreeninfo_ioctl),
 HANDLE_IOCTL(FBIOGETCMAP, do_fbiogetcmap_ioctl),
 HANDLE_IOCTL(FBIOPUTCMAP, do_fbioputcmap_ioctl),
 #endif
+#endif
 HANDLE_IOCTL(EXT2_IOC32_GETFLAGS, do_ext2_ioctl),
 HANDLE_IOCTL(EXT2_IOC32_SETFLAGS, do_ext2_ioctl),
 HANDLE_IOCTL(EXT2_IOC32_GETVERSION, do_ext2_ioctl),
diff --git a/arch/ppc64/kernel/misc.S b/arch/ppc64/kernel/misc.S
index a91729af66e857d4733ccd5cb1a6947a021b275b..236111b5719bf74b21a28ce08507808526bdfd3a 100644
--- a/arch/ppc64/kernel/misc.S
+++ b/arch/ppc64/kernel/misc.S
@@ -398,46 +398,6 @@ _GLOBAL(_outsl_ns)
 	bdnz	00b
 	blr	
 
-/*
- * Extended precision shifts
- *
- * R3/R4 has 64 bit value
- * R5    has shift count
- * result in R3/R4
- *
- *  ashrdi3:     XXXYYY/ZZZAAA -> SSSXXX/YYYZZZ
- *  ashldi3:     XXXYYY/ZZZAAA -> YYYZZZ/AAA000
- *  lshrdi3:     XXXYYY/ZZZAAA -> 000XXX/YYYZZZ
- */
-/* MIKEC: These may no longer be needed...what does gcc expect ? */
-	
-_GLOBAL(__ashrdi3)
-	li	r6,32
-	sub	r6,r6,r5
-	slw	r7,r3,r6	/* isolate YYY */
-	srw	r4,r4,r5	/* isolate ZZZ */
-	or	r4,r4,r7	/* YYYZZZ */
-	sraw	r3,r3,r5	/* SSSXXX */
-	blr
-
-_GLOBAL(__ashldi3)
-	li	r6,32
-	sub	r6,r6,r5
-	srw	r7,r4,r6	/* isolate ZZZ */
-	slw	r4,r4,r5	/* AAA000 */
-	slw	r3,r3,r5	/* YYY--- */
-	or	r3,r3,r7	/* YYYZZZ */
-	blr
-
-_GLOBAL(__lshrdi3)
-	li	r6,32
-	sub	r6,r6,r5
-	slw	r7,r3,r6        /* isolate YYY */
-	srw	r4,r4,r5        /* isolate ZZZ */
-	or	r4,r4,r7        /* YYYZZZ */
-	srw	r3,r3,r5        /* 000XXX */
-	blr
-
 _GLOBAL(abs)
 	cmpi	0,r3,0
 	bge	10f
@@ -551,7 +511,7 @@ _GLOBAL(sys_call_table32)
 	.llong .sys_rmdir		/* 40 */
 	.llong .sys_dup
 	.llong .sys_pipe
-	.llong .sys32_times
+	.llong .compat_sys_times
 	.llong .sys_ni_syscall		/* old prof syscall */
 	.llong .sys_brk			/* 45 */
 	.llong .sys_setgid
@@ -614,9 +574,9 @@ _GLOBAL(sys_call_table32)
 	.llong .sys32_syslog
 	.llong .compat_sys_setitimer
 	.llong .compat_sys_getitimer		/* 105 */
-	.llong .sys32_newstat
-	.llong .sys32_newlstat
-	.llong .sys32_newfstat
+	.llong .compat_sys_newstat
+	.llong .compat_sys_newlstat
+	.llong .compat_sys_newfstat
 	.llong .sys_uname
 	.llong .sys_ni_syscall		/* 110 old iopl syscall */
 	.llong .sys_vhangup
diff --git a/arch/ppc64/kernel/pSeries_pci.c b/arch/ppc64/kernel/pSeries_pci.c
index 2796e420aaf1c464ef5c10b4c6369571c0c31d88..df3609a8c019f08124d8cb413f26ec80400453be 100644
--- a/arch/ppc64/kernel/pSeries_pci.c
+++ b/arch/ppc64/kernel/pSeries_pci.c
@@ -40,7 +40,6 @@
 #include <asm/naca.h>
 #include <asm/pci_dma.h>
 
-#include "xics.h"
 #include "open_pic.h"
 #include "pci.h"
 
@@ -402,7 +401,7 @@ alloc_phb(struct device_node *dev, char *model, unsigned int addr_size_words)
 	* Python
 	***************************************************************/
 	if (strstr(model, "Python")) {
-		unsigned long chip_regs;
+		void *chip_regs;
 		volatile u32 *tmp, i;
 
 		PPCDBG(PPCDBG_PHBINIT, "\tCreate python\n");
@@ -608,10 +607,6 @@ pSeries_pcibios_fixup(void)
 		pci_read_irq_line(dev);
 		PPCDBGCALL(PPCDBG_PHBINIT, dumpPci_Dev(dev) );
 	}
-
-	if (naca->interrupt_controller == IC_PPC_XIC) {
-		xics_isa_init(); 
-	}
 }
 
 /*********************************************************************** 
diff --git a/arch/ppc64/kernel/pci_dma.c b/arch/ppc64/kernel/pci_dma.c
index d127758c84018bfe15427b6317d3b821672df48b..ac815895bf2ac897b1b88de23d8ff9ac9c00b5e1 100644
--- a/arch/ppc64/kernel/pci_dma.c
+++ b/arch/ppc64/kernel/pci_dma.c
@@ -147,6 +147,7 @@ static unsigned long __inline__ count_leading_zeros64( unsigned long x )
 	return lz;
 }
 
+#ifdef CONFIG_PPC_ISERIES
 static void tce_build_iSeries(struct TceTable *tbl, long tcenum, 
 			       unsigned long uaddr, int direction )
 {
@@ -180,7 +181,9 @@ static void tce_build_iSeries(struct TceTable *tbl, long tcenum,
 		panic("PCI_DMA: HvCallXm_setTce failed, Rc: 0x%lx\n", setTceRc);
 	}
 }
+#endif
 
+#ifdef CONFIG_PPC_PSERIES
 static void tce_build_pSeries(struct TceTable *tbl, long tcenum, 
 			       unsigned long uaddr, int direction )
 {
@@ -199,8 +202,8 @@ static void tce_build_pSeries(struct TceTable *tbl, long tcenum,
 
 	tce_addr = ((union Tce *)tbl->base) + tcenum;
 	*tce_addr = (union Tce)tce.wholeTce;
-
 }
+#endif
 
 /* 
  * Build a TceTable structure.  This contains a multi-level bit map which
@@ -548,6 +551,7 @@ static inline dma_addr_t get_tces( struct TceTable *tbl, unsigned order, void *p
 	return retTce; 
 }
 
+#ifdef CONFIG_PPC_ISERIES
 static void tce_free_one_iSeries( struct TceTable *tbl, long tcenum )
 {
 	u64 set_tce_rc;
@@ -560,7 +564,9 @@ static void tce_free_one_iSeries( struct TceTable *tbl, long tcenum )
 		panic("PCI_DMA: HvCallXm_setTce failed, Rc: 0x%lx\n", set_tce_rc);
 
 }
+#endif
 
+#ifdef CONFIG_PPC_PSERIES
 static void tce_free_one_pSeries( struct TceTable *tbl, long tcenum )
 {
 	union Tce tce;
@@ -572,6 +578,7 @@ static void tce_free_one_pSeries( struct TceTable *tbl, long tcenum )
 	*tce_addr = (union Tce)tce.wholeTce;
 
 }
+#endif
 
 static void tce_free(struct TceTable *tbl, dma_addr_t dma_addr, 
 			     unsigned order, unsigned num_pages)
@@ -609,6 +616,7 @@ static void tce_free(struct TceTable *tbl, dma_addr_t dma_addr,
 	free_tce_range( tbl, free_tce, order );
 }
 
+#ifdef CONFIG_PPC_ISERIES
 void __init create_virtual_bus_tce_table(void)
 {
 	struct TceTable *t;
@@ -661,6 +669,7 @@ void __init create_virtual_bus_tce_table(void)
 	}
 	else printk( "Virtual Bus VIO TCE table failed.\n");
 }
+#endif
 
 void create_tce_tables_for_buses(struct list_head *bus_list)
 {
@@ -842,6 +851,7 @@ static struct TceTable* findHwTceTable(struct TceTable * newTceTable )
 static void getTceTableParmsiSeries(struct iSeries_Device_Node* DevNode,
 				    struct TceTable* newTceTable )
 {
+#ifdef CONFIG_PPC_ISERIES
 	struct TceTableManagerCB* pciBusTceTableParms = (struct TceTableManagerCB*)kmalloc( sizeof(struct TceTableManagerCB), GFP_KERNEL );
 	if(pciBusTceTableParms == NULL) panic("PCI_DMA: TCE Table Allocation failed.");
 
@@ -872,6 +882,7 @@ static void getTceTableParmsiSeries(struct iSeries_Device_Node* DevNode,
 	newTceTable->tceType     = TCE_PCI;
 
 	kfree(pciBusTceTableParms);
+#endif
 }
 
 static void getTceTableParmsPSeries(struct pci_controller *phb,
@@ -1440,15 +1451,19 @@ void pci_unmap_sg(struct pci_dev *pdev, struct scatterlist *sglist, int nelems,
 }
 #endif
 
+#ifdef CONFIG_PPC_PSERIES
 /* These are called very early. */
 void tce_init_pSeries(void)
 {
 	ppc_md.tce_build = tce_build_pSeries;
 	ppc_md.tce_free_one = tce_free_one_pSeries;
 }
+#endif
 
+#ifdef CONFIG_PPC_ISERIES
 void tce_init_iSeries(void)
 {
 	ppc_md.tce_build = tce_build_iSeries;
 	ppc_md.tce_free_one = tce_free_one_iSeries;
 }
+#endif
diff --git a/arch/ppc64/kernel/prom.c b/arch/ppc64/kernel/prom.c
index 764ecb508ca79fc89f37691b6c9039052d2d2048..ebde1f0c29204268d833872ec232d363a2ab9ddd 100644
--- a/arch/ppc64/kernel/prom.c
+++ b/arch/ppc64/kernel/prom.c
@@ -15,10 +15,6 @@
  *      2 of the License, or (at your option) any later version.
  */
 
-#if 0
-#define DEBUG_YABOOT
-#endif
-
 #if 0
 #define DEBUG_PROM
 #endif
@@ -32,22 +28,6 @@
 #include <linux/threads.h>
 #include <linux/spinlock.h>
 #include <linux/blk.h>
-
-#ifdef DEBUG_YABOOT
-#define call_yaboot(FUNC,...) \
-	do { \
-		if (FUNC) {					\
-			struct prom_t *_prom = PTRRELOC(&prom);	\
-			unsigned long prom_entry = _prom->entry;\
-			_prom->entry = (unsigned long)(FUNC);	\
-			enter_prom(__VA_ARGS__); 		\
-			_prom->entry = prom_entry;		\
-		}						\
-	} while (0)
-#else
-#define call_yaboot(FUNC,...) do { ; } while (0)
-#endif
-
 #include <linux/types.h>
 #include <linux/pci.h>
 #include <asm/prom.h>
@@ -65,16 +45,14 @@
 #include <asm/bitops.h>
 #include <asm/naca.h>
 #include <asm/pci.h>
-#include "open_pic.h"
 #include <asm/bootinfo.h>
 #include <asm/ppcdebug.h>
+#include "open_pic.h"
 
 #ifdef CONFIG_FB
 #include <asm/linux_logo.h>
 #endif
 
-extern char _end[];
-
 /*
  * prom_init() is called very early on, before the kernel text
  * and data have been mapped to KERNELBASE.  At this point the code
@@ -131,12 +109,7 @@ struct pci_intr_map {
 
 typedef unsigned long interpret_func(struct device_node *, unsigned long,
 				     int, int);
-#if 0
 static interpret_func interpret_pci_props;
-#endif
-static unsigned long interpret_pci_props(struct device_node *, unsigned long,
-					 int, int);
-
 static interpret_func interpret_isa_props;
 static interpret_func interpret_root_props;
 
@@ -156,9 +129,6 @@ struct prom_t prom = {
 	0,			/* version */
 	32,			/* encode_phys_size */
 	0			/* bi_rec pointer */
-#ifdef DEBUG_YABOOT
-	,NULL			/* yaboot */
-#endif
 };
 
 
@@ -170,9 +140,6 @@ extern struct rtas_t rtas;
 extern unsigned long klimit;
 extern unsigned long embedded_sysmap_end;
 extern struct lmb lmb;
-#ifdef CONFIG_MSCHUNKS
-extern struct msChunks msChunks;
-#endif /* CONFIG_MSCHUNKS */
 
 #define MAX_PHB 16 * 3  // 16 Towers * 3 PHBs/tower
 struct _of_tce_table of_tce_table[MAX_PHB + 1] = {{0, 0, 0}};
@@ -203,12 +170,6 @@ static struct bi_record * prom_bi_rec_verify(struct bi_record *);
 static unsigned long prom_bi_rec_reserve(unsigned long);
 static struct device_node *find_phandle(phandle);
 
-#ifdef CONFIG_MSCHUNKS
-static unsigned long prom_initialize_mschunks(unsigned long);
-#ifdef DEBUG_PROM
-void prom_dump_mschunks_mapping(void);
-#endif /* DEBUG_PROM */
-#endif /* CONFIG_MSCHUNKS */
 #ifdef DEBUG_PROM
 void prom_dump_lmb(void);
 #endif
@@ -217,8 +178,6 @@ extern unsigned long reloc_offset(void);
 
 extern void enter_prom(void *dummy,...);
 
-void cacheable_memzero(void *, unsigned int);
-
 extern char cmd_line[512];	/* XXX */
 unsigned long dev_tree_size;
 
@@ -545,20 +504,6 @@ prom_initialize_lmb(unsigned long mem)
 	unsigned long lmb_base, lmb_size;
 	unsigned long num_regs, bytes_per_reg = (_prom->encode_phys_size*2)/8;
 
-#ifdef CONFIG_MSCHUNKS
-	unsigned long max_addr = 0;
-#if 1
-	/* Fix me: 630 3G-4G IO hack here... -Peter (PPPBBB) */
-	unsigned long io_base = 3UL<<30;
-	unsigned long io_size = 1UL<<30;
-	unsigned long have_630 = 1;	/* assume we have a 630 */
-
-#else
-	unsigned long io_base = <real io base here>;
-	unsigned long io_size = <real io size here>;
-#endif
-#endif /* CONFIG_MSCHUNKS */
-
 	lmb_init();
 
         for (node = 0; prom_next_node(&node); ) {
@@ -581,42 +526,17 @@ prom_initialize_lmb(unsigned long mem)
 				lmb_size = reg.addr64[i].size;
 			}
 
-#ifdef CONFIG_MSCHUNKS
-			if ( lmb_addrs_overlap(lmb_base,lmb_size,
-						io_base,io_size) ) {
-				/* If we really have dram here, then we don't
-			 	 * have a 630! -Peter
-			 	 */
-				have_630 = 0;
-			}
-#endif /* CONFIG_MSCHUNKS */
 			if ( lmb_add(lmb_base, lmb_size) < 0 )
 				prom_print(RELOC("Too many LMB's, discarding this one...\n"));
-#ifdef CONFIG_MSCHUNKS
-			else if ( max_addr < (lmb_base+lmb_size-1) )
-				max_addr = lmb_base+lmb_size-1;
-#endif /* CONFIG_MSCHUNKS */
 		}
 
 	}
 
-#ifdef CONFIG_MSCHUNKS
-	if ( have_630 && lmb_addrs_overlap(0,max_addr,io_base,io_size) )
-		lmb_add_io(io_base, io_size);
-#endif /* CONFIG_MSCHUNKS */
-
 	lmb_analyze();
 #ifdef DEBUG_PROM
 	prom_dump_lmb();
 #endif /* DEBUG_PROM */
 
-#ifdef CONFIG_MSCHUNKS
-	mem = prom_initialize_mschunks(mem);
-#ifdef DEBUG_PROM
-	prom_dump_mschunks_mapping();
-#endif /* DEBUG_PROM */
-#endif /* CONFIG_MSCHUNKS */
-
 	return mem;
 }
 
@@ -718,96 +638,6 @@ unsigned long prom_strtoul(const char *cp)
 	return result;
 }
 
-
-#ifdef CONFIG_MSCHUNKS
-static unsigned long
-prom_initialize_mschunks(unsigned long mem)
-{
-        unsigned long offset = reloc_offset();
-	struct lmb *_lmb  = PTRRELOC(&lmb);
-	struct msChunks *_msChunks = PTRRELOC(&msChunks);
-	unsigned long i, pchunk = 0;
-	unsigned long addr_range = _lmb->memory.size + _lmb->memory.iosize;
-	unsigned long chunk_size = _lmb->memory.lcd_size;
-
-
-	mem = msChunks_alloc(mem, addr_range / chunk_size, chunk_size);
-
-	/* First create phys -> abs mapping for memory/dram */
-	for (i=0; i < _lmb->memory.cnt ;i++) {
-		unsigned long base = _lmb->memory.region[i].base;
-		unsigned long size = _lmb->memory.region[i].size;
-		unsigned long achunk = addr_to_chunk(base);
-		unsigned long end_achunk = addr_to_chunk(base+size);
-
-		if(_lmb->memory.region[i].type != LMB_MEMORY_AREA)
-			continue;
-
-		_lmb->memory.region[i].physbase = chunk_to_addr(pchunk);
-		for (; achunk < end_achunk ;) {
-			PTRRELOC(_msChunks->abs)[pchunk++] = achunk++;
-		}
-	}
-
-#ifdef CONFIG_MSCHUNKS
-	/* Now create phys -> abs mapping for IO */
-	for (i=0; i < _lmb->memory.cnt ;i++) {
-		unsigned long base = _lmb->memory.region[i].base;
-		unsigned long size = _lmb->memory.region[i].size;
-		unsigned long achunk = addr_to_chunk(base);
-		unsigned long end_achunk = addr_to_chunk(base+size);
-
-		if(_lmb->memory.region[i].type != LMB_IO_AREA)
-			continue;
-
-		_lmb->memory.region[i].physbase = chunk_to_addr(pchunk);
-		for (; achunk < end_achunk ;) {
-			PTRRELOC(_msChunks->abs)[pchunk++] = achunk++;
-		}
-	}
-#endif /* CONFIG_MSCHUNKS */
-
-	return mem;
-}
-
-#ifdef DEBUG_PROM
-void
-prom_dump_mschunks_mapping(void)
-{
-        unsigned long offset = reloc_offset();
-	struct msChunks *_msChunks = PTRRELOC(&msChunks);
-	unsigned long chunk;
-
-        prom_print(RELOC("\nprom_dump_mschunks_mapping:\n"));
-        prom_print(RELOC("    msChunks.num_chunks         = 0x"));
-        prom_print_hex(_msChunks->num_chunks);
-	prom_print_nl();
-        prom_print(RELOC("    msChunks.chunk_size         = 0x"));
-        prom_print_hex(_msChunks->chunk_size);
-	prom_print_nl();
-        prom_print(RELOC("    msChunks.chunk_shift        = 0x"));
-        prom_print_hex(_msChunks->chunk_shift);
-	prom_print_nl();
-        prom_print(RELOC("    msChunks.chunk_mask         = 0x"));
-        prom_print_hex(_msChunks->chunk_mask);
-	prom_print_nl();
-        prom_print(RELOC("    msChunks.abs                = 0x"));
-        prom_print_hex(_msChunks->abs);
-	prom_print_nl();
-
-        prom_print(RELOC("    msChunks mapping:\n"));
-	for(chunk=0; chunk < _msChunks->num_chunks ;chunk++) {
-        	prom_print(RELOC("        phys 0x"));
-        	prom_print_hex(chunk);
-        	prom_print(RELOC(" -> abs 0x"));
-        	prom_print_hex(PTRRELOC(_msChunks->abs)[chunk]);
-		prom_print_nl();
-	}
-
-}
-#endif /* DEBUG_PROM */
-#endif /* CONFIG_MSCHUNKS */
-
 #ifdef DEBUG_PROM
 void
 prom_dump_lmb(void)
@@ -1213,26 +1043,28 @@ prom_hold_cpus(unsigned long mem)
 
 unsigned long __init
 prom_init(unsigned long r3, unsigned long r4, unsigned long pp,
-	  unsigned long r6, unsigned long r7, yaboot_debug_t *yaboot)
+	  unsigned long r6, unsigned long r7)
 {
-	int chrp = 0;
 	unsigned long mem;
-	ihandle prom_mmu, prom_op, prom_root, prom_cpu;
+	ihandle prom_root, prom_cpu;
 	phandle cpu_pkg;
 	unsigned long offset = reloc_offset();
 	long l;
 	char *p, *d;
  	unsigned long phys;
         u32 getprop_rval;
-        struct naca_struct   *_naca = RELOC(naca);
+        struct naca_struct *_naca = RELOC(naca);
 	struct paca_struct *_xPaca = PTRRELOC(&paca[0]);
 	struct prom_t *_prom = PTRRELOC(&prom);
 
 	/* Default machine type. */
 	_naca->platform = PLATFORM_PSERIES;
+
+#if 0
 	/* Reset klimit to take into account the embedded system map */
 	if (RELOC(embedded_sysmap_end))
 		RELOC(klimit) = __va(PAGE_ALIGN(RELOC(embedded_sysmap_end)));
+#endif
 
 	/* Get a handle to the prom entry point before anything else */
 	_prom->entry = pp;
@@ -1241,33 +1073,10 @@ prom_init(unsigned long r3, unsigned long r4, unsigned long pp,
 		RELOC(klimit) = PTRUNRELOC((unsigned long)_prom->bi_recs + _prom->bi_recs->data[1]);
 	}
 
-#ifdef DEBUG_YABOOT
-	call_yaboot(yaboot->dummy,offset>>32,offset&0xffffffff);
-	call_yaboot(yaboot->printf, RELOC("offset = 0x%08x%08x\n"), LONG_MSW(offset), LONG_LSW(offset));
-#endif
-
- 	/* Default */
- 	phys = KERNELBASE - offset;
-
-#ifdef DEBUG_YABOOT
-	call_yaboot(yaboot->printf, RELOC("phys = 0x%08x%08x\n"), LONG_MSW(phys), LONG_LSW(phys));
-#endif
-
-
-#ifdef DEBUG_YABOOT
-	_prom->yaboot = yaboot;
-	call_yaboot(yaboot->printf, RELOC("pp = 0x%08x%08x\n"), LONG_MSW(pp), LONG_LSW(pp));
-	call_yaboot(yaboot->printf, RELOC("prom = 0x%08x%08x\n"), LONG_MSW(_prom->entry), LONG_LSW(_prom->entry));
-#endif
-
 	/* First get a handle for the stdout device */
 	_prom->chosen = (ihandle)call_prom(RELOC("finddevice"), 1, 1,
 				       RELOC("/chosen"));
 
-#ifdef DEBUG_YABOOT
-	call_yaboot(yaboot->printf, RELOC("prom->chosen = 0x%08x%08x\n"), LONG_MSW(_prom->chosen), LONG_LSW(_prom->chosen));
-#endif
-
 	if ((long)_prom->chosen <= 0)
 		prom_exit();
 
@@ -1278,22 +1087,7 @@ prom_init(unsigned long r3, unsigned long r4, unsigned long pp,
 
         _prom->stdout = (ihandle)(unsigned long)getprop_rval;
 
-#ifdef DEBUG_YABOOT
-        if (_prom->stdout == 0) {
-	    call_yaboot(yaboot->printf, RELOC("prom->stdout = 0x%08x%08x\n"), LONG_MSW(_prom->stdout), LONG_LSW(_prom->stdout));
-        }
-
-	call_yaboot(yaboot->printf, RELOC("prom->stdout = 0x%08x%08x\n"), LONG_MSW(_prom->stdout), LONG_LSW(_prom->stdout));
-#endif
-
-#ifdef DEBUG_YABOOT
-	call_yaboot(yaboot->printf, RELOC("Location: 0x11\n"));
-#endif
-
 	mem = RELOC(klimit) - offset; 
-#ifdef DEBUG_YABOOT
-	call_yaboot(yaboot->printf, RELOC("Location: 0x11b\n"));
-#endif
 
 	/* Get the full OF pathname of the stdout device */
 	p = (char *) mem;
@@ -1311,34 +1105,6 @@ prom_init(unsigned long r3, unsigned long r4, unsigned long pp,
 	}
 	_prom->encode_phys_size = (getprop_rval==1) ? 32 : 64;
 
-#ifdef DEBUG_PROM
-	prom_print(RELOC("DRENG:    Detect OF version...\n"));
-#endif
-	/* Find the OF version */
-	prom_op = (ihandle)call_prom(RELOC("finddevice"), 1, 1, RELOC("/openprom"));
-	if (prom_op != (ihandle)-1) {
-		char model[64];
-		long sz;
-		sz = (long)call_prom(RELOC("getprop"), 4, 1, prom_op,
-				    RELOC("model"), model, 64);
-		if (sz > 0) {
-			char *c;
-			/* hack to skip the ibm chrp firmware # */
-			if ( strncmp(model,RELOC("IBM"),3) ) {
-				for (c = model; *c; c++)
-					if (*c >= '0' && *c <= '9') {
-						_prom->version = *c - '0';
-						break;
-					}
-			}
-			else
-				chrp = 1;
-		}
-	}
-	if (_prom->version >= 3)
-		prom_print(RELOC("OF Version 3 detected.\n"));
-
-
 	/* Determine which cpu is actually running right _now_ */
         if ((long)call_prom(RELOC("getprop"), 4, 1, _prom->chosen,
 			    RELOC("cpu"), &getprop_rval,
@@ -1408,35 +1174,9 @@ prom_init(unsigned long r3, unsigned long r4, unsigned long pp,
 	if (_naca->platform == PLATFORM_PSERIES)
 		prom_initialize_tce_table();
 
- 	if ((long) call_prom(RELOC("getprop"), 4, 1,
-				_prom->chosen,
-				RELOC("mmu"),
-				&getprop_rval,
-				sizeof(getprop_rval)) <= 0) {	
-		prom_print(RELOC(" no MMU found\n"));
-                prom_exit();
-	}
-
-	/* We assume the phys. address size is 3 cells */
-	RELOC(prom_mmu) = (ihandle)(unsigned long)getprop_rval;
-
-	if ((long)call_prom(RELOC("call-method"), 4, 4,
-				RELOC("translate"),
-				prom_mmu,
-				(void *)(KERNELBASE - offset),
-				(void *)1) != 0) {
-		prom_print(RELOC(" (translate failed) "));
-	} else {
-		prom_print(RELOC(" (translate ok) "));
-		phys = (unsigned long)_prom->args.rets[3];
-	}
-
-	/* If OpenFirmware version >= 3, then use quiesce call */
-	if (_prom->version >= 3) {
-		prom_print(RELOC("Calling quiesce ...\n"));
-		call_prom(RELOC("quiesce"), 0, 0);
-		phys = KERNELBASE - offset;
-	}
+	prom_print(RELOC("Calling quiesce ...\n"));
+	call_prom(RELOC("quiesce"), 0, 0);
+	phys = KERNELBASE - offset;
 
 	prom_print(RELOC("returning from prom_init\n"));
 	return phys;
@@ -1527,14 +1267,14 @@ check_display(unsigned long mem)
 					   RELOC(default_colors)[i*3+2]) != 0)
 				break;
 
-#ifdef CONFIG_FB
+#ifdef CONFIG_FRAMEBUFFER_CONSOLE
 		for (i = 0; i < LINUX_LOGO_COLORS; i++)
 			if (prom_set_color(ih, i + 32,
 					   RELOC(linux_logo_red)[i],
 					   RELOC(linux_logo_green)[i],
 					   RELOC(linux_logo_blue)[i]) != 0)
 				break;
-#endif /* CONFIG_FB */
+#endif /* CONFIG_FRAMEBUFFER_CONSOLE */
 
 		/*
 		 * If this display is the device that OF is using for stdout,
diff --git a/arch/ppc64/kernel/rtc.c b/arch/ppc64/kernel/rtc.c
index 5ace02abc1bc2315efb19fec2aab0d20ac388c98..72e65910a44236832e75cbc3d9e9119dcecda6ca 100644
--- a/arch/ppc64/kernel/rtc.c
+++ b/arch/ppc64/kernel/rtc.c
@@ -257,6 +257,7 @@ static int rtc_read_proc(char *page, char **start, off_t off,
         return len;
 }
 
+#ifdef CONFIG_PPC_ISERIES
 /*
  * Get the RTC from the virtual service processor
  * This requires flowing LpEvents to the primary partition
@@ -270,60 +271,6 @@ void iSeries_get_rtc_time(struct rtc_time *rtc_tm)
 	rtc_tm->tm_mon--;
 }
 
-
-void pSeries_get_rtc_time(struct rtc_time *rtc_tm)
-{
-        unsigned long ret[8];
-        int error;
-	int count;
-
-	/*
-	 * error -2 is clock busy, we keep retrying a few times to see
-	 * if it will come good  -- paulus
-	 */
-	count = 0;
-	do {
-		error = rtas_call(rtas_token("get-time-of-day"), 0, 8, (void *)&ret);
-	} while (error == -2 && ++count < 1000);
-
-        if (error != 0) {
-                printk(KERN_WARNING "error: reading the clock failed (%d)\n",
-		       error);
-		return;
-        }
-
-	rtc_tm->tm_sec = ret[5];
-	rtc_tm->tm_min = ret[4];
-	rtc_tm->tm_hour = ret[3];
-	rtc_tm->tm_mday = ret[2];
-	rtc_tm->tm_mon = ret[1] - 1;
-	rtc_tm->tm_year = ret[0] - 1900;
-}
-
-int pSeries_set_rtc_time(struct rtc_time *tm)
-{
-        int error;
-	int count;
-
-	/*
-	 * error -2 is clock busy, we keep retrying a few times to see
-	 * if it will come good  -- paulus
-	 */
-	count = 0;
-	do {
-	        error = rtas_call(rtas_token("set-time-of-day"), 7, 1, NULL,
-				  tm->tm_year + 1900, tm->tm_mon + 1, 
-				  tm->tm_mday, tm->tm_hour, tm->tm_min, 
-				  tm->tm_sec, 0);
-	} while (error == -2 && ++count < 1000);
-
-        if (error != 0)
-                printk(KERN_WARNING "error: setting the clock failed (%d)\n",
-		       error); 
-
-        return 0;
-}
-
 /*
  * Set the RTC in the virtual service processor
  * This requires flowing LpEvents to the primary partition
@@ -379,3 +326,59 @@ void iSeries_get_boot_time(struct rtc_time *tm)
 	tm->tm_year -= 1900;
 	tm->tm_mon  -= 1;
 }
+#endif
+
+#ifdef CONFIG_PPC_PSERIES
+void pSeries_get_rtc_time(struct rtc_time *rtc_tm)
+{
+        unsigned long ret[8];
+        int error;
+	int count;
+
+	/*
+	 * error -2 is clock busy, we keep retrying a few times to see
+	 * if it will come good  -- paulus
+	 */
+	count = 0;
+	do {
+		error = rtas_call(rtas_token("get-time-of-day"), 0, 8, (void *)&ret);
+	} while (error == -2 && ++count < 1000);
+
+        if (error != 0) {
+                printk(KERN_WARNING "error: reading the clock failed (%d)\n",
+		       error);
+		return;
+        }
+
+	rtc_tm->tm_sec = ret[5];
+	rtc_tm->tm_min = ret[4];
+	rtc_tm->tm_hour = ret[3];
+	rtc_tm->tm_mday = ret[2];
+	rtc_tm->tm_mon = ret[1] - 1;
+	rtc_tm->tm_year = ret[0] - 1900;
+}
+
+int pSeries_set_rtc_time(struct rtc_time *tm)
+{
+        int error;
+	int count;
+
+	/*
+	 * error -2 is clock busy, we keep retrying a few times to see
+	 * if it will come good  -- paulus
+	 */
+	count = 0;
+	do {
+	        error = rtas_call(rtas_token("set-time-of-day"), 7, 1, NULL,
+				  tm->tm_year + 1900, tm->tm_mon + 1, 
+				  tm->tm_mday, tm->tm_hour, tm->tm_min, 
+				  tm->tm_sec, 0);
+	} while (error == -2 && ++count < 1000);
+
+        if (error != 0)
+                printk(KERN_WARNING "error: setting the clock failed (%d)\n",
+		       error); 
+
+        return 0;
+}
+#endif
diff --git a/arch/ppc64/kernel/setup.c b/arch/ppc64/kernel/setup.c
index 38b1c3c64b3f1976bdce42d8917c012b193a6139..2472fcc916e485e294a21b2a4d351c45f451c7e1 100644
--- a/arch/ppc64/kernel/setup.c
+++ b/arch/ppc64/kernel/setup.c
@@ -153,14 +153,18 @@ void setup_system(unsigned long r3, unsigned long r4, unsigned long r5,
 	debugger_dabr_match = xmon_dabr_match;
 #endif
 
+#ifdef CONFIG_PPC_ISERIES
 	/* pSeries systems are identified in prom.c via OF. */
 	if ( itLpNaca.xLparInstalled == 1 )
 		naca->platform = PLATFORM_ISERIES_LPAR;
+#endif
 	
 	switch (naca->platform) {
+#ifdef CONFIG_PPC_ISERIES
 	case PLATFORM_ISERIES_LPAR:
 		iSeries_init_early();
 		break;
+#endif
 
 #ifdef CONFIG_PPC_PSERIES
 	case PLATFORM_PSERIES:
@@ -215,9 +219,11 @@ void setup_system(unsigned long r3, unsigned long r4, unsigned long r5,
 	mm_init_ppc64();
 
 	switch (naca->platform) {
+#ifdef CONFIG_PPC_ISERIES
 	case PLATFORM_ISERIES_LPAR:
 		iSeries_init();
 		break;
+#endif
 	default:
 		/* The following relies on the device tree being */
 		/* fully configured.                             */
diff --git a/arch/ppc64/kernel/smp.c b/arch/ppc64/kernel/smp.c
index 7db75666d20549d2d06620ec62e64a179ce0d491..0718fa5e49a649146db297ed7f90941db88e4cab 100644
--- a/arch/ppc64/kernel/smp.c
+++ b/arch/ppc64/kernel/smp.c
@@ -86,6 +86,7 @@ static inline void set_tb(unsigned int upper, unsigned int lower)
 	mttbl(lower);
 }
 
+#ifdef CONFIG_PPC_ISERIES
 void iSeries_smp_message_recv( struct pt_regs * regs )
 {
 	int cpu = smp_processor_id();
@@ -117,7 +118,6 @@ static void smp_iSeries_message_pass(int target, int msg, unsigned long data, in
 	}
 }
 
-#ifdef CONFIG_PPC_ISERIES
 static int smp_iSeries_numProcs(void)
 {
 	unsigned np, i;
@@ -132,7 +132,6 @@ static int smp_iSeries_numProcs(void)
         }
 	return np;
 }
-#endif
 
 static int smp_iSeries_probe(void)
 {
@@ -189,13 +188,12 @@ void __init smp_init_iSeries(void)
 	smp_ops->probe        = smp_iSeries_probe;
 	smp_ops->kick_cpu     = smp_iSeries_kick_cpu;
 	smp_ops->setup_cpu    = smp_iSeries_setup_cpu;
-#ifdef CONFIG_PPC_ISERIES
 #warning fix for iseries
 	naca->processorCount	= smp_iSeries_numProcs();
-#endif
 }
+#endif
 
-
+#ifdef CONFIG_PPC_PSERIES
 static void
 smp_openpic_message_pass(int target, int msg, unsigned long data, int wait)
 {
@@ -257,6 +255,7 @@ smp_kick_cpu(int nr)
 	 */
 	paca[nr].xProcStart = 1;
 }
+#endif
 
 static void __init smp_space_timers(unsigned int max_cpus)
 {
@@ -273,6 +272,7 @@ static void __init smp_space_timers(unsigned int max_cpus)
 	}
 }
 
+#ifdef CONFIG_PPC_PSERIES
 static void __devinit pSeries_setup_cpu(int cpu)
 {
 	if (OpenPIC_Addr) {
@@ -361,6 +361,7 @@ void __init smp_init_pSeries(void)
 	smp_ops->kick_cpu = smp_kick_cpu;
 	smp_ops->setup_cpu = pSeries_setup_cpu;
 }
+#endif
 
 void smp_local_timer_interrupt(struct pt_regs * regs)
 {
diff --git a/arch/ppc64/kernel/sys_ppc32.c b/arch/ppc64/kernel/sys_ppc32.c
index 57c86dc1f4e36bb615b2c52a1d684f65b8b463e5..55a7b6e2edfb5ed49c13add6a1fd728de0dedf34 100644
--- a/arch/ppc64/kernel/sys_ppc32.c
+++ b/arch/ppc64/kernel/sys_ppc32.c
@@ -300,16 +300,16 @@ asmlinkage long sys32_fcntl(unsigned int fd, unsigned int cmd, unsigned long arg
 struct ncp_mount_data32_v3 {
         int version;
         unsigned int ncp_fd;
-        __kernel_uid_t32 mounted_uid;
-        __kernel_pid_t32 wdog_pid;
+        compat_uid_t mounted_uid;
+        compat_pid_t wdog_pid;
         unsigned char mounted_vol[NCP_VOLNAME_LEN + 1];
         unsigned int time_out;
         unsigned int retry_count;
         unsigned int flags;
-        __kernel_uid_t32 uid;
-        __kernel_gid_t32 gid;
-        __kernel_mode_t32 file_mode;
-        __kernel_mode_t32 dir_mode;
+        compat_uid_t uid;
+        compat_gid_t gid;
+        compat_mode_t file_mode;
+        compat_mode_t dir_mode;
 };
 
 struct ncp_mount_data32_v4 {
@@ -380,11 +380,11 @@ static void *do_ncp_super_data_conv(void *raw_data)
 
 struct smb_mount_data32 {
         int version;
-        __kernel_uid_t32 mounted_uid;
-        __kernel_uid_t32 uid;
-        __kernel_gid_t32 gid;
-        __kernel_mode_t32 file_mode;
-        __kernel_mode_t32 dir_mode;
+        compat_uid_t mounted_uid;
+        compat_uid_t uid;
+        compat_gid_t gid;
+        compat_mode_t file_mode;
+        compat_mode_t dir_mode;
 };
 
 static void *do_smb_super_data_conv(void *raw_data)
@@ -802,10 +802,13 @@ asmlinkage int ppc32_select(u32 n, u32* inp, u32* outp, u32* exp, u32 tvp_x)
 	return sys32_select((int)n, inp, outp, exp, tvp_x);
 }
 
-static int cp_new_stat32(struct kstat *stat, struct stat32 *statbuf)
+int cp_compat_stat(struct kstat *stat, struct compat_stat *statbuf)
 {
 	int err;
 
+	if (stat->size > MAX_NON_LFS)
+		return -EOVERFLOW;
+
 	err  = put_user(stat->dev, &statbuf->st_dev);
 	err |= put_user(stat->ino, &statbuf->st_ino);
 	err |= put_user(stat->mode, &statbuf->st_mode);
@@ -813,8 +816,6 @@ static int cp_new_stat32(struct kstat *stat, struct stat32 *statbuf)
 	err |= put_user(stat->uid, &statbuf->st_uid);
 	err |= put_user(stat->gid, &statbuf->st_gid);
 	err |= put_user(stat->rdev, &statbuf->st_rdev);
-	if (stat->size > MAX_NON_LFS)
-		return -EOVERFLOW;
 	err |= put_user(stat->size, &statbuf->st_size);
 	err |= put_user(stat->atime.tv_sec, &statbuf->st_atime);
 	err |= put_user(0, &statbuf->__unused1);
@@ -830,39 +831,6 @@ static int cp_new_stat32(struct kstat *stat, struct stat32 *statbuf)
 	return err;
 }
 
-asmlinkage long sys32_newstat(char* filename, struct stat32* statbuf)
-{
-	struct kstat stat;
-	int error = vfs_stat(filename, &stat);
-	
-	if (!error)
-		error = cp_new_stat32(&stat, statbuf);
-
-	return error;
-}
-
-asmlinkage long sys32_newlstat(char * filename, struct stat32 *statbuf)
-{
-	struct kstat stat;
-	int error = vfs_lstat(filename, &stat);
-	
-	if (!error)
-		error = cp_new_stat32(&stat, statbuf);
-
-	return error;
-}
-
-asmlinkage long sys32_newfstat(unsigned int fd, struct stat32 *statbuf)
-{
-	struct kstat stat;
-	int error = vfs_fstat(fd, &stat);
-	
-	if (!error)
-		error = cp_new_stat32(&stat, statbuf);
-
-	return error;
-}
-
 static inline int put_statfs (struct statfs32 *ubuf, struct statfs *kbuf)
 {
 	int err;
@@ -1492,27 +1460,27 @@ struct nfsctl_client32 {
 struct nfsctl_export32 {
 	s8			ex32_client[NFSCLNT_IDMAX+1];
 	s8			ex32_path[NFS_MAXPATHLEN+1];
-	__kernel_dev_t32	ex32_dev;
-	__kernel_ino_t32	ex32_ino;
+	compat_dev_t	ex32_dev;
+	compat_ino_t	ex32_ino;
 	s32			ex32_flags;
-	__kernel_uid_t32	ex32_anon_uid;
-	__kernel_gid_t32	ex32_anon_gid;
+	compat_uid_t	ex32_anon_uid;
+	compat_gid_t	ex32_anon_gid;
 };
 
 struct nfsctl_uidmap32 {
 	u32			ug32_ident;   /* char * */
-	__kernel_uid_t32	ug32_uidbase;
+	compat_uid_t	ug32_uidbase;
 	s32			ug32_uidlen;
 	u32			ug32_udimap;  /* uid_t * */
-	__kernel_uid_t32	ug32_gidbase;
+	compat_uid_t	ug32_gidbase;
 	s32			ug32_gidlen;
 	u32			ug32_gdimap;  /* gid_t * */
 };
 
 struct nfsctl_fhparm32 {
 	struct sockaddr		gf32_addr;
-	__kernel_dev_t32	gf32_dev;
-	__kernel_ino_t32	gf32_ino;
+	compat_dev_t	gf32_dev;
+	compat_ino_t	gf32_ino;
 	s32			gf32_version;
 };
 
@@ -1645,7 +1613,7 @@ static int nfs_uud32_trans(struct nfsctl_arg *karg, struct nfsctl_arg32 *arg32)
 		return -ENOMEM;
 	for(i = 0; i < karg->ca_umap.ug_uidlen; i++)
 		err |= __get_user(karg->ca_umap.ug_udimap[i],
-			      &(((__kernel_uid_t32 *)A(uaddr))[i]));
+			      &(((compat_uid_t *)A(uaddr))[i]));
 	err |= __get_user(karg->ca_umap.ug_gidbase,
 		      &arg32->ca32_umap.ug32_gidbase);
 	err |= __get_user(karg->ca_umap.ug_uidlen,
@@ -1659,7 +1627,7 @@ static int nfs_uud32_trans(struct nfsctl_arg *karg, struct nfsctl_arg32 *arg32)
 		return -ENOMEM;
 	for(i = 0; i < karg->ca_umap.ug_gidlen; i++)
 		err |= __get_user(karg->ca_umap.ug_gdimap[i],
-			      &(((__kernel_gid_t32 *)A(uaddr))[i]));
+			      &(((compat_gid_t *)A(uaddr))[i]));
 
 	return err;
 }
@@ -2076,37 +2044,6 @@ asmlinkage long sys32_settimeofday(struct compat_timeval *tv, struct timezone *t
 }
 
 
-struct tms32 {
-	__kernel_clock_t32 tms_utime;
-	__kernel_clock_t32 tms_stime;
-	__kernel_clock_t32 tms_cutime;
-	__kernel_clock_t32 tms_cstime;
-};
-                                
-extern asmlinkage long sys_times(struct tms * tbuf);
-
-asmlinkage long sys32_times(struct tms32 *tbuf)
-{
-	struct tms t;
-	long ret;
-	mm_segment_t old_fs = get_fs ();
-	int err;
-	
-	set_fs (KERNEL_DS);
-	ret = sys_times(tbuf ? &t : NULL);
-	set_fs (old_fs);
-	if (tbuf) {
-		err = put_user (t.tms_utime, &tbuf->tms_utime);
-		err |= __put_user (t.tms_stime, &tbuf->tms_stime);
-		err |= __put_user (t.tms_cutime, &tbuf->tms_cutime);
-		err |= __put_user (t.tms_cstime, &tbuf->tms_cstime);
-		if (err)
-			ret = -EFAULT;
-	}
-	
-	return ret;
-}
-
 struct msgbuf32 { s32 mtype; char mtext[1]; };
 
 struct semid_ds32 {
@@ -2159,8 +2096,8 @@ struct msqid64_ds32 {
 	unsigned int msg_cbytes;
 	unsigned int msg_qnum;
 	unsigned int msg_qbytes;
-	__kernel_pid_t32 msg_lspid;
-	__kernel_pid_t32 msg_lrpid;
+	compat_pid_t msg_lspid;
+	compat_pid_t msg_lrpid;
 	unsigned int __unused4;
 	unsigned int __unused5;
 };
@@ -2189,8 +2126,8 @@ struct shmid64_ds32 {
 	compat_time_t shm_ctime;
 	unsigned int __unused4;
 	compat_size_t shm_segsz;
-	__kernel_pid_t32 shm_cpid;
-	__kernel_pid_t32 shm_lpid;
+	compat_pid_t shm_cpid;
+	compat_pid_t shm_lpid;
 	unsigned int shm_nattch;
 	unsigned int __unused5;
 	unsigned int __unused6;
@@ -2712,7 +2649,7 @@ extern asmlinkage ssize_t sys_sendfile(int out_fd, int in_fd, off_t* offset, siz
  * proper conversion (sign extension) between the register representation of a signed int (msr in 32-bit mode)
  * and the register representation of a signed int (msr in 64-bit mode) is performed.
  */
-asmlinkage long sys32_sendfile(u32 out_fd, u32 in_fd, __kernel_off_t32* offset, u32 count)
+asmlinkage long sys32_sendfile(u32 out_fd, u32 in_fd, compat_off_t* offset, u32 count)
 {
 	mm_segment_t old_fs = get_fs();
 	int ret;
@@ -4296,7 +4233,7 @@ asmlinkage long sys32_time(compat_time_t* tloc)
 extern asmlinkage int sys_sched_setaffinity(pid_t pid, unsigned int len,
 					    unsigned long *user_mask_ptr);
 
-asmlinkage int sys32_sched_setaffinity(__kernel_pid_t32 pid, unsigned int len,
+asmlinkage int sys32_sched_setaffinity(compat_pid_t pid, unsigned int len,
 				       u32 *user_mask_ptr)
 {
 	unsigned long kernel_mask;
@@ -4320,7 +4257,7 @@ asmlinkage int sys32_sched_setaffinity(__kernel_pid_t32 pid, unsigned int len,
 extern asmlinkage int sys_sched_getaffinity(pid_t pid, unsigned int len,
 					    unsigned long *user_mask_ptr);
 
-asmlinkage int sys32_sched_getaffinity(__kernel_pid_t32 pid, unsigned int len,
+asmlinkage int sys32_sched_getaffinity(compat_pid_t pid, unsigned int len,
 				       u32 *user_mask_ptr)
 {
 	unsigned long kernel_mask;
diff --git a/arch/ppc64/kernel/time.c b/arch/ppc64/kernel/time.c
index fa5816bc5bba463e46d44fd59dfbfe812f9e782e..4ab5eb9916fd28863e6e5582d3a80baeaf0793a6 100644
--- a/arch/ppc64/kernel/time.c
+++ b/arch/ppc64/kernel/time.c
@@ -301,9 +301,11 @@ int timer_interrupt(struct pt_regs * regs)
         	next_dec = lpaca->default_decr;
 	set_dec(next_dec);
 
+#ifdef CONFIG_PPC_ISERIES
 	lpq = lpaca->lpQueuePtr;
 	if (lpq && ItLpQueue_isLpIntPending(lpq))
 		lpEvent_count += ItLpQueue_process(lpq, regs); 
+#endif
 
 	irq_exit();
 
@@ -458,9 +460,11 @@ void __init time_init(void)
 
 	ppc_md.calibrate_decr();
 
-	if ( ! piranha_simulator ) {
+#ifdef CONFIG_PPC_ISERIES
+	if (!piranha_simulator)
+#endif
 		ppc_md.get_boot_time(&tm);
-	}
+
 	write_lock_irqsave(&xtime_lock, flags);
 	xtime.tv_sec = mktime(tm.tm_year + 1900, tm.tm_mon + 1, tm.tm_mday,
 			      tm.tm_hour, tm.tm_min, tm.tm_sec);
diff --git a/arch/ppc64/kernel/xics.c b/arch/ppc64/kernel/xics.c
index 477580671eb57f02d5447fb2a8b62b9edb27d3ae..7110dd65ef78fa234149d259042b27a2df9c32c4 100644
--- a/arch/ppc64/kernel/xics.c
+++ b/arch/ppc64/kernel/xics.c
@@ -22,7 +22,7 @@
 #include <asm/naca.h>
 #include <asm/rtas.h>
 #include "i8259.h"
-#include "xics.h"
+#include <asm/xics.h>
 #include <asm/ppcdebug.h>
 #include <asm/machdep.h>
 
@@ -430,15 +430,6 @@ xics_init_IRQ( void )
 	ppc64_boot_msg(0x21, "XICS Done");
 }
 
-void xics_isa_init(void)
-{
-	return;
-	if (request_irq(xics_irq_8259_cascade + XICS_IRQ_OFFSET, no_action,
-			0, "8259 cascade", 0))
-		printk(KERN_ERR "xics_init_IRQ: couldn't get 8259 cascade\n");
-	i8259_init();
-}
-
 void xics_set_affinity(unsigned int virq, unsigned long cpumask)
 {
         irq_desc_t *desc = irq_desc + virq;
diff --git a/arch/ppc64/lib/Makefile b/arch/ppc64/lib/Makefile
index ee78c4aba382329b4b879d85e369f8bb90f58638..441c4f989386ed352525e0b65231264939b839f3 100644
--- a/arch/ppc64/lib/Makefile
+++ b/arch/ppc64/lib/Makefile
@@ -2,7 +2,9 @@
 # Makefile for ppc64-specific library files..
 #
 
-export-objs     := dec_and_lock.o
+L_TARGET = lib.a
 
-obj-y           := checksum.o dec_and_lock.o string.o strcase.o copypage.o \
-		   memcpy.o copyuser.o
+export-objs := dec_and_lock.o
+
+obj-y := checksum.o dec_and_lock.o string.o strcase.o
+obj-y += copypage.o memcpy.o copyuser.o
diff --git a/arch/ppc64/mm/Makefile b/arch/ppc64/mm/Makefile
index 1c37b9024c0a0b9f1fb084c82eb60f250556ffa0..19679827f1e0e9db5ba8090effd6806f7fd26054 100644
--- a/arch/ppc64/mm/Makefile
+++ b/arch/ppc64/mm/Makefile
@@ -2,7 +2,7 @@
 # Makefile for the linux ppc-specific parts of the memory manager.
 #
 
-EXTRA_CFLAGS = -mno-minimal-toc
+EXTRA_CFLAGS += -mno-minimal-toc
 
-obj-y           := fault.o init.o extable.o imalloc.o
+obj-y := fault.o init.o extable.o imalloc.o
 obj-$(CONFIG_DISCONTIGMEM) += numa.o
diff --git a/arch/ppc64/oprofile/Makefile b/arch/ppc64/oprofile/Makefile
index 191180628bca2857926b28e74f2344c23962e0b4..b3a71ef1c80c6834f15be7c3706cc102fc316850 100644
--- a/arch/ppc64/oprofile/Makefile
+++ b/arch/ppc64/oprofile/Makefile
@@ -1,8 +1,8 @@
 obj-$(CONFIG_OPROFILE) += oprofile.o
 
-DRIVER_OBJS = $(addprefix ../../../drivers/oprofile/, \
+DRIVER_OBJS := $(addprefix ../../../drivers/oprofile/, \
 		oprof.o cpu_buffer.o buffer_sync.o \
 		event_buffer.o oprofile_files.o \
 		oprofilefs.o oprofile_stats.o )
 
-oprofile-y				:= $(DRIVER_OBJS) init.o timer_int.o
+oprofile-y := $(DRIVER_OBJS) init.o timer_int.o
diff --git a/arch/ppc64/xmon/Makefile b/arch/ppc64/xmon/Makefile
index bb90495aaf9bb482d53dc1ca6158c69a63a35f80..fb21a7088d3ec12087cf2b4fca0317066bd2de96 100644
--- a/arch/ppc64/xmon/Makefile
+++ b/arch/ppc64/xmon/Makefile
@@ -1,5 +1,5 @@
 # Makefile for xmon
 
-EXTRA_CFLAGS = -mno-minimal-toc
+EXTRA_CFLAGS += -mno-minimal-toc
 
-obj-y       := start.o xmon.o ppc-dis.o ppc-opc.o subr_prf.o setjmp.o
+obj-y := start.o xmon.o ppc-dis.o ppc-opc.o subr_prf.o setjmp.o
diff --git a/arch/ppc64/xmon/start.c b/arch/ppc64/xmon/start.c
index d715be66953de837afc46d61f68b9fa07fb35d52..12df10a98a5fb0d711ead8ae506ed7d8c5bb9e4f 100644
--- a/arch/ppc64/xmon/start.c
+++ b/arch/ppc64/xmon/start.c
@@ -14,29 +14,13 @@
 #include <asm/page.h>
 #include <asm/prom.h>
 #include <asm/processor.h>
-
-/* Transition to udbg isn't quite done yet...but very close. */
-#define USE_UDBG
-#ifdef USE_UDBG
 #include <asm/udbg.h>
-#endif
 
-#ifndef USE_UDBG
-static volatile unsigned char *sccc, *sccd;
-#endif
-unsigned long TXRDY, RXRDY;
 extern void xmon_printf(const char *fmt, ...);
 static int xmon_expect(const char *str, unsigned int timeout);
 
-#ifndef USE_UDBG
-static int console = 0;
-#endif
-static int via_modem = 0;
-/* static int xmon_use_sccb = 0;  --Unused */
-
 #define TB_SPEED	25000000
 
-extern void *comport1;
 static inline unsigned int readtb(void)
 {
 	unsigned int ret;
@@ -45,16 +29,10 @@ static inline unsigned int readtb(void)
 	return ret;
 }
 
-#ifndef USE_UDBG
-void buf_access(void)
+static void sysrq_handle_xmon(int key, struct pt_regs *pt_regs,
+			      struct tty_struct *tty) 
 {
-	sccd[3] &= ~0x80;	/* reset DLAB */
-}
-#endif
-
-static void sysrq_handle_xmon(int key, struct pt_regs *pt_regs, struct tty_struct *tty) 
-{
-  xmon(pt_regs);
+	xmon(pt_regs);
 }
 static struct sysrq_key_op sysrq_xmon_op = 
 {
@@ -68,50 +46,12 @@ xmon_map_scc(void)
 {
 	/* This maybe isn't the best place to register sysrq 'x' */
 	__sysrq_put_key_op('x', &sysrq_xmon_op);
-#ifndef USE_UDBG
-	/* should already be mapped by the kernel boot */
-	sccd = (volatile unsigned char *) (((unsigned long)comport1));
-	sccc = (volatile unsigned char *) (((unsigned long)comport1)+5);
-	TXRDY = 0x20;
-	RXRDY = 1;
-#endif
 }
 
-static int scc_initialized = 0;
-
-void xmon_init_scc(void);
-extern void pmu_poll(void);
-
 int
 xmon_write(void *handle, void *ptr, int nb)
 {
-#ifdef USE_UDBG
 	return udbg_write(ptr, nb);
-#else
-	char *p = ptr;
-	int i, c, ct;
-
-	if (!scc_initialized)
-		xmon_init_scc();
-	ct = 0;
-	for (i = 0; i < nb; ++i) {
-		while ((*sccc & TXRDY) == 0) {
-		}
-		c = p[i];
-		if (c == '\n' && !ct) {
-			c = '\r';
-			ct = 1;
-			--i;
-		} else {
-			if (console)
-				printk("%c", c);
-			ct = 0;
-		}
-		buf_access();
-		*sccd = c;
-	}
-	return i;
-#endif
 }
 
 int xmon_wants_key;
@@ -119,68 +59,15 @@ int xmon_wants_key;
 int
 xmon_read(void *handle, void *ptr, int nb)
 {
-#ifdef USE_UDBG
 	return udbg_read(ptr, nb);
-#else
-	char *p = ptr;
-	int i, c;
-
-	if (!scc_initialized)
-		xmon_init_scc();
-	for (i = 0; i < nb; ++i) {
-		do {
-			while ((*sccc & RXRDY) == 0)
-				;
-			buf_access();
-			c = *sccd;
-		} while (c == 0x11 || c == 0x13);
-		*p++ = c;
-	}
-	return i;
-#endif
 }
 
 int
 xmon_read_poll(void)
 {
-#ifdef USE_UDBG
 	return udbg_getc_poll();
-#else
-	if ((*sccc & RXRDY) == 0) {
-		return -1;
-	}
-	buf_access();
-	return *sccd;
-#endif
 }
  
-void
-xmon_init_scc()
-{
-#ifndef USE_UDBG
-	sccd[3] = 0x83; eieio();	/* LCR = 8N1 + DLAB */
-	sccd[0] = 12; eieio();		/* DLL = 9600 baud */
-	sccd[1] = 0; eieio();
-	sccd[2] = 0; eieio();		/* FCR = 0 */
-	sccd[3] = 3; eieio();		/* LCR = 8N1 */
-	sccd[1] = 0; eieio();		/* IER = 0 */
-#endif
-
-	scc_initialized = 1;
-	if (via_modem) {
-		for (;;) {
-			xmon_write(0, "ATE1V1\r", 7);
-			if (xmon_expect("OK", 5)) {
-				xmon_write(0, "ATA\r", 4);
-				if (xmon_expect("CONNECT", 40))
-					break;
-			}
-			xmon_write(0, "+++", 3);
-			xmon_expect("OK", 3);
-		}
-	}
-}
-
 void *xmon_stdin;
 void *xmon_stdout;
 void *xmon_stderr;
diff --git a/include/asm-ppc64/compat.h b/include/asm-ppc64/compat.h
index a397383110cda8a9c6abac068b9024d1982d925a..84513bd7d86e00cbe67a0cb06d47ae3f0fc7834c 100644
--- a/include/asm-ppc64/compat.h
+++ b/include/asm-ppc64/compat.h
@@ -5,9 +5,20 @@
  */
 #include <linux/types.h>
 
+#define COMPAT_USER_HZ	100
+
 typedef u32		compat_size_t;
 typedef s32		compat_ssize_t;
 typedef s32		compat_time_t;
+typedef s32		compat_clock_t;
+typedef s32		compat_pid_t;
+typedef u32		compat_uid_t;
+typedef u32		compat_gid_t;
+typedef u32		compat_mode_t;
+typedef u32		compat_ino_t;
+typedef u32		compat_dev_t;
+typedef s32		compat_off_t;
+typedef s16		compat_nlink_t;
 
 struct compat_timespec {
 	compat_time_t	tv_sec;
@@ -19,4 +30,24 @@ struct compat_timeval {
 	s32		tv_usec;
 };
 
+struct compat_stat {
+	compat_dev_t	st_dev;
+	compat_ino_t	st_ino;
+	compat_mode_t	st_mode;
+	compat_nlink_t	st_nlink;	
+	compat_uid_t	st_uid;
+	compat_gid_t	st_gid;
+	compat_dev_t	st_rdev;
+	compat_off_t	st_size;
+	compat_off_t	st_blksize;
+	compat_off_t	st_blocks;
+	compat_time_t	st_atime;
+	u32		__unused1;
+	compat_time_t	st_mtime;
+	u32		__unused2;
+	compat_time_t	st_ctime;
+	u32		__unused3;
+	u32		__unused4[2];
+};
+
 #endif /* _ASM_PPC64_COMPAT_H */
diff --git a/include/asm-ppc64/page.h b/include/asm-ppc64/page.h
index 7eb130cd1ab8457d962486b99ef76d9d0797d3aa..feabff500b6cd967d85dfa4dcd58280fdabb70e5 100644
--- a/include/asm-ppc64/page.h
+++ b/include/asm-ppc64/page.h
@@ -48,7 +48,7 @@ static __inline__ void clear_page(void *addr)
 	lines = naca->dCacheL1LinesPerPage;
 
 	__asm__ __volatile__(
-"  	mtctr  	%1\n\
+	"mtctr  	%1	# clear_page\n\
 1:      dcbz  	0,%0\n\
 	add	%0,%0,%3\n\
 	bdnz+	1b"
diff --git a/include/asm-ppc64/pgtable.h b/include/asm-ppc64/pgtable.h
index 80d3977cf73f791a20f46b493cc35015fc48e1f6..3b13d9cd1fd80a2b0445c0dcba21e7b747d31374 100644
--- a/include/asm-ppc64/pgtable.h
+++ b/include/asm-ppc64/pgtable.h
@@ -267,8 +267,8 @@ static inline unsigned long pte_update( pte_t *p, unsigned long clr,
 {
 	unsigned long old, tmp;
 
-	__asm__ __volatile__("\n\
-1:	ldarx	%0,0,%3	\n\
+	__asm__ __volatile__(
+	"1:	ldarx	%0,0,%3		# pte_update\n\
 	andc	%1,%0,%4 \n\
 	or	%1,%1,%5 \n\
 	stdcx.	%1,0,%3 \n\
diff --git a/include/asm-ppc64/ppc32.h b/include/asm-ppc64/ppc32.h
index 1b39c490820528da916cdbdacf2e9a4308609205..5b601337ffaaeaa8c069d38eb439046ade70da03 100644
--- a/include/asm-ppc64/ppc32.h
+++ b/include/asm-ppc64/ppc32.h
@@ -44,19 +44,9 @@ typedef __kernel_fsid_t __kernel_fsid_t32;
 })
 
 /* These are here to support 32-bit syscalls on a 64-bit kernel. */
-typedef int		__kernel_ptrdiff_t32;
-typedef int		__kernel_clock_t32;
-typedef int		__kernel_pid_t32;
 typedef unsigned short	__kernel_ipc_pid_t32;
-typedef unsigned int	__kernel_uid_t32;
-typedef unsigned int	__kernel_gid_t32;
-typedef unsigned int	__kernel_dev_t32;
-typedef unsigned int	__kernel_ino_t32;
-typedef unsigned int	__kernel_mode_t32;
 typedef unsigned int	__kernel_umode_t32;
-typedef short		__kernel_nlink_t32;
 typedef int		__kernel_daddr_t32;
-typedef int		__kernel_off_t32;
 typedef unsigned int	__kernel_caddr_t32;
 typedef int		__kernel_loff_t32;
 
@@ -88,8 +78,8 @@ typedef struct siginfo32 {
 
 		/* kill() */
 		struct {
-			__kernel_pid_t32 _pid;		/* sender's pid */
-			__kernel_uid_t32 _uid;		/* sender's uid */
+			compat_pid_t _pid;		/* sender's pid */
+			compat_uid_t _uid;		/* sender's uid */
 		} _kill;
 
 		/* POSIX.1b timers */
@@ -100,18 +90,18 @@ typedef struct siginfo32 {
 
 		/* POSIX.1b signals */
 		struct {
-			__kernel_pid_t32 _pid;		/* sender's pid */
-			__kernel_uid_t32 _uid;		/* sender's uid */
+			compat_pid_t _pid;		/* sender's pid */
+			compat_uid_t _uid;		/* sender's uid */
 			sigval_t32 _sigval;
 		} _rt;
 
 		/* SIGCHLD */
 		struct {
-			__kernel_pid_t32 _pid;		/* which child */
-			__kernel_uid_t32 _uid;		/* sender's uid */
+			compat_pid_t _pid;		/* which child */
+			compat_uid_t _uid;		/* sender's uid */
 			int _status;			/* exit code */
-			__kernel_clock_t32 _utime;
-			__kernel_clock_t32 _stime;
+			compat_clock_t _utime;
+			compat_clock_t _stime;
 		} _sigchld;
 
 		/* SIGILL, SIGFPE, SIGSEGV, SIGBUS, SIGEMT */
@@ -164,32 +154,12 @@ typedef struct sigaltstack_32 {
 struct flock32 {
 	short l_type;
 	short l_whence;
-	__kernel_off_t32 l_start;
-	__kernel_off_t32 l_len;
-	__kernel_pid_t32 l_pid;
+	compat_off_t l_start;
+	compat_off_t l_len;
+	compat_pid_t l_pid;
 	short __unused;
 };
 
-struct stat32 {
-	__kernel_dev_t32   st_dev; /* 2 */
-	__kernel_ino_t32   st_ino; /* 4  */
-	__kernel_mode_t32  st_mode; /* 2  */
-	short   	   st_nlink; /* 2 */
-	__kernel_uid_t32   st_uid; /* 2 */
-	__kernel_gid_t32   st_gid; /* 2 */
-	__kernel_dev_t32   st_rdev; /* 2 */
-	__kernel_off_t32   st_size; /* 4 */
-	__kernel_off_t32   st_blksize; /* 4 */
-	__kernel_off_t32   st_blocks; /* 4 */
-	compat_time_t    st_atime; /* 4 */
-	unsigned int       __unused1; /* 4 */
-	compat_time_t    st_mtime; /* 4 */
-	unsigned int       __unused2; /* 4 */
-	compat_time_t    st_ctime; /* 4 */
-	unsigned int       __unused3; /* 4 */
-	unsigned int  __unused4[2]; /* 2*4 */
-};
-
 struct sigcontext32 {
 	unsigned int	_unused[4];
 	int		signal;
diff --git a/include/asm-ppc64/prom.h b/include/asm-ppc64/prom.h
index dbe1889b31845e2c494f25c0a070c97994b24f58..1af24acffb7ee6959f2aecd3864d383e0ecc6bd6 100644
--- a/include/asm-ppc64/prom.h
+++ b/include/asm-ppc64/prom.h
@@ -155,12 +155,6 @@ struct prom_args {
         prom_arg_t *rets;     /* Pointer to return values in args[16]. */
 };
 
-typedef struct {
-	u32  printf;	/* void (*printf)(char *, ...); */
-	u32  memdump;	/* void (*memdump)(unsigned char *, unsigned long); */
-	u32  dummy;		/* void (*dummy)(void); */
-} yaboot_debug_t;
-
 struct prom_t {
 	unsigned long entry;
 	ihandle chosen;
@@ -171,9 +165,6 @@ struct prom_t {
 	unsigned long version;
 	unsigned long encode_phys_size;
 	struct bi_record *bi_recs;
-#ifdef DEBUG_YABOOT
-	yaboot_debug_t *yaboot;
-#endif
 };
 
 extern struct prom_t prom;
@@ -183,7 +174,7 @@ extern int boot_cpuid;
 /* Prototypes */
 extern void abort(void);
 extern unsigned long prom_init(unsigned long, unsigned long, unsigned long,
-    unsigned long, unsigned long, yaboot_debug_t *);
+    unsigned long, unsigned long);
 extern void prom_print(const char *msg);
 extern void relocate_nodes(void);
 extern void finish_device_tree(void);
diff --git a/arch/ppc64/kernel/xics.h b/include/asm-ppc64/xics.h
similarity index 61%
rename from arch/ppc64/kernel/xics.h
rename to include/asm-ppc64/xics.h
index 7db4efb6b8087f0421f2573ade0a742c921b30d7..8db0fc4445eeafad4030c92882a45074344d8b57 100644
--- a/arch/ppc64/kernel/xics.h
+++ b/include/asm-ppc64/xics.h
@@ -1,5 +1,5 @@
 /* 
- * arch/ppc/kernel/xics.h
+ * arch/ppc64/kernel/xics.h
  *
  * Copyright 2000 IBM Corporation.
  *
@@ -9,14 +9,10 @@
  *  2 of the License, or (at your option) any later version.
  */
 
-#ifndef _PPC_KERNEL_XICS_H
-#define _PPC_KERNEL_XICS_H
-
-extern struct hw_interrupt_type xics_pic;
-extern struct hw_interrupt_type xics_8259_pic;
+#ifndef _PPC64_KERNEL_XICS_H
+#define _PPC64_KERNEL_XICS_H
 
 void xics_init_IRQ(void);
 int xics_get_irq(struct pt_regs *);
-void xics_isa_init(void);
 
-#endif /* _PPC_KERNEL_XICS_H */
+#endif /* _PPC64_KERNEL_XICS_H */