diff -uprN linux-2.6.20-at92_e1.4_sdenm/arch/arm/mach-at91rm9200/board-som9260m.c linux-2.6.20-at92_e1.4_sdnor/arch/arm/mach-at91rm9200/board-som9260m.c
--- linux-2.6.20-at92_e1.4_sdenm/arch/arm/mach-at91rm9200/board-som9260m.c	2007-12-28 10:20:35.000000000 -0500
+++ linux-2.6.20-at92_e1.4_sdnor/arch/arm/mach-at91rm9200/board-som9260m.c	2007-12-28 10:27:39.000000000 -0500
@@ -28,6 +28,7 @@
 #include <linux/spi/spi.h>
 #include <linux/clk.h>
 #include <linux/ioex/ecoreex.h>
+#include <linux/mtd/physmap.h>
 #include <linux/class/spi.h>
 #include <linux/class/spi_interface.h>
 
@@ -85,7 +86,7 @@ static struct at91_usbh_data __initdata 
  * USB Device port
  */
 static struct at91_udc_data __initdata ek_udc_data = {
-	.vbus_pin	= AT91_PIN_PC5,
+	.vbus_pin	= AT91_PIN_PB31,
 	.pullup_pin	= 0,		/* pull-up driven by UDC */
 };
 
@@ -286,6 +287,61 @@ static struct at91_nand_data __initdata 
 #endif
 };
 
+/*
+ *  NOR Flash
+ */
+
+#define SOM_FLASH_BASE	0x10000000
+#define SOM_FLASH_SIZE	0x2000000
+
+static struct mtd_partition som_flash_partitions[] = {
+	{
+		.name	= "Boot Partition",
+		.offset	= 0,
+		.size	= 64 * 2 * 1024,
+		.mask_flags	= MTD_WRITEABLE,
+	},
+	{
+		.name	= "UBoot Partition",
+		.offset	= 64 * 2 * 1024,
+		.size	= 64 * 14 * 1024,
+		.mask_flags	= MTD_WRITEABLE,
+	},
+ 	{
+ 		.name	= "Kernel Partition",
+ 		.offset	= 64 * 16 * 1024,
+ 		.size	= 64 * 48 * 1024,
+ 	},
+ 	{
+ 		.name	= "Disk Partition",
+ 		.offset	= 64 * 64 * 1024,
+ 		.size	= 64 * 256 * 1024,
+ 	},
+ };
+
+static struct physmap_flash_data som_flash_data = {
+	.width		= 2,
+	.parts		= som_flash_partitions,
+	.nr_parts	= ARRAY_SIZE(som_flash_partitions),
+};
+
+static struct resource som_flash_resources[] = {
+	{
+		.start	= SOM_FLASH_BASE,
+		.end	= SOM_FLASH_BASE + SOM_FLASH_SIZE - 1,
+		.flags	= IORESOURCE_MEM,
+	}
+};
+
+static struct platform_device som_flash = {
+	.name		= "physmap-flash",
+	.id		= 0,
+	.dev		= {
+				.platform_data = &som_flash_data,
+			},
+	.resource	= som_flash_resources,
+	.num_resources	= ARRAY_SIZE(som_flash_resources),
+};
 
 /*
  * MCI (SD/MMC)
@@ -550,8 +606,6 @@ static void __init ek_board_init(void)
 	at91_add_device_udc(&ek_udc_data);
 	/* SPI */
 	at91_add_device_spi(ek_spi_devices, ARRAY_SIZE(ek_spi_devices));
-	/* NAND */
-	at91_add_device_nand(&ek_nand_data);
 	/* Ethernet */
 	at91_add_device_eth(&ek_macb_data);
 	/* MMC */
@@ -562,7 +616,8 @@ static void __init ek_board_init(void)
 	at91_add_device_ecoreex4();
 	/* Board Specific */
 	at91_add_device_boardspec();
-	
+	/* NOR Flash */
+	platform_device_register(&som_flash);
 }
 
 MACHINE_START(AT91SAM9260EK, "EMAC SoM-9260M")
diff -uprN linux-2.6.20-at92_e1.4_sdenm/drivers/ioex/ecoreex.c linux-2.6.20-at92_e1.4_sdnor/drivers/ioex/ecoreex.c
--- linux-2.6.20-at92_e1.4_sdenm/drivers/ioex/ecoreex.c	2007-12-28 10:26:40.000000000 -0500
+++ linux-2.6.20-at92_e1.4_sdnor/drivers/ioex/ecoreex.c	2007-12-28 10:27:39.000000000 -0500
@@ -331,13 +331,14 @@ static inline void map_core(unsigned lon
 {
     u8 *virt_addr = ioremap_nocache(phys_addr,size);
     int version = VERSION_KEY;
+    
     if(virt_addr==NULL)printk("could not remap physical memory at %lx for EMAC core\n",phys_addr);
     else{
-//      version =ioread8(&virt_addr[data->key_offset]);
-        if (VERSION_KEY == -1)
-            version = data->e_access->ecoreex_key_read(data->key_offset, virt_addr);
+        version =ioread8(&virt_addr[data->key_offset]);
+        //if (VERSION_KEY == -1)
+        //    version = data->e_access->ecoreex_key_read(data->key_offset, virt_addr);
         /* else the version is predefined */
-		//printk("EMAC core version %x detected at %lx\n",version,phys_addr+data->key_offset );
+		printk("EMAC core version %x detected at %lx\n",version,phys_addr+data->key_offset );
 		switch(version){
 #ifdef CONFIG_ECOREEX_HWMS
         case CPLD_HWMS:
diff -uprN linux-2.6.20-at92_e1.4_sdenm/drivers/mtd/chips/cfi_cmdset_0001.c linux-2.6.20-at92_e1.4_sdnor/drivers/mtd/chips/cfi_cmdset_0001.c
--- linux-2.6.20-at92_e1.4_sdenm/drivers/mtd/chips/cfi_cmdset_0001.c	2007-02-04 13:44:54.000000000 -0500
+++ linux-2.6.20-at92_e1.4_sdnor/drivers/mtd/chips/cfi_cmdset_0001.c	2007-12-28 10:27:39.000000000 -0500
@@ -99,8 +99,8 @@ static struct mtd_chip_driver cfi_intele
 	.module		= THIS_MODULE
 };
 
-/* #define DEBUG_LOCK_BITS */
-/* #define DEBUG_CFI_FEATURES */
+//#define DEBUG_LOCK_BITS
+//#define DEBUG_CFI_FEATURES
 
 #ifdef DEBUG_CFI_FEATURES
 static void cfi_tell_features(struct cfi_pri_intelext *extp)
@@ -1281,6 +1281,7 @@ static int cfi_intelext_read (struct mtd
 			thislen = len;
 
 		ret = do_read_onechip(map, &cfi->chips[chipnum], ofs, thislen, buf);
+
 		if (ret)
 			break;
 
diff -uprN linux-2.6.20-at92_e1.4_sdenm/drivers/mtd/maps/physmap.c linux-2.6.20-at92_e1.4_sdnor/drivers/mtd/maps/physmap.c
--- linux-2.6.20-at92_e1.4_sdenm/drivers/mtd/maps/physmap.c	2007-02-04 13:44:54.000000000 -0500
+++ linux-2.6.20-at92_e1.4_sdnor/drivers/mtd/maps/physmap.c	2007-12-28 10:27:39.000000000 -0500
@@ -83,7 +83,7 @@ static int physmap_flash_probe(struct pl
 	struct physmap_flash_info *info;
 	const char **probe_type;
 	int err;
-
+	
 	physmap_data = dev->dev.platform_data;
 	if (physmap_data == NULL)
 		return -ENODEV;
@@ -114,8 +114,9 @@ static int physmap_flash_probe(struct pl
 	info->map.size = dev->resource->end - dev->resource->start + 1;
 	info->map.bankwidth = physmap_data->width;
 	info->map.set_vpp = physmap_data->set_vpp;
+	
+	info->map.virt = ioremap_nocache(info->map.phys, info->map.size); 
 
-	info->map.virt = ioremap(info->map.phys, info->map.size);
 	if (info->map.virt == NULL) {
 		dev_err(&dev->dev, "Failed to ioremap flash region\n");
 		err = EIO;
diff -uprN linux-2.6.20-at92_e1.4_sdenm/fs/jffs2/scan.c linux-2.6.20-at92_e1.4_sdnor/fs/jffs2/scan.c
--- linux-2.6.20-at92_e1.4_sdenm/fs/jffs2/scan.c	2007-02-04 13:44:54.000000000 -0500
+++ linux-2.6.20-at92_e1.4_sdnor/fs/jffs2/scan.c	2007-12-28 10:27:39.000000000 -0500
@@ -97,8 +97,15 @@ int jffs2_scan_medium(struct jffs2_sb_in
 #ifndef __ECOS
 	size_t pointlen;
 
+	D1(printk(KERN_DEBUG "*******************************************************not ECOS\n"));
+
 	if (c->mtd->point) {
+		D1(printk(KERN_DEBUG "*******************************************************not ECOS point valid\n"));
+
 		ret = c->mtd->point (c->mtd, 0, c->mtd->size, &pointlen, &flashbuf);
+
+		D1(printk(KERN_DEBUG "*******************************************************Buffer Address %p Length %x\n",flashbuf,pointlen));
+
 		if (!ret && pointlen < c->mtd->size) {
 			/* Don't muck about if it won't let us point to the whole flash */
 			D1(printk(KERN_DEBUG "MTD point returned len too short: 0x%zx\n", pointlen));
@@ -447,6 +454,9 @@ static int jffs2_scan_eraseblock (struct
 	prevofs = jeb->offset - 1;
 
 	D1(printk(KERN_DEBUG "jffs2_scan_eraseblock(): Scanning block at 0x%x\n", ofs));
+	D1(printk(KERN_DEBUG "**************************************************** Buffer Size = 0x%x\n",buf_size));
+	D1(printk(KERN_DEBUG "**************************************************** Buffer Address = 0x%p\n",buf));
+
 
 #ifdef CONFIG_JFFS2_FS_WRITEBUFFER
 	if (jffs2_cleanmarker_oob(c)) {
