diff -Nurb linux-2.6.17/drivers/mtd/chips/cfi_cmdset_0001.c linux-2.6.17-patched/drivers/mtd/chips/cfi_cmdset_0001.c
--- linux-2.6.17/drivers/mtd/chips/cfi_cmdset_0001.c	2006-06-17 18:49:35.000000000 -0700
+++ linux-2.6.17-patched/drivers/mtd/chips/cfi_cmdset_0001.c	2006-09-25 11:27:06.000000000 -0700
@@ -40,7 +40,7 @@
 /* #define CMDSET0001_DISABLE_WRITE_SUSPEND */
 
 // debugging, turns off buffer write mode if set to 1
-#define FORCE_WORD_WRITE 0
+#define FORCE_WORD_WRITE 1
 
 #define MANUFACTURER_INTEL	0x0089
 #define I82802AB	0x00ad
diff -Nurb linux-2.6.17/drivers/mtd/maps/lubbock-flash.c linux-2.6.17-patched/drivers/mtd/maps/lubbock-flash.c
--- linux-2.6.17/drivers/mtd/maps/lubbock-flash.c	2006-06-17 18:49:35.000000000 -0700
+++ linux-2.6.17-patched/drivers/mtd/maps/lubbock-flash.c	2006-09-25 10:50:08.000000000 -0700
@@ -26,6 +26,7 @@
 #include <asm/hardware.h>
 #include <asm/arch/pxa-regs.h>
 #include <asm/arch/lubbock.h>
+#include <linux/mtd/concat.h>
 
 
 #define ROM_ADDR	0x00000000
@@ -48,24 +49,27 @@
 	.inval_cache = 	lubbock_map_inval_cache,
 } };
 
-static struct mtd_partition lubbock_partitions[] = {
+static struct mtd_partition lubbock_partitions[] =
+{
 	{
-		.name =		"Bootloader",
-		.size =		0x00040000,
-		.offset =	0,
-		.mask_flags =	MTD_WRITEABLE  /* force read-only */
-	},{
-		.name =		"Kernel",
-		.size =		0x00100000,
-		.offset =	0x00040000,
-	},{
-		.name =		"Filesystem",
-		.size =		MTDPART_SIZ_FULL,
-		.offset =	0x00140000
-	}
+		.name   =   "root",
+		.offset =   0x00410000
+	},
+	{
+		.name   =  "kernel",
+		.size   =  0x00150000,
+		.offset =  0x000B0000
+	},
+	{
+		.name   =  "bootloader",
+		.size   =  0x000B0000,
+		.offset =  0x00000000
+	},
 };
 
+
 static struct mtd_info *mymtds[2];
+static struct mtd_info *merged_mtd;
 static struct mtd_partition *parsed_parts[2];
 static int nr_parsed_parts[2];
 
@@ -83,8 +87,8 @@
 	printk(KERN_NOTICE "Lubbock configured to boot from %s (bank %d)\n",
 	       flashboot?"Flash":"ROM", flashboot);
 
-	lubbock_maps[flashboot^1].name = "Lubbock Application Flash";
-	lubbock_maps[flashboot].name = "Lubbock Boot ROM";
+	lubbock_maps[flashboot^1].name = "Flash-1";
+	lubbock_maps[flashboot].name = "Flash-0";
 
 	for (i = 0; i < 2; i++) {
 		lubbock_maps[i].virt = ioremap(lubbock_maps[i].phys, WINDOW_SIZE);
@@ -125,25 +129,23 @@
 	if (!mymtds[0] && !mymtds[1])
 		return ret;
 
-	for (i = 0; i < 2; i++) {
-		if (!mymtds[i]) {
-			printk(KERN_WARNING "%s is absent. Skipping\n", lubbock_maps[i].name);
-		} else if (nr_parsed_parts[i]) {
-			add_mtd_partitions(mymtds[i], parsed_parts[i], nr_parsed_parts[i]);
-		} else if (!i) {
-			printk("Using static partitions on %s\n", lubbock_maps[i].name);
-			add_mtd_partitions(mymtds[i], lubbock_partitions, ARRAY_SIZE(lubbock_partitions));
-		} else {
-			printk("Registering %s as whole device\n", lubbock_maps[i].name);
-			add_mtd_device(mymtds[i]);
-		}
-	}
+	if (mymtds[0] && mymtds[1]) {
+		merged_mtd = mtd_concat_create(mymtds, 2, "Concated Flash #1 and #2");
+		if(merged_mtd)
+			add_mtd_partitions(merged_mtd, lubbock_partitions, ARRAY_SIZE(lubbock_partitions));
+		else
+			printk("YoKu: Failed to concate\n");
 	return 0;
+	}
 }
 
 static void __exit cleanup_lubbock(void)
 {
 	int i;
+
+	del_mtd_partitions(merged_mtd);
+	map_destroy(merged_mtd);
+
 	for (i = 0; i < 2; i++) {
