public inbox for linux-mtd@lists.infradead.org
 help / color / mirror / Atom feed
* [PATCH] MTD: Add support for the PM82x Boards.
@ 2005-11-21 10:34 Heiko Schocher
  2005-11-21 20:29 ` David Woodhouse
  2005-11-23 12:11 ` [PATCH] MTD: Add P3P440 MTD support Stefan Roese
  0 siblings, 2 replies; 8+ messages in thread
From: Heiko Schocher @ 2005-11-21 10:34 UTC (permalink / raw)
  To: linuxppc-dev; +Cc: linux-mtd

Hello,

the following Patch (against 2.6 kernel.org tree, COMMIT_ID:
f093182d313edde9b1f86dbdaf40ba4da2dbd0e7) adds support for
the NOR flashes and for the DiskOnChip on the PM82X Boards
from Microsys.

Signed-off-by: Heiko Schocher <hs@denx.de>

---
 drivers/mtd/chips/jedec_probe.c |   50 +++++
 drivers/mtd/devices/docprobe.c  |    4
 drivers/mtd/maps/Kconfig        |    6 +
 drivers/mtd/maps/Makefile       |    1
 drivers/mtd/maps/pm82x.c        |  360
+++++++++++++++++++++++++++++++++++++++
 drivers/mtd/nand/diskonchip.c   |    4
 6 files changed, 425 insertions(+), 0 deletions(-)

diff --git a/drivers/mtd/chips/jedec_probe.c
b/drivers/mtd/chips/jedec_probe.c
index edb306c..e230127 100644
--- a/drivers/mtd/chips/jedec_probe.c
+++ b/drivers/mtd/chips/jedec_probe.c
@@ -104,6 +104,11 @@
 #define I28F320B3B	0x8897
 #define I28F640B3T	0x8898
 #define I28F640B3B	0x8899
+#define I28F640C3B	0x88CD
+#define I28F160F3T	0x88F3
+#define I28F160F3B	0x88F4
+#define I28F160C3T	0x88C2
+#define I28F160C3B	0x88C3
 #define I82802AB	0x00ad
 #define I82802AC	0x00ac

@@ -1080,6 +1085,51 @@ static const struct amd_flash_info jedec
 		}
 	}, {
 		.mfr_id		= MANUFACTURER_INTEL,
+		.dev_id		= I28F640C3B,
+		.name		= "Intel 28F640C3B",
+		.uaddr		= {
+			[0] = MTD_UADDR_UNNECESSARY,    /* x8 */
+			[1] = MTD_UADDR_UNNECESSARY,    /* x16 */
+		},
+		.DevSize	= SIZE_8MiB,
+		.CmdSet		= P_ID_INTEL_STD,
+		.NumEraseRegions= 2,
+		.regions	= {
+			ERASEINFO(0x02000, 8),
+			ERASEINFO(0x10000, 127),
+		}
+	}, {
+		.mfr_id		= MANUFACTURER_INTEL,
+		.dev_id		= I28F160C3B,
+		.name		= "Intel 28F160C3B",
+		.uaddr		= {
+			[0] = MTD_UADDR_UNNECESSARY,    /* x8 */
+			[1] = MTD_UADDR_UNNECESSARY,    /* x16 */
+		},
+		.DevSize	= SIZE_2MiB,
+		.CmdSet		= P_ID_INTEL_STD,
+		.NumEraseRegions= 2,
+		.regions	= {
+			ERASEINFO(0x02000, 8),
+			ERASEINFO(0x10000, 31),
+		}
+	}, {
+		.mfr_id		= MANUFACTURER_INTEL,
+		.dev_id		= I28F160C3T,
+		.name		= "Intel 28F160C3T",
+		.uaddr		= {
+			[0] = MTD_UADDR_UNNECESSARY,    /* x8 */
+			[1] = MTD_UADDR_UNNECESSARY,    /* x16 */
+		},
+		.DevSize	= SIZE_2MiB,
+		.CmdSet		= P_ID_INTEL_STD,
+		.NumEraseRegions= 2,
+		.regions	= {
+			ERASEINFO(0x10000, 31),
+			ERASEINFO(0x02000, 8),
+		}
+	}, {
+		.mfr_id		= MANUFACTURER_INTEL,
 		.dev_id		= I82802AB,
 		.name		= "Intel 82802AB",
 		.uaddr		= {
diff --git a/drivers/mtd/devices/docprobe.c b/drivers/mtd/devices/docprobe.c
index 13178b9..b051bc7 100644
--- a/drivers/mtd/devices/docprobe.c
+++ b/drivers/mtd/devices/docprobe.c
@@ -81,7 +81,11 @@ static unsigned long __initdata doc_loca
 	0xe8000, 0xea000, 0xec000, 0xee000,
 #endif /*  CONFIG_MTD_DOCPROBE_HIGH */
 #elif defined(__PPC__)
+#if defined(CONFIG_PM82X)
+	0xff800000,
+#else
 	0xe4000000,
+#endif
 #elif defined(CONFIG_MOMENCO_OCELOT)
 	0x2f000000,
         0xff000000,
diff --git a/drivers/mtd/maps/Kconfig b/drivers/mtd/maps/Kconfig
index 846a533..237abe8 100644
--- a/drivers/mtd/maps/Kconfig
+++ b/drivers/mtd/maps/Kconfig
@@ -256,6 +256,12 @@ config MTD_SBC8240
           Flash access on the SBC8240 board from Wind River.  See
           <http://www.windriver.com/products/sbc8240/>

+config MTD_PM82X
+	tristate "Flash device on PM82X Boards"
+	depends on PPC32 && 6xx && 8260 && MTD_COMPLEX_MAPPINGS && MTD_PARTITIONS
+	help
+	  Flash access on the PM82X boards from Microsys.
+
 config MTD_TQM8XXL
 	tristate "CFI Flash device mapped on TQM8XXL"
 	depends on MTD_CFI && TQM8xxL
diff --git a/drivers/mtd/maps/Makefile b/drivers/mtd/maps/Makefile
index 7d9e940..ecdc515 100644
--- a/drivers/mtd/maps/Makefile
+++ b/drivers/mtd/maps/Makefile
@@ -73,3 +73,4 @@ obj-$(CONFIG_MTD_OMAP_NOR)	+= omap_nor.o
 obj-$(CONFIG_MTD_PQ2FADS)	+= pq2fads.o
 obj-$(CONFIG_MTD_MTX1)		+= mtx-1_flash.o
 obj-$(CONFIG_MTD_TQM834x)	+= tqm834x.o
+obj-$(CONFIG_MTD_PM82X)	+= pm82x.o
diff --git a/drivers/mtd/maps/pm82x.c b/drivers/mtd/maps/pm82x.c
new file mode 100644
index 0000000..dc0bc48
--- /dev/null
+++ b/drivers/mtd/maps/pm82x.c
@@ -0,0 +1,360 @@
+/*
+ * Copyright(C) 2005
+ * Wolfgang Denk, DENX Software Engineering, <wd@denx.de>
+ *
+ * Copyright(C) 2005
+ * Josef Wagner, MicroSys GmbH <wagner@microsys.de>
+ *
+ * This code is GPLed
+ *
+ */
+
+/*
+ * PM825/PM826 uses 4 x Intel 28F160C3B (16 Mbit)
+ * 4 x Intel 28F160C3 (16 Mbit) in one bank (64 bit bankwidth)
+ * for a total of 8MB flash
+ *
+ * PM827/PM828 uses 4 x Intel 28F640C3 (64 Mbit)
+ * in one bank (64 bit bankwidth)
+ * for a total of 32MB flash
+
+ * Thus we have to chose:
+ * - Support 64-bit bankwidth => CONFIG_MTD_CFI_B8
+ * - Support 4-chip flash interleave => CONFIG_MTD_CFI_I4
+*/
+#include <linux/config.h>
+#include <linux/init.h>
+#include <linux/module.h>
+#include <linux/types.h>
+#include <linux/kernel.h>
+#include <linux/slab.h>
+#include <linux/interrupt.h>
+#include <asm/io.h>
+#include <asm/ppcboot.h>
+
+#include <linux/mtd/mtd.h>
+#include <linux/mtd/map.h>
+#include <linux/mtd/partitions.h>
+
+#if 0	/* Debugging turned off */
+# define debugk(fmt,args...)	printk(fmt ,##args)
+#else
+# define debugk(fmt,args...)
+#endif
+
+#define FLASH_BANK_MAX 1
+
+/* The "residual" data board information structure the boot loader
+ * hands to us.
+ */
+extern unsigned char __res[];
+
+/* trivial struct to describe partition information */
+struct mtd_part_def
+{
+	int nums;
+	unsigned char *type;
+	struct mtd_partition* mtd_part;
+};
+
+static struct mtd_info* mtd_banks[FLASH_BANK_MAX];
+static struct map_info* map_banks[FLASH_BANK_MAX];
+static struct mtd_part_def part_banks[FLASH_BANK_MAX];
+static unsigned long num_banks;
+static unsigned long start_scan_addr;
+
+static map_word pm82x_read64(struct map_info *map, unsigned long ofs)
+{
+	map_word val;
+	val.x[0] = *((volatile __u32 *)(map->map_priv_1 + ofs));
+	val.x[1] = *(((volatile __u32 *)(map->map_priv_1 + ofs)) + 1);
+	return val;
+}
+
+static void pm82x_copy_from(struct map_info *map,
+		void *to, unsigned long from, ssize_t len)
+{
+	memcpy_fromio(to, (void *)(map->map_priv_1 + from), len);
+}
+
+static void pm82x_write64 (struct map_info *map, map_word map_d,
+		unsigned long adr)
+{
+	ulong addr = map->map_priv_1 + adr;
+	__u64 d = ((__u64)map_d.x[0] << 32) + map_d.x[1];
+	__u64 * data = &d;
+	ulong flags;
+	volatile ulong msr;
+	ulong saved_msr;
+	volatile long saved_fr[2];
+
+	local_irq_save (flags);
+
+	__asm__ __volatile__ ("mfmsr %0" : "=r" (msr):);
+	saved_msr = msr;
+	msr |= MSR_FP;
+	msr &= ~(MSR_FE0 | MSR_FE1);
+
+	__asm__ __volatile__ (
+		"mtmsr %0\n"
+		"isync\n"
+		:
+		: "r" (msr));
+
+	__asm__ __volatile__ (
+		"stfd 1, 0(%2)\n"
+		"lfd  1, 0(%0)\n"
+		"stfd 1, 0(%1)\n"
+		"lfd  1, 0(%2)\n"
+		 :
+		 : "r" (data), "r" (addr), "b" (saved_fr)
+	);
+
+	__asm__ __volatile__ (
+		"mtmsr %0\n"
+		"isync\n"
+		:
+		: "r" (saved_msr));
+
+	local_irq_restore (flags);
+}
+
+static void pm82x_copy_to(struct map_info *map,
+		unsigned long to, const void *from, ssize_t len)
+{
+	memcpy_toio((void *)(map->map_priv_1 + to), from, len);
+}
+
+/*
+ * The following defines the partition layout of PM825/PM826 boards.
+ *
+ * See include/linux/mtd/partitions.h for definition of the
+ * mtd_partition structure.
+ *
+ */
+
+#ifdef CONFIG_MTD_PARTITIONS
+/* partition definition for first (and only) flash bank
+ * also ref. to "drivers/char/flash_config.c"
+ */
+static struct mtd_partition pm82x_partitions_8M[] = {
+	{
+		name:		"U-Boot",		/* U-Boot image		*/
+		offset:		0x00000000,
+		size:		0x00040000,		/* 256 KB		*/
+	},
+	{
+		name:		"kernel",		/* Linux kernel image	*/
+		offset:		0x00040000,
+		size:		0x000C0000,		/* 768 KB		*/
+	},
+	{
+		name:		"ramdisk",		/* Ramdisk image	*/
+		offset:		0x00100000,
+		size:		0x00300000,		/* 3 MB			*/
+	},
+	{
+		name:		"user",			/* User file system	*/
+		offset:		0x00400000,
+		size:		0x00400000,		/* 4 MB			*/
+	},
+};
+
+static struct mtd_partition pm82x_partitions_32M[] = {
+	{
+		name:		"U-Boot",		/* U-Boot image		*/
+		offset:		0x00000000,
+		size:		0x00040000,		/* 256 KB		*/
+	},
+	{
+		name:		"kernel",		/* Linux kernel image	*/
+		offset:		0x00040000,
+		size:		0x000C0000,		/* 768 KB		*/
+	},
+	{
+		name:		"ramdisk",		/* Ramdisk image	*/
+		offset:		0x00100000,
+		size:		0x00300000,		/* 3 MB			*/
+	},
+	{
+		name:		"user",			/* User file system	*/
+		offset:		0x00400000,
+		size:		0x01C00000,		/* 28 MB		*/
+	},
+};
+
+#endif	/* CONFIG_MTD_PARTITIONS */
+
+#define NB_OF(x) (sizeof (x) / sizeof (x[0]))
+
+int __init init_pm82x_mtd(void)
+{
+	int idx = 0, ret = 0;
+	unsigned long flash_addr, flash_size, mtd_size = 0;
+
+	/* pointer to PM82x board info data */
+	bd_t *bd = (bd_t *)__res;
+
+#ifdef CONFIG_MTD_CMDLINE_PARTS
+	int n;
+	char mtdid[10];
+	const char *part_probes[] = { "cmdlinepart", NULL };
+#endif
+
+	flash_addr = bd->bi_flashstart;
+	flash_size = bd->bi_flashsize;
+
+	/* request maximum flash size address space */
+	start_scan_addr = (unsigned long)ioremap(flash_addr, flash_size);
+	if (!start_scan_addr) {
+		printk("%s: Failed to ioremap address: 0x%lx\n",
+			__FUNCTION__, flash_addr);
+		return -EIO;
+	}
+
+	for(idx = 0 ; idx < FLASH_BANK_MAX ; idx++) {
+		if (mtd_size >= flash_size)
+			break;
+
+		debugk ("%s: chip probing count %d\n", __FUNCTION__, idx);
+
+		map_banks[idx] = (struct map_info *)kmalloc(sizeof(struct map_info),
+							GFP_KERNEL);
+		if (map_banks[idx] == NULL) {
+			ret = -ENOMEM;
+			goto error_mem;
+		}
+		memset((void *)map_banks[idx], 0, sizeof(struct map_info));
+		map_banks[idx]->name = (char *)kmalloc(16, GFP_KERNEL);
+		if (map_banks[idx]->name == NULL) {
+			ret = -ENOMEM;
+			goto error_mem;
+		}
+		memset((void *)map_banks[idx]->name, 0, 16);
+
+		sprintf(map_banks[idx]->name, "PM82x-%d", idx);
+		map_banks[idx]->size	  = flash_size;
+		map_banks[idx]->bankwidth = 8;
+		map_banks[idx]->read	  = pm82x_read64;
+		map_banks[idx]->copy_from = pm82x_copy_from;
+		map_banks[idx]->write	  = pm82x_write64;
+		map_banks[idx]->copy_to	  = pm82x_copy_to;
+		map_banks[idx]->map_priv_1=
+			start_scan_addr + ((idx > 0) ?
+			(mtd_banks[idx-1] ? mtd_banks[idx-1]->size : 0) : 0);
+
+		/* start to probe flash chips */
+		mtd_banks[idx] = do_map_probe("jedec_probe", map_banks[idx]);
+		if (mtd_banks[idx]) {
+			mtd_banks[idx]->owner = THIS_MODULE;
+			mtd_size += mtd_banks[idx]->size;
+			num_banks++;
+			debugk ("%s: bank %ld, name: %s, size: %d bytes \n",
+				__FUNCTION__,
+				num_banks,
+				mtd_banks[idx]->name,
+				mtd_banks[idx]->size);
+		}
+	}
+
+	/* no supported flash chips found */
+	if (!num_banks) {
+		printk("PM82x: No supported flash chips found!\n");
+		ret = -ENXIO;
+		goto error_mem;
+	}
+
+#ifdef CONFIG_MTD_PARTITIONS
+	/*
+	 * Select static partition definitions
+	 */
+	if (flash_size == 0x800000) {
+		part_banks[0].mtd_part	= pm82x_partitions_8M;
+		part_banks[0].nums	= NB_OF(pm82x_partitions_8M);
+	} else {
+		part_banks[0].mtd_part	= pm82x_partitions_32M;
+		part_banks[0].nums	= NB_OF(pm82x_partitions_32M);
+	}
+	part_banks[0].type	= "static image";
+
+	for(idx = 0; idx < num_banks ; idx++) {
+#ifdef CONFIG_MTD_CMDLINE_PARTS
+		sprintf(mtdid, "%d", idx);
+		n = parse_mtd_partitions(mtd_banks[idx],
+						part_probes,
+						&part_banks[idx].mtd_part,
+						0);
+		debugk ("%s: %d command line partitions on bank %s\n",
+			__FUNCTION__, n, mtdid);
+		if (n > 0) {
+			part_banks[idx].type = "command line";
+			part_banks[idx].nums = n;
+		}
+#endif	/* CONFIG_MTD_CMDLINE_PARTS */
+
+		if (part_banks[idx].nums == 0) {
+			printk (KERN_NOTICE
+					"PM82x flash bank %d: no partition info "
+					"available, registering whole device\n", idx);
+			add_mtd_device(mtd_banks[idx]);
+		} else {
+			printk (KERN_NOTICE
+					"PM82x flash bank %d: Using %s partition "
+					"definition\n", idx, part_banks[idx].type);
+			add_mtd_partitions (mtd_banks[idx],
+					part_banks[idx].mtd_part,
+					part_banks[idx].nums);
+		}
+	}
+#else	/* ! CONFIG_MTD_PARTITIONS */
+	printk (KERN_NOTICE "PM82x flash: registering %d flash banks "
+			"at once\n", num_banks);
+
+	for(idx = 0 ; idx < num_banks ; idx++) {
+		add_mtd_device(mtd_banks[idx]);
+	}
+#endif	/* CONFIG_MTD_PARTITIONS */
+
+	return 0;
+error_mem:
+	for (idx = 0 ; idx < FLASH_BANK_MAX ; idx++) {
+		if (map_banks[idx] != NULL) {
+			if (map_banks[idx]->name != NULL) {
+				kfree(map_banks[idx]->name);
+				map_banks[idx]->name = NULL;
+			}
+			kfree(map_banks[idx]);
+			map_banks[idx] = NULL;
+		}
+	}
+
+	iounmap((void *)start_scan_addr);
+
+	return ret;
+}
+
+static void __exit cleanup_pm82x_mtd(void)
+{
+	unsigned int idx = 0;
+	for(idx = 0 ; idx < num_banks ; idx++) {
+		/* destroy mtd_info previously allocated */
+		if (mtd_banks[idx]) {
+			del_mtd_partitions(mtd_banks[idx]);
+			map_destroy(mtd_banks[idx]);
+		}
+		/* release map_info not used anymore */
+		kfree(map_banks[idx]->name);
+		kfree(map_banks[idx]);
+	}
+	if (start_scan_addr) {
+		iounmap((void *)start_scan_addr);
+		start_scan_addr = 0;
+	}
+}
+
+module_init(init_pm82x_mtd);
+module_exit(cleanup_pm82x_mtd);
+
+MODULE_LICENSE("GPL");
+MODULE_AUTHOR("Wolfgang Denk <wd@denx.de>");
+MODULE_DESCRIPTION("MTD map driver for PM82x boards");
diff --git a/drivers/mtd/nand/diskonchip.c b/drivers/mtd/nand/diskonchip.c
index 21d4e8f..bf7cf54 100644
--- a/drivers/mtd/nand/diskonchip.c
+++ b/drivers/mtd/nand/diskonchip.c
@@ -55,7 +55,11 @@ static unsigned long __initdata doc_loca
 	0xe8000, 0xea000, 0xec000, 0xee000,
 #endif /*  CONFIG_MTD_DOCPROBE_HIGH */
 #elif defined(__PPC__)
+#if defined(CONFIG_PM82X)
+	0xff800000,
+#else
 	0xe4000000,
+#endif
 #elif defined(CONFIG_MOMENCO_OCELOT)
 	0x2f000000,
         0xff000000,


\f

!-------------------------------------------------------------flip-

^ permalink raw reply related	[flat|nested] 8+ messages in thread

* Re: [PATCH] MTD: Add support for the PM82x Boards.
  2005-11-21 10:34 [PATCH] MTD: Add support for the PM82x Boards Heiko Schocher
@ 2005-11-21 20:29 ` David Woodhouse
  2005-11-22  6:18   ` Heiko Schocher
  2005-11-23 12:11 ` [PATCH] MTD: Add P3P440 MTD support Stefan Roese
  1 sibling, 1 reply; 8+ messages in thread
From: David Woodhouse @ 2005-11-21 20:29 UTC (permalink / raw)
  To: hs; +Cc: linuxppc-dev, linux-mtd

On Mon, 2005-11-21 at 11:34 +0100, Heiko Schocher wrote:
> Hello,
> 
> the following Patch (against 2.6 kernel.org tree, COMMIT_ID:
> f093182d313edde9b1f86dbdaf40ba4da2dbd0e7) adds support for
> the NOR flashes and for the DiskOnChip on the PM82X Boards
> from Microsys.

Please use the new DiskOnChip driver in drivers/mtd/nand/ not the old
one.

-- 
dwmw2

^ permalink raw reply	[flat|nested] 8+ messages in thread

* RE: [PATCH] MTD: Add support for the PM82x Boards.
  2005-11-21 20:29 ` David Woodhouse
@ 2005-11-22  6:18   ` Heiko Schocher
  2005-11-23 10:39     ` Thomas Gleixner
  0 siblings, 1 reply; 8+ messages in thread
From: Heiko Schocher @ 2005-11-22  6:18 UTC (permalink / raw)
  To: David Woodhouse; +Cc: linuxppc-dev, linux-mtd

Hello,

On Monday, November 21, 2005 9:30 PM David Woodhouse wrote:
>> the following Patch (against 2.6 kernel.org tree, COMMIT_ID:
>> f093182d313edde9b1f86dbdaf40ba4da2dbd0e7) adds support for
>> the NOR flashes and for the DiskOnChip on the PM82X Boards
>> from Microsys.
> 
> Please use the new DiskOnChip driver in drivers/mtd/nand/ not the old
> one.

I use the new driver.
I made the changes in drivers/mtd/devices/docprobe.c,  because I
ported it from the 2.4 Kernel. Should I delete this and resubmit
the patch?

thanks
Heiko

^ permalink raw reply	[flat|nested] 8+ messages in thread

* RE: [PATCH] MTD: Add support for the PM82x Boards.
  2005-11-22  6:18   ` Heiko Schocher
@ 2005-11-23 10:39     ` Thomas Gleixner
  0 siblings, 0 replies; 8+ messages in thread
From: Thomas Gleixner @ 2005-11-23 10:39 UTC (permalink / raw)
  To: hs; +Cc: linuxppc-dev, David Woodhouse, linux-mtd

On Tue, 2005-11-22 at 07:18 +0100, Heiko Schocher wrote:
> > Please use the new DiskOnChip driver in drivers/mtd/nand/ not the old
> > one.
> 
> I use the new driver.
> I made the changes in drivers/mtd/devices/docprobe.c,  because I
> ported it from the 2.4 Kernel. Should I delete this and resubmit
> the patch?

Yes, please.

	tglx

^ permalink raw reply	[flat|nested] 8+ messages in thread

* [PATCH] MTD: Add P3P440 MTD support
  2005-11-21 10:34 [PATCH] MTD: Add support for the PM82x Boards Heiko Schocher
  2005-11-21 20:29 ` David Woodhouse
@ 2005-11-23 12:11 ` Stefan Roese
  2005-11-24 11:29   ` Thomas Gleixner
  1 sibling, 1 reply; 8+ messages in thread
From: Stefan Roese @ 2005-11-23 12:11 UTC (permalink / raw)
  To: linux-mtd

[-- Attachment #1: Type: text/plain, Size: 148 bytes --]

This patch adds MTD support (NOR FLASH) for the Prodrive P3P440
(440GP) PMC module.

Signed-off-by: Stefan Roese <sr@denx.de>

Best regards,
Stefan

[-- Attachment #2: add-p3p440-mtd-support.patch --]
[-- Type: text/x-diff, Size: 5313 bytes --]

This patch adds MTD support (NOR FLASH) for the Prodrive P3P440
(440GP) PMC module.

Signed-off-by: Stefan Roese <sr@denx.de>

---
commit 5bca0cf9bea1ea8f04e7292266da040ef8a13b80
tree 70398872c104f16d34eb64a8560029d3839e46ad
parent 1778d55edb62753a92b979fa57072c2e1ff3d062
author Stefan Roese <sr@denx.de> Wed, 23 Nov 2005 13:09:39 +0100
committer Stefan Roese <sr@denx.de> Wed, 23 Nov 2005 13:09:39 +0100

 drivers/mtd/maps/Kconfig  |    8 +++
 drivers/mtd/maps/Makefile |    1 
 drivers/mtd/maps/p3p440.c |  135 +++++++++++++++++++++++++++++++++++++++++++++
 3 files changed, 144 insertions(+), 0 deletions(-)

diff --git a/drivers/mtd/maps/Kconfig b/drivers/mtd/maps/Kconfig
index 846a533..4f618eb 100644
--- a/drivers/mtd/maps/Kconfig
+++ b/drivers/mtd/maps/Kconfig
@@ -339,6 +339,14 @@ config MTD_OCOTEA
 	  Ocotea board. If you have one of these boards and would like to
 	  use the flash chips on it, say 'Y'.
 
+config MTD_P3P440
+	tristate "Flash devices mapped on Prodrive P3P440"
+	depends on MTD_CFI && P3P440
+	help
+	  This enables access routined for the flash chips on the Prodrive
+	  P3P440 board.  If you have this board and would like to use the
+	  flash chips on it, say 'Y'.
+
 config MTD_REDWOOD
 	tristate "CFI Flash devices mapped on IBM Redwood"
 	depends on MTD_CFI && ( REDWOOD_4 || REDWOOD_5 || REDWOOD_6 )
diff --git a/drivers/mtd/maps/Makefile b/drivers/mtd/maps/Makefile
index 7d9e940..73a681a 100644
--- a/drivers/mtd/maps/Makefile
+++ b/drivers/mtd/maps/Makefile
@@ -73,3 +73,4 @@ obj-$(CONFIG_MTD_OMAP_NOR)	+= omap_nor.o
 obj-$(CONFIG_MTD_PQ2FADS)	+= pq2fads.o
 obj-$(CONFIG_MTD_MTX1)		+= mtx-1_flash.o
 obj-$(CONFIG_MTD_TQM834x)	+= tqm834x.o
+obj-$(CONFIG_MTD_P3P440)	+= p3p440.o
diff --git a/drivers/mtd/maps/p3p440.c b/drivers/mtd/maps/p3p440.c
new file mode 100644
index 0000000..443fbb6
--- /dev/null
+++ b/drivers/mtd/maps/p3p440.c
@@ -0,0 +1,135 @@
+/*
+ * $Id: $
+ *
+ * drivers/mtd/maps/p3p440.c
+ *
+ * Mapping for Prodrive P3P440 flash
+ *
+ * Copyright (c) 2005 DENX Software Engineering
+ * Stefan Roese <sr@denx.de>
+ *
+ * This program is free software; you can redistribute  it and/or modify it
+ * under  the terms of  the GNU General  Public License as published by the
+ * Free Software Foundation;  either version 2 of the  License, or (at your
+ * option) any later version.
+ */
+
+#include <linux/config.h>
+#include <linux/module.h>
+#include <linux/types.h>
+#include <linux/kernel.h>
+#include <linux/init.h>
+
+#include <linux/mtd/mtd.h>
+#include <linux/mtd/map.h>
+#include <linux/mtd/partitions.h>
+
+#include <asm/io.h>
+#include <asm/ibm4xx.h>
+#include <asm/ppcboot.h>
+
+extern bd_t __res;
+
+#define RW_PART0_OF	0
+#define RW_PART0_SZ	0x180000
+#define RW_PART1_OF	RW_PART0_OF + RW_PART0_SZ
+#define RW_PART1_SZ	0x280000
+#define RW_PART2_OF	RW_PART1_OF + RW_PART1_SZ
+/* Partition 2 will be autosized dynamically... */
+#define RW_PART3_SZ	0x40000
+#define RW_PART4_SZ	0x40000
+
+static struct mtd_partition p3p440_flash_partitions[] = {
+	{
+		.name = "kernel",
+		.offset = RW_PART0_OF,
+		.size = RW_PART0_SZ
+	},
+	{
+		.name = "root",
+		.offset = RW_PART1_OF,
+		.size = RW_PART1_SZ,
+	},
+	{
+		.name = "user",
+		.offset = RW_PART2_OF,
+/*		.size = RW_PART2_SZ */ /* will be adjusted dynamically */
+	},
+	{
+		.name = "env",
+/*		.offset = RW_PART3_OF, */ /* will be adjusted dynamically */
+		.size = RW_PART3_SZ,
+	},
+	{
+		.name = "u-boot",
+/*		.offset = RW_PART4_OF, */ /* will be adjusted dynamically */
+		.size = RW_PART4_SZ,
+	}
+};
+
+struct map_info p3p440_flash_map = {
+	.name = "p3p440-flash",
+	.bankwidth = 2,
+};
+
+static struct mtd_info *p3p440_mtd;
+
+int __init init_p3p440_flash(void)
+{
+	unsigned long long flash_base;
+	unsigned long flash_size;
+
+	flash_base = __res.bi_flashstart | 0x0000000100000000LL;
+	flash_size = __res.bi_flashsize;
+
+	p3p440_flash_map.size = flash_size;
+	p3p440_flash_map.phys = flash_base;
+	p3p440_flash_map.virt = ioremap64(flash_base,
+					  p3p440_flash_map.size);
+
+
+	if (!p3p440_flash_map.virt) {
+		printk("init_p3p440_flash: failed to ioremap\n");
+		return -EIO;
+	}
+
+	/*
+	 * Adjust partitions to flash size
+	 */
+	p3p440_flash_partitions[2].size = p3p440_flash_map.size -
+		RW_PART0_SZ - RW_PART1_SZ - RW_PART3_SZ - RW_PART4_SZ;
+	p3p440_flash_partitions[3].offset = p3p440_flash_partitions[2].size +
+		RW_PART2_OF;
+	p3p440_flash_partitions[4].offset = p3p440_flash_partitions[3].size +
+		p3p440_flash_partitions[3].offset;
+
+	simple_map_init(&p3p440_flash_map);
+
+	p3p440_mtd = do_map_probe("cfi_probe", &p3p440_flash_map);
+
+	if (p3p440_mtd) {
+		p3p440_mtd->owner = THIS_MODULE;
+		return add_mtd_partitions(p3p440_mtd,
+					  p3p440_flash_partitions,
+					  ARRAY_SIZE(p3p440_flash_partitions));
+	}
+
+	return -ENXIO;
+}
+
+static void __exit cleanup_p3p440_flash(void)
+{
+	if (p3p440_mtd) {
+		del_mtd_partitions(p3p440_mtd);
+		/* moved iounmap after map_destroy - armin */
+		map_destroy(p3p440_mtd);
+		iounmap((void *)p3p440_flash_map.virt);
+	}
+}
+
+module_init(init_p3p440_flash);
+module_exit(cleanup_p3p440_flash);
+
+MODULE_LICENSE("GPL");
+MODULE_AUTHOR("Stefan Roese <sr@denx.de>");
+MODULE_DESCRIPTION("MTD map and partitions for Prodrive P3P440 board");


\f

!-------------------------------------------------------------flip-



^ permalink raw reply related	[flat|nested] 8+ messages in thread

* Re: [PATCH] MTD: Add P3P440 MTD support
  2005-11-23 12:11 ` [PATCH] MTD: Add P3P440 MTD support Stefan Roese
@ 2005-11-24 11:29   ` Thomas Gleixner
  2005-11-24 20:44     ` Stefan Roese
  0 siblings, 1 reply; 8+ messages in thread
From: Thomas Gleixner @ 2005-11-24 11:29 UTC (permalink / raw)
  To: Stefan Roese; +Cc: linux-mtd

On Wed, 2005-11-23 at 13:11 +0100, Stefan Roese wrote:
> This patch adds MTD support (NOR FLASH) for the Prodrive P3P440
> (440GP) PMC module.
> 
> Signed-off-by: Stefan Roese <sr@denx.de>
>
> +config MTD_P3P440
> +       tristate "Flash devices mapped on Prodrive P3P440"
> +       depends on MTD_CFI && P3P440
> +       help
> +         This enables access routined for the flash chips on the Prodrive

routined ?

> +         P3P440 board.  If you have this board and would like to use the
> +         flash chips on it, say 'Y'.
> +
> +#define RW_PART0_OF    0
> +#define RW_PART0_SZ    0x180000
> +#define RW_PART1_OF    RW_PART0_OF + RW_PART0_SZ
> +#define RW_PART1_SZ    0x280000
> +#define RW_PART2_OF    RW_PART1_OF + RW_PART1_SZ
> +/* Partition 2 will be autosized dynamically... */
> +#define RW_PART3_SZ    0x40000
> +#define RW_PART4_SZ    0x40000
> +
> +static struct mtd_partition p3p440_flash_partitions[] = {
> +       {
> +               .name = "kernel",
> +               .offset = RW_PART0_OF,
> +               .size = RW_PART0_SZ
> +       },
> +       {
> +               .name = "root",
> +               .offset = RW_PART1_OF,

Please use .offset = MTDPART_OFS_APPEND,

> +               .size = RW_PART1_SZ,
> +       },
> +       {
> +               .name = "user",
> +               .offset = RW_PART2_OF,

Please use .offset = MTDPART_OFS_APPEND,

> +/*             .size = RW_PART2_SZ */ /* will be adjusted dynamically */
> +       },
> +       {
> +               .name = "env",
> +/*             .offset = RW_PART3_OF, */ /* will be adjusted dynamically */

Please use .offset = MTDPART_OFS_APPEND,

> +               .size = RW_PART3_SZ,
> +       },
> +       {
> +               .name = "u-boot",
> +/*             .offset = RW_PART4_OF, */ /* will be adjusted dynamically */

Please use .offset = MTDPART_OFS_APPEND,

> +               .size = RW_PART4_SZ,
> +       }
> +};
> +
> +struct map_info p3p440_flash_map = {

static

> +       .name = "p3p440-flash",
> +       .bankwidth = 2,
> +};
> +
> +static struct mtd_info *p3p440_mtd;
> +
> +int __init init_p3p440_flash(void)

static

> +{
> +       unsigned long long flash_base;
> +       unsigned long flash_size;
> +
> +       flash_base = __res.bi_flashstart | 0x0000000100000000LL;
> +       flash_size = __res.bi_flashsize;
> +
> +       p3p440_flash_map.size = flash_size;
> +       p3p440_flash_map.phys = flash_base;
> +       p3p440_flash_map.virt = ioremap64(flash_base,
> +                                         p3p440_flash_map.size);
> +
> +
> +       if (!p3p440_flash_map.virt) {
> +               printk("init_p3p440_flash: failed to ioremap\n");

printk log level missing

> +               return -EIO;
> +       }
> +
> +       /*
> +        * Adjust partitions to flash size
> +        */
> +       p3p440_flash_partitions[2].size = p3p440_flash_map.size -
> +               RW_PART0_SZ - RW_PART1_SZ - RW_PART3_SZ - RW_PART4_SZ;

<NOT_NECESSARY_WITH_MTD_OFS_APPEND>
> +       p3p440_flash_partitions[3].offset = p3p440_flash_partitions[2].size +
> +               RW_PART2_OF;
> +       p3p440_flash_partitions[4].offset = p3p440_flash_partitions[3].size +
> +               p3p440_flash_partitions[3].offset;
> +
</NOT_NECESSARY_WITH_MTD_OFS_APPEND>


> +       simple_map_init(&p3p440_flash_map);
> +
> +       p3p440_mtd = do_map_probe("cfi_probe", &p3p440_flash_map);
> +
> +       if (p3p440_mtd) {
> +               p3p440_mtd->owner = THIS_MODULE;
> +               return add_mtd_partitions(p3p440_mtd,
> +                                         p3p440_flash_partitions,
> +                                         ARRAY_SIZE(p3p440_flash_partitions));
> +       }
> +
> +       return -ENXIO;
> +}
> +
> +static void __exit cleanup_p3p440_flash(void)
> +{
> +       if (p3p440_mtd) {
> +               del_mtd_partitions(p3p440_mtd);
> +               /* moved iounmap after map_destroy - armin */

Is this comment relevant for understanding the code ?
	
> +               map_destroy(p3p440_mtd);
> +               iounmap((void *)p3p440_flash_map.virt);

Bogus type cast	of void* to void*

> +       }
> +}
> +
> +module_init(init_p3p440_flash);
> +module_exit(cleanup_p3p440_flash);
> +
> +MODULE_LICENSE("GPL");
> +MODULE_AUTHOR("Stefan Roese <sr@denx.de>");
> +MODULE_DESCRIPTION("MTD map and partitions for Prodrive P3P440 board");

	
	tglx

^ permalink raw reply	[flat|nested] 8+ messages in thread

* Re: [PATCH] MTD: Add P3P440 MTD support
  2005-11-24 11:29   ` Thomas Gleixner
@ 2005-11-24 20:44     ` Stefan Roese
  2005-11-24 21:24       ` Thomas Gleixner
  0 siblings, 1 reply; 8+ messages in thread
From: Stefan Roese @ 2005-11-24 20:44 UTC (permalink / raw)
  To: linux-mtd; +Cc: tglx

[-- Attachment #1: Type: text/plain, Size: 4070 bytes --]

On Thursday 24 November 2005 12:29, Thomas Gleixner wrote:
> On Wed, 2005-11-23 at 13:11 +0100, Stefan Roese wrote:
> > This patch adds MTD support (NOR FLASH) for the Prodrive P3P440
> > (440GP) PMC module.
> >
> > Signed-off-by: Stefan Roese <sr@denx.de>
> >
> > +config MTD_P3P440
> > +       tristate "Flash devices mapped on Prodrive P3P440"
> > +       depends on MTD_CFI && P3P440
> > +       help
> > +         This enables access routined for the flash chips on the
> > Prodrive
>
> routined ?

Fixed.

> > +         P3P440 board.  If you have this board and would like to use the
> > +         flash chips on it, say 'Y'.
> > +
> > +#define RW_PART0_OF    0
> > +#define RW_PART0_SZ    0x180000
> > +#define RW_PART1_OF    RW_PART0_OF + RW_PART0_SZ
> > +#define RW_PART1_SZ    0x280000
> > +#define RW_PART2_OF    RW_PART1_OF + RW_PART1_SZ
> > +/* Partition 2 will be autosized dynamically... */
> > +#define RW_PART3_SZ    0x40000
> > +#define RW_PART4_SZ    0x40000
> > +
> > +static struct mtd_partition p3p440_flash_partitions[] = {
> > +       {
> > +               .name = "kernel",
> > +               .offset = RW_PART0_OF,
> > +               .size = RW_PART0_SZ
> > +       },
> > +       {
> > +               .name = "root",
> > +               .offset = RW_PART1_OF,
>
> Please use .offset = MTDPART_OFS_APPEND,

Done. Thanks for the tip.

<snip>

> > +               .size = RW_PART4_SZ,
> > +       }
> > +};
> > +
> > +struct map_info p3p440_flash_map = {
>
> static

Done.

> > +       .name = "p3p440-flash",
> > +       .bankwidth = 2,
> > +};
> > +
> > +static struct mtd_info *p3p440_mtd;
> > +
> > +int __init init_p3p440_flash(void)
>
> static

Dito.

> > +{
> > +       unsigned long long flash_base;
> > +       unsigned long flash_size;
> > +
> > +       flash_base = __res.bi_flashstart | 0x0000000100000000LL;
> > +       flash_size = __res.bi_flashsize;
> > +
> > +       p3p440_flash_map.size = flash_size;
> > +       p3p440_flash_map.phys = flash_base;
> > +       p3p440_flash_map.virt = ioremap64(flash_base,
> > +                                         p3p440_flash_map.size);
> > +
> > +
> > +       if (!p3p440_flash_map.virt) {
> > +               printk("init_p3p440_flash: failed to ioremap\n");
>
> printk log level missing

Done.

> > +               return -EIO;
> > +       }
> > +
> > +       /*
> > +        * Adjust partitions to flash size
> > +        */
> > +       p3p440_flash_partitions[2].size = p3p440_flash_map.size -
> > +               RW_PART0_SZ - RW_PART1_SZ - RW_PART3_SZ - RW_PART4_SZ;
>
> <NOT_NECESSARY_WITH_MTD_OFS_APPEND>
>
> > +       p3p440_flash_partitions[3].offset =
> > p3p440_flash_partitions[2].size + +               RW_PART2_OF;
> > +       p3p440_flash_partitions[4].offset =
> > p3p440_flash_partitions[3].size + +              
> > p3p440_flash_partitions[3].offset;
> > +
>
> </NOT_NECESSARY_WITH_MTD_OFS_APPEND>

Removed.

> > +       simple_map_init(&p3p440_flash_map);
> > +
> > +       p3p440_mtd = do_map_probe("cfi_probe", &p3p440_flash_map);
> > +
> > +       if (p3p440_mtd) {
> > +               p3p440_mtd->owner = THIS_MODULE;
> > +               return add_mtd_partitions(p3p440_mtd,
> > +                                         p3p440_flash_partitions,
> > +                                        
> > ARRAY_SIZE(p3p440_flash_partitions)); +       }
> > +
> > +       return -ENXIO;
> > +}
> > +
> > +static void __exit cleanup_p3p440_flash(void)
> > +{
> > +       if (p3p440_mtd) {
> > +               del_mtd_partitions(p3p440_mtd);
> > +               /* moved iounmap after map_destroy - armin */
>
> Is this comment relevant for understanding the code ?

Relict from "copy and paste". Removed.

> > +               map_destroy(p3p440_mtd);
> > +               iounmap((void *)p3p440_flash_map.virt);
>
> Bogus type cast	of void* to void*

Fixed.

Please let me know, if this version is still not acceptable:

This patch adds MTD support (NOR FLASH) for the Prodrive P3P440
(440GP) PMC module.

Signed-off-by: Stefan Roese <sr@denx.de>

Best regards,
Stefan

[-- Attachment #2: add-p3p440-mtd-support-2.patch --]
[-- Type: text/x-diff, Size: 4240 bytes --]

diff --git a/drivers/mtd/maps/Kconfig b/drivers/mtd/maps/Kconfig
index 846a533..97c37ec 100644
--- a/drivers/mtd/maps/Kconfig
+++ b/drivers/mtd/maps/Kconfig
@@ -339,6 +339,14 @@ config MTD_OCOTEA
 	  Ocotea board. If you have one of these boards and would like to
 	  use the flash chips on it, say 'Y'.
 
+config MTD_P3P440
+	tristate "Flash devices mapped on Prodrive P3P440"
+	depends on MTD_CFI && P3P440
+	help
+	  This enables access routines for the flash chips on the Prodrive
+	  P3P440 board.  If you have this board and would like to use the
+	  flash chips on it, say 'Y'.
+
 config MTD_REDWOOD
 	tristate "CFI Flash devices mapped on IBM Redwood"
 	depends on MTD_CFI && ( REDWOOD_4 || REDWOOD_5 || REDWOOD_6 )
diff --git a/drivers/mtd/maps/Makefile b/drivers/mtd/maps/Makefile
index 7d9e940..73a681a 100644
--- a/drivers/mtd/maps/Makefile
+++ b/drivers/mtd/maps/Makefile
@@ -73,3 +73,4 @@ obj-$(CONFIG_MTD_OMAP_NOR)	+= omap_nor.o
 obj-$(CONFIG_MTD_PQ2FADS)	+= pq2fads.o
 obj-$(CONFIG_MTD_MTX1)		+= mtx-1_flash.o
 obj-$(CONFIG_MTD_TQM834x)	+= tqm834x.o
+obj-$(CONFIG_MTD_P3P440)	+= p3p440.o
diff --git a/drivers/mtd/maps/p3p440.c b/drivers/mtd/maps/p3p440.c
new file mode 100644
index 0000000..54be1e1
--- /dev/null
+++ b/drivers/mtd/maps/p3p440.c
@@ -0,0 +1,126 @@
+/*
+ * $Id: $
+ *
+ * drivers/mtd/maps/p3p440.c
+ *
+ * Mapping for Prodrive P3P440 flash
+ *
+ * Copyright (c) 2005 DENX Software Engineering
+ * Stefan Roese <sr@denx.de>
+ *
+ * This program is free software; you can redistribute  it and/or modify it
+ * under  the terms of  the GNU General  Public License as published by the
+ * Free Software Foundation;  either version 2 of the  License, or (at your
+ * option) any later version.
+ */
+
+#include <linux/config.h>
+#include <linux/module.h>
+#include <linux/types.h>
+#include <linux/kernel.h>
+#include <linux/init.h>
+
+#include <linux/mtd/mtd.h>
+#include <linux/mtd/map.h>
+#include <linux/mtd/partitions.h>
+
+#include <asm/io.h>
+#include <asm/ibm4xx.h>
+#include <asm/ppcboot.h>
+
+extern bd_t __res;
+
+#define RW_PART0_OF	0
+#define RW_PART0_SZ	0x180000
+#define RW_PART1_SZ	0x280000
+/* Partition 2 will be autosized dynamically... */
+#define RW_PART3_SZ	0x40000
+#define RW_PART4_SZ	0x40000
+
+static struct mtd_partition p3p440_flash_partitions[] = {
+	{
+		.name = "kernel",
+		.offset = RW_PART0_OF,
+		.size = RW_PART0_SZ
+	},
+	{
+		.name = "root",
+		.offset = MTDPART_OFS_APPEND,
+		.size = RW_PART1_SZ,
+	},
+	{
+		.name = "user",
+		.offset = MTDPART_OFS_APPEND,
+/*		.size = RW_PART2_SZ */ /* will be adjusted dynamically */
+	},
+	{
+		.name = "env",
+		.offset = MTDPART_OFS_APPEND,
+		.size = RW_PART3_SZ,
+	},
+	{
+		.name = "u-boot",
+		.offset = MTDPART_OFS_APPEND,
+		.size = RW_PART4_SZ,
+	}
+};
+
+static struct map_info p3p440_flash_map = {
+	.name = "p3p440-flash",
+	.bankwidth = 2,
+};
+
+static struct mtd_info *p3p440_mtd;
+
+static int __init init_p3p440_flash(void)
+{
+	unsigned long long flash_base;
+	unsigned long flash_size;
+
+	flash_base = __res.bi_flashstart | 0x0000000100000000LL;
+	flash_size = __res.bi_flashsize;
+
+	p3p440_flash_map.size = flash_size;
+	p3p440_flash_map.phys = flash_base;
+	p3p440_flash_map.virt = ioremap64(flash_base, p3p440_flash_map.size);
+
+	if (!p3p440_flash_map.virt) {
+		printk(KERN_NOTICE "init_p3p440_flash: failed to ioremap\n");
+		return -EIO;
+	}
+
+	/*
+	 * Adjust partitions to flash size
+	 */
+	p3p440_flash_partitions[2].size = p3p440_flash_map.size -
+		RW_PART0_SZ - RW_PART1_SZ - RW_PART3_SZ - RW_PART4_SZ;
+
+	simple_map_init(&p3p440_flash_map);
+
+	p3p440_mtd = do_map_probe("cfi_probe", &p3p440_flash_map);
+
+	if (p3p440_mtd) {
+		p3p440_mtd->owner = THIS_MODULE;
+		return add_mtd_partitions(p3p440_mtd,
+					  p3p440_flash_partitions,
+					  ARRAY_SIZE(p3p440_flash_partitions));
+	}
+
+	return -ENXIO;
+}
+
+static void __exit cleanup_p3p440_flash(void)
+{
+	if (p3p440_mtd) {
+		del_mtd_partitions(p3p440_mtd);
+		map_destroy(p3p440_mtd);
+		iounmap(p3p440_flash_map.virt);
+	}
+}
+
+module_init(init_p3p440_flash);
+module_exit(cleanup_p3p440_flash);
+
+MODULE_LICENSE("GPL");
+MODULE_AUTHOR("Stefan Roese <sr@denx.de>");
+MODULE_DESCRIPTION("MTD map and partitions for Prodrive P3P440 board");

^ permalink raw reply related	[flat|nested] 8+ messages in thread

* Re: [PATCH] MTD: Add P3P440 MTD support
  2005-11-24 20:44     ` Stefan Roese
@ 2005-11-24 21:24       ` Thomas Gleixner
  0 siblings, 0 replies; 8+ messages in thread
From: Thomas Gleixner @ 2005-11-24 21:24 UTC (permalink / raw)
  To: Stefan Roese; +Cc: linux-mtd

On Thu, 2005-11-24 at 21:44 +0100, Stefan Roese wrote:
> Please let me know, if this version is still not acceptable:

Looks good. Thanks for cooperation.

Enqueued into the pending patch queue, which gets committed in the next
days.

	tglx


PS: One really nitpicking comment

+/*             .size = RW_PART2_SZ */ /* will be adjusted dynamically */

looks ugly and twists my brain :)

^ permalink raw reply	[flat|nested] 8+ messages in thread

end of thread, other threads:[~2005-11-24 21:19 UTC | newest]

Thread overview: 8+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2005-11-21 10:34 [PATCH] MTD: Add support for the PM82x Boards Heiko Schocher
2005-11-21 20:29 ` David Woodhouse
2005-11-22  6:18   ` Heiko Schocher
2005-11-23 10:39     ` Thomas Gleixner
2005-11-23 12:11 ` [PATCH] MTD: Add P3P440 MTD support Stefan Roese
2005-11-24 11:29   ` Thomas Gleixner
2005-11-24 20:44     ` Stefan Roese
2005-11-24 21:24       ` Thomas Gleixner

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox