[PATCH] mtd: chips: AMD chip 0x2201 - write words not buffers
Mauri Sandberg
sandberg at mailfence.com
Mon Mar 8 17:41:03 GMT 2021
Apologies for the etiquette mistakes. It's the first patch I am submitting.
Answers to comments inline.
> ----------------------------------------
> From: Vignesh Raghavendra <vigneshr at ti.com>
> Sent: Mon Mar 08 06:47:57 CET 2021
> To: Mauri Sandberg <sandberg at mailfence.com>, <linux-mtd at lists.infradead.org>
> Subject: Re: [PATCH] mtd: chips: AMD chip 0x2201 - write words not buffers
>
>
> Hi,
>
> On 2/23/21 10:30 PM, Mauri Sandberg wrote:
> > CFI flash memory driver cmdset_0002 uses buffers for write operations.
> > That does not work with AMD chip with id 0x2201 and we must resort to
> > writing word sized chunks only.
> >
>
> Which flash is this? Do you have datasheet for the same.
Appears to be a S29GL256N giving hits as Spansion and Cypress Semiconductor being the manufacturer.
Datasheet is available too. Will make a note of that info.
Here's the link: https://www.cypress.com/file/219941/download
>
> Please add above information to the commit message for future reference.
>
> > This patch creates fixup mechanism that renders a chip to use word sized
> > write operation and adds that as the last item in a fixup table, shadowing
> > the entry that causes use of buffer writes.
> >
> > Without the patch kernel logs will be flooded with entries like below:
> >
> > MTD do_erase_oneblock(): ERASE 0x01fa0000
> > MTD do_write_buffer(): WRITE 0x01fa0000(0x00001985)
> > MTD do_erase_oneblock(): ERASE 0x01f80000
> > MTD do_write_buffer(): WRITE 0x01f80000(0x00001985)
> > MTD do_write_buffer_wait(): software timeout, address:0x01f8000a.
> > jffs2: Write clean marker to block at 0x01a60000 failed: -5
> > MTD do_erase_oneblock(): ERASE 0x01f60000
> > MTD do_write_buffer(): WRITE 0x01f60000(0x00001985)
> > MTD do_write_buffer_wait(): software timeout, address:0x01f6000a.
> > jffs2: Write clean marker to block at 0x01a40000 failed: -5
> >
> > Signed-off-by: Mauri Sandberg <sandberg at mailfence.com>
> > ---
>
> 1. Please explicitly CC maintainers for quicker response. Given the
> amount of traffic on Mailing list, it'll take quite a while for me to
> get to a patch that is not address directly to me.
>
> Run ./scripts/get_maintainer.pl on the patch to get list of maintainers
> to be CC'd
>
> 2. $subject should start with appropriate prefix:
>
> "mtd: cfi_cmdset_0002: ...."
>
> Just run git log --oneline on the file being patched to know the convention.
>
> If you don't CC the maintainers and use the appropriate prefixes, it
> will be a while until I get to such patches.
>
>
> > drivers/mtd/chips/cfi_cmdset_0002.c | 8 ++++++++
> > 1 file changed, 8 insertions(+)
> >
> > diff --git a/drivers/mtd/chips/cfi_cmdset_0002.c b/drivers/mtd/chips/cfi_cmdset_0002.c
> > index a1f3e1031c3d..b8b564342062 100644
> > --- a/drivers/mtd/chips/cfi_cmdset_0002.c
> > +++ b/drivers/mtd/chips/cfi_cmdset_0002.c
> > @@ -279,6 +279,12 @@ static void fixup_use_write_buffers(struct mtd_info *mtd)
> > }
> > #endif /* !FORCE_WORD_WRITE */
> >
> > +static void fixup_use_write_words(struct mtd_info *mtd)
> > +{
> > + pr_debug("Using word write method\n");
> > + mtd->_write = cfi_amdstd_write_words;
>
> Default is cfi_amdstd_write_words(). fixup_use_write_buffers() forces
> this to cfi_amdstd_write_buffers() if cfi->cfiq->BufWriteTimeoutTyp is
> non zero.
>
> What does this field read in case of your flash? Should be 0 in case
> buffered write is not supported.
It gives me '6'. Datasheet does indicate that buffer writes are supported.
>
> > +}
> > +
> > /* Atmel chips don't use the same PRI format as AMD chips */
> > static void fixup_convert_atmel_pri(struct mtd_info *mtd)
> > {
> > @@ -470,8 +476,10 @@ static struct cfi_fixup cfi_fixup_table[] = {
> > #if !FORCE_WORD_WRITE
> > { CFI_MFR_ANY, CFI_ID_ANY, fixup_use_write_buffers },
> > #endif
> > + { CFI_MFR_AMD, 0x2201, fixup_use_write_words },
>
>
> Should be worked around in fixup_use_write_buffers() instead. No point
> in overriding mtd->_write to cfi_amdstd_write_buffers() and then
> reverting it again.
>
> > { 0, 0, NULL }
> > };
> > +
>
> Please don't do white space fixes in the same patch adding
> code/feature/bug-fix
>
> > static struct cfi_fixup jedec_fixup_table[] = {
> > { CFI_MFR_SST, SST49LF004B, fixup_use_fwh_lock },
> > { CFI_MFR_SST, SST49LF040B, fixup_use_fwh_lock },
> >
>
> Regards
> Vignesh
--
Sent with https://mailfence.com
Secure and private email
More information about the linux-mtd
mailing list