--- /dev/null
+--- a/arch/arm/mach-gemini/board-wbd111.c
++++ b/arch/arm/mach-gemini/board-wbd111.c
+@@ -15,6 +15,7 @@
+ #include <linux/input.h>
+ #include <linux/gpio_keys.h>
+ #include <linux/mdio-gpio.h>
++#include <linux/mtd/partitions.h>
+ #include <asm/mach-types.h>
+ #include <asm/mach/arch.h>
+ #include <asm/mach/time.h>
+@@ -101,11 +102,50 @@ static struct sys_timer wbd111_timer = {
+ .init = gemini_timer_init,
+ };
+
++#ifdef CONFIG_MTD_PARTITIONS
++static struct mtd_partition wbd111_partitions[] = {
++ {
++ .name = "RedBoot",
++ .offset = 0,
++ .size = 0x020000,
++ .mask_flags = MTD_WRITEABLE,
++ } , {
++ .name = "kernel",
++ .offset = 0x020000,
++ .size = 0x100000,
++ } , {
++ .name = "rootfs",
++ .offset = 0x120000,
++ .size = 0x6a0000,
++ } , {
++ .name = "VCTL",
++ .offset = 0x7c0000,
++ .size = 0x010000,
++ .mask_flags = MTD_WRITEABLE,
++ } , {
++ .name = "cfg",
++ .offset = 0x7d0000,
++ .size = 0x010000,
++ .mask_flags = MTD_WRITEABLE,
++ } , {
++ .name = "FIS",
++ .offset = 0x7e0000,
++ .size = 0x010000,
++ .mask_flags = MTD_WRITEABLE,
++ }
++};
++#define wbd111_num_partitions ARRAY_SIZE(wbd111_partitions)
++#else
++#define wbd111_partitions NULL
++#define wbd111_num_partitions 0
++#endif /* CONFIG_MTD_PARTITIONS */
++
+ static void __init wbd111_init(void)
+ {
+ gemini_gpio_init();
+ platform_register_uart();
+- platform_register_pflash(SZ_8M, NULL, 0);
++ platform_register_pflash(SZ_8M, wbd111_partitions,
++ wbd111_num_partitions);
+ platform_device_register(&wbd111_leds_device);
+ platform_device_register(&wbd111_keys_device);
+ platform_device_register(&wbd111_phy_device);
--- /dev/null
+--- a/drivers/mtd/maps/physmap.c
++++ b/drivers/mtd/maps/physmap.c
+@@ -170,6 +170,13 @@ static int physmap_flash_probe(struct pl
+ goto err_out;
+
+ #ifdef CONFIG_MTD_PARTITIONS
++ if (physmap_data->nr_parts) {
++ printk(KERN_NOTICE "Using physmap partition information\n");
++ add_mtd_partitions(info->cmtd, physmap_data->parts,
++ physmap_data->nr_parts);
++ return 0;
++ }
++
+ err = parse_mtd_partitions(info->cmtd, part_probe_types,
+ &info->parts, 0);
+ if (err > 0) {
+@@ -177,13 +184,6 @@ static int physmap_flash_probe(struct pl
+ info->nr_parts = err;
+ return 0;
+ }
+-
+- if (physmap_data->nr_parts) {
+- printk(KERN_NOTICE "Using physmap partition information\n");
+- add_mtd_partitions(info->cmtd, physmap_data->parts,
+- physmap_data->nr_parts);
+- return 0;
+- }
+ #endif
+
+ add_mtd_device(info->cmtd);