public inbox for linux-mtd@lists.infradead.org
 help / color / mirror / Atom feed
* [PATCH] extend physmap.c to support run-time adding partitions
@ 2003-10-23  1:25 Jun Sun
       [not found] ` <20031023153307.GA11669@wohnheim.fh-wedel.de>
  2003-10-27 18:17 ` Jun Sun
  0 siblings, 2 replies; 18+ messages in thread
From: Jun Sun @ 2003-10-23  1:25 UTC (permalink / raw)
  To: linux-mtd

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


While looking at drvers/mtd/maps directories, it becomes
obvious to me that many files are derived from physmap.c,
in order to add partition support or add their own
set_vpp() pointer, etc..

Such a need can be easily satisfied by extending physmap.c
a little.

In this patch, I like to introduce phsmap_add_partition()
function, which allows boards to add flash partitions
at run-time.  (Note that you can still override this
hardcoded partition by using kernel command line)

In the patch I also showed how a board can make use of this
extension.  Hopefully we can get rid of lots of files under 
the maps directory. :)

Boards which need to set set_vpp pointer can do so easily
too.

Any comments?

Jun

[-- Attachment #2: mtd-physmap-support-partitions.patch --]
[-- Type: text/plain, Size: 5231 bytes --]

diff -Nru linux/arch/mips/mips-boards/malta/malta_setup.c.orig linux/arch/mips/mips-boards/malta/malta_setup.c
--- linux/arch/mips/mips-boards/malta/malta_setup.c.orig	Fri Aug  1 10:50:18 2003
+++ linux/arch/mips/mips-boards/malta/malta_setup.c	Wed Oct 22 17:26:24 2003
@@ -24,6 +24,7 @@
 #ifdef CONFIG_BLK_DEV_IDE
 #include <linux/ide.h>
 #endif
+#include <linux/mtd/physmap.h>
 
 #include <asm/cpu.h>
 #include <asm/bootinfo.h>
@@ -166,6 +167,12 @@
         conswitchp = &dummy_con;
 #endif
 #endif
+
+#if defined(CONFIG_MTD_PHYSMAP) && defined(CONFIG_MTD_PARTITIONS)
+	physmap_add_partition("YAMON", 0x100000, 0x0, MTD_WRITEABLE);
+	physmap_add_partition("User FS", 0x300000, 0x100000, 0);
+#endif
+
 	mips_reboot_setup();
 
 	board_time_init = mips_time_init;
diff -Nru linux/drivers/mtd/maps/physmap.c.orig linux/drivers/mtd/maps/physmap.c
--- linux/drivers/mtd/maps/physmap.c.orig	Wed Jul 23 15:17:52 2003
+++ linux/drivers/mtd/maps/physmap.c	Wed Oct 22 17:42:50 2003
@@ -2,6 +2,11 @@
  * $Id: physmap.c,v 1.28 2003/05/28 15:53:43 dwmw2 Exp $
  *
  * Normal mappings of chips in physical memory
+ *
+ * Copyright (C) 2003 MontaVista Software Inc.
+ * Author: Jun Sun, jsun@mvista.com or jsun@junsun.net
+ *
+ * 031022 - [jsun] add physmap_add_partition()
  */
 
 #include <linux/module.h>
@@ -23,7 +28,7 @@
 
 
 struct map_info physmap_map = {
-	.name = "Physically mapped flash",
+	.name = "phys_mapped_flash",
 	.size = WINDOW_SIZE,
 	.buswidth = BUSWIDTH,
 	.phys = WINDOW_ADDR,
@@ -33,35 +38,31 @@
 static struct mtd_partition *mtd_parts;
 static int                   mtd_parts_nb;
 
-static struct mtd_partition physmap_partitions[] = {
-#if 0
-/* Put your own partition definitions here */
-	{
-		.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,
+#define NUM_PARTITIONS	4	/* random num which should be good enough */
+static struct mtd_partition physmap_partitions[NUM_PARTITIONS] __initdata = {};
+
+char *part_probes[] __initdata = {"cmdlinepart", "RedBoot", NULL};
+
+/*
+ * See include/linux/mtd/physmap.h file.
+ */
+static int part_index __initdata = 0;
+int __init physmap_add_partition(char *name, u32 size, u32 offset, u32 flags)
+{
+	if (part_index >= NUM_PARTITIONS) {
+		printk(KERN_ERR "physmap_add_partition() exceeds max partition table size (%d)\n", NUM_PARTITIONS);
+		return -1;
 	}
-#endif
-};
 
-#define NUM_PARTITIONS	(sizeof(physmap_partitions)/sizeof(struct mtd_partition))
-const char *part_probes[] = {"cmdlinepart", "RedBoot", NULL};
+	physmap_partitions[part_index].name = name;
+	physmap_partitions[part_index].size = size;
+	physmap_partitions[part_index].offset = offset;
+	physmap_partitions[part_index].mask_flags = flags;
+
+	part_index++;
 
+	return 0;
+}
 #endif /* CONFIG_MTD_PARTITIONS */
 
 int __init init_physmap(void)
@@ -97,11 +98,11 @@
 			return 0;
 		}
 
-		if (NUM_PARTITIONS != 0) 
+		if (part_index != 0) 
 		{
 			printk(KERN_NOTICE 
 			       "Using physmap partition definition\n");
-			add_mtd_partitions (mymtd, physmap_partitions, NUM_PARTITIONS);
+			add_mtd_partitions (mymtd, physmap_partitions, part_index);
 			return 0;
 		}
 
diff -Nru linux/include/linux/mtd/physmap.h.orig linux/include/linux/mtd/physmap.h
--- linux/include/linux/mtd/physmap.h.orig	Wed Oct 22 17:05:22 2003
+++ linux/include/linux/mtd/physmap.h	Wed Oct 22 18:20:34 2003
@@ -0,0 +1,48 @@
+/*
+ * For boards with physically mapped flash and using 
+ * drivers/mtd/maps/physmap.c mapping driver.
+ *
+ * Copyright (C) 2003 MontaVista Software Inc.
+ * Author: Jun Sun, jsun@mvista.com or jsun@junsun.net
+ *
+ * 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.
+ *
+ */
+
+#ifndef __LINUX_MTD_PHYSMAP__
+
+#include <linux/config.h>
+
+#if defined(CONFIG_MTD_PHYSMAP) 
+
+#include <linux/mtd/mtd.h>
+#include <linux/mtd/map.h>
+
+/*
+ * The map_info for physmap.  Board can override size, buswidth, phys,
+ * (*set_vpp)(), etc in their initial setup routine.
+ */
+extern struct map_info physmap_map;
+
+#if defined(CONFIG_MTD_PARTITIONS)
+
+/*
+ * Machines that wish to do flash partition may want to call this function in 
+ * their setup routine.  Examples:
+ *
+ *	physmap_add_partition("bootROM", 0x100000, 0, MTD_WRITEABLE);
+ *	physmap_add_partition("User FS", 0x300000, 0x100000, 0)
+ *
+ * Note that one can always override this hard-coded partition with 
+ * command line partition (you need to enable CONFIG_MTD_CMDLINE_PARTS).
+ */
+int physmap_add_partition(char *name, u32 size, u32 offset, u32 mask_flags);
+
+#endif /* defined(CONFIG_MTD_PARTITIONS) */
+#endif /* defined(CONFIG_MTD) */
+
+#endif /* __LINUX_MTD_PHYSMAP__ */
+

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

* Re: [PATCH] extend physmap.c to support run-time adding partitions
       [not found] ` <20031023153307.GA11669@wohnheim.fh-wedel.de>
@ 2003-10-23 17:03   ` Jun Sun
  2003-10-23 17:31     ` Jörn Engel
  0 siblings, 1 reply; 18+ messages in thread
From: Jun Sun @ 2003-10-23 17:03 UTC (permalink / raw)
  To: Jörn Engel, linux-mtd

On Thu, Oct 23, 2003 at 05:33:07PM +0200, Jörn Engel wrote:
> On Wed, 22 October 2003 18:25:58 -0700, Jun Sun wrote:
> > 
> > While looking at drvers/mtd/maps directories, it becomes
> > obvious to me that many files are derived from physmap.c,
> > in order to add partition support or add their own
> > set_vpp() pointer, etc..
> > 
> > Such a need can be easily satisfied by extending physmap.c
> > a little.
> > 
> > In this patch, I like to introduce phsmap_add_partition()
> > function, which allows boards to add flash partitions
> > at run-time.  (Note that you can still override this
> > hardcoded partition by using kernel command line)
> > 
> > In the patch I also showed how a board can make use of this
> > extension.  Hopefully we can get rid of lots of files under 
> > the maps directory. :)
> 
> For most people, you saved source code size and wasted binary size.
> The very same people are far more concerned about binary size. :)
>

Ahh, note that I turned a couple of functions and data into
__init kind.  That should make space-conservative people happy.
 
> I've tried to clean this up before and failed, but maybe you can do a
> better job.  Good luck!
>

What was the main objection?  I can list quite a few benefits:

1. remove _lots_ of duplicated mapping files, which also means
   a cleaner CONFIG_xxx space and a simpler Makefile.
2. the board-specific partition setup is now done in arch/<xxx>/<board>/setup.c
   which means when a board is deleted, its flash support is automatically
   removed.  (Not so with current arrangement)
3. futher _common_ improvement is possible.  For example, for most MIPS boards
   we don't need ioremap to access the flash area - CPU has a fixed uncached
   mapping to physical space.  Now we can just modify one file and benefts
   about almost 20 boards.

Jun

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

* Re: [PATCH] extend physmap.c to support run-time adding partitions
  2003-10-23 17:03   ` Jun Sun
@ 2003-10-23 17:31     ` Jörn Engel
  2003-10-23 17:43       ` Jun Sun
  0 siblings, 1 reply; 18+ messages in thread
From: Jörn Engel @ 2003-10-23 17:31 UTC (permalink / raw)
  To: Jun Sun; +Cc: linux-mtd

On Thu, 23 October 2003 10:03:04 -0700, Jun Sun wrote:
> On Thu, Oct 23, 2003 at 05:33:07PM +0200, Jörn Engel wrote:
> > On Wed, 22 October 2003 18:25:58 -0700, Jun Sun wrote:
> > > 
> > > While looking at drvers/mtd/maps directories, it becomes
> > > obvious to me that many files are derived from physmap.c,
> > > in order to add partition support or add their own
> > > set_vpp() pointer, etc..
> > > 
> > > Such a need can be easily satisfied by extending physmap.c
> > > a little.
> > > 
> > > In this patch, I like to introduce phsmap_add_partition()
> > > function, which allows boards to add flash partitions
> > > at run-time.  (Note that you can still override this
> > > hardcoded partition by using kernel command line)
> > > 
> > > In the patch I also showed how a board can make use of this
> > > extension.  Hopefully we can get rid of lots of files under 
> > > the maps directory. :)
> > 
> > For most people, you saved source code size and wasted binary size.
> > The very same people are far more concerned about binary size. :)
> >
> 
> Ahh, note that I turned a couple of functions and data into
> __init kind.  That should make space-conservative people happy.

__init still shows up in flash, though.

> > I've tried to clean this up before and failed, but maybe you can do a
> > better job.  Good luck!
> 
> What was the main objection?  I can list quite a few benefits:
> 
> 1. remove _lots_ of duplicated mapping files, which also means
>    a cleaner CONFIG_xxx space and a simpler Makefile.
> 2. the board-specific partition setup is now done in arch/<xxx>/<board>/setup.c
>    which means when a board is deleted, its flash support is automatically
>    removed.  (Not so with current arrangement)
> 3. futher _common_ improvement is possible.  For example, for most MIPS boards
>    we don't need ioremap to access the flash area - CPU has a fixed uncached
>    mapping to physical space.  Now we can just modify one file and benefts
>    about almost 20 boards.

o All those translate to improvements in the source code.  How about the
binary?  Compile with and without patch and post the kernel image
size.  And remember that noone will use two map files at the same time
in the real world.

o Copy and paste is simple.  So simple in fact, that everyone does it,
as you have observed.  Why make it more complicated, unless you have
clear advantages.


Yes, I like the basic idea, tried to do it myself.  But what's the use
if all your users care about binary size and that increases?

Jörn

-- 
"Translations are and will always be problematic. They inflict violence 
upon two languages." (translation from German)

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

* Re: [PATCH] extend physmap.c to support run-time adding partitions
  2003-10-23 17:31     ` Jörn Engel
@ 2003-10-23 17:43       ` Jun Sun
  2003-10-23 18:15         ` Jörn Engel
  0 siblings, 1 reply; 18+ messages in thread
From: Jun Sun @ 2003-10-23 17:43 UTC (permalink / raw)
  To: Jörn Engel; +Cc: linux-mtd

On Thu, Oct 23, 2003 at 07:31:48PM +0200, Jörn Engel wrote:
> On Thu, 23 October 2003 10:03:04 -0700, Jun Sun wrote:
> > On Thu, Oct 23, 2003 at 05:33:07PM +0200, Jörn Engel wrote:
> > > On Wed, 22 October 2003 18:25:58 -0700, Jun Sun wrote:
> > > > 
> > > > While looking at drvers/mtd/maps directories, it becomes
> > > > obvious to me that many files are derived from physmap.c,
> > > > in order to add partition support or add their own
> > > > set_vpp() pointer, etc..
> > > > 
> > > > Such a need can be easily satisfied by extending physmap.c
> > > > a little.
> > > > 
> > > > In this patch, I like to introduce phsmap_add_partition()
> > > > function, which allows boards to add flash partitions
> > > > at run-time.  (Note that you can still override this
> > > > hardcoded partition by using kernel command line)
> > > > 
> > > > In the patch I also showed how a board can make use of this
> > > > extension.  Hopefully we can get rid of lots of files under 
> > > > the maps directory. :)
> > > 
> > > For most people, you saved source code size and wasted binary size.
> > > The very same people are far more concerned about binary size. :)
> > >
> > 
> > Ahh, note that I turned a couple of functions and data into
> > __init kind.  That should make space-conservative people happy.
> 
> __init still shows up in flash, though.
> 
> > > I've tried to clean this up before and failed, but maybe you can do a
> > > better job.  Good luck!
> > 
> > What was the main objection?  I can list quite a few benefits:
> > 
> > 1. remove _lots_ of duplicated mapping files, which also means
> >    a cleaner CONFIG_xxx space and a simpler Makefile.
> > 2. the board-specific partition setup is now done in arch/<xxx>/<board>/setup.c
> >    which means when a board is deleted, its flash support is automatically
> >    removed.  (Not so with current arrangement)
> > 3. futher _common_ improvement is possible.  For example, for most MIPS boards
> >    we don't need ioremap to access the flash area - CPU has a fixed uncached
> >    mapping to physical space.  Now we can just modify one file and benefts
> >    about almost 20 boards.
> 
> o All those translate to improvements in the source code.  How about the
> binary?  Compile with and without patch and post the kernel image
> size.  And remember that noone will use two map files at the same time
> in the real world.
> 
> o Copy and paste is simple.  So simple in fact, that everyone does it,
> as you have observed.  Why make it more complicated, unless you have
> clear advantages.
> 

... as if my previous listings are not advantages. :)

> 
> Yes, I like the basic idea, tried to do it myself.  But what's the use
> if all your users care about binary size and that increases?
>

I find it hard to belive this patch would increase kernel size.
Can someone using existing propriatary mapping driver apply this 
patch, switch to use physmap.c, and let us know the size increase?

How much increase would you start to really care in a typical .5M to 2M
kernel?  1K or 10K or 100K?  I think the increase should be minimum if any.

Actually I don't see any increase at all if the proprietary file is a strict copy
of physmap.c.

Jun

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

* Re: [PATCH] extend physmap.c to support run-time adding partitions
  2003-10-23 17:43       ` Jun Sun
@ 2003-10-23 18:15         ` Jörn Engel
  2003-10-23 20:04           ` Jun Sun
  0 siblings, 1 reply; 18+ messages in thread
From: Jörn Engel @ 2003-10-23 18:15 UTC (permalink / raw)
  To: Jun Sun; +Cc: linux-mtd

On Thu, 23 October 2003 10:43:20 -0700, Jun Sun wrote:
> > 
> > o All those translate to improvements in the source code.  How about the
> > binary?  Compile with and without patch and post the kernel image
> > size.  And remember that noone will use two map files at the same time
> > in the real world.
> > 
> > o Copy and paste is simple.  So simple in fact, that everyone does it,
> > as you have observed.  Why make it more complicated, unless you have
> > clear advantages.
> 
> ... as if my previous listings are not advantages. :)

They are, no doubt.  But there are disadvantages as well.

> > Yes, I like the basic idea, tried to do it myself.  But what's the use
> > if all your users care about binary size and that increases?
> 
> I find it hard to belive this patch would increase kernel size.
> Can someone using existing propriatary mapping driver apply this 
> patch, switch to use physmap.c, and let us know the size increase?
> 
> How much increase would you start to really care in a typical .5M to 2M
> kernel?  1K or 10K or 100K?  I think the increase should be minimum if any.

I don't know and I don't care.  You want the patch in, you show the
numbers or convince David otherwise.

Jörn

-- 
All art is but imitation of nature.
-- Lucius Annaeus Seneca

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

* Re: [PATCH] extend physmap.c to support run-time adding partitions
  2003-10-23 18:15         ` Jörn Engel
@ 2003-10-23 20:04           ` Jun Sun
  2003-10-23 23:57             ` Jun Sun
  0 siblings, 1 reply; 18+ messages in thread
From: Jun Sun @ 2003-10-23 20:04 UTC (permalink / raw)
  To: Jörn Engel; +Cc: linux-mtd

On Thu, Oct 23, 2003 at 08:15:41PM +0200, Jörn Engel wrote:
> On Thu, 23 October 2003 10:43:20 -0700, Jun Sun wrote:
> > > 
> > > o All those translate to improvements in the source code.  How about the
> > > binary?  Compile with and without patch and post the kernel image
> > > size.  And remember that noone will use two map files at the same time
> > > in the real world.
> > > 
> > > o Copy and paste is simple.  So simple in fact, that everyone does it,
> > > as you have observed.  Why make it more complicated, unless you have
> > > clear advantages.
> > 
> > ... as if my previous listings are not advantages. :)
> 
> They are, no doubt.  But there are disadvantages as well.
> 
> > > Yes, I like the basic idea, tried to do it myself.  But what's the use
> > > if all your users care about binary size and that increases?
> > 
> > I find it hard to belive this patch would increase kernel size.
> > Can someone using existing propriatary mapping driver apply this 
> > patch, switch to use physmap.c, and let us know the size increase?
> > 
> > How much increase would you start to really care in a typical .5M to 2M
> > kernel?  1K or 10K or 100K?  I think the increase should be minimum if any.
> 
> I don't know and I don't care.  You want the patch in, you show the
> numbers or convince David otherwise.
>

I will do some numbers, but I don't really buy your logic.  I said
"This patch is great" and you are one who said it increases the size.
It seems to me you need to prove your claim. :)

Jun

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

* Re: [PATCH] extend physmap.c to support run-time adding partitions
  2003-10-23 20:04           ` Jun Sun
@ 2003-10-23 23:57             ` Jun Sun
  2003-10-28  8:22               ` Holger Schurig
  0 siblings, 1 reply; 18+ messages in thread
From: Jun Sun @ 2003-10-23 23:57 UTC (permalink / raw)
  To: Jörn Engel; +Cc: linux-mtd

On Thu, Oct 23, 2003 at 01:04:06PM -0700, Jun Sun wrote:
> On Thu, Oct 23, 2003 at 08:15:41PM +0200, Jörn Engel wrote:
> > On Thu, 23 October 2003 10:43:20 -0700, Jun Sun wrote:
> > > > 
> > > > o All those translate to improvements in the source code.  How about the
> > > > binary?  Compile with and without patch and post the kernel image
> > > > size.  And remember that noone will use two map files at the same time
> > > > in the real world.
> > > > 
> > > > o Copy and paste is simple.  So simple in fact, that everyone does it,
> > > > as you have observed.  Why make it more complicated, unless you have
> > > > clear advantages.
> > > 
> > > ... as if my previous listings are not advantages. :)
> > 
> > They are, no doubt.  But there are disadvantages as well.
> > 
> > > > Yes, I like the basic idea, tried to do it myself.  But what's the use
> > > > if all your users care about binary size and that increases?
> > > 
> > > I find it hard to belive this patch would increase kernel size.
> > > Can someone using existing propriatary mapping driver apply this 
> > > patch, switch to use physmap.c, and let us know the size increase?
> > > 
> > > How much increase would you start to really care in a typical .5M to 2M
> > > kernel?  1K or 10K or 100K?  I think the increase should be minimum if any.
> > 
> > I don't know and I don't care.  You want the patch in, you show the
> > numbers or convince David otherwise.
> >
> 
> I will do some numbers, 
<snip>

OK, I converted jmr3927 flash driver to use physmap and kernel size increases
by whopping 96 bytes!  See the ELF header dump below. :)

Meanwhile, we sadly announce the loss of drivers/mtd/maps/jmr3927-flash.c
file and the death of CONFIG_MTD_JMR3927 (not in MTD tree yet).  :0


Jun

-------------------------------------------

original vmlinux with no modification:

vmlinux.orig:     file format elf32-tradlittlemips

Sections:
Idx Name          Size      VMA       LMA       File off  Algn
  0 .text         001aa080  80050000  80050000  00001000  2**5
                  CONTENTS, ALLOC, LOAD, READONLY, CODE
  1 .fixup        00001250  801fa080  801fa080  001ab080  2**0
                  CONTENTS, ALLOC, LOAD, READONLY, CODE
  2 .kstrtab      00005000  801fb2d0  801fb2d0  001ac2d0  2**2
                  CONTENTS, ALLOC, LOAD, READONLY, DATA
  3 __ex_table    000016d8  802002d0  802002d0  001b12d0  2**2
                  CONTENTS, ALLOC, LOAD, READONLY, DATA
  4 __dbe_table   00000000  802019a8  802019a8  001b29a8  2**0
                  CONTENTS, ALLOC, LOAD, READONLY, DATA
  5 __ksymtab     000025a8  802019a8  802019a8  001b29a8  2**2
                  CONTENTS, ALLOC, LOAD, READONLY, DATA
  6 .data.init_task 00002000  80204000  80204000  001b5000  2**3
                  CONTENTS, ALLOC, LOAD, DATA
  7 .text.init    0001757c  80206000  80206000  001b7000  2**2
                  CONTENTS, ALLOC, LOAD, READONLY, CODE
  8 .data.init    00005070  8021d57c  8021d57c  001ce57c  2**2
                  CONTENTS, ALLOC, LOAD, DATA
  9 .setup.init   000000e8  802225f0  802225f0  001d35f0  2**2
                  CONTENTS, ALLOC, LOAD, DATA
 10 .initcall.init 000000ac  802226d8  802226d8  001d36d8  2**2
                  CONTENTS, ALLOC, LOAD, DATA
 11 .data.cacheline_aligned 00001470  80223000  80223000  001d4000  2**4
                  CONTENTS, ALLOC, LOAD, DATA
 12 .reginfo      00000018  80224470  80224470  001d5470  2**2
                  CONTENTS, ALLOC, LOAD, READONLY, DATA, LINK_ONCE_SAME_SIZE
 13 .data         0001a000  80225000  80225000  001d6000  2**12
                  CONTENTS, ALLOC, LOAD, DATA
 14 .bss          0002ce90  8023f000  8023f000  001f0000  2**4
                  ALLOC
 15 .comment      00002cce  8026be90  8026be90  001f0000  2**0
                  CONTENTS, READONLY
 16 .pdr          00027ae0  00000000  00000000  001f2cd0  2**2
                  CONTENTS, READONLY
 17 .mdebug.abi32 00000000  00000000  00000000  0021a7b0  2**0
                  CONTENTS, READONLY
 
-------------------------------------------

new vmlinux with patching:

vmlinux:     file format elf32-tradlittlemips

Sections:
Idx Name          Size      VMA       LMA       File off  Algn
  0 .text         001aa000  80050000  80050000  00001000  2**5
                  CONTENTS, ALLOC, LOAD, READONLY, CODE
  1 .fixup        00001250  801fa000  801fa000  001ab000  2**0
                  CONTENTS, ALLOC, LOAD, READONLY, CODE
  2 .kstrtab      00005000  801fb250  801fb250  001ac250  2**2
                  CONTENTS, ALLOC, LOAD, READONLY, DATA
  3 __ex_table    000016d8  80200250  80200250  001b1250  2**2
                  CONTENTS, ALLOC, LOAD, READONLY, DATA
  4 __dbe_table   00000000  80201928  80201928  001b2928  2**0
                  CONTENTS, ALLOC, LOAD, READONLY, DATA
  5 __ksymtab     000025a8  80201928  80201928  001b2928  2**2
                  CONTENTS, ALLOC, LOAD, READONLY, DATA
  6 .data.init_task 00002000  80204000  80204000  001b5000  2**3
                  CONTENTS, ALLOC, LOAD, DATA
  7 .text.init    0001763c  80206000  80206000  001b7000  2**2
                  CONTENTS, ALLOC, LOAD, READONLY, CODE
  8 .data.init    000050e0  8021d63c  8021d63c  001ce63c  2**2
                  CONTENTS, ALLOC, LOAD, DATA
  9 .setup.init   000000e8  80222720  80222720  001d3720  2**2
                  CONTENTS, ALLOC, LOAD, DATA
 10 .initcall.init 000000ac  80222808  80222808  001d3808  2**2
                  CONTENTS, ALLOC, LOAD, DATA
 11 .data.cacheline_aligned 00001470  80223000  80223000  001d4000  2**4
                  CONTENTS, ALLOC, LOAD, DATA
 12 .reginfo      00000018  80224470  80224470  001d5470  2**2
                  CONTENTS, ALLOC, LOAD, READONLY, DATA, LINK_ONCE_SAME_SIZE
 13 .data         0001a000  80225000  80225000  001d6000  2**12
                  CONTENTS, ALLOC, LOAD, DATA
 14 .bss          0002ce40  8023f000  8023f000  001f0000  2**4
                  ALLOC
 15 .comment      00002cce  8026be40  8026be40  001f0000  2**0
                  CONTENTS, READONLY
 16 .pdr          00027a00  00000000  00000000  001f2cd0  2**2
                  CONTENTS, READONLY
 17 .mdebug.abi32 00000000  00000000  00000000  0021a6d0  2**0
                  CONTENTS, READONLY

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

* Re: [PATCH] extend physmap.c to support run-time adding partitions
  2003-10-23  1:25 [PATCH] extend physmap.c to support run-time adding partitions Jun Sun
       [not found] ` <20031023153307.GA11669@wohnheim.fh-wedel.de>
@ 2003-10-27 18:17 ` Jun Sun
  2003-10-28 10:50   ` David Woodhouse
  1 sibling, 1 reply; 18+ messages in thread
From: Jun Sun @ 2003-10-27 18:17 UTC (permalink / raw)
  To: linux-mtd

On Wed, Oct 22, 2003 at 06:25:58PM -0700, Jun Sun wrote:
> 
> While looking at drvers/mtd/maps directories, it becomes
> obvious to me that many files are derived from physmap.c,
> in order to add partition support or add their own
> set_vpp() pointer, etc..
> 
> Such a need can be easily satisfied by extending physmap.c
> a little.
> 
> In this patch, I like to introduce phsmap_add_partition()
> function, which allows boards to add flash partitions
> at run-time.  (Note that you can still override this
> hardcoded partition by using kernel command line)
> 
> In the patch I also showed how a board can make use of this
> extension.  Hopefully we can get rid of lots of files under 
> the maps directory. :)
> 
> Boards which need to set set_vpp pointer can do so easily
> too.
> 
> Any comments?
>

Any objections or comments?  David?

Jun
 

> diff -Nru linux/arch/mips/mips-boards/malta/malta_setup.c.orig linux/arch/mips/mips-boards/malta/malta_setup.c
> --- linux/arch/mips/mips-boards/malta/malta_setup.c.orig	Fri Aug  1 10:50:18 2003
> +++ linux/arch/mips/mips-boards/malta/malta_setup.c	Wed Oct 22 17:26:24 2003
> @@ -24,6 +24,7 @@
>  #ifdef CONFIG_BLK_DEV_IDE
>  #include <linux/ide.h>
>  #endif
> +#include <linux/mtd/physmap.h>
>  
>  #include <asm/cpu.h>
>  #include <asm/bootinfo.h>
> @@ -166,6 +167,12 @@
>          conswitchp = &dummy_con;
>  #endif
>  #endif
> +
> +#if defined(CONFIG_MTD_PHYSMAP) && defined(CONFIG_MTD_PARTITIONS)
> +	physmap_add_partition("YAMON", 0x100000, 0x0, MTD_WRITEABLE);
> +	physmap_add_partition("User FS", 0x300000, 0x100000, 0);
> +#endif
> +
>  	mips_reboot_setup();
>  
>  	board_time_init = mips_time_init;
> diff -Nru linux/drivers/mtd/maps/physmap.c.orig linux/drivers/mtd/maps/physmap.c
> --- linux/drivers/mtd/maps/physmap.c.orig	Wed Jul 23 15:17:52 2003
> +++ linux/drivers/mtd/maps/physmap.c	Wed Oct 22 17:42:50 2003
> @@ -2,6 +2,11 @@
>   * $Id: physmap.c,v 1.28 2003/05/28 15:53:43 dwmw2 Exp $
>   *
>   * Normal mappings of chips in physical memory
> + *
> + * Copyright (C) 2003 MontaVista Software Inc.
> + * Author: Jun Sun, jsun@mvista.com or jsun@junsun.net
> + *
> + * 031022 - [jsun] add physmap_add_partition()
>   */
>  
>  #include <linux/module.h>
> @@ -23,7 +28,7 @@
>  
>  
>  struct map_info physmap_map = {
> -	.name = "Physically mapped flash",
> +	.name = "phys_mapped_flash",
>  	.size = WINDOW_SIZE,
>  	.buswidth = BUSWIDTH,
>  	.phys = WINDOW_ADDR,
> @@ -33,35 +38,31 @@
>  static struct mtd_partition *mtd_parts;
>  static int                   mtd_parts_nb;
>  
> -static struct mtd_partition physmap_partitions[] = {
> -#if 0
> -/* Put your own partition definitions here */
> -	{
> -		.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,
> +#define NUM_PARTITIONS	4	/* random num which should be good enough */
> +static struct mtd_partition physmap_partitions[NUM_PARTITIONS] __initdata = {};
> +
> +char *part_probes[] __initdata = {"cmdlinepart", "RedBoot", NULL};
> +
> +/*
> + * See include/linux/mtd/physmap.h file.
> + */
> +static int part_index __initdata = 0;
> +int __init physmap_add_partition(char *name, u32 size, u32 offset, u32 flags)
> +{
> +	if (part_index >= NUM_PARTITIONS) {
> +		printk(KERN_ERR "physmap_add_partition() exceeds max partition table size (%d)\n", NUM_PARTITIONS);
> +		return -1;
>  	}
> -#endif
> -};
>  
> -#define NUM_PARTITIONS	(sizeof(physmap_partitions)/sizeof(struct mtd_partition))
> -const char *part_probes[] = {"cmdlinepart", "RedBoot", NULL};
> +	physmap_partitions[part_index].name = name;
> +	physmap_partitions[part_index].size = size;
> +	physmap_partitions[part_index].offset = offset;
> +	physmap_partitions[part_index].mask_flags = flags;
> +
> +	part_index++;
>  
> +	return 0;
> +}
>  #endif /* CONFIG_MTD_PARTITIONS */
>  
>  int __init init_physmap(void)
> @@ -97,11 +98,11 @@
>  			return 0;
>  		}
>  
> -		if (NUM_PARTITIONS != 0) 
> +		if (part_index != 0) 
>  		{
>  			printk(KERN_NOTICE 
>  			       "Using physmap partition definition\n");
> -			add_mtd_partitions (mymtd, physmap_partitions, NUM_PARTITIONS);
> +			add_mtd_partitions (mymtd, physmap_partitions, part_index);
>  			return 0;
>  		}
>  
> diff -Nru linux/include/linux/mtd/physmap.h.orig linux/include/linux/mtd/physmap.h
> --- linux/include/linux/mtd/physmap.h.orig	Wed Oct 22 17:05:22 2003
> +++ linux/include/linux/mtd/physmap.h	Wed Oct 22 18:20:34 2003
> @@ -0,0 +1,48 @@
> +/*
> + * For boards with physically mapped flash and using 
> + * drivers/mtd/maps/physmap.c mapping driver.
> + *
> + * Copyright (C) 2003 MontaVista Software Inc.
> + * Author: Jun Sun, jsun@mvista.com or jsun@junsun.net
> + *
> + * 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.
> + *
> + */
> +
> +#ifndef __LINUX_MTD_PHYSMAP__
> +
> +#include <linux/config.h>
> +
> +#if defined(CONFIG_MTD_PHYSMAP) 
> +
> +#include <linux/mtd/mtd.h>
> +#include <linux/mtd/map.h>
> +
> +/*
> + * The map_info for physmap.  Board can override size, buswidth, phys,
> + * (*set_vpp)(), etc in their initial setup routine.
> + */
> +extern struct map_info physmap_map;
> +
> +#if defined(CONFIG_MTD_PARTITIONS)
> +
> +/*
> + * Machines that wish to do flash partition may want to call this function in 
> + * their setup routine.  Examples:
> + *
> + *	physmap_add_partition("bootROM", 0x100000, 0, MTD_WRITEABLE);
> + *	physmap_add_partition("User FS", 0x300000, 0x100000, 0)
> + *
> + * Note that one can always override this hard-coded partition with 
> + * command line partition (you need to enable CONFIG_MTD_CMDLINE_PARTS).
> + */
> +int physmap_add_partition(char *name, u32 size, u32 offset, u32 mask_flags);
> +
> +#endif /* defined(CONFIG_MTD_PARTITIONS) */
> +#endif /* defined(CONFIG_MTD) */
> +
> +#endif /* __LINUX_MTD_PHYSMAP__ */
> +

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

* Re: [PATCH] extend physmap.c to support run-time adding partitions
  2003-10-23 23:57             ` Jun Sun
@ 2003-10-28  8:22               ` Holger Schurig
  2003-10-29  2:33                 ` Jun Sun
  0 siblings, 1 reply; 18+ messages in thread
From: Holger Schurig @ 2003-10-28  8:22 UTC (permalink / raw)
  To: linux-mtd

> Meanwhile, we sadly announce the loss of drivers/mtd/maps/jmr3927-flash.c
> file and the death of CONFIG_MTD_JMR3927 (not in MTD tree yet).  :0

First: I like a unified approach. I think that, when it makes sense, board
specifica should be in board specific files at one place. This doesn't
prevent copy&past, e.g. I can copy arch/arm/mach-pxa/accelent.c and paste
stuff into arch/arm/mach-pxa/ramses.c. It's actually easier now, because
there is only one place to look for board specifics.

For example, on linux-2.6 people are trying to have an almost #ifdef-less
drivers/video/pxafb.c and have all in arm/arm/mach-pxa/*.c files.


But just one note: you don't need CONFIG_MTD_JMR3927 if JMR3927 is your
board. At least not in arm/xscale kernels (not sure about other platforms).
You already have CONFIG_ARCH_<board>, e.g. I have CONFIG_ARCH_RAMSES. And I
can re-use this config var in drivers/mtd/maps.

-- 
Try Linux 2.6 from BitKeeper for PXA2x0 CPUs at
http://www.mn-logistik.de/unsupported/linux-2.6/

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

* Re: [PATCH] extend physmap.c to support run-time adding partitions
  2003-10-27 18:17 ` Jun Sun
@ 2003-10-28 10:50   ` David Woodhouse
  2003-10-29  2:28     ` Jun Sun
  0 siblings, 1 reply; 18+ messages in thread
From: David Woodhouse @ 2003-10-28 10:50 UTC (permalink / raw)
  To: Jun Sun; +Cc: linux-mtd

On Mon, 2003-10-27 at 10:17 -0800, Jun Sun wrote:
> Any objections or comments?  David?

Sorry for delayed response. I'm not really sure about this. Take a look
at drivers/mtd/maps/rpxlite.c -- that's what we're able to eliminate,
and we could even stick half of _that_ into a library function. 

I'm all for cleaning up all the duplication in the map drivers, but I'm
not sure we need to do it by making users enter correct numbers for
CONFIG_MTD_PHYSMAP_*...

-- 
dwmw2

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

* Re: [PATCH] extend physmap.c to support run-time adding partitions
  2003-10-28 10:50   ` David Woodhouse
@ 2003-10-29  2:28     ` Jun Sun
  2003-10-29 11:13       ` David Woodhouse
  0 siblings, 1 reply; 18+ messages in thread
From: Jun Sun @ 2003-10-29  2:28 UTC (permalink / raw)
  To: David Woodhouse; +Cc: linux-mtd

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

On Tue, Oct 28, 2003 at 10:50:15AM +0000, David Woodhouse wrote:
> On Mon, 2003-10-27 at 10:17 -0800, Jun Sun wrote:
> > Any objections or comments?  David?
> 
> Sorry for delayed response. I'm not really sure about this. Take a look
> at drivers/mtd/maps/rpxlite.c -- that's what we're able to eliminate,

I think a lot of more can be eliminated, including db1x00-flash.c
which I did take a look.

What concerns me more is that I have at least four more new boards
that cry for this extension.  Without it, I would have to introduce
more junk files into linux-mtd.

We need to have this extension or something like this in place.

> and we could even stick half of _that_ into a library function. 
> 

I don't quite follow here.

> I'm all for cleaning up all the duplication in the map drivers, but I'm
> not sure we need to do it by making users enter correct numbers for
> CONFIG_MTD_PHYSMAP_*...
> 

I didn't like that aspect either.  I thought I should keep the
patch minimum so that it is easier for people to swallow. :)

Actually the new attached version is probably what I like more.
It gets rid of the config options for physmap.

Since physmap_map is external, one can easily setup the mapping
at the run time instead of configuration time.  The new patch
simply adds some syntactic sugar by introducing an inline function
to do this.  

Jun

[-- Attachment #2: patch2 --]
[-- Type: text/plain, Size: 7445 bytes --]

diff -Nru linux/arch/mips/mips-boards/malta/malta_setup.c.orig linux/arch/mips/mips-boards/malta/malta_setup.c
--- linux/arch/mips/mips-boards/malta/malta_setup.c.orig	Fri Aug  1 10:50:18 2003
+++ linux/arch/mips/mips-boards/malta/malta_setup.c	Tue Oct 28 17:02:01 2003
@@ -24,6 +24,7 @@
 #ifdef CONFIG_BLK_DEV_IDE
 #include <linux/ide.h>
 #endif
+#include <linux/mtd/physmap.h>
 
 #include <asm/cpu.h>
 #include <asm/bootinfo.h>
@@ -166,6 +167,15 @@
         conswitchp = &dummy_con;
 #endif
 #endif
+
+#if defined(CONFIG_MTD)
+	/* we use generic physmap mapping driver */
+	physmap_set_map(0x400000, 4, 0x1e000000);
+
+	physmap_add_partition("YAMON", 0x100000, 0x0, MTD_WRITEABLE);
+	physmap_add_partition("User FS", 0x300000, 0x100000, 0);
+#endif
+
 	mips_reboot_setup();
 
 	board_time_init = mips_time_init;
diff -Nru linux/drivers/mtd/maps/physmap.c.orig linux/drivers/mtd/maps/physmap.c
--- linux/drivers/mtd/maps/physmap.c.orig	Wed Jul 23 15:17:52 2003
+++ linux/drivers/mtd/maps/physmap.c	Tue Oct 28 17:05:12 2003
@@ -2,6 +2,11 @@
  * $Id: physmap.c,v 1.28 2003/05/28 15:53:43 dwmw2 Exp $
  *
  * Normal mappings of chips in physical memory
+ *
+ * Copyright (C) 2003 MontaVista Software Inc.
+ * Author: Jun Sun, jsun@mvista.com or jsun@junsun.net
+ *
+ * 031022 - [jsun] add physmap_add_partition()
  */
 
 #include <linux/module.h>
@@ -15,53 +20,39 @@
 #include <linux/config.h>
 #include <linux/mtd/partitions.h>
 
-#define WINDOW_ADDR CONFIG_MTD_PHYSMAP_START
-#define WINDOW_SIZE CONFIG_MTD_PHYSMAP_LEN
-#define BUSWIDTH CONFIG_MTD_PHYSMAP_BUSWIDTH
-
 static struct mtd_info *mymtd;
 
-
-struct map_info physmap_map = {
-	.name = "Physically mapped flash",
-	.size = WINDOW_SIZE,
-	.buswidth = BUSWIDTH,
-	.phys = WINDOW_ADDR,
-};
+struct map_info physmap_map = {.name = "phys_mapped_flash"};
 
 #ifdef CONFIG_MTD_PARTITIONS
 static struct mtd_partition *mtd_parts;
 static int                   mtd_parts_nb;
 
-static struct mtd_partition physmap_partitions[] = {
-#if 0
-/* Put your own partition definitions here */
-	{
-		.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,
+#define NUM_PARTITIONS	4	/* random num which should be good enough */
+static struct mtd_partition physmap_partitions[NUM_PARTITIONS] __initdata = {};
+
+char *part_probes[] __initdata = {"cmdlinepart", "RedBoot", NULL};
+
+/*
+ * See include/linux/mtd/physmap.h file.
+ */
+static int part_index __initdata = 0;
+int __init physmap_add_partition(char *name, u32 size, u32 offset, u32 flags)
+{
+	if (part_index >= NUM_PARTITIONS) {
+		printk(KERN_ERR "physmap_add_partition() exceeds max partition table size (%d)\n", NUM_PARTITIONS);
+		return -1;
 	}
-#endif
-};
 
-#define NUM_PARTITIONS	(sizeof(physmap_partitions)/sizeof(struct mtd_partition))
-const char *part_probes[] = {"cmdlinepart", "RedBoot", NULL};
+	physmap_partitions[part_index].name = name;
+	physmap_partitions[part_index].size = size;
+	physmap_partitions[part_index].offset = offset;
+	physmap_partitions[part_index].mask_flags = flags;
+
+	part_index++;
 
+	return 0;
+}
 #endif /* CONFIG_MTD_PARTITIONS */
 
 int __init init_physmap(void)
@@ -69,8 +60,8 @@
 	static const char *rom_probe_types[] = { "cfi_probe", "jedec_probe", "map_rom", 0 };
 	const char **type;
 
-       	printk(KERN_NOTICE "physmap flash device: %x at %x\n", WINDOW_SIZE, WINDOW_ADDR);
-	physmap_map.virt = (unsigned long)ioremap(WINDOW_ADDR, WINDOW_SIZE);
+       	printk(KERN_NOTICE "physmap flash device: %lx at %lx\n", physmap_map.size, physmap_map.phys);
+	physmap_map.virt = (unsigned long)ioremap(physmap_map.phys, physmap_map.size);
 
 	if (!physmap_map.virt) {
 		printk("Failed to ioremap\n");
@@ -97,11 +88,11 @@
 			return 0;
 		}
 
-		if (NUM_PARTITIONS != 0) 
+		if (part_index != 0) 
 		{
 			printk(KERN_NOTICE 
 			       "Using physmap partition definition\n");
-			add_mtd_partitions (mymtd, physmap_partitions, NUM_PARTITIONS);
+			add_mtd_partitions (mymtd, physmap_partitions, part_index);
 			return 0;
 		}
 
diff -Nru linux/drivers/mtd/maps/Config.in.orig linux/drivers/mtd/maps/Config.in
--- linux/drivers/mtd/maps/Config.in.orig	Tue Oct 21 18:07:35 2003
+++ linux/drivers/mtd/maps/Config.in	Tue Oct 28 16:59:07 2003
@@ -8,12 +8,7 @@
 
 bool '  Support for non-linear mappings of flash chips' CONFIG_MTD_COMPLEX_MAPPINGS
 
-dep_tristate '  CFI Flash device in physical memory map' CONFIG_MTD_PHYSMAP $CONFIG_MTD_GEN_PROBE
-if [ "$CONFIG_MTD_PHYSMAP" = "y" -o "$CONFIG_MTD_PHYSMAP" = "m" ]; then
-   hex '    Physical start address of flash mapping' CONFIG_MTD_PHYSMAP_START 0x8000000
-   hex '    Physical length of flash mapping' CONFIG_MTD_PHYSMAP_LEN 0x4000000
-   int '    Bus width in octets' CONFIG_MTD_PHYSMAP_BUSWIDTH 2
-fi
+bool '  CFI Flash device in physical memory map' CONFIG_MTD_PHYSMAP $CONFIG_MTD_GEN_PROBE
 
 if [ "$CONFIG_SPARC" = "y" -o "$CONFIG_SPARC64" = "y" ]; then
    dep_tristate '  Sun Microsystems userflash support' CONFIG_MTD_SUN_UFLASH $CONFIG_MTD_CFI
diff -Nru linux/drivers/mtd/maps/Makefile.orig linux/drivers/mtd/maps/Makefile
diff -Nru linux/include/linux/mtd/physmap.h.orig linux/include/linux/mtd/physmap.h
--- linux/include/linux/mtd/physmap.h.orig	Wed Oct 22 17:05:22 2003
+++ linux/include/linux/mtd/physmap.h	Tue Oct 28 17:11:29 2003
@@ -0,0 +1,58 @@
+/*
+ * For boards with physically mapped flash and using 
+ * drivers/mtd/maps/physmap.c mapping driver.
+ *
+ * Copyright (C) 2003 MontaVista Software Inc.
+ * Author: Jun Sun, jsun@mvista.com or jsun@junsun.net
+ *
+ * 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.
+ *
+ */
+
+#ifndef __LINUX_MTD_PHYSMAP__
+
+#include <linux/config.h>
+
+#if defined(CONFIG_MTD_PHYSMAP) 
+
+#include <linux/mtd/mtd.h>
+#include <linux/mtd/map.h>
+
+/*
+ * The map_info for physmap.  Board can override size, buswidth, phys,
+ * (*set_vpp)(), etc in their initial setup routine.
+ */
+extern struct map_info physmap_map;
+
+/*
+ * Board needs to specify the exact mapping during their setup time.
+ */
+static inline void physmap_set_map(unsigned long size, int buswidth, unsigned long phys_addr)
+{
+	physmap_map.size = size;
+	physmap_map.buswidth = buswidth;
+	physmap_map.phys = phys_addr;
+}
+
+#if defined(CONFIG_MTD_PARTITIONS)
+
+/*
+ * Machines that wish to do flash partition may want to call this function in 
+ * their setup routine.  Examples:
+ *
+ *	physmap_add_partition("bootROM", 0x100000, 0, MTD_WRITEABLE);	// RO
+ *	physmap_add_partition("User FS", 0x300000, 0x100000, 0); 	// RW
+ *
+ * Note that one can always override this hard-coded partition with 
+ * command line partition (you need to enable CONFIG_MTD_CMDLINE_PARTS).
+ */
+int physmap_add_partition(char *name, u32 size, u32 offset, u32 mask_flags);
+
+#endif /* defined(CONFIG_MTD_PARTITIONS) */
+#endif /* defined(CONFIG_MTD) */
+
+#endif /* __LINUX_MTD_PHYSMAP__ */
+

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

* Re: [PATCH] extend physmap.c to support run-time adding partitions
  2003-10-28  8:22               ` Holger Schurig
@ 2003-10-29  2:33                 ` Jun Sun
  0 siblings, 0 replies; 18+ messages in thread
From: Jun Sun @ 2003-10-29  2:33 UTC (permalink / raw)
  To: Holger Schurig; +Cc: linux-mtd

On Tue, Oct 28, 2003 at 09:22:36AM +0100, Holger Schurig wrote:
> > Meanwhile, we sadly announce the loss of drivers/mtd/maps/jmr3927-flash.c
> > file and the death of CONFIG_MTD_JMR3927 (not in MTD tree yet).  :0
> 
> First: I like a unified approach. I think that, when it makes sense, board
> specifica should be in board specific files at one place. This doesn't
> prevent copy&past, e.g. I can copy arch/arm/mach-pxa/accelent.c and paste
> stuff into arch/arm/mach-pxa/ramses.c. It's actually easier now, because
> there is only one place to look for board specifics.
> 

Exactly!  This is another unspoken benefit of this patch (it had too many
benefits. :0).  Now a lot of board-specific mtd code is moved
into board directory instead of mtd directory.  One would appreciate it
even more when the support for a board is dropped - guess what? No
mtd code change.  Not the case today.

> For example, on linux-2.6 people are trying to have an almost #ifdef-less
> drivers/video/pxafb.c and have all in arm/arm/mach-pxa/*.c files.
> 
> 
> But just one note: you don't need CONFIG_MTD_JMR3927 if JMR3927 is your
> board. At least not in arm/xscale kernels (not sure about other platforms).
> You already have CONFIG_ARCH_<board>, e.g. I have CONFIG_ARCH_RAMSES. And I
> can re-use this config var in drivers/mtd/maps.
>

That is true.  It just happened that JMR3927 chose to create a new
config for MTD.

Jun

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

* Re: [PATCH] extend physmap.c to support run-time adding partitions
  2003-10-29  2:28     ` Jun Sun
@ 2003-10-29 11:13       ` David Woodhouse
  2003-10-29 18:45         ` Jun Sun
  0 siblings, 1 reply; 18+ messages in thread
From: David Woodhouse @ 2003-10-29 11:13 UTC (permalink / raw)
  To: Jun Sun; +Cc: linux-mtd

On Tue, 2003-10-28 at 18:28 -0800, Jun Sun wrote:
+#if defined(CONFIG_MTD)
+       /* we use generic physmap mapping driver */
+       physmap_set_map(0x400000, 4, 0x1e000000);
+
+       physmap_add_partition("YAMON", 0x100000, 0x0, MTD_WRITEABLE);
+       physmap_add_partition("User FS", 0x300000, 0x100000, 0);
+#endif

That's nicer. Why multiple physmap_add_partition() calls rather than
just a single array passed to physmap_set_map() though?

	mtd = physmap_set_map(adr, len, width, set_vpp, partitions);

	physmap_unset_map(mtd);

-- 
dwmw2

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

* Re: [PATCH] extend physmap.c to support run-time adding partitions
  2003-10-29 11:13       ` David Woodhouse
@ 2003-10-29 18:45         ` Jun Sun
  2003-10-29 19:32           ` Jörn Engel
  2003-10-29 22:57           ` Cam Mayor
  0 siblings, 2 replies; 18+ messages in thread
From: Jun Sun @ 2003-10-29 18:45 UTC (permalink / raw)
  To: David Woodhouse; +Cc: linux-mtd

On Wed, Oct 29, 2003 at 11:13:26AM +0000, David Woodhouse wrote:
> On Tue, 2003-10-28 at 18:28 -0800, Jun Sun wrote:
> +#if defined(CONFIG_MTD)
> +       /* we use generic physmap mapping driver */
> +       physmap_set_map(0x400000, 4, 0x1e000000);
> +
> +       physmap_add_partition("YAMON", 0x100000, 0x0, MTD_WRITEABLE);
> +       physmap_add_partition("User FS", 0x300000, 0x100000, 0);
> +#endif
> 
> That's nicer. Why multiple physmap_add_partition() calls rather than
> just a single array passed to physmap_set_map() though?
> 

Hmm, currently partition only matters when CONFIG_MTD_PARTITIONS
is enabled.  I assume this mean sometimes people want to use
physmap without partitions.  True?

The board code here really takes advantage of the board-specific
knowledge, where it knows it has support for partitions.  (Maybe
I should add #ifdef CONFIG_MTD_PARTITIONS to surround adding partition
part)

> 	mtd = physmap_set_map(adr, len, width, set_vpp, partitions);
> 
> 	physmap_unset_map(mtd);
> 

phsmap currently only supports mapping for one physical flash unit.
I assume physmap_unset_map() is pretty much null op here?  

And the "physmap_set_map" really means something like "physmap_configure_map". 
So I am not sure if something "unconfigure" is necessary.

Jun

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

* Re: [PATCH] extend physmap.c to support run-time adding partitions
  2003-10-29 18:45         ` Jun Sun
@ 2003-10-29 19:32           ` Jörn Engel
  2003-10-29 23:15             ` Jun Sun
  2003-10-29 22:57           ` Cam Mayor
  1 sibling, 1 reply; 18+ messages in thread
From: Jörn Engel @ 2003-10-29 19:32 UTC (permalink / raw)
  To: Jun Sun; +Cc: linux-mtd, David Woodhouse

On Wed, 29 October 2003 10:45:46 -0800, Jun Sun wrote:
> 
> phsmap currently only supports mapping for one physical flash unit.

I've created a physmap variant for multiply physical mappings once.
Google for mphysmap.c and you can still find it.  No reaction
whatsoever to this day, so you can guess how many people need it. ;)

Jörn

-- 
"Error protection by error detection and correction."
-- from a university class

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

* Re: [PATCH] extend physmap.c to support run-time adding partitions
  2003-10-29 18:45         ` Jun Sun
  2003-10-29 19:32           ` Jörn Engel
@ 2003-10-29 22:57           ` Cam Mayor
  2003-10-29 23:13             ` Jun Sun
  1 sibling, 1 reply; 18+ messages in thread
From: Cam Mayor @ 2003-10-29 22:57 UTC (permalink / raw)
  To: Jun Sun, David Woodhouse; +Cc: linux-mtd

On Wednesday 29 October 2003 12:45, Jun Sun wrote:
> On Wed, Oct 29, 2003 at 11:13:26AM +0000, David Woodhouse wrote:
> >
> > That's nicer. Why multiple physmap_add_partition() calls rather than
> > just a single array passed to physmap_set_map() though?
>
> Hmm, currently partition only matters when CONFIG_MTD_PARTITIONS
> is enabled.  I assume this mean sometimes people want to use
> physmap without partitions.  True?

Yes.  We have a product that partitions physmap (from the kernel command 
line), but also uses the unpartitioned physmap base device. 

ie. physmap on /dev/mtd0
    physmap partitions on /dev/mtd1, /dev/mtd2, etc.   sometimes none.

cam

-- 
Cameron Mayor
Iders Incorporated

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

* Re: [PATCH] extend physmap.c to support run-time adding partitions
  2003-10-29 22:57           ` Cam Mayor
@ 2003-10-29 23:13             ` Jun Sun
  0 siblings, 0 replies; 18+ messages in thread
From: Jun Sun @ 2003-10-29 23:13 UTC (permalink / raw)
  To: Cam Mayor; +Cc: linux-mtd, David Woodhouse

On Wed, Oct 29, 2003 at 04:57:27PM -0600, Cam Mayor wrote:
> On Wednesday 29 October 2003 12:45, Jun Sun wrote:
> > On Wed, Oct 29, 2003 at 11:13:26AM +0000, David Woodhouse wrote:
> > >
> > > That's nicer. Why multiple physmap_add_partition() calls rather than
> > > just a single array passed to physmap_set_map() though?
> >
> > Hmm, currently partition only matters when CONFIG_MTD_PARTITIONS
> > is enabled.  I assume this mean sometimes people want to use
> > physmap without partitions.  True?
> 
> Yes.  We have a product that partitions physmap (from the kernel command 
> line), but also uses the unpartitioned physmap base device. 
> 
> ie. physmap on /dev/mtd0
>     physmap partitions on /dev/mtd1, /dev/mtd2, etc.   sometimes none.
> 

Thanks for the data point.  

My original comment is really a question to David: do we really
want "partition" to be an argument in phsmap_set_map() even when
CONFIG_MTD_PARTITIONS is _not_ configured?

If David does not like multiple add partition calls, we can
easily introduce another interface function:

 	physmap_set_partitions(partitions)

So it seems like we have three possibilities in terms
how a board tells physmap driver about the partitions:

1) lumped in physmap_set_map() (as David suggested)

2) calling adding parition multiple times (as in my original
   proposal)

3) calling adding partitions in one shot with an array.

I don't like 1) because of CONFIG_MTD_PARTITION issue.  But if
David insists, I can modify patch as such.

Jun

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

* Re: [PATCH] extend physmap.c to support run-time adding partitions
  2003-10-29 19:32           ` Jörn Engel
@ 2003-10-29 23:15             ` Jun Sun
  0 siblings, 0 replies; 18+ messages in thread
From: Jun Sun @ 2003-10-29 23:15 UTC (permalink / raw)
  To: Jörn Engel; +Cc: linux-mtd, David Woodhouse

On Wed, Oct 29, 2003 at 08:32:09PM +0100, Jörn Engel wrote:
> On Wed, 29 October 2003 10:45:46 -0800, Jun Sun wrote:
> > 
> > phsmap currently only supports mapping for one physical flash unit.
> 
> I've created a physmap variant for multiply physical mappings once.
> Google for mphysmap.c and you can still find it.  No reaction
> whatsoever to this day, so you can guess how many people need it. ;)
> 

Cool!  I think once we extend phsymap driver and get more boards
converted to using it good stuff like this will be in much more demand.

Jun

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

end of thread, other threads:[~2003-10-29 23:16 UTC | newest]

Thread overview: 18+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2003-10-23  1:25 [PATCH] extend physmap.c to support run-time adding partitions Jun Sun
     [not found] ` <20031023153307.GA11669@wohnheim.fh-wedel.de>
2003-10-23 17:03   ` Jun Sun
2003-10-23 17:31     ` Jörn Engel
2003-10-23 17:43       ` Jun Sun
2003-10-23 18:15         ` Jörn Engel
2003-10-23 20:04           ` Jun Sun
2003-10-23 23:57             ` Jun Sun
2003-10-28  8:22               ` Holger Schurig
2003-10-29  2:33                 ` Jun Sun
2003-10-27 18:17 ` Jun Sun
2003-10-28 10:50   ` David Woodhouse
2003-10-29  2:28     ` Jun Sun
2003-10-29 11:13       ` David Woodhouse
2003-10-29 18:45         ` Jun Sun
2003-10-29 19:32           ` Jörn Engel
2003-10-29 23:15             ` Jun Sun
2003-10-29 22:57           ` Cam Mayor
2003-10-29 23:13             ` Jun Sun

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