summaryrefslogtreecommitdiffstats
path: root/linux-2.4.x/drivers/mtd/maps/solutionengine.c
diff options
context:
space:
mode:
Diffstat (limited to 'linux-2.4.x/drivers/mtd/maps/solutionengine.c')
-rw-r--r--linux-2.4.x/drivers/mtd/maps/solutionengine.c91
1 files changed, 36 insertions, 55 deletions
diff --git a/linux-2.4.x/drivers/mtd/maps/solutionengine.c b/linux-2.4.x/drivers/mtd/maps/solutionengine.c
index 185a573..c53c2c3 100644
--- a/linux-2.4.x/drivers/mtd/maps/solutionengine.c
+++ b/linux-2.4.x/drivers/mtd/maps/solutionengine.c
@@ -1,5 +1,5 @@
/*
- * $Id: solutionengine.c,v 1.4 2001/11/07 01:20:59 jsiegel Exp $
+ * $Id: solutionengine.c,v 1.15 2005/11/07 11:14:28 gleixner Exp $
*
* Flash and EPROM on Hitachi Solution Engine and similar boards.
*
@@ -11,31 +11,13 @@
#include <linux/module.h>
#include <linux/types.h>
#include <linux/kernel.h>
+#include <linux/init.h>
#include <asm/io.h>
#include <linux/mtd/mtd.h>
#include <linux/mtd/map.h>
#include <linux/mtd/partitions.h>
#include <linux/config.h>
-
-
-extern int parse_redboot_partitions(struct mtd_info *master, struct mtd_partition **pparts);
-
-__u32 soleng_read32(struct map_info *map, unsigned long ofs)
-{
- return __raw_readl(map->map_priv_1 + ofs);
-}
-
-void soleng_write32(struct map_info *map, __u32 d, unsigned long adr)
-{
- __raw_writel(d, map->map_priv_1 + adr);
- mb();
-}
-
-void soleng_copy_from(struct map_info *map, void *to, unsigned long from, ssize_t len)
-{
- memcpy_fromio(to, map->map_priv_1 + from, len);
-}
-
+#include <linux/errno.h>
static struct mtd_info *flash_mtd;
static struct mtd_info *eprom_mtd;
@@ -43,35 +25,33 @@ static struct mtd_info *eprom_mtd;
static struct mtd_partition *parsed_parts;
struct map_info soleng_eprom_map = {
- name: "Solution Engine EPROM",
- size: 0x400000,
- buswidth: 4,
- copy_from: soleng_copy_from,
+ .name = "Solution Engine EPROM",
+ .size = 0x400000,
+ .bankwidth = 4,
};
struct map_info soleng_flash_map = {
- name: "Solution Engine FLASH",
- size: 0x400000,
- buswidth: 4,
- read32: soleng_read32,
- copy_from: soleng_copy_from,
- write32: soleng_write32,
+ .name = "Solution Engine FLASH",
+ .size = 0x400000,
+ .bankwidth = 4,
};
+static const char *probes[] = { "RedBoot", "cmdlinepart", NULL };
+
#ifdef CONFIG_MTD_SUPERH_RESERVE
static struct mtd_partition superh_se_partitions[] = {
/* Reserved for boot code, read-only */
{
- name: "flash_boot",
- offset: 0x00000000,
- size: CONFIG_MTD_SUPERH_RESERVE,
- mask_flags: MTD_WRITEABLE,
+ .name = "flash_boot",
+ .offset = 0x00000000,
+ .size = CONFIG_MTD_SUPERH_RESERVE,
+ .mask_flags = MTD_WRITEABLE,
},
/* All else is writable (e.g. JFFS) */
{
- name: "Flash FS",
- offset: MTDPART_OFS_NXTBLK,
- size: MTDPART_SIZ_FULL,
+ .name = "Flash FS",
+ .offset = MTDPART_OFS_NXTBLK,
+ .size = MTDPART_SIZ_FULL,
}
};
#endif /* CONFIG_MTD_SUPERH_RESERVE */
@@ -81,16 +61,22 @@ static int __init init_soleng_maps(void)
int nr_parts = 0;
/* First probe at offset 0 */
- soleng_flash_map.map_priv_1 = P2SEGADDR(0);
- soleng_eprom_map.map_priv_1 = P1SEGADDR(0x01000000);
+ soleng_flash_map.phys = 0;
+ soleng_flash_map.virt = (void __iomem *)P2SEGADDR(0);
+ soleng_eprom_map.phys = 0x01000000;
+ soleng_eprom_map.virt = (void __iomem *)P1SEGADDR(0x01000000);
+ simple_map_init(&soleng_eprom_map);
+ simple_map_init(&soleng_flash_map);
printk(KERN_NOTICE "Probing for flash chips at 0x00000000:\n");
flash_mtd = do_map_probe("cfi_probe", &soleng_flash_map);
if (!flash_mtd) {
/* Not there. Try swapping */
printk(KERN_NOTICE "Probing for flash chips at 0x01000000:\n");
- soleng_flash_map.map_priv_1 = P2SEGADDR(0x01000000);
- soleng_eprom_map.map_priv_1 = P1SEGADDR(0);
+ soleng_flash_map.phys = 0x01000000;
+ soleng_flash_map.virt = P2SEGADDR(0x01000000);
+ soleng_eprom_map.phys = 0;
+ soleng_eprom_map.virt = P1SEGADDR(0);
flash_mtd = do_map_probe("cfi_probe", &soleng_flash_map);
if (!flash_mtd) {
/* Eep. */
@@ -99,25 +85,20 @@ static int __init init_soleng_maps(void)
}
}
printk(KERN_NOTICE "Solution Engine: Flash at 0x%08lx, EPROM at 0x%08lx\n",
- soleng_flash_map.map_priv_1 & 0x1fffffff,
- soleng_eprom_map.map_priv_1 & 0x1fffffff);
- flash_mtd->module = THIS_MODULE;
+ soleng_flash_map.phys & 0x1fffffff,
+ soleng_eprom_map.phys & 0x1fffffff);
+ flash_mtd->owner = THIS_MODULE;
eprom_mtd = do_map_probe("map_rom", &soleng_eprom_map);
if (eprom_mtd) {
- eprom_mtd->module = THIS_MODULE;
+ eprom_mtd->owner = THIS_MODULE;
add_mtd_device(eprom_mtd);
}
-#ifdef CONFIG_MTD_REDBOOT_PARTS
- nr_parts = parse_redboot_partitions(flash_mtd, &parsed_parts);
- if (nr_parts > 0)
- printk(KERN_NOTICE "Found RedBoot partition table.\n");
- else if (nr_parts < 0)
- printk(KERN_NOTICE "Error looking for RedBoot partitions.\n");
-#endif /* CONFIG_MTD_REDBOOT_PARTS */
-#if CONFIG_MTD_SUPERH_RESERVE
- if (nr_parts == 0) {
+ nr_parts = parse_mtd_partitions(flash_mtd, probes, &parsed_parts, 0);
+
+#ifdef CONFIG_MTD_SUPERH_RESERVE
+ if (nr_parts <= 0) {
printk(KERN_NOTICE "Using configured partition at 0x%08x.\n",
CONFIG_MTD_SUPERH_RESERVE);
parsed_parts = superh_se_partitions;