diff --git a/README b/README
index 86c1304f91b1567ce26d67df13580743099a849e..522471cf781a55ed85e41e23832e5dfa6edf1aa4 100644
--- a/README
+++ b/README
@@ -3021,8 +3021,7 @@ Some configuration options can be set using Environment Variables:
 		  Useful on scripts which control the retry operation
 		  themselves.
 
-  npe_ucode	- see CONFIG_IXP4XX_NPE_EXT_UCOD
-		  if set load address for the NPE microcode
+  npe_ucode	- set load address for the NPE microcode
 
   tftpsrcport	- If this is set, the value is used for TFTP's
 		  UDP source port.
diff --git a/cpu/ixp/Makefile b/cpu/ixp/Makefile
index e1fb327bb4b938772dd85dec82173015d70098b2..7e98d870261918f866c2e57306fc8f95689e1d8b 100644
--- a/cpu/ixp/Makefile
+++ b/cpu/ixp/Makefile
@@ -26,10 +26,14 @@ include $(TOPDIR)/config.mk
 LIB	= $(obj)lib$(CPU).a
 
 START	= start.o
-COBJS	= serial.o interrupts.o cpu.o timer.o pci.o
-
-SRCS	:= $(START:.o=.S) $(SOBJS:.o=.S) $(COBJS:.o=.c)
-OBJS	:= $(addprefix $(obj),$(SOBJS) $(COBJS))
+COBJS-y	+= cpu.o
+COBJS-y	+= interrupts.o
+ifndef CONFIG_USE_IRQ
+COBJS-y	+= timer.o
+endif
+
+SRCS	:= $(START:.o=.S) $(SOBJS-y:.o=.S) $(COBJS-y:.o=.c)
+OBJS	:= $(addprefix $(obj),$(SOBJS-y) $(COBJS-y))
 START	:= $(addprefix $(obj),$(START))
 
 all:	$(obj).depend $(START) $(LIB)
diff --git a/cpu/ixp/cpu.c b/cpu/ixp/cpu.c
index 27872fb78473bb63fde2b21cad04e889a44b6502..fd545b5a254c16bc03f126e0aa6fbc75534096de 100644
--- a/cpu/ixp/cpu.c
+++ b/cpu/ixp/cpu.c
@@ -86,9 +86,6 @@ int cpu_init (void)
 	FIQ_STACK_START = IRQ_STACK_START - CONFIG_STACKSIZE_IRQ;
 #endif
 
-#if defined(CONFIG_CMD_PCI) || defined (CONFIG_PCI)
-	pci_init();
-#endif
 	return 0;
 }
 
diff --git a/cpu/ixp/npe/IxNpeDlImageMgr.c b/cpu/ixp/npe/IxNpeDlImageMgr.c
index ccc0da7ebde86838b17bdd8a60da138ea222e0e5..9bcdc9c0d885ea103fbfa7be96b7dc95eedfd51e 100644
--- a/cpu/ixp/npe/IxNpeDlImageMgr.c
+++ b/cpu/ixp/npe/IxNpeDlImageMgr.c
@@ -133,20 +133,14 @@ typedef struct
  */
 static IxNpeDlImageMgrStats ixNpeDlImageMgrStats;
 
-/* default image */
-#ifdef CONFIG_IXP4XX_NPE_EXT_UCODE_BASE
-static UINT32 *IxNpeMicroCodeImageLibrary = (UINT32 *)CONFIG_IXP4XX_NPE_EXT_UCODE_BASE;
-#else
-static UINT32 *IxNpeMicroCodeImageLibrary = (UINT32 *)IxNpeMicrocode_array;
-#endif
-
 static UINT32* getIxNpeMicroCodeImageLibrary(void)
 {
 	char *s;
+
 	if ((s = getenv("npe_ucode")) != NULL)
 		return (UINT32*) simple_strtoul(s, NULL, 16);
 	else
-		return IxNpeMicroCodeImageLibrary;
+		return NULL;
 }
 
 /*
@@ -422,7 +416,7 @@ ixNpeDlImageMgrSignatureCheck (UINT32 *microCodeImageLibrary)
 	(IxNpeDlImageMgrImageLibraryHeader *) microCodeImageLibrary;
     BOOL result = TRUE;
 
-    if (header->signature != IX_NPEDL_IMAGEMGR_SIGNATURE)
+    if (!header || header->signature != IX_NPEDL_IMAGEMGR_SIGNATURE)
     {
 	result = FALSE;
 	ixNpeDlImageMgrStats.invalidSignature++;
@@ -643,6 +637,11 @@ ixNpeDlImageMgrImageFind (
 	}
 #else
 	imageLibrary = getIxNpeMicroCodeImageLibrary();
+	if (imageLibrary == NULL)
+        {
+	    printf ("npe:  ERROR, no Microcode found in memory\n");
+	    return IX_FAIL;
+	}
 #endif /* IX_NPEDL_READ_MICROCODE_FROM_FILE */
     }
 
diff --git a/cpu/ixp/npe/Makefile b/cpu/ixp/npe/Makefile
index 25117d787f44d0f188b44fb06d22f0bc78a0705c..f4f97bd0d34811d657bae34db7e8c5562b66f1c4 100644
--- a/cpu/ixp/npe/Makefile
+++ b/cpu/ixp/npe/Makefile
@@ -25,11 +25,11 @@ include $(TOPDIR)/config.mk
 
 LIB := $(obj)libnpe.a
 
-LOCAL_CFLAGS  += -I$(TOPDIR)/cpu/ixp/npe/include -DCONFIG_IXP425_COMPONENT_ETHDB
+LOCAL_CFLAGS  += -I$(TOPDIR)/cpu/ixp/npe/include -DCONFIG_IXP425_COMPONENT_ETHDB -D__linux
 CFLAGS  += $(LOCAL_CFLAGS)
 HOST_CFLAGS  += $(LOCAL_CFLAGS)
 
-COBJS := npe.o \
+COBJS-$(CONFIG_IXP4XX_NPE) := npe.o \
 	miiphy.o \
 	IxOsalBufferMgt.o \
 	IxOsalIoMem.o \
@@ -79,17 +79,13 @@ COBJS := npe.o \
 	IxNpeMhSolicitedCbMgr.o \
 	IxNpeMhUnsolicitedCbMgr.o
 
-ifndef CONFIG_IXP4XX_NPE_EXT_UCODE_BASE
-COBJS += IxNpeMicrocode.o
-endif
-
-SRCS	:= $(START:.o=.S) $(SOBJS:.o=.S) $(COBJS:.o=.c)
-OBJS	:= $(addprefix $(obj),$(SOBJS) $(COBJS))
-START	:= $(addprefix $(obj),$(START))
+SRCS	:= $(SOBJS:.o=.S) $(COBJS-y:.o=.c)
+OBJS	:= $(addprefix $(obj),$(COBJS-y))
+SOBJS	:= $(addprefix $(obj),$(SOBJS))
 
 all:	$(LIB)
 
-$(LIB):	$(OBJS)
+$(LIB):	$(obj).depend $(OBJS)
 	$(AR) $(ARFLAGS) $@ $(OBJS)
 
 #########################################################################
diff --git a/cpu/ixp/npe/npe.c b/cpu/ixp/npe/npe.c
index bd77fed377d08112feb2caf89fc2bbe224c35d04..03e3bf7c168077d1e7c101227fb5730454cfab34 100644
--- a/cpu/ixp/npe/npe.c
+++ b/cpu/ixp/npe/npe.c
@@ -44,8 +44,6 @@
 
 #include <npe.h>
 
-#ifdef CONFIG_IXP4XX_NPE
-
 static IxQMgrDispatcherFuncPtr qDispatcherFunc = NULL;
 static int npe_exists[NPE_NUM_PORTS];
 static int npe_used[NPE_NUM_PORTS];
@@ -690,5 +688,3 @@ int npe_initialize(bd_t * bis)
 
 	return 1;
 }
-
-#endif /* CONFIG_IXP4XX_NPE */
diff --git a/cpu/ixp/timer.c b/cpu/ixp/timer.c
index 09d8ad56020c969c738f2f10d0d7f68d47101ff5..deb227a1a63742fe15a56e5d180b4e3693396d60 100644
--- a/cpu/ixp/timer.c
+++ b/cpu/ixp/timer.c
@@ -32,7 +32,6 @@
 #include <common.h>
 #include <asm/arch/ixp425.h>
 
-#ifndef CONFIG_USE_IRQ
 ulong get_timer (ulong base)
 {
        return get_timer_masked () - base;
@@ -80,4 +79,3 @@ ulong get_timer_masked (void)
 	}
 	return (reload_constant - current);
 }
-#endif /* #ifndef CONFIG_USE_IRQ */
diff --git a/drivers/pci/Makefile b/drivers/pci/Makefile
index bffb1eb1a138229c82d8df5ed467a92dbd3439ea..0c4fa802a3bfb60acad2330205d037b2b599cb58 100644
--- a/drivers/pci/Makefile
+++ b/drivers/pci/Makefile
@@ -27,6 +27,7 @@ LIB	:= $(obj)libpci.a
 
 COBJS-$(CONFIG_FSL_PCI_INIT) += fsl_pci_init.o
 COBJS-$(CONFIG_PCI) += pci.o pci_auto.o pci_indirect.o
+COBJS-$(CONFIG_IXP_PCI) += pci_ixp.o
 COBJS-$(CONFIG_SH4_PCI) += pci_sh4.o
 COBJS-$(CONFIG_SH7751_PCI) +=pci_sh7751.o
 COBJS-$(CONFIG_SH7780_PCI) +=pci_sh7780.o
diff --git a/cpu/ixp/pci.c b/drivers/pci/pci_ixp.c
similarity index 99%
rename from cpu/ixp/pci.c
rename to drivers/pci/pci_ixp.c
index 8c6b0b21b48642efd5fa639ebadafaa25b3b52a7..aae3d3d2c16e5741825d45d8a93e8a7b6d9afad6 100644
--- a/cpu/ixp/pci.c
+++ b/drivers/pci/pci_ixp.c
@@ -24,9 +24,6 @@
 
 
 #include <common.h>
-
-#ifdef CONFIG_PCI
-
 #include <asm/processor.h>
 #include <asm/io.h>
 #include <pci.h>
@@ -572,4 +569,3 @@ pci_dev_t pci_find_devices (struct pci_device_id * ids, int devNo)
 	}
 	return -1;
 }
-#endif	/* CONFIG_PCI */
diff --git a/drivers/serial/Makefile b/drivers/serial/Makefile
index c7a1882ef8e8f4249d0f24b59d8a2766879515fa..b6fd0d774698b30e8a0e1bdb59d269138b2c3d5d 100644
--- a/drivers/serial/Makefile
+++ b/drivers/serial/Makefile
@@ -32,6 +32,7 @@ COBJS-y += ns16550.o
 COBJS-$(CONFIG_DRIVER_S3C4510_UART) += s3c4510b_uart.o
 COBJS-$(CONFIG_S3C64XX) += s3c64xx.o
 COBJS-y += serial.o
+COBJS-$(CONFIG_IXP_SERIAL) += serial_ixp.o
 COBJS-$(CONFIG_MAX3100_SERIAL) += serial_max3100.o
 COBJS-$(CONFIG_PL010_SERIAL) += serial_pl01x.o
 COBJS-$(CONFIG_PL011_SERIAL) += serial_pl01x.o
diff --git a/cpu/ixp/serial.c b/drivers/serial/serial_ixp.c
similarity index 100%
rename from cpu/ixp/serial.c
rename to drivers/serial/serial_ixp.c
diff --git a/include/configs/actux1.h b/include/configs/actux1.h
index a3b04b1affbf18276b819dee0b84b6dbb771c308..adbc39951c4ca021ca88e2d3b23675fb2b434316 100644
--- a/include/configs/actux1.h
+++ b/include/configs/actux1.h
@@ -39,6 +39,7 @@
 #define CONFIG_DISPLAY_CPUINFO		1
 #define CONFIG_DISPLAY_BOARDINFO	1
 
+#define CONFIG_IXP_SERIAL
 #define CONFIG_SYS_IXP425_CONSOLE		IXP425_UART2
 #define CONFIG_BAUDRATE			115200
 #define CONFIG_BOOTDELAY		3
@@ -172,8 +173,6 @@
 
 /* include IXP4xx NPE support */
 #define CONFIG_IXP4XX_NPE		1
-/* use separate flash sector with ucode images */
-#define CONFIG_IXP4XX_NPE_EXT_UCODE_BASE	0x50040000
 #define CONFIG_NET_MULTI		1
 /* NPE0 PHY address */
 #define	CONFIG_PHY_ADDR			0
@@ -208,6 +207,7 @@
 #define CONFIG_SYS_USE_PPCENV			1
 
 #define CONFIG_EXTRA_ENV_SETTINGS \
+	"npe_ucode=50040000\0"						\
 	"mtd=IXP4XX-Flash.0:256k(uboot),64k(ucode),1152k(linux),-(root)\0" \
 	"kerneladdr=50050000\0"						\
 	"rootaddr=50170000\0"						\
diff --git a/include/configs/actux2.h b/include/configs/actux2.h
index 7e6e8f28248768d3b1aabf63a94b830ea9cfa5a4..4c579ebe2f78977c5502cb2f1143157ba80b0c03 100644
--- a/include/configs/actux2.h
+++ b/include/configs/actux2.h
@@ -32,6 +32,7 @@
 #define CONFIG_DISPLAY_CPUINFO		1
 #define CONFIG_DISPLAY_BOARDINFO	1
 
+#define CONFIG_IXP_SERIAL
 #define CONFIG_SYS_IXP425_CONSOLE		IXP425_UART2
 #define CONFIG_BAUDRATE			115200
 #define CONFIG_BOOTDELAY		5
@@ -147,8 +148,6 @@
 
 /* include IXP4xx NPE support */
 #define CONFIG_IXP4XX_NPE		1
-/* use separate flash sector with ucode images */
-#define CONFIG_IXP4XX_NPE_EXT_UCODE_BASE	0x50040000
 #define CONFIG_NET_MULTI		1
 /* NPE0 PHY address */
 #define	CONFIG_PHY_ADDR			0x00
@@ -185,6 +184,7 @@
 #define CONFIG_SYS_USE_PPCENV			1
 
 #define CONFIG_EXTRA_ENV_SETTINGS					\
+	"npe_ucode=50040000\0"						\
 	"mtd=IXP4XX-Flash.0:256k(uboot),64k(ucode),1152k(linux),-(root)\0" \
 	"kerneladdr=50050000\0"						\
 	"rootaddr=50170000\0"						\
diff --git a/include/configs/actux3.h b/include/configs/actux3.h
index 3f42ed497cdb158ecaf611e302e39a58bb8d47fb..694f52254a2f583e1b383f2f1f52d9ea1147fd27 100644
--- a/include/configs/actux3.h
+++ b/include/configs/actux3.h
@@ -32,6 +32,7 @@
 #define CONFIG_DISPLAY_CPUINFO		1
 #define CONFIG_DISPLAY_BOARDINFO	1
 
+#define CONFIG_IXP_SERIAL
 #define CONFIG_SYS_IXP425_CONSOLE		IXP425_UART2
 #define CONFIG_BAUDRATE			115200
 #define CONFIG_BOOTDELAY		3
@@ -146,8 +147,6 @@
 
 /* include IXP4xx NPE support */
 #define CONFIG_IXP4XX_NPE		1
-/* use separate flash sector with ucode images */
-#define CONFIG_IXP4XX_NPE_EXT_UCODE_BASE	0x50040000
 
 #define CONFIG_NET_MULTI		1
 /* NPE0 PHY address */
@@ -185,6 +184,7 @@
 #define CONFIG_SYS_USE_PPCENV			1
 
 #define CONFIG_EXTRA_ENV_SETTINGS					\
+	"npe_ucode=50040000\0"						\
 	"mtd=IXP4XX-Flash.0:256k(uboot),64k(ucode),1152k(linux),-(root)\0" \
 	"kerneladdr=50050000\0"						\
 	"rootaddr=50170000\0"						\
diff --git a/include/configs/actux4.h b/include/configs/actux4.h
index 3cf1b2058b25de00bac2ff1a1d75d33be9dc23dd..cdc995672572cc1186677f59d93e7ab201552330 100644
--- a/include/configs/actux4.h
+++ b/include/configs/actux4.h
@@ -32,6 +32,7 @@
 #define CONFIG_DISPLAY_CPUINFO		1
 #define CONFIG_DISPLAY_BOARDINFO	1
 
+#define CONFIG_IXP_SERIAL
 #define CONFIG_SYS_IXP425_CONSOLE		IXP425_UART1
 #define CONFIG_BAUDRATE			115200
 #define CONFIG_BOOTDELAY		3
@@ -149,8 +150,6 @@
 
 /* include IXP4xx NPE support */
 #define CONFIG_IXP4XX_NPE		1
-/* use separate flash sector with ucode images */
-#define CONFIG_IXP4XX_NPE_EXT_UCODE_BASE	0x51000000
 
 #define CONFIG_NET_MULTI		1
 /* NPE0 PHY address */
@@ -181,6 +180,7 @@
 #define CONFIG_ENV_ADDR			(PHYS_FLASH_1 + 0x3f000)
 
 #define CONFIG_EXTRA_ENV_SETTINGS					\
+	"npe_ucode=51000000\0"						\
 	"mtd=IXP4XX-Flash.0:252k(uboot),4k(uboot_env);"			\
 	"IXP4XX-Flash.1:128k(ucode),1280k(linux),-(root)\0"		\
 	"kerneladdr=51020000\0"						\
diff --git a/include/configs/ixdp425.h b/include/configs/ixdp425.h
index 35b045127cb872462483f76d4629a03724ce9229..70f39873655b647d8baac79cbdd14fc521dfef64 100644
--- a/include/configs/ixdp425.h
+++ b/include/configs/ixdp425.h
@@ -73,6 +73,7 @@
 
 
 #define CONFIG_PCI
+#define CONFIG_IXP_PCI
 #define CONFIG_NET_MULTI
 #define CONFIG_EEPRO100
 
@@ -134,6 +135,7 @@
 /*
  * select serial console configuration
  */
+#define CONFIG_IXP_SERIAL
 #define CONFIG_SYS_IXP425_CONSOLE	IXP425_UART1   /* we use UART1 for console */
 
 /*
diff --git a/include/configs/ixdpg425.h b/include/configs/ixdpg425.h
index 528bccdabd20d0c223c78d03684ece6998607751..193008e0ef36b2a0e955f18c4d6c5d38105f3232 100644
--- a/include/configs/ixdpg425.h
+++ b/include/configs/ixdpg425.h
@@ -72,6 +72,7 @@
 /* allow to overwrite serial and ethaddr */
 #define CONFIG_ENV_OVERWRITE
 
+#define CONFIG_IXP_SERIAL
 #define CONFIG_BAUDRATE         115200
 #define CONFIG_SYS_IXP425_CONSOLE	IXP425_UART1   /* we use UART1 for console */
 
diff --git a/include/configs/pdnb3.h b/include/configs/pdnb3.h
index f8aac1aba3ddd453984864444961777cba6667a8..4da401f46bc12141561b894680bd076482ad0bca 100644
--- a/include/configs/pdnb3.h
+++ b/include/configs/pdnb3.h
@@ -68,6 +68,7 @@
 /* allow to overwrite serial and ethaddr */
 #define CONFIG_ENV_OVERWRITE
 
+#define CONFIG_IXP_SERIAL
 #define CONFIG_BAUDRATE         115200
 #define CONFIG_SYS_IXP425_CONSOLE	IXP425_UART1   /* we use UART1 for console */
 
diff --git a/lib_arm/board.c b/lib_arm/board.c
index 2358bebdbde86689306a18323ae0e267e4f99424..964f5cc5f2921448b0ed60347f4255c113f4fe8e 100644
--- a/lib_arm/board.c
+++ b/lib_arm/board.c
@@ -221,6 +221,15 @@ static int init_func_i2c (void)
 }
 #endif
 
+#if defined(CONFIG_CMD_PCI) || defined (CONFIG_PCI)
+#include <pci.h>
+static int arm_pci_init(void)
+{
+	pci_init();
+	return 0;
+}
+#endif /* CONFIG_CMD_PCI || CONFIG_PCI */
+
 /*
  * Breathe some life into the board...
  *
@@ -267,6 +276,9 @@ init_fnc_t *init_sequence[] = {
 	init_func_i2c,
 #endif
 	dram_init,		/* configure available RAM banks */
+#if defined(CONFIG_CMD_PCI) || defined (CONFIG_PCI)
+	arm_pci_init,
+#endif
 	display_dram_config,
 	NULL,
 };