From: Heiner Kallweit <hkallweit1@gmail.com>
To: Brian Norris <computersforpeace@gmail.com>
Cc: linux-mtd@lists.infradead.org
Subject: Re: Error handling in spi-nor and dealing with short reads/writes
Date: Wed, 18 Nov 2015 21:54:55 +0100 [thread overview]
Message-ID: <564CE59F.4070905@gmail.com> (raw)
In-Reply-To: <20151118004553.GI8456@google.com>
Am 18.11.2015 um 01:45 schrieb Brian Norris:
> Hi Heiner,
>
> I see you've sent followup patches for this already. Haven't had a
> chance to look at them fully yet, but I can answer a bit.
>
> On Wed, Oct 07, 2015 at 09:41:37PM +0200, Heiner Kallweit wrote:
>> I stumbled across some missing error handling in spi-nor and when having a look at the
>> list archive I found some proposed patches and related discussions.
>
> Looking at this?
>
> http://lists.infradead.org/pipermail/linux-mtd/2015-August/061058.html
Yes, I refered to this mail thread. Especially this mail:
https://lkml.org/lkml/2015/5/22/94
>
> (Unfortunately, this series got dropped by patchwork:
> http://patchwork.ozlabs.org/project/linux-mtd/list/)
>
>> However it seems like there was no result, at least I didn't find accepted patches
>> dealing with this issue.
>
> Yes, they haven't been accepted yet. IIRC, they partly had to do with
> buggy SPI drivers, and so it was hard to get things straight when the
> submitter just wanted to paper over driver bugs. I haven't had the
> incentive or time to properly revisit the later versions of those
> patches. But I may review/merge them soon, and it looks like that may
> conflict with your patches.
>
> It'd be great if you could review those patches.
>
Sure, I'll have a look.
>> To summarize few issues:
>>
>> 1. I didn't find any clear definition how the read / write callbacks in spi_nor and mtd_info
>> are supposed to handle the retlen argument (returning the actual length of the current
>> transfer or adding it to the current value of *retlen).
>
> Yeah...they're not extremely well specified. mtd_info, at least, has a
> fairly well established de facto specification, but spi-nor might be a
> bit more inconsistent.
>
>> Maybe due to this missing specification there are different implementations of the read
>> callback in spi_nor:
>> m25p80_read: sets *retlen to the actual length of the current transfer
>> nxp_spifi_read: adds it to *retlen
>> fsl_qspi_read: adds it to *retlen
>> Luckily this has no impact so far as mtd_read initializes *retlen to 0 before calling
>> the _read callback (once).
>
> Right, all MTD users assume that the core MTD code initializes *retlen.
> That was done because otherwise, the initialization was done
> inconsistently across all drivers.
>
>> 2. The write callback in spi_nor is defined with a void return type and doesn't allow to
>> handle the case of a failing transfer.
>
> That one has been odd to me.
>
>> 3. It's unclear at which layer incomplete reads/writes are acceptable (and therefore which
>> layer can / should loop to assemble chunks).
>
> Yep.
>
>> My 2ct:
>>
>> 1. They should return the actual length of the current transfer in *retlen.
>
> Seems reasonable.
>
>> In case of a partial transfer they should return an error (e.g. -EIO or -EMSGSIZE).
>> This allows the caller to identify a partial transfer and the amount of
>> bytes successfully transferred. Then the caller can decide whether he wants
>> to retry for the failed part of the transfer and later assemble the chunks.
>
> I don't think we want to handle both errors and *retlen; those are
> mutually exclusive. If we have to negotiate a max message size for some
> reason, that's a different story.
I have to admit that when thinking about assembling read chunks I had the fsl-espi
controller in mind which has a 64K message size limitation.
Currently this limitation is handled in the controller driver using ugly implicit
assumptions (bytes 2-4 in a message are assumed to be a SPI NOR 3-byte address etc.)
I'll send a proposal for handling such limitations in a structured way and I'll
involve Mark as it touches the spi_master struct.
>
>> 2. Make it return int (like _write in mtd_info).
>
> I assume 'it' is spi_nor->_write() callback. Then yes.
>
>> 3. I prefer to handle read chunks in spi_nor_read (submitted a related patch already).
>
> Sounds OK.
>
>> Not sure whether it would make sense to add chunk handling also for writes.
>> I'm not aware of any controller which is not able to transfer at least a single page
>> at once.
>
> At most, we should just make sure the error reporting and *retlen
> handling is correct, and if drivers run into problems, then we can talk.
> For one, you sometimes get less wear reliability from NOR flash when
> writing in smaller-than-page-size chunks, so we shouldn't encourage it.
>
>> This is meant as a RfC. Also I may have missed important parts of the discussion.
>> Appreciate any hint or comment.
>
> Brian
>
Heiner
prev parent reply other threads:[~2015-11-18 21:20 UTC|newest]
Thread overview: 3+ messages / expand[flat|nested] mbox.gz Atom feed top
2015-10-07 19:41 Error handling in spi-nor and dealing with short reads/writes Heiner Kallweit
2015-11-18 0:45 ` Brian Norris
2015-11-18 20:54 ` Heiner Kallweit [this message]
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=564CE59F.4070905@gmail.com \
--to=hkallweit1@gmail.com \
--cc=computersforpeace@gmail.com \
--cc=linux-mtd@lists.infradead.org \
/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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).