From: Oliver Korpilla <okorpil@fh-landshut.de>
To: linux-mtd@lists.infradead.org
Subject: Newbie help! - Old AMD (cfi_cmdset_0002) interleaved flash problems
Date: Mon, 26 Apr 2004 13:03:51 +0200 [thread overview]
Message-ID: <408CEC97.4030905@fh-landshut.de> (raw)
Hello!
I have written a mapping for my flash and using it with last week's CVS
(recent enough, I guess) MTD. I'm getting this on target bootup:
Motorola MVME2100 flash device: 0x400000 at 0xff000000
Found: AMD AM29LV800BT
MVME2100 flash: Found 4 x16 devices at 0x0 in 32-bit mode
number of JEDEC chips: 1
cfi_cmdset_0002: Disabling erase-suspend-program due to code brokenness.
Creating 2 MTD partitions on "MVME2100 flash":
0x00000000-0x00100000 : "MVME2100 flash BOOT partition"
0x00100000-0x003c0000 : "MVME2100 flash rootfs partition"
I shortened the 2nd partition by 256KB to avoid having differing erase
sizes - see the output of mtd_debug (last 256KB are of several different
erase sizes - to make sure this is not the problem):
/ # mtd_debug info /dev/mtd2
mtd.type = MTD_NORFLASH
mtd.flags = MTD_CAP_NORFLASH
mtd.size = 2883584 (2M)
mtd.erasesize = 262144 (256K)
mtd.oobblock = 0
mtd.oobsize = 0
mtd.ecctype = MTD_ECC_NONE
regions = 0
/ # mtd_debug info /dev/mtd0
mtd.type = MTD_NORFLASH
mtd.flags = MTD_CAP_NORFLASH
mtd.size = 4194304 (4M)
mtd.erasesize = 262144 (256K)
mtd.oobblock = 0
mtd.oobsize = 0
mtd.ecctype = MTD_ECC_NONE
regions = 4
region[0].offset = 0x00000000
region[0].erasesize = 262144 (256K)
region[0].numblocks = 15
region[0].regionindex = 0
region[1].offset = 0x003c0000
region[1].erasesize = 131072 (128K)
region[1].numblocks = 1
region[1].regionindex = 1
region[2].offset = 0x003e0000
region[2].erasesize = 32768 (32K)
region[2].numblocks = 2
region[2].regionindex = 2
region[3].offset = 0x003f0000
region[3].erasesize = 65536 (64K)
region[3].numblocks = 1
region[3].regionindex = 3
So everything stays within the same erase region.
Erasing works without problems:
/ # eraseall /dev/mtd2
Erasing 256 Kibyte @ 280000 -- 90 % complete.
But if I try ftl_format, or cat or cp a JFFS2 image to the char device
associated with the partition, I get the following:
/ # ftl_format -i -r 10 /dev/mtd2
Partition size = 2816 kb, erase unit size = 256 kb, 1 transfer units
Reserved 10%, formatted size = 2283 kb
This will destroy all data on the target device. Confirm (y/n): y
Erasing all blocks...
---+---+---
MTD do_write_oneword(): software timeout
This will cause Input/Output errors on cp and cat, and if I copy or cat
a JFFS2 image (I've tried both big and little endian just to be sure), I
cannot mount it afterwards (missing magic blocks).
I only want to use this (somehow) crappy flash chip for a read-only
filesystem somehow. I don't need no write support, just a boot root
filesystem.
Can anybody help me? (My patch is attached in this message below)
Can I quickfix this - a modified timeout value, perhaps?
The board this is running on is a MVME2100 PowerPC 603e (MPC8240) board.
Thanks in advance,
Oliver Korpilla
My patch vs. 2.4.25 with MTD from CVS:
diff -urN linux-2.4.25/drivers/mtd/maps/Config.in
linux-2.4.25-mtd_patch/drivers/mtd/maps/Config.in
--- linux-2.4.25/drivers/mtd/maps/Config.in 2004-04-22
22:04:32.000000000 +0200
+++ linux-2.4.25-mtd_patch/drivers/mtd/maps/Config.in 2004-04-22
21:54:06.000000000 +0200
@@ -35,8 +35,13 @@
fi
if [ "$CONFIG_PPC32" = "y" ]; then
- if [ "$CONFIG_6xx" = "y" -a "$CONFIG_8260" = "y" ]; then
- dep_tristate ' Flash device on SBC8240' CONFIG_MTD_SBC8240
$CONFIG_MTD_JEDECPROBE
+ if [ "$CONFIG_6xx" = "y" ]; then
+ if [ "$CONFIG_8260" = "y" ]; then
+ dep_tristate ' Flash device on SBC8240' CONFIG_MTD_SBC8240
$CONFIG_MTD_JEDECPROBE
+ fi
+ if [ "$CONFIG_MVME2100" = "y" ]; then
+ dep_tristate ' Flash device on MVME2100' CONFIG_MTD_MVME2100
$CONFIG_MTD_JEDECPROBE
+ fi
fi
if [ "$CONFIG_8xx" = "y" ]; then
if [ "$CONFIG_TQM8xxL" = "y" ]; then
diff -urN linux-2.4.25/drivers/mtd/maps/Makefile
linux-2.4.25-mtd_patch/drivers/mtd/maps/Makefile
--- linux-2.4.25/drivers/mtd/maps/Makefile 2004-04-22 22:04:32.000000000
+0200
+++ linux-2.4.25-mtd_patch/drivers/mtd/maps/Makefile 2004-04-22
21:54:06.000000000 +0200
@@ -63,6 +63,7 @@
obj-$(CONFIG_MTD_ARCTIC) += arctic-mtd.o
obj-$(CONFIG_MTD_H720X) += h720x-flash.o
obj-$(CONFIG_MTD_SBC8240) += sbc8240.o
+obj-$(CONFIG_MTD_MVME2100) += mvme2100.o
obj-$(CONFIG_MTD_NOR_TOTO) += omap-toto-flash.o
obj-$(CONFIG_MTD_MPC1211) += mpc1211.o
obj-$(CONFIG_MTD_IXP425) += ixp425.o
diff -urN linux-2.4.25/drivers/mtd/maps/mvme2100.c
linux-2.4.25-mtd_patch/drivers/mtd/maps/mvme2100.c
--- linux-2.4.25/drivers/mtd/maps/mvme2100.c 1970-01-01
01:00:00.000000000 +0100
+++ linux-2.4.25-mtd_patch/drivers/mtd/maps/mvme2100.c 2004-04-22
21:54:06.000000000 +0200
@@ -0,0 +1,115 @@
+/*
+ * Handle mapping of the flash on MVME2100 boards.
+ *
+ * Author: Oliver Korpilla
+ * Copyright: (C) 2004 Systerra Computer GmbH
+ *
+ * Modelled after the mbx860.c
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License version 2 as
+ * published by the Free Software Foundation.
+ *
+ */
+
+#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>
+
+
+/* Soldered flash bank starts here */
+#define FLASH_ADDR 0xff000000
+/* Soldered flash bank contains 4MB by default */
+#define FLASH_SIZE 0x00400000
+
+/* Flash partition sizes */
+/* Reserve 1MB for the kernel */
+#define KERNEL_PARTITION_OFFSET 0x0
+#define KERNEL_PARTITION_SIZE 0x100000
+/* Use the other 3MB for the root filesystem */
+#define ROOTFS_PARTITION_OFFSET 0x100000
+#define ROOTFS_PARTITION_SIZE 0x2C0000
+
+
+#define NUM_PARTITIONS 2
+
+/* partition_info gives details on the logical partitions that the
split the
+ * single flash device into. If the size if zero we use up to the end
of the
+ * device. */
+static struct mtd_partition partition_info[]=
+ {
+ {
+ .name = "MVME2100 flash BOOT partition",
+ .offset = KERNEL_PARTITION_OFFSET,
+ .size = KERNEL_PARTITION_SIZE
+ },
+ {
+ .name = "MVME2100 flash rootfs partition",
+ .offset = ROOTFS_PARTITION_OFFSET,
+ .size = ROOTFS_PARTITION_SIZE
+ }
+ };
+
+static struct mtd_info *mymtd;
+
+struct map_info mvme2100_map = {
+ .name = "MVME2100 flash",
+ .size = FLASH_SIZE,
+ .phys = FLASH_ADDR,
+ .buswidth = 4,
+};
+
+int __init init_mvme2100(void)
+{
+ printk(KERN_NOTICE "Motorola MVME2100 flash device: 0x%x at 0x%x\n",
FLASH_SIZE, FLASH_ADDR);
+
+ /* Remap flash physical to a virtual address */
+ mvme2100_map.virt = (unsigned long)ioremap(FLASH_ADDR, FLASH_SIZE);
+
+ /* Check for a failed mapping */
+ if (!mvme2100_map.virt) {
+ printk("Failed to ioremap\n");
+ return -EIO;
+ }
+ /* Initialize with the map data */
+ simple_map_init(&mvme2100_map);
+
+ /* Probe for a JEDEC chip */
+ mymtd = do_map_probe("jedec_probe", &mvme2100_map);
+
+ /* Setup devices and partitions */
+ if (mymtd) {
+ mymtd->owner = THIS_MODULE;
+ add_mtd_device(mymtd);
+ add_mtd_partitions(mymtd, partition_info, NUM_PARTITIONS);
+ return 0;
+ }
+
+ /* Unmap the temporary virtual address */
+ iounmap((void *)mvme2100_map.virt);
+ return -ENXIO;
+}
+
+static void __exit cleanup_mvme2100(void)
+{
+ if (mymtd) {
+ del_mtd_device(mymtd);
+ map_destroy(mymtd);
+ }
+ if (mvme2100_map.virt) {
+ iounmap((void *)mvme2100_map.virt);
+ mvme2100_map.virt = 0;
+ }
+}
+
+module_init(init_mvme2100);
+module_exit(cleanup_mvme2100);
+
+MODULE_AUTHOR("Oliver Korpilla <okorpil@fh-landshut.de>");
+MODULE_DESCRIPTION("MTD map driver for Motorola MVME2100 board");
+MODULE_LICENSE("GPL");
next reply other threads:[~2004-04-26 11:05 UTC|newest]
Thread overview: 3+ messages / expand[flat|nested] mbox.gz Atom feed top
2004-04-26 11:03 Oliver Korpilla [this message]
[not found] <3236F92B82933347807DFF6A8BA63280D74675@wcosmb04.cos.agilent.com>
2004-04-26 17:43 ` Newbie help! - Old AMD (cfi_cmdset_0002) interleaved flash problems Shawn Jin
2004-04-26 19:57 ` Oliver Korpilla
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=408CEC97.4030905@fh-landshut.de \
--to=okorpil@fh-landshut.de \
--cc=linux-mtd@lists.infradead.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.