[PATCH] MTD OneNAND OMAP2/3: allow giving partition layout as module parameter
Vimal Singh
vimal.newwork at gmail.com
Tue Nov 10 04:02:54 EST 2009
On Tue, Nov 10, 2009 at 11:48 AM, Mika Korhonen
<ext-mika.2.korhonen at nokia.com> wrote:
> ext Vimal Singh wrote:
>>
>> On Thu, Sep 3, 2009 at 4:45 PM, Mika Korhonen
>> <ext-mika.2.korhonen at nokia.com> wrote:
>>
>>>
>>> Add module parameter "parts" to omap2-onenand driver. Parameter format is
>>> the same as for cmdlinepart except mtd-id must not be specified - it
>>> gets prepended by the driver, i.e.: parts=<partdef>[,<partdef>]*
>>>
>>> This allows one to repartition the OneNAND chip and is useful for
>>> flashing
>>> applications that do the partitioning from scratch or want to backup and
>>> update the partitioning.
>>>
>>> Signed-off-by: Mika Korhonen <ext-mika.2.korhonen at nokia.com>
>>> ---
>>> drivers/mtd/cmdlinepart.c | 35 +++++++++++++++++++++++++++++------
>>> drivers/mtd/onenand/omap2.c | 29 +++++++++++++++++++++++++++++
>>> 2 files changed, 58 insertions(+), 6 deletions(-)
>>>
>>> diff --git a/drivers/mtd/cmdlinepart.c b/drivers/mtd/cmdlinepart.c
>>> index 1479da6..77fa7b7 100644
>>> --- a/drivers/mtd/cmdlinepart.c
>>> +++ b/drivers/mtd/cmdlinepart.c
>>> @@ -5,7 +5,7 @@
>>> *
>>> * The format for the command line is as follows:
>>> *
>>> - * mtdparts=<mtddef>[;<mtddef]
>>> + * mtdparts=<mtddef>[;<mtddef>]
>>> * <mtddef> := <mtd-id>:<partdef>[,<partdef>]
>>> * where <mtd-id> is the name from the "cat /proc/mtd"
>>> command
>>> * <partdef> := <size>[@offset][<name>][ro][lk]
>>> @@ -54,7 +54,7 @@ struct cmdline_mtd_partition {
>>> /* mtdpart_setup() parses into here */
>>> static struct cmdline_mtd_partition *partitions;
>>>
>>> -/* the command line passed to mtdpart_setupd() */
>>> +/* the command line passed to mtdpart_setup() */
>>> static char *cmdline;
>>> static int cmdline_parsed = 0;
>>>
>>> @@ -219,9 +219,8 @@ static int mtdpart_setup_real(char *s)
>>> {
>>> cmdline_parsed = 1;
>>>
>>> - for( ; s != NULL; )
>>> - {
>>> - struct cmdline_mtd_partition *this_mtd;
>>> + for ( ; s != NULL; ) {
>>> + struct cmdline_mtd_partition *this_mtd, *mtd, *mtd_prev;
>>> struct mtd_partition *parts;
>>> int mtd_id_len;
>>> int num_parts;
>>> @@ -270,6 +269,27 @@ static int mtdpart_setup_real(char *s)
>>> this_mtd->mtd_id = (char*)(this_mtd + 1);
>>> strlcpy(this_mtd->mtd_id, mtd_id, mtd_id_len + 1);
>>>
>>> + /* remove existing ones with the same id */
>>> + mtd_prev = NULL;
>>> + for (mtd = partitions; mtd;) {
>>>
>>
>> Space instead of tab.
>>
>>
>>>
>>> + if (strcmp(this_mtd->mtd_id, mtd->mtd_id) == 0) {
>>>
>>
>> Hmm... I guess you won't get your device id matched here. Since the
>> string you are passing from omap onenand driver is something like
>> this:
>> omap2-onenand:.....
>>
>> while mtd registers device ids in different format, something like:
>> 'omap2-onenand.0'
>>
>>
>
> It's been tested, and it matches. In parse_cmdline_partitions() mtd_id is
> set from mtd_info.name of the chip. Could be that cmdlinepart.c is outdated,
> though.
I am still not convinced. I use to get below prints when I boot up
(this is for NAND and should be same for OneNAND too):
...
omap2-nand driver initializing
NAND device: Manufacturer ID: 0x2c, Chip ID: 0xbc (Micron NAND 512MiB
1,8V 16-bit)
Creating 7 MTD partitions on "omap2-nand.0":
...
This print comes from 'add_mtd_partitions' (drivers/mtd/mtdpart.c):
printk(KERN_NOTICE "Creating %d MTD partitions on \"%s\":\n", nbparts,
master->name);
And I use to give cmdline like this:
"mtdparts=omap2-nand.0:512k at 0(p1),1280k at 512k(p2),768k at 1792k(p3),5m at 2560k(p4),123392k at 7680k(p5)"
and this works for me.
--
Regards,
Vimal Singh
More information about the linux-mtd
mailing list