Fedora kernel-2.6.17-1.2142_FC4 patched with stable patch-2.6.17.4-vs2.0.2-rc26.diff
[linux-2.6.git] / arch / arm / mach-sa1100 / badge4.c
index cef7104..f60b7a6 100644 (file)
 #include <linux/module.h>
 #include <linux/init.h>
 #include <linux/kernel.h>
-#include <linux/device.h>
+#include <linux/platform_device.h>
 #include <linux/delay.h>
 #include <linux/tty.h>
+#include <linux/mtd/mtd.h>
+#include <linux/mtd/partitions.h>
 #include <linux/errno.h>
 
 #include <asm/hardware.h>
@@ -27,6 +29,7 @@
 #include <asm/arch/irqs.h>
 
 #include <asm/mach/arch.h>
+#include <asm/mach/flash.h>
 #include <asm/mach/map.h>
 #include <asm/hardware/sa1111.h>
 #include <asm/mach/serial_sa1100.h>
@@ -54,7 +57,7 @@ static struct platform_device sa1111_device = {
        .name           = "sa1111",
        .id             = 0,
        .dev            = {
-               .dma_mask = &sa1111_dmamask;
+               .dma_mask = &sa1111_dmamask,
                .coherent_dma_mask = 0xffffffff,
        },
        .num_resources  = ARRAY_SIZE(sa1111_resources),
@@ -80,6 +83,45 @@ static int __init badge4_sa1111_init(void)
 }
 
 
+/*
+ * 1 x Intel 28F320C3 Advanced+ Boot Block Flash (32 Mi bit)
+ *   Eight 4 KiW Parameter Bottom Blocks (64 KiB)
+ *   Sixty-three 32 KiW Main Blocks (4032 Ki b)
+ *
+ * <or>
+ *
+ * 1 x Intel 28F640C3 Advanced+ Boot Block Flash (64 Mi bit)
+ *   Eight 4 KiW Parameter Bottom Blocks (64 KiB)
+ *   One-hundred-twenty-seven 32 KiW Main Blocks (8128 Ki b)
+ */
+static struct mtd_partition badge4_partitions[] = {
+        {
+                .name           = "BLOB boot loader",
+                .offset         = 0,
+                .size           = 0x0000A000
+        }, {
+                .name           = "params",
+                .offset         = MTDPART_OFS_APPEND,
+                .size           = 0x00006000
+        }, {
+                .name           = "root",
+                .offset         = MTDPART_OFS_APPEND,
+                .size           = MTDPART_SIZ_FULL
+        }
+};
+
+static struct flash_platform_data badge4_flash_data = {
+       .map_name       = "cfi_probe",
+       .parts          = badge4_partitions,
+       .nr_parts       = ARRAY_SIZE(badge4_partitions),
+};
+
+static struct resource badge4_flash_resource = {
+       .start          = SA1100_CS0_PHYS,
+       .end            = SA1100_CS0_PHYS + SZ_64M - 1,
+       .flags          = IORESOURCE_MEM,
+};
+
 static int five_v_on __initdata = 0;
 
 static int __init five_v_on_setup(char *ignore)
@@ -170,6 +212,8 @@ static int __init badge4_init(void)
        /* maybe turn on 5v0 from the start */
        badge4_set_5V(BADGE4_5V_INITIALLY, five_v_on);
 
+       sa11x0_set_flash_data(&badge4_flash_data, &badge4_flash_resource, 1);
+
        return 0;
 }
 
@@ -210,10 +254,22 @@ EXPORT_SYMBOL(badge4_set_5V);
 
 
 static struct map_desc badge4_io_desc[] __initdata = {
-  /*  virtual    physical    length    type */
-  {0xf1000000, 0x08000000, 0x00100000, MT_DEVICE },/* SRAM  bank 1 */
-  {0xf2000000, 0x10000000, 0x00100000, MT_DEVICE },/* SRAM  bank 2 */
-  {0xf4000000, 0x48000000, 0x00100000, MT_DEVICE } /* SA-1111      */
+       {       /* SRAM  bank 1 */
+               .virtual        = 0xf1000000,
+               .pfn            = __phys_to_pfn(0x08000000),
+               .length         = 0x00100000,
+               .type           = MT_DEVICE
+       }, {    /* SRAM  bank 2 */
+               .virtual        = 0xf2000000,
+               .pfn            = __phys_to_pfn(0x10000000),
+               .length         = 0x00100000,
+               .type           = MT_DEVICE
+       }, {    /* SA-1111      */
+               .virtual        = 0xf4000000,
+               .pfn            = __phys_to_pfn(0x48000000),
+               .length         = 0x00100000,
+               .type           = MT_DEVICE
+       }
 };
 
 static void
@@ -241,9 +297,10 @@ static void __init badge4_map_io(void)
 }
 
 MACHINE_START(BADGE4, "Hewlett-Packard Laboratories BadgePAD 4")
-       BOOT_MEM(0xc0000000, 0x80000000, 0xf8000000)
-       BOOT_PARAMS(0xc0000100)
-       MAPIO(badge4_map_io)
-       INITIRQ(sa1100_init_irq)
-       INITTIME(sa1100_init_time)
+       .phys_io        = 0x80000000,
+       .io_pg_offst    = ((0xf8000000) >> 18) & 0xfffc,
+       .boot_params    = 0xc0000100,
+       .map_io         = badge4_map_io,
+       .init_irq       = sa1100_init_irq,
+       .timer          = &sa1100_timer,
 MACHINE_END