+--- a/arch/x86/Makefile
++++ b/arch/x86/Makefile
+@@ -125,6 +125,9 @@ libs-y += arch/x86/lib/
+ # See arch/x86/Kbuild for content of core part of the kernel
+ core-y += arch/x86/
+
++# RDC R-321X support
++core-$(CONFIG_X86_RDC321X) += arch/x86/mach-rdc321x/
++
+ # drivers-y are linked after core-y
+ drivers-$(CONFIG_MATH_EMULATION) += arch/x86/math-emu/
+ drivers-$(CONFIG_PCI) += arch/x86/pci/
--- /dev/null
+++ b/arch/x86/mach-rdc321x/Makefile
@@ -0,0 +1,5 @@
+
+ rdc_flash_parts[0].name = "firmware";
+ rdc_flash_parts[0].offset = 0x0;
-+ rdc_flash_parts[0].size = 0x3E0000 - 0x8000;
++ rdc_flash_parts[0].size = 0x3E0000;
+ rdc_flash_parts[1].name = "rootfs";
+ rdc_flash_parts[1].offset = header.kernelsz + sizeof(header);
+ rdc_flash_parts[1].size = rdc_flash_parts[0].size - rdc_flash_parts[1].offset;
+arch_initcall(ar525w_setup);
--- /dev/null
+++ b/arch/x86/mach-rdc321x/boards/bifferboard.c
-@@ -0,0 +1,81 @@
+@@ -0,0 +1,69 @@
+/*
+ * Bifferboard RDC321x platform devices
+ *
+ u32 kernel_len;
+ u16 tmp;
+
-+ if (master->size == 0x100000)
-+ kernel_len = master->size - 0x10000;
-+ else {
-+ res = master->read(master, 0x4000 + 1036, 2, &len, (char *) &tmp);
-+ if (res)
-+ return res;
-+ kernel_len = tmp * master->erasesize;
-+ }
++ res = master->read(master, 0x4000 + 1036, 2, &len, (char *) &tmp);
++ if (res)
++ return res;
++ kernel_len = tmp * master->erasesize;
+
-+ rdc_flash_parts = kzalloc(sizeof(struct mtd_partition) * 4, GFP_KERNEL);
++ rdc_flash_parts = kzalloc(sizeof(struct mtd_partition) * 3, GFP_KERNEL);
+
+ *pparts = rdc_flash_parts;
+
-+ rdc_flash_parts[0].name = "biffboot";
-+ rdc_flash_parts[0].offset = master->size - 0x10000;
-+ rdc_flash_parts[0].size = 0x10000;
-+ rdc_flash_parts[0].mask_flags = MTD_WRITEABLE;
-+ rdc_flash_parts[1].name = "firmware";
-+ rdc_flash_parts[1].offset = 0;
-+ rdc_flash_parts[1].size = rdc_flash_parts[0].offset;
-+ rdc_flash_parts[2].name = "kernel";
-+ rdc_flash_parts[2].offset = 0x00000000;
-+ rdc_flash_parts[2].size = kernel_len;
-+
-+ if (master->size == 0x100000)
-+ return 2;
-+
-+ rdc_flash_parts[3].name = "rootfs";
-+ rdc_flash_parts[3].offset = MTDPART_OFS_APPEND;
-+ rdc_flash_parts[3].size = rdc_flash_parts[1].size - rdc_flash_parts[2].size;
++ rdc_flash_parts[0].name = "kernel";
++ rdc_flash_parts[0].offset = 0;
++ rdc_flash_parts[0].size = kernel_len;
++ rdc_flash_parts[1].name = "rootfs";
++ rdc_flash_parts[1].offset = kernel_len;
++ rdc_flash_parts[1].size = master->size - kernel_len - 0x10000;
++ rdc_flash_parts[2].name = "biffboot";
++ rdc_flash_parts[2].offset = master->size - 0x10000;
++ rdc_flash_parts[2].size = 0x10000;
+
-+ return 4;
++ return 3;
+}
+
+struct mtd_part_parser __initdata bifferboard_parser = {
+
+ rdc_flash_parts[0].name = "firmware";
+ rdc_flash_parts[0].offset = 0x8000;
-+ rdc_flash_parts[0].size = 0x3F0000;
++ rdc_flash_parts[0].size = 0x3F0000 - 0x8000;
+ rdc_flash_parts[1].name = "config";
+ rdc_flash_parts[1].offset = 0;
+ rdc_flash_parts[1].size = 0x8000;