patch-2.4.19 linux-2.4.19/drivers/mtd/maps/sa1100-flash.c
Next file: linux-2.4.19/drivers/mtd/maps/sbc_gxx.c
Previous file: linux-2.4.19/drivers/mtd/maps/pci.c
Back to the patch index
Back to the overall index
- Lines: 1348
- Date:
Fri Aug 2 17:39:44 2002
- Orig file:
linux-2.4.18/drivers/mtd/maps/sa1100-flash.c
- Orig date:
Thu Oct 4 15:14:59 2001
diff -urN linux-2.4.18/drivers/mtd/maps/sa1100-flash.c linux-2.4.19/drivers/mtd/maps/sa1100-flash.c
@@ -3,12 +3,13 @@
*
* (C) 2000 Nicolas Pitre <nico@cam.org>
*
- * $Id: sa1100-flash.c,v 1.22 2001/10/02 10:04:52 rmk Exp $
+ * $Id: sa1100-flash.c,v 1.26 2002/03/13 16:30:44 rmk Exp $
*/
#include <linux/config.h>
#include <linux/module.h>
#include <linux/types.h>
+#include <linux/ioport.h>
#include <linux/kernel.h>
#include <linux/mtd/mtd.h>
@@ -66,32 +67,6 @@
memcpy((void *)(map->map_priv_1 + to), from, len);
}
-
-#ifdef CONFIG_SA1100_H3600
-
-static void h3600_set_vpp(struct map_info *map, int vpp)
-{
- if (vpp)
- set_h3600_egpio(EGPIO_H3600_VPP_ON);
- else
- clr_h3600_egpio(EGPIO_H3600_VPP_ON);
-}
-
-#endif
-
-#ifdef CONFIG_SA1100_JORNADA720
-
-static void jornada720_set_vpp(int vpp)
-{
- if (vpp)
- PPSR |= 0x80;
- else
- PPSR &= ~0x80;
- PPDR |= 0x80;
-}
-
-#endif
-
static struct map_info sa1100_map = {
name: "SA1100 flash",
read8: sa1100_read8,
@@ -104,6 +79,7 @@
copy_to: sa1100_copy_to,
map_priv_1: WINDOW_ADDR,
+ map_priv_2: -1,
};
@@ -111,425 +87,687 @@
* Here are partition information for all known SA1100-based devices.
* See include/linux/mtd/partitions.h for definition of the mtd_partition
* structure.
- *
+ *
* The *_max_flash_size is the maximum possible mapped flash size which
- * is not necessarily the actual flash size. It must correspond to the
- * value specified in the mapping definition defined by the
- * "struct map_desc *_io_desc" for the corresponding machine.
+ * is not necessarily the actual flash size. It must be no more than
+ * the value specified in the "struct map_desc *_io_desc" mapping
+ * definition for the corresponding machine.
+ *
+ * Please keep these in alphabetical order, and formatted as per existing
+ * entries. Thanks.
*/
-#ifdef CONFIG_SA1100_ASSABET
+#ifdef CONFIG_SA1100_ADSBITSY
+#define ADSBITSY_FLASH_SIZE 0x02000000
+static struct mtd_partition adsbitsy_partitions[] = {
+ {
+ name: "bootROM",
+ size: 0x80000,
+ offset: 0,
+ mask_flags: MTD_WRITEABLE, /* force read-only */
+ }, {
+ name: "zImage",
+ size: 0x100000,
+ offset: MTDPART_OFS_APPEND,
+ mask_flags: MTD_WRITEABLE, /* force read-only */
+ }, {
+ name: "ramdisk.gz",
+ size: 0x300000,
+ offset: MTDPART_OFS_APPEND,
+ mask_flags: MTD_WRITEABLE, /* force read-only */
+ }, {
+ name: "User FS",
+ size: MTDPART_SIZ_FULL,
+ offset: MTDPART_OFS_APPEND,
+ }
+};
+#endif
+#ifdef CONFIG_SA1100_ASSABET
/* Phase 4 Assabet has two 28F160B3 flash parts in bank 0: */
-static unsigned long assabet4_max_flash_size = 0x00400000;
+#define ASSABET4_FLASH_SIZE 0x00400000
static struct mtd_partition assabet4_partitions[] = {
- {
- name: "bootloader",
- size: 0x00020000,
- offset: 0,
- mask_flags: MTD_WRITEABLE
- },{
- name: "bootloader params",
- size: 0x00020000,
- offset: MTDPART_OFS_APPEND,
- mask_flags: MTD_WRITEABLE
- },{
- name: "jffs",
- size: MTDPART_SIZ_FULL,
- offset: MTDPART_OFS_APPEND
- }
+ {
+ name: "bootloader",
+ size: 0x00020000,
+ offset: 0,
+ mask_flags: MTD_WRITEABLE,
+ }, {
+ name: "bootloader params",
+ size: 0x00020000,
+ offset: MTDPART_OFS_APPEND,
+ mask_flags: MTD_WRITEABLE,
+ }, {
+ name: "jffs",
+ size: MTDPART_SIZ_FULL,
+ offset: MTDPART_OFS_APPEND,
+ }
};
/* Phase 5 Assabet has two 28F128J3A flash parts in bank 0: */
-static unsigned long assabet5_max_flash_size = 0x02000000;
+#define ASSABET5_FLASH_SIZE 0x02000000
static struct mtd_partition assabet5_partitions[] = {
- {
- name: "bootloader",
- size: 0x00040000,
- offset: 0,
- mask_flags: MTD_WRITEABLE
- },{
- name: "bootloader params",
- size: 0x00040000,
- offset: MTDPART_OFS_APPEND,
- mask_flags: MTD_WRITEABLE
- },{
- name: "jffs",
- size: MTDPART_SIZ_FULL,
- offset: MTDPART_OFS_APPEND
- }
+ {
+ name: "bootloader",
+ size: 0x00040000,
+ offset: 0,
+ mask_flags: MTD_WRITEABLE,
+ }, {
+ name: "bootloader params",
+ size: 0x00040000,
+ offset: MTDPART_OFS_APPEND,
+ mask_flags: MTD_WRITEABLE,
+ }, {
+ name: "jffs",
+ size: MTDPART_SIZ_FULL,
+ offset: MTDPART_OFS_APPEND,
+ }
};
-#define assabet_max_flash_size assabet5_max_flash_size
-#define assabet_partitions assabet5_partitions
-
+#define ASSABET_FLASH_SIZE ASSABET5_FLASH_SIZE
+#define assabet_partitions assabet5_partitions
#endif
-#ifdef CONFIG_SA1100_FLEXANET
+#ifdef CONFIG_SA1100_BADGE4
-/* Flexanet has two 28F128J3A flash parts in bank 0: */
-static unsigned long flexanet_max_flash_size = 0x02000000;
-static struct mtd_partition flexanet_partitions[] = {
- {
- name: "bootloader",
- size: 0x00040000,
- offset: 0,
- mask_flags: MTD_WRITEABLE
- },{
- name: "bootloader params",
- size: 0x00040000,
- offset: MTDPART_OFS_APPEND,
- mask_flags: MTD_WRITEABLE
- },{
- name: "kernel",
- size: 0x000C0000,
- offset: MTDPART_OFS_APPEND,
- mask_flags: MTD_WRITEABLE
- },{
- name: "altkernel",
- size: 0x000C0000,
- offset: MTDPART_OFS_APPEND,
- mask_flags: MTD_WRITEABLE
- },{
- name: "root",
- size: 0x00400000,
- offset: MTDPART_OFS_APPEND,
- mask_flags: MTD_WRITEABLE
- },{
- name: "free1",
- size: 0x00300000,
- offset: MTDPART_OFS_APPEND,
- mask_flags: MTD_WRITEABLE
- },{
- name: "free2",
- size: 0x00300000,
- offset: MTDPART_OFS_APPEND,
- mask_flags: MTD_WRITEABLE
- },{
- name: "free3",
- size: MTDPART_SIZ_FULL,
- offset: MTDPART_OFS_APPEND,
- mask_flags: MTD_WRITEABLE
- }
+/*
+ * 1 x Intel 28F320C3BA100 Advanced+ Boot Block Flash (32 Mi bit)
+ * Eight 4 KiW Parameter Bottom Blocks (64 KiB)
+ * Sixty-three 32 KiW Main Blocks (4032 Ki b)
+ */
+#define BADGE4_FLASH_SIZE 0x00400000
+static struct mtd_partition badge4_partitions[] = {
+ {
+ name: "BLOB boot loader",
+ offset: 0,
+ size: 0x0000A000
+ }, {
+ name: "params",
+ offset: MTDPART_OFS_APPEND,
+ size: 0x00006000
+ }, {
+ name: "kernel",
+ offset: MTDPART_OFS_APPEND,
+ size: 0x00100000
+ }, {
+ name: "root",
+ offset: MTDPART_OFS_APPEND,
+ size: MTDPART_SIZ_FULL
+ }
};
#endif
-#ifdef CONFIG_SA1100_HUW_WEBPANEL
-static unsigned long huw_webpanel_max_flash_size = 0x01000000;
-static struct mtd_partition huw_webpanel_partitions[] = {
- {
- name: "Loader",
- size: 0x00040000,
- offset: 0,
- },{
- name: "Sector 1",
- size: 0x00040000,
- offset: MTDPART_OFS_APPEND,
- },{
- size: MTDPART_SIZ_FULL,
- offset: MTDPART_OFS_APPEND,
+
+#ifdef CONFIG_SA1100_CERF
+#ifdef CONFIG_SA1100_CERF_FLASH_32MB
+#define CERF_FLASH_SIZE 0x02000000
+static struct mtd_partition cerf_partitions[] = {
+ {
+ name: "firmware",
+ size: 0x00040000,
+ offset: 0,
+ }, {
+ name: "params",
+ size: 0x00040000,
+ offset: 0x00040000,
+ }, {
+ name: "kernel",
+ size: 0x00100000,
+ offset: 0x00080000,
+ }, {
+ name: "rootdisk",
+ size: 0x01E80000,
+ offset: 0x00180000,
}
};
-#endif /* CONFIG_SA1100_HUW_WEBPANEL */
-
-
-#ifdef CONFIG_SA1100_H3600
-
-static unsigned long h3600_max_flash_size = 0x02000000;
-static struct mtd_partition h3600_partitions[] = {
+#elif defined CONFIG_SA1100_CERF_FLASH_16MB
+#define CERF_FLASH_SIZE 0x01000000
+static struct mtd_partition cerf_partitions[] = {
{
- name: "H3600 boot firmware",
- size: 0x00040000,
- offset: 0,
- mask_flags: MTD_WRITEABLE /* force read-only */
- },{
- name: "H3600 kernel",
- size: 0x00080000,
- offset: 0x40000
- },{
- name: "H3600 params",
- size: 0x00040000,
- offset: 0xC0000
- },{
-#ifdef CONFIG_JFFS2_FS
- name: "H3600 root jffs2",
- offset: 0x00100000,
- size: MTDPART_SIZ_FULL
+ name: "firmware",
+ size: 0x00020000,
+ offset: 0,
+ }, {
+ name: "params",
+ size: 0x00020000,
+ offset: 0x00020000,
+ }, {
+ name: "kernel",
+ size: 0x00100000,
+ offset: 0x00040000,
+ }, {
+ name: "rootdisk",
+ size: 0x00EC0000,
+ offset: 0x00140000,
+ }
+};
+#elif defined CONFIG_SA1100_CERF_FLASH_8MB
+# error "Unwritten type definition"
#else
- name: "H3600 initrd",
- size: 0x00100000,
- offset: 0x00100000
- },{
- name: "H3600 root cramfs",
- size: 0x00300000,
- offset: 0x00200000
- },{
- name: "H3600 usr cramfs",
- size: 0x00800000,
- offset: 0x00500000
- },{
- name: "H3600 usr local",
- offset: 0x00d00000,
- size: MTDPART_SIZ_FULL
+# error "Undefined memory orientation for CERF in sa1100-flash.c"
#endif
+#endif
+
+#ifdef CONFIG_SA1100_CONSUS
+#define CONSUS_FLASH_SIZE 0x02000000
+static struct mtd_partition consus_partitions[] = {
+ {
+ name: "Consus boot firmware",
+ offset: 0,
+ size: 0x00040000,
+ mask_flags: MTD_WRITABLE, /* force read-only */
+ }, {
+ name: "Consus kernel",
+ offset: 0x00040000,
+ size: 0x00100000,
+ mask_flags: 0,
+ }, {
+ name: "Consus disk",
+ offset: 0x00140000,
+ /* The rest (up to 16M) for jffs. We could put 0 and
+ make it find the size automatically, but right now
+ i have 32 megs. jffs will use all 32 megs if given
+ the chance, and this leads to horrible problems
+ when you try to re-flash the image because blob
+ won't erase the whole partition. */
+ size: 0x01000000 - 0x00140000,
+ mask_flags: 0,
+ }, {
+ /* this disk is a secondary disk, which can be used as
+ needed, for simplicity, make it the size of the other
+ consus partition, although realistically it could be
+ the remainder of the disk (depending on the file
+ system used) */
+ name: "Consus disk2",
+ offset: 0x01000000,
+ size: 0x01000000 - 0x00140000,
+ mask_flags: 0,
}
};
+#endif
+#ifdef CONFIG_SA1100_FLEXANET
+/* Flexanet has two 28F128J3A flash parts in bank 0: */
+#define FLEXANET_FLASH_SIZE 0x02000000
+static struct mtd_partition flexanet_partitions[] = {
+ {
+ name: "bootloader",
+ size: 0x00040000,
+ offset: 0,
+ mask_flags: MTD_WRITEABLE,
+ }, {
+ name: "bootloader params",
+ size: 0x00040000,
+ offset: MTDPART_OFS_APPEND,
+ mask_flags: MTD_WRITEABLE,
+ }, {
+ name: "kernel",
+ size: 0x000C0000,
+ offset: MTDPART_OFS_APPEND,
+ mask_flags: MTD_WRITEABLE,
+ }, {
+ name: "altkernel",
+ size: 0x000C0000,
+ offset: MTDPART_OFS_APPEND,
+ mask_flags: MTD_WRITEABLE,
+ }, {
+ name: "root",
+ size: 0x00400000,
+ offset: MTDPART_OFS_APPEND,
+ mask_flags: MTD_WRITEABLE,
+ }, {
+ name: "free1",
+ size: 0x00300000,
+ offset: MTDPART_OFS_APPEND,
+ mask_flags: MTD_WRITEABLE,
+ }, {
+ name: "free2",
+ size: 0x00300000,
+ offset: MTDPART_OFS_APPEND,
+ mask_flags: MTD_WRITEABLE,
+ }, {
+ name: "free3",
+ size: MTDPART_SIZ_FULL,
+ offset: MTDPART_OFS_APPEND,
+ mask_flags: MTD_WRITEABLE,
+ }
+};
#endif
+
#ifdef CONFIG_SA1100_FREEBIRD
-static unsigned long freebird_max_flash_size = 0x02000000;
+#define FREEBIRD_FLASH_SIZE 0x02000000
static struct mtd_partition freebird_partitions[] = {
#if CONFIG_SA1100_FREEBIRD_NEW
- {
- name: "firmware",
- size: 0x00040000,
- offset: 0,
- mask_flags: MTD_WRITEABLE /* force read-only */
- },{
- name: "kernel",
- size: 0x00080000,
- offset: 0x40000
- },{
- name: "params",
- size: 0x00040000,
- offset: 0xC0000
- },{
- name: "initrd",
- size: 0x00100000,
- offset: 0x00100000
- },{
- name: "root cramfs",
- size: 0x00300000,
- offset: 0x00200000
- },{
- name: "usr cramfs",
- size: 0x00C00000,
- offset: 0x00500000
- },{
- name: "local",
- offset: 0x01100000,
- size: MTDPART_SIZ_FULL
+ {
+ name: "firmware",
+ size: 0x00040000,
+ offset: 0,
+ mask_flags: MTD_WRITEABLE, /* force read-only */
+ }, {
+ name: "kernel",
+ size: 0x00080000,
+ offset: 0x00040000,
+ }, {
+ name: "params",
+ size: 0x00040000,
+ offset: 0x000C0000,
+ }, {
+ name: "initrd",
+ size: 0x00100000,
+ offset: 0x00100000,
+ }, {
+ name: "root cramfs",
+ size: 0x00300000,
+ offset: 0x00200000,
+ }, {
+ name: "usr cramfs",
+ size: 0x00C00000,
+ offset: 0x00500000,
+ }, {
+ name: "local",
+ size: MTDPART_SIZ_FULL,
+ offset: 0x01100000,
}
#else
- { offset: 0, size: 0x00040000, },
- { offset: MTDPART_OFS_APPEND, size: 0x000c0000, },
- { offset: MTDPART_OFS_APPEND, size: 0x00400000, },
- { offset: MTDPART_OFS_APPEND, size: MTDPART_SIZ_FULL }
+ {
+ size: 0x00040000,
+ offset: 0,
+ }, {
+ size: 0x000c0000,
+ offset: MTDPART_OFS_APPEND,
+ }, {
+ size: 0x00400000,
+ offset: MTDPART_OFS_APPEND,
+ }, {
+ size: MTDPART_SIZ_FULL,
+ offset: MTDPART_OFS_APPEND,
+ }
#endif
- };
+};
#endif
-
-#ifdef CONFIG_SA1100_CERF
-
-static unsigned long cerf_max_flash_size = 0x01000000;
-static struct mtd_partition cerf_partitions[] = {
- { offset: 0, size: 0x00800000 },
- { offset: MTDPART_OFS_APPEND, size: 0x00800000 }
+#ifdef CONFIG_SA1100_FRODO
+/* Frodo has 2 x 16M 28F128J3A flash chips in bank 0: */
+#define FRODO_FLASH_SIZE 0x02000000
+static struct mtd_partition frodo_partitions[] =
+{
+ {
+ name: "bootloader",
+ size: 0x00040000,
+ offset: 0x00000000,
+ mask_flags: MTD_WRITEABLE
+ }, {
+ name: "bootloader params",
+ size: 0x00040000,
+ offset: MTDPART_OFS_APPEND,
+ mask_flags: MTD_WRITEABLE
+ }, {
+ name: "kernel",
+ size: 0x00100000,
+ offset: MTDPART_OFS_APPEND,
+ mask_flags: MTD_WRITEABLE
+ }, {
+ name: "ramdisk",
+ size: 0x00400000,
+ offset: MTDPART_OFS_APPEND,
+ mask_flags: MTD_WRITEABLE
+ }, {
+ name: "file system",
+ size: MTDPART_SIZ_FULL,
+ offset: MTDPART_OFS_APPEND
+ }
};
-
#endif
#ifdef CONFIG_SA1100_GRAPHICSCLIENT
-
-static unsigned long graphicsclient_max_flash_size = 0x01000000;
+#define GRAPHICSCLIENT_FLASH_SIZE 0x02000000
static struct mtd_partition graphicsclient_partitions[] = {
- {
- name: "zImage",
- offset: 0,
- size: 0x100000
- },
- {
- name: "ramdisk.gz",
- offset: MTDPART_OFS_APPEND,
- size: 0x300000
- },
- {
- name: "User FS",
- offset: MTDPART_OFS_APPEND,
- size: MTDPART_SIZ_FULL
+ {
+ name: "zImage",
+ size: 0x100000,
+ offset: 0,
+ mask_flags: MTD_WRITEABLE, /* force read-only */
+ }, {
+ name: "ramdisk.gz",
+ size: 0x300000,
+ offset: MTDPART_OFS_APPEND,
+ mask_flags: MTD_WRITEABLE, /* force read-only */
+ }, {
+ name: "User FS",
+ size: MTDPART_SIZ_FULL,
+ offset: MTDPART_OFS_APPEND,
}
};
-
#endif
#ifdef CONFIG_SA1100_GRAPHICSMASTER
-
-static unsigned long graphicsmaster_max_flash_size = 0x01000000;
+#define GRAPHICSMASTER_FLASH_SIZE 0x01000000
static struct mtd_partition graphicsmaster_partitions[] = {
- {
- name: "zImage",
- offset: 0,
- size: 0x100000
+ {
+ name: "zImage",
+ size: 0x100000,
+ offset: 0,
+ mask_flags: MTD_WRITEABLE, /* force read-only */
},
- {
- name: "ramdisk.gz",
- offset: MTDPART_OFS_APPEND,
- size: 0x300000
+ {
+ name: "ramdisk.gz",
+ size: 0x300000,
+ offset: MTDPART_OFS_APPEND,
+ mask_flags: MTD_WRITEABLE, /* force read-only */
},
- {
- name: "User FS",
- offset: MTDPART_OFS_APPEND,
- size: MTDPART_SIZ_FULL
+ {
+ name: "User FS",
+ size: MTDPART_SIZ_FULL,
+ offset: MTDPART_OFS_APPEND,
}
};
+#endif
+#ifdef CONFIG_SA1100_H3600
+#define H3600_FLASH_SIZE 0x02000000
+static struct mtd_partition h3600_partitions[] = {
+ {
+ name: "H3600 boot firmware",
+ size: 0x00040000,
+ offset: 0,
+ mask_flags: MTD_WRITEABLE, /* force read-only */
+ }, {
+ name: "H3600 kernel",
+ size: 0x00080000,
+ offset: 0x00040000,
+ }, {
+ name: "H3600 params",
+ size: 0x00040000,
+ offset: 0x000C0000,
+ }, {
+#ifdef CONFIG_JFFS2_FS
+ name: "H3600 root jffs2",
+ size: MTDPART_SIZ_FULL,
+ offset: 0x00100000,
+#else
+ name: "H3600 initrd",
+ size: 0x00100000,
+ offset: 0x00100000,
+ }, {
+ name: "H3600 root cramfs",
+ size: 0x00300000,
+ offset: 0x00200000,
+ }, {
+ name: "H3600 usr cramfs",
+ size: 0x00800000,
+ offset: 0x00500000,
+ }, {
+ name: "H3600 usr local",
+ size: MTDPART_SIZ_FULL,
+ offset: 0x00d00000,
#endif
+ }
+};
-#ifdef CONFIG_SA1100_PANGOLIN
+static void h3600_set_vpp(struct map_info *map, int vpp)
+{
+ assign_h3600_egpio(IPAQ_EGPIO_VPP_ON, vpp);
+}
+#endif
-static unsigned long pangolin_max_flash_size = 0x04000000;
-static struct mtd_partition pangolin_partitions[] = {
- {
- name: "boot firmware",
- offset: 0x00000000,
- size: 0x00080000,
- mask_flags: MTD_WRITEABLE, /* force read-only */
- },
- {
- name: "kernel",
- offset: 0x00080000,
- size: 0x00100000,
- },
+#ifdef CONFIG_SA1100_HUW_WEBPANEL
+#define HUW_WEBPANEL_FLASH_SIZE 0x01000000
+static struct mtd_partition huw_webpanel_partitions[] = {
{
- name: "initrd",
- offset: 0x00180000,
- size: 0x00280000,
- },
+ name: "Loader",
+ size: 0x00040000,
+ offset: 0,
+ }, {
+ name: "Sector 1",
+ size: 0x00040000,
+ offset: MTDPART_OFS_APPEND,
+ }, {
+ size: MTDPART_SIZ_FULL,
+ offset: MTDPART_OFS_APPEND,
+ }
+};
+#endif
+
+#ifdef CONFIG_SA1100_JORNADA720
+#define JORNADA720_FLASH_SIZE 0x02000000
+static struct mtd_partition jornada720_partitions[] = {
{
- name: "initrd-test",
- offset: 0x00400000,
- size: 0x03C00000,
+ name: "JORNADA720 boot firmware",
+ size: 0x00040000,
+ offset: 0,
+ mask_flags: MTD_WRITEABLE, /* force read-only */
+ }, {
+ name: "JORNADA720 kernel",
+ size: 0x000c0000,
+ offset: 0x00040000,
+ }, {
+ name: "JORNADA720 params",
+ size: 0x00040000,
+ offset: 0x00100000,
+ }, {
+ name: "JORNADA720 initrd",
+ size: 0x00100000,
+ offset: 0x00140000,
+ }, {
+ name: "JORNADA720 root cramfs",
+ size: 0x00300000,
+ offset: 0x00240000,
+ }, {
+ name: "JORNADA720 usr cramfs",
+ size: 0x00800000,
+ offset: 0x00540000,
+ }, {
+ name: "JORNADA720 usr local",
+ size: 0 /* will expand to the end of the flash */
+ offset: 0x00d00000,
}
};
+static void jornada720_set_vpp(int vpp)
+{
+ if (vpp)
+ PPSR |= 0x80;
+ else
+ PPSR &= ~0x80;
+ PPDR |= 0x80;
+}
+
#endif
-#ifdef CONFIG_SA1100_YOPY
+#ifdef CONFIG_SA1100_PANGOLIN
+#define PANGOLIN_FLASH_SIZE 0x04000000
+static struct mtd_partition pangolin_partitions[] = {
+ {
+ name: "boot firmware",
+ size: 0x00080000,
+ offset: 0x00000000,
+ mask_flags: MTD_WRITEABLE, /* force read-only */
+ }, {
+ name: "kernel",
+ size: 0x00100000,
+ offset: 0x00080000,
+ }, {
+ name: "initrd",
+ size: 0x00280000,
+ offset: 0x00180000,
+ }, {
+ name: "initrd-test",
+ size: 0x03C00000,
+ offset: 0x00400000,
+ }
+};
+#endif
-static unsigned long yopy_max_flash_size = 0x08000000;
-static struct mtd_partition yopy_partitions[] = {
+#ifdef CONFIG_SA1100_PT_SYSTEM3
+/* erase size is 0x40000 == 256k partitions have to have this boundary */
+#define SYSTEM3_FLASH_SIZE 0x01000000
+static struct mtd_partition system3_partitions[] = {
+ {
+ name: "BLOB",
+ size: 0x00040000,
+ offset: 0x00000000,
+ mask_flags: MTD_WRITEABLE, /* force read-only */
+ }, {
+ name: "config",
+ size: 0x00040000,
+ offset: MTDPART_OFS_APPEND,
+ }, {
+ name: "kernel",
+ size: 0x00100000,
+ offset: MTDPART_OFS_APPEND,
+ }, {
+ name: "root",
+ size: MTDPART_SIZ_FULL,
+ offset: MTDPART_OFS_APPEND,
+ }
+};
+#endif
+
+#ifdef CONFIG_SA1100_SHANNON
+#define SHANNON_FLASH_SIZE 0x00400000
+static struct mtd_partition shannon_partitions[] = {
{
- name: "boot firmware",
- offset: 0x00000000,
- size: 0x00040000,
- mask_flags: MTD_WRITEABLE, /* force read-only */
+ name: "BLOB boot loader",
+ offset: 0,
+ size: 0x20000
},
{
name: "kernel",
- offset: 0x00080000,
- size: 0x00080000,
+ offset: MTDPART_OFS_APPEND,
+ size: 0xe0000
},
- {
+ {
name: "initrd",
- offset: 0x00100000,
- size: 0x00300000,
- },
- {
- name: "root",
- offset: 0x00400000,
- size: 0x01000000,
- },
+ offset: MTDPART_OFS_APPEND,
+ size: MTDPART_SIZ_FULL
+ }
};
#endif
-#ifdef CONFIG_SA1100_JORNADA720
-
-static unsigned long jornada720_max_flash_size = 0x02000000;
-static struct mtd_partition jornada720_partitions[] = {
+#ifdef CONFIG_SA1100_SHERMAN
+#define SHERMAN_FLASH_SIZE 0x02000000
+static struct mtd_partition sherman_partitions[] = {
{
- name: "JORNADA720 boot firmware",
- size: 0x00040000,
- offset: 0,
- mask_flags: MTD_WRITEABLE /* force read-only */
- },{
- name: "JORNADA720 kernel",
- size: 0x000c0000,
- offset: 0x40000
- },{
- name: "JORNADA720 params",
- size: 0x00040000,
- offset: 0x100000
- },{
- name: "JORNADA720 initrd",
- size: 0x00100000,
- offset: 0x00140000
- },{
- name: "JORNADA720 root cramfs",
- size: 0x00300000,
- offset: 0x00240000
- },{
- name: "JORNADA720 usr cramfs",
- size: 0x00800000,
- offset: 0x00540000
- },{
- name: "JORNADA720 usr local",
- offset: 0x00d00000,
- size: 0 /* will expand to the end of the flash */
+ size: 0x50000,
+ offset: 0,
+ }, {
+ size: 0x70000,
+ offset: MTDPART_OFS_APPEND,
+ }, {
+ size: 0x600000,
+ offset: MTDPART_OFS_APPEND,
+ }, {
+ size: 0xA0000,
+ offset: MTDPART_OFS_APPEND,
}
};
#endif
-#ifdef CONFIG_SA1100_SHERMAN
-
-static unsigned long sherman_max_flash_size = 0x02000000;
-static struct mtd_partition sherman_partitions[] = {
- { offset: 0, size: 0x50000 },
- { offset: MTDPART_OFS_APPEND, size: 0x70000 },
- { offset: MTDPART_OFS_APPEND, size: 0x600000 },
- { offset: MTDPART_OFS_APPEND, size: 0xA0000 }
-};
-
+#ifdef CONFIG_SA1100_SIMPAD
+#define SIMPAD_FLASH_SIZE 0x02000000
+static struct mtd_partition simpad_partitions[] = {
+ {
+ name: "SIMpad boot firmware",
+ size: 0x00080000,
+ offset: 0,
+ mask_flags: MTD_WRITEABLE, /* force read-only */
+ }, {
+ name: "SIMpad kernel",
+ size: 0x00100000,
+ offset: 0x00080000,
+ }, {
+#ifdef CONFIG_JFFS2_FS
+ name: "SIMpad root jffs2",
+ size: MTDPART_SIZ_FULL,
+ offset: 0x00180000,
+#else
+ name: "SIMpad initrd",
+ size: 0x00300000,
+ offset: 0x00180000,
+ }, {
+ name: "SIMpad root cramfs",
+ size: 0x00300000,
+ offset: 0x00480000,
+ }, {
+ name: "SIMpad usr cramfs",
+ size: 0x005c0000,
+ offset: 0x00780000,
+ }, {
+ name: "SIMpad usr local",
+ size: MTDPART_SIZ_FULL,
+ offset: 0x00d40000,
#endif
+ }
+};
+#endif /* CONFIG_SA1100_SIMPAD */
#ifdef CONFIG_SA1100_STORK
-
-static unsigned long stork_max_flash_size = 0x02000000;
+#define STORK_FLASH_SIZE 0x02000000
static struct mtd_partition stork_partitions[] = {
{
- name: "STORK boot firmware",
- size: 0x00040000,
- offset: 0,
- mask_flags: MTD_WRITEABLE /* force read-only */
- },{
- name: "STORK params",
- size: 0x00040000,
- offset: 0x40000
- },{
- name: "STORK kernel",
- size: 0x00100000,
- offset: 0x80000
- },{
+ name: "STORK boot firmware",
+ size: 0x00040000,
+ offset: 0,
+ mask_flags: MTD_WRITEABLE, /* force read-only */
+ }, {
+ name: "STORK params",
+ size: 0x00040000,
+ offset: 0x00040000,
+ }, {
+ name: "STORK kernel",
+ size: 0x00100000,
+ offset: 0x00080000,
+ }, {
#ifdef CONFIG_JFFS2_FS
- name: "STORK root jffs2",
- offset: 0x00180000,
- size: MTDPART_SIZ_FULL
+ name: "STORK root jffs2",
+ offset: 0x00180000,
+ size: MTDPART_SIZ_FULL,
#else
- name: "STORK initrd",
- size: 0x00100000,
- offset: 0x00180000
- },{
- name: "STORK root cramfs",
- size: 0x00300000,
- offset: 0x00280000
- },{
- name: "STORK usr cramfs",
- size: 0x00800000,
- offset: 0x00580000
- },{
- name: "STORK usr local",
- offset: 0x00d80000,
- size: MTDPART_SIZ_FULL
+ name: "STORK initrd",
+ size: 0x00100000,
+ offset: 0x00180000,
+ }, {
+ name: "STORK root cramfs",
+ size: 0x00300000,
+ offset: 0x00280000,
+ }, {
+ name: "STORK usr cramfs",
+ size: 0x00800000,
+ offset: 0x00580000,
+ }, {
+ name: "STORK usr local",
+ offset: 0x00d80000,
+ size: MTDPART_SIZ_FULL,
#endif
}
};
-
#endif
-#define NB_OF(x) (sizeof(x)/sizeof(x[0]))
-
+#ifdef CONFIG_SA1100_YOPY
+#define YOPY_FLASH_SIZE 0x08000000
+static struct mtd_partition yopy_partitions[] = {
+ {
+ name: "boot firmware",
+ size: 0x00040000,
+ offset: 0x00000000,
+ mask_flags: MTD_WRITEABLE, /* force read-only */
+ }, {
+ name: "kernel",
+ size: 0x00080000,
+ offset: 0x00080000,
+ }, {
+ name: "initrd",
+ size: 0x00300000,
+ offset: 0x00100000,
+ }, {
+ name: "root",
+ size: 0x01000000,
+ offset: 0x00400000,
+ }
+};
+#endif
extern int parse_redboot_partitions(struct mtd_info *master, struct mtd_partition **pparts);
extern int parse_bootldr_partitions(struct mtd_info *master, struct mtd_partition **pparts);
@@ -540,10 +778,11 @@
int __init sa1100_mtd_init(void)
{
struct mtd_partition *parts;
- int nb_parts = 0;
+ int nb_parts = 0, ret;
int parsed_nr_parts = 0;
- char *part_type;
-
+ const char *part_type;
+ unsigned long base = -1UL;
+
/* Default flash buswidth */
sa1100_map.buswidth = (MSC0 & MSC_RBW) ? 2 : 4;
@@ -551,103 +790,166 @@
* Static partition definition selection
*/
part_type = "static";
+
+#ifdef CONFIG_SA1100_ADSBITSY
+ if (machine_is_adsbitsy()) {
+ parts = adsbitsy_partitions;
+ nb_parts = ARRAY_SIZE(adsbitsy_partitions);
+ sa1100_map.size = ADSBITSY_FLASH_SIZE;
+ sa1100_map.buswidth = (MSC1 & MSC_RBW) ? 2 : 4;
+ }
+#endif
#ifdef CONFIG_SA1100_ASSABET
if (machine_is_assabet()) {
parts = assabet_partitions;
- nb_parts = NB_OF(assabet_partitions);
- sa1100_map.size = assabet_max_flash_size;
+ nb_parts = ARRAY_SIZE(assabet_partitions);
+ sa1100_map.size = ASSABET_FLASH_SIZE;
}
#endif
-
-#ifdef CONFIG_SA1100_HUW_WEBPANEL
- if (machine_is_huw_webpanel()) {
- parts = huw_webpanel_partitions;
- nb_parts = NB_OF(huw_webpanel_partitions);
- sa1100_map.size = huw_webpanel_max_flash_size;
+#ifdef CONFIG_SA1100_BADGE4
+ if (machine_is_badge4()) {
+ parts = badge4_partitions;
+ nb_parts = ARRAY_SIZE(badge4_partitions);
+ sa1100_map.size = BADGE4_FLASH_SIZE;
}
#endif
-
-#ifdef CONFIG_SA1100_H3600
- if (machine_is_h3600()) {
- parts = h3600_partitions;
- nb_parts = NB_OF(h3600_partitions);
- sa1100_map.size = h3600_max_flash_size;
- sa1100_map.set_vpp = h3600_set_vpp;
+#ifdef CONFIG_SA1100_CERF
+ if (machine_is_cerf()) {
+ parts = cerf_partitions;
+ nb_parts = ARRAY_SIZE(cerf_partitions);
+ sa1100_map.size = CERF_FLASH_SIZE;
+ }
+#endif
+#ifdef CONFIG_SA1100_CONSUS
+ if (machine_is_consus()) {
+ parts = consus_partitions;
+ nb_parts = ARRAY_SIZE(consus_partitions);
+ sa1100_map.size = CONSUS_FLASH_SIZE;
+ }
+#endif
+#ifdef CONFIG_SA1100_FLEXANET
+ if (machine_is_flexanet()) {
+ parts = flexanet_partitions;
+ nb_parts = ARRAY_SIZE(flexanet_partitions);
+ sa1100_map.size = FLEXANET_FLASH_SIZE;
}
#endif
#ifdef CONFIG_SA1100_FREEBIRD
if (machine_is_freebird()) {
parts = freebird_partitions;
- nb_parts = NB_OF(freebird_partitions);
- sa1100_map.size = freebird_max_flash_size;
+ nb_parts = ARRAY_SIZE(freebird_partitions);
+ sa1100_map.size = FREEBIRD_FLASH_SIZE;
}
#endif
-#ifdef CONFIG_SA1100_CERF
- if (machine_is_cerf()) {
- parts = cerf_partitions;
- nb_parts = NB_OF(cerf_partitions);
- sa1100_map.size = cerf_max_flash_size;
+#ifdef CONFIG_SA1100_FRODO
+ if (machine_is_frodo()) {
+ parts = frodo_partitions;
+ nb_parts = ARRAY_SIZE(frodo_partitions);
+ sa1100_map.size = FRODO_FLASH_SIZE;
+ base = 0x00000000;
}
-#endif
#ifdef CONFIG_SA1100_GRAPHICSCLIENT
if (machine_is_graphicsclient()) {
parts = graphicsclient_partitions;
- nb_parts = NB_OF(graphicsclient_partitions);
- sa1100_map.size = graphicsclient_max_flash_size;
+ nb_parts = ARRAY_SIZE(graphicsclient_partitions);
+ sa1100_map.size = GRAPHICSCLIENT_FLASH_SIZE;
sa1100_map.buswidth = (MSC1 & MSC_RBW) ? 2:4;
}
#endif
#ifdef CONFIG_SA1100_GRAPHICSMASTER
if (machine_is_graphicsmaster()) {
parts = graphicsmaster_partitions;
- nb_parts = NB_OF(graphicsmaster_partitions);
- sa1100_map.size = graphicsmaster_max_flash_size;
+ nb_parts = ARRAY_SIZE(graphicsmaster_partitions);
+ sa1100_map.size = GRAPHICSMASTER_FLASH_SIZE;
sa1100_map.buswidth = (MSC1 & MSC_RBW) ? 2:4;
}
#endif
-#ifdef CONFIG_SA1100_PANGOLIN
- if (machine_is_pangolin()) {
- parts = pangolin_partitions;
- nb_parts = NB_OF(pangolin_partitions);
- sa1100_map.size = pangolin_max_flash_size;
+#ifdef CONFIG_SA1100_H3600
+ if (machine_is_h3600()) {
+ parts = h3600_partitions;
+ nb_parts = ARRAY_SIZE(h3600_partitions);
+ sa1100_map.size = H3600_FLASH_SIZE;
+ sa1100_map.set_vpp = h3600_set_vpp;
+ }
+#endif
+#ifdef CONFIG_SA1100_HUW_WEBPANEL
+ if (machine_is_huw_webpanel()) {
+ parts = huw_webpanel_partitions;
+ nb_parts = ARRAY_SIZE(huw_webpanel_partitions);
+ sa1100_map.size = HUW_WEBPANEL_FLASH_SIZE;
}
#endif
#ifdef CONFIG_SA1100_JORNADA720
if (machine_is_jornada720()) {
parts = jornada720_partitions;
- nb_parts = NB_OF(jornada720_partitions);
- sa1100_map.size = jornada720_max_flash_size;
+ nb_parts = ARRAY_SIZE(jornada720_partitions);
+ sa1100_map.size = JORNADA720_FLASH_SIZE;
sa1100_map.set_vpp = jornada720_set_vpp;
}
#endif
-#ifdef CONFIG_SA1100_YOPY
- if (machine_is_yopy()) {
- parts = yopy_partitions;
- nb_parts = NB_OF(yopy_partitions);
- sa1100_map.size = yopy_max_flash_size;
+#ifdef CONFIG_SA1100_PANGOLIN
+ if (machine_is_pangolin()) {
+ parts = pangolin_partitions;
+ nb_parts = ARRAY_SIZE(pangolin_partitions);
+ sa1100_map.size = PANGOLIN_FLASH_SIZE;
+ }
+#endif
+#ifdef CONFIG_SA1100_PT_SYSTEM3
+ if (machine_is_pt_system3()) {
+ parts = system3_partitions;
+ nb_parts = ARRAY_SIZE(system3_partitions);
+ sa1100_map.size = SYSTEM3_FLASH_SIZE;
+ }
+#endif
+#ifdef CONFIG_SA1100_SHANNON
+ if (machine_is_shannon()) {
+ parts = shannon_partitions;
+ nb_parts = ARRAY_SIZE(shannon_partitions);
+ sa1100_map.size = SHANNON_FLASH_SIZE;
}
#endif
#ifdef CONFIG_SA1100_SHERMAN
if (machine_is_sherman()) {
parts = sherman_partitions;
- nb_parts = NB_OF(sherman_partitions);
- sa1100_map.size = sherman_max_flash_size;
+ nb_parts = ARRAY_SIZE(sherman_partitions);
+ sa1100_map.size = SHERMAN_FLASH_SIZE;
}
#endif
-#ifdef CONFIG_SA1100_FLEXANET
- if (machine_is_flexanet()) {
- parts = flexanet_partitions;
- nb_parts = NB_OF(flexanet_partitions);
- sa1100_map.size = flexanet_max_flash_size;
+#ifdef CONFIG_SA1100_SIMPAD
+ if (machine_is_simpad()) {
+ parts = simpad_partitions;
+ nb_parts = ARRAY_SIZE(simpad_partitions);
+ sa1100_map.size = SIMPAD_FLASH_SIZE;
}
#endif
#ifdef CONFIG_SA1100_STORK
if (machine_is_stork()) {
parts = stork_partitions;
- nb_parts = NB_OF(stork_partitions);
- sa1100_map.size = stork_max_flash_size;
+ nb_parts = ARRAY_SIZE(stork_partitions);
+ sa1100_map.size = STORK_FLASH_SIZE;
}
#endif
+#ifdef CONFIG_SA1100_YOPY
+ if (machine_is_yopy()) {
+ parts = yopy_partitions;
+ nb_parts = ARRAY_SIZE(yopy_partitions);
+ sa1100_map.size = YOPY_FLASH_SIZE;
+ }
+#endif
+
+ /*
+ * For simple flash devices, use ioremap to map the flash.
+ */
+ if (base != (unsigned long)-1) {
+ if (!request_mem_region(base, sa1100_map.size, "flash"))
+ return -EBUSY;
+ sa1100_map.map_priv_2 = base;
+ sa1100_map.map_priv_1 = (unsigned long)
+ ioremap(base, sa1100_map.size);
+ ret = -ENOMEM;
+ if (!sa1100_map.map_priv_1)
+ goto out_err;
+ }
/*
* Now let's probe for the actual flash. Do it here since
@@ -655,8 +957,9 @@
*/
printk(KERN_NOTICE "SA1100 flash: probing %d-bit flash bus\n", sa1100_map.buswidth*8);
mymtd = do_map_probe("cfi_probe", &sa1100_map);
+ ret = -ENXIO;
if (!mymtd)
- return -ENXIO;
+ goto out_err;
mymtd->module = THIS_MODULE;
/*
@@ -665,7 +968,7 @@
#ifdef CONFIG_MTD_REDBOOT_PARTS
if (parsed_nr_parts == 0) {
int ret = parse_redboot_partitions(mymtd, &parsed_parts);
-
+
if (ret > 0) {
part_type = "RedBoot";
parsed_nr_parts = ret;
@@ -695,6 +998,13 @@
add_mtd_partitions(mymtd, parts, nb_parts);
}
return 0;
+
+ out_err:
+ if (sa1100_map.map_priv_2 != -1) {
+ iounmap((void *)sa1100_map.map_priv_1);
+ release_mem_region(sa1100_map.map_priv_2, sa1100_map.size);
+ }
+ return ret;
}
static void __exit sa1100_mtd_cleanup(void)
@@ -705,6 +1015,10 @@
if (parsed_parts)
kfree(parsed_parts);
}
+ if (sa1100_map.map_priv_2 != -1) {
+ iounmap((void *)sa1100_map.map_priv_1);
+ release_mem_region(sa1100_map.map_priv_2, sa1100_map.size);
+ }
}
module_init(sa1100_mtd_init);
FUNET's LINUX-ADM group, linux-adm@nic.funet.fi
TCL-scripts by Sam Shen (who was at: slshen@lbl.gov)