linux-mtd.lists.infradead.org archive mirror
 help / color / mirror / Atom feed
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

      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).