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 #include #include +#include #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++) {