All of lore.kernel.org
 help / color / mirror / Atom feed
From: Joakim Tjernlund <Joakim.Tjernlund@infinera.com>
To: "richard@nod.at" <richard@nod.at>,
	"computersforpeace@gmail.com" <computersforpeace@gmail.com>,
	"vigneshr@ti.com" <vigneshr@ti.com>,
	"Chris.Packham@alliedtelesis.co.nz" 
	<Chris.Packham@alliedtelesis.co.nz>,
	"marek.vasut@gmail.com" <marek.vasut@gmail.com>,
	"dwmw2@infradead.org" <dwmw2@infradead.org>,
	"miquel.raynal@bootlin.com" <miquel.raynal@bootlin.com>
Cc: "linux-kernel@vger.kernel.org" <linux-kernel@vger.kernel.org>,
	"sr@denx.de" <sr@denx.de>,
	"linux-mtd@lists.infradead.org" <linux-mtd@lists.infradead.org>
Subject: Re: [PATCH] mtd: cfi_cmdset_0002: dynamically determine the max sectors
Date: Fri, 14 Jun 2019 07:18:57 +0000	[thread overview]
Message-ID: <4913398a9317f240235e45f5d1ad886dd8c7e259.camel@infinera.com> (raw)
In-Reply-To: <8e80d911f0dd4759b3edc72fb76530d6@svr-chch-ex1.atlnz.lc>

On Fri, 2019-06-14 at 03:23 +0000, Chris Packham wrote:
> 
> 
> Hi All,
> 
> I think this may have got lost in the change of maintainer for mtd.

We need this too, ATM we have a local hack that just changes  MAX_SECTORS to 1024

> 
> On 22/05/19 12:06 PM, Chris Packham wrote:
> > Because PPB unlocking unlocks the whole chip cfi_ppb_unlock() needs to
> > remember the locked status for each sector so it can re-lock the
> > unaddressed sectors. Dynamically calculate the maximum number of sectors
> > rather than using a hardcoded value that is too small for larger chips.
> > 
> > Tested with Spansion S29GL01GS11TFI flash device.
> > 
> > Signed-off-by: Chris Packham <chris.packham@alliedtelesis.co.nz>
> > ---
> >   drivers/mtd/chips/cfi_cmdset_0002.c | 13 ++++++++-----
> >   1 file changed, 8 insertions(+), 5 deletions(-)
> > 
> > diff --git a/drivers/mtd/chips/cfi_cmdset_0002.c b/drivers/mtd/chips/cfi_cmdset_0002.c
> > index c8fa5906bdf9..a1a7d334aa82 100644
> > --- a/drivers/mtd/chips/cfi_cmdset_0002.c
> > +++ b/drivers/mtd/chips/cfi_cmdset_0002.c
> > @@ -2533,8 +2533,6 @@ struct ppb_lock {
> >       int locked;
> >   };
> > 
> > -#define MAX_SECTORS                  512
> > -
> >   #define DO_XXLOCK_ONEBLOCK_LOCK             ((void *)1)
> >   #define DO_XXLOCK_ONEBLOCK_UNLOCK   ((void *)2)
> >   #define DO_XXLOCK_ONEBLOCK_GETLOCK  ((void *)3)
> > @@ -2633,6 +2631,7 @@ static int __maybe_unused cfi_ppb_unlock(struct mtd_info *mtd, loff_t ofs,
> >       int i;
> >       int sectors;
> >       int ret;
> > +     int max_sectors;
> > 
> >       /*
> >        * PPB unlocking always unlocks all sectors of the flash chip.
> > @@ -2640,7 +2639,11 @@ static int __maybe_unused cfi_ppb_unlock(struct mtd_info *mtd, loff_t ofs,
> >        * first check the locking status of all sectors and save
> >        * it for future use.
> >        */
> > -     sect = kcalloc(MAX_SECTORS, sizeof(struct ppb_lock), GFP_KERNEL);
> > +     max_sectors = 0;
> > +     for (i = 0; i < mtd->numeraseregions; i++)
> > +             max_sectors += regions[i].numblocks;
> > +
> > +     sect = kcalloc(max_sectors, sizeof(struct ppb_lock), GFP_KERNEL);
> >       if (!sect)
> >               return -ENOMEM;
> > 
> > @@ -2689,9 +2692,9 @@ static int __maybe_unused cfi_ppb_unlock(struct mtd_info *mtd, loff_t ofs,
> >               }
> > 
> >               sectors++;
> > -             if (sectors >= MAX_SECTORS) {
> > +             if (sectors >= max_sectors) {
> >                       printk(KERN_ERR "Only %d sectors for PPB locking supported!\n",
> > -                            MAX_SECTORS);
> > +                            max_sectors);
> >                       kfree(sect);
> >                       return -EINVAL;
> >               }
> > 
> 
> ______________________________________________________
> Linux MTD discussion mailing list
> https://nam03.safelinks.protection.outlook.com/?url=http%3A%2F%2Flists.infradead.org%2Fmailman%2Flistinfo%2Flinux-mtd%2F&amp;data=02%7C01%7Cjoakim.tjernlund%40infinera.com%7C32742fa3a7134e77f21908d6f078e67b%7C285643de5f5b4b03a1530ae2dc8aaf77%7C1%7C0%7C636960799408384144&amp;sdata=JidMNGuW7GdQO%2FA%2BBs8Q0mnqt%2BWlDUnjsbCRJIDkDvU%3D&amp;reserved=0


WARNING: multiple messages have this Message-ID (diff)
From: Joakim Tjernlund <Joakim.Tjernlund@infinera.com>
To: "richard@nod.at" <richard@nod.at>,
	"computersforpeace@gmail.com" <computersforpeace@gmail.com>,
	"vigneshr@ti.com" <vigneshr@ti.com>,
	"Chris.Packham@alliedtelesis.co.nz"
	<Chris.Packham@alliedtelesis.co.nz>,
	"marek.vasut@gmail.com" <marek.vasut@gmail.com>,
	"dwmw2@infradead.org" <dwmw2@infradead.org>,
	"miquel.raynal@bootlin.com" <miquel.raynal@bootlin.com>
Cc: "sr@denx.de" <sr@denx.de>,
	"linux-mtd@lists.infradead.org" <linux-mtd@lists.infradead.org>,
	"linux-kernel@vger.kernel.org" <linux-kernel@vger.kernel.org>
Subject: Re: [PATCH] mtd: cfi_cmdset_0002: dynamically determine the max sectors
Date: Fri, 14 Jun 2019 07:18:57 +0000	[thread overview]
Message-ID: <4913398a9317f240235e45f5d1ad886dd8c7e259.camel@infinera.com> (raw)
In-Reply-To: <8e80d911f0dd4759b3edc72fb76530d6@svr-chch-ex1.atlnz.lc>

On Fri, 2019-06-14 at 03:23 +0000, Chris Packham wrote:
> 
> 
> Hi All,
> 
> I think this may have got lost in the change of maintainer for mtd.

We need this too, ATM we have a local hack that just changes  MAX_SECTORS to 1024

> 
> On 22/05/19 12:06 PM, Chris Packham wrote:
> > Because PPB unlocking unlocks the whole chip cfi_ppb_unlock() needs to
> > remember the locked status for each sector so it can re-lock the
> > unaddressed sectors. Dynamically calculate the maximum number of sectors
> > rather than using a hardcoded value that is too small for larger chips.
> > 
> > Tested with Spansion S29GL01GS11TFI flash device.
> > 
> > Signed-off-by: Chris Packham <chris.packham@alliedtelesis.co.nz>
> > ---
> >   drivers/mtd/chips/cfi_cmdset_0002.c | 13 ++++++++-----
> >   1 file changed, 8 insertions(+), 5 deletions(-)
> > 
> > diff --git a/drivers/mtd/chips/cfi_cmdset_0002.c b/drivers/mtd/chips/cfi_cmdset_0002.c
> > index c8fa5906bdf9..a1a7d334aa82 100644
> > --- a/drivers/mtd/chips/cfi_cmdset_0002.c
> > +++ b/drivers/mtd/chips/cfi_cmdset_0002.c
> > @@ -2533,8 +2533,6 @@ struct ppb_lock {
> >       int locked;
> >   };
> > 
> > -#define MAX_SECTORS                  512
> > -
> >   #define DO_XXLOCK_ONEBLOCK_LOCK             ((void *)1)
> >   #define DO_XXLOCK_ONEBLOCK_UNLOCK   ((void *)2)
> >   #define DO_XXLOCK_ONEBLOCK_GETLOCK  ((void *)3)
> > @@ -2633,6 +2631,7 @@ static int __maybe_unused cfi_ppb_unlock(struct mtd_info *mtd, loff_t ofs,
> >       int i;
> >       int sectors;
> >       int ret;
> > +     int max_sectors;
> > 
> >       /*
> >        * PPB unlocking always unlocks all sectors of the flash chip.
> > @@ -2640,7 +2639,11 @@ static int __maybe_unused cfi_ppb_unlock(struct mtd_info *mtd, loff_t ofs,
> >        * first check the locking status of all sectors and save
> >        * it for future use.
> >        */
> > -     sect = kcalloc(MAX_SECTORS, sizeof(struct ppb_lock), GFP_KERNEL);
> > +     max_sectors = 0;
> > +     for (i = 0; i < mtd->numeraseregions; i++)
> > +             max_sectors += regions[i].numblocks;
> > +
> > +     sect = kcalloc(max_sectors, sizeof(struct ppb_lock), GFP_KERNEL);
> >       if (!sect)
> >               return -ENOMEM;
> > 
> > @@ -2689,9 +2692,9 @@ static int __maybe_unused cfi_ppb_unlock(struct mtd_info *mtd, loff_t ofs,
> >               }
> > 
> >               sectors++;
> > -             if (sectors >= MAX_SECTORS) {
> > +             if (sectors >= max_sectors) {
> >                       printk(KERN_ERR "Only %d sectors for PPB locking supported!\n",
> > -                            MAX_SECTORS);
> > +                            max_sectors);
> >                       kfree(sect);
> >                       return -EINVAL;
> >               }
> > 
> 
> ______________________________________________________
> Linux MTD discussion mailing list
> https://nam03.safelinks.protection.outlook.com/?url=http%3A%2F%2Flists.infradead.org%2Fmailman%2Flistinfo%2Flinux-mtd%2F&amp;data=02%7C01%7Cjoakim.tjernlund%40infinera.com%7C32742fa3a7134e77f21908d6f078e67b%7C285643de5f5b4b03a1530ae2dc8aaf77%7C1%7C0%7C636960799408384144&amp;sdata=JidMNGuW7GdQO%2FA%2BBs8Q0mnqt%2BWlDUnjsbCRJIDkDvU%3D&amp;reserved=0

______________________________________________________
Linux MTD discussion mailing list
http://lists.infradead.org/mailman/listinfo/linux-mtd/

  reply	other threads:[~2019-06-14  7:19 UTC|newest]

Thread overview: 12+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2019-05-22  0:06 [PATCH] mtd: cfi_cmdset_0002: dynamically determine the max sectors Chris Packham
2019-05-22  0:06 ` Chris Packham
2019-05-22  6:01 ` Stefan Roese
2019-05-22  6:01   ` Stefan Roese
2019-06-14  3:23 ` Chris Packham
2019-06-14  3:23   ` Chris Packham
2019-06-14  7:18   ` Joakim Tjernlund [this message]
2019-06-14  7:18     ` Joakim Tjernlund
2019-06-14  7:39   ` Vignesh Raghavendra
2019-06-14  7:39     ` Vignesh Raghavendra
2019-06-28 14:32 ` Vignesh Raghavendra
2019-06-28 14:32   ` Vignesh Raghavendra

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=4913398a9317f240235e45f5d1ad886dd8c7e259.camel@infinera.com \
    --to=joakim.tjernlund@infinera.com \
    --cc=Chris.Packham@alliedtelesis.co.nz \
    --cc=computersforpeace@gmail.com \
    --cc=dwmw2@infradead.org \
    --cc=linux-kernel@vger.kernel.org \
    --cc=linux-mtd@lists.infradead.org \
    --cc=marek.vasut@gmail.com \
    --cc=miquel.raynal@bootlin.com \
    --cc=richard@nod.at \
    --cc=sr@denx.de \
    --cc=vigneshr@ti.com \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.