qemu-devel.nongnu.org archive mirror
 help / color / mirror / Atom feed
From: "Philippe Mathieu-Daudé" <philmd@redhat.com>
To: Stephen Checkoway <stephen.checkoway@oberlin.edu>,
	Peter Maydell <peter.maydell@linaro.org>,
	David Gibson <david@gibson.dropbear.id.au>,
	Antony Pavlov <antonynpavlov@gmail.com>
Cc: Kevin Wolf <kwolf@redhat.com>,
	Laurent Vivier <lvivier@redhat.com>,
	Thomas Huth <thuth@redhat.com>,
	"open list:Block layer core" <qemu-block@nongnu.org>,
	"open list:sPAPR" <qemu-ppc@nongnu.org>,
	QEMU Developers <qemu-devel@nongnu.org>,
	Max Reitz <mreitz@redhat.com>,
	Alistair Francis <alistair.francis@wdc.com>,
	Paolo Bonzini <pbonzini@redhat.com>
Subject: Re: [Qemu-devel] [PULL 27/27] hw/block/pflash_cfi02: Reduce I/O accesses to 16-bit
Date: Thu, 4 Jul 2019 14:45:15 +0200	[thread overview]
Message-ID: <9cf78fb6-e56c-8ebc-3158-34cdf8fa70e6@redhat.com> (raw)
In-Reply-To: <e8d65586-63b0-0c43-a043-efd4a59b3834@redhat.com>

Cc'ing PPC/taihu_405ep and ARM/Digic4 maintainers.

On 7/3/19 6:36 PM, Philippe Mathieu-Daudé wrote:
> On 7/3/19 6:20 PM, Stephen Checkoway wrote:
>>> On Jul 3, 2019, at 12:02, Philippe Mathieu-Daudé <philmd@redhat.com> wrote:
>>> On 7/3/19 5:52 PM, Stephen Checkoway wrote:
>>>>
>>>>
>>>>> On Jul 1, 2019, at 20:59, Philippe Mathieu-Daudé <philmd@redhat.com> wrote:
>>>>>
>>>>> Parallel NOR flashes are limited to 16-bit bus accesses.
>>>>
>>>> I don't think this is correct. The CFI spec defines an x32 interface for parallel NOR. CFI addresses 0x28 and 0x29 specify the interface and value 3 is x32 and value 5 is x16/x32.
>>>>
>>>> Here's an example of an x32 device <https://www.mouser.com/datasheet/2/100/002-00948_29CD032J_S29CD016J_S29CL032J_S29CL016J_3-1316792.pdf>.
>>>
>>> OK, I was not aware of these.
>>>
>>> QEMU never CFI-announced itself as x32 capable:
>>>
>>>    /* Flash device interface (8 & 16 bits) */
>>>    pfl->cfi_table[0x28] = 0x02;
>>>    pfl->cfi_table[0x29] = 0x00;
>>>
>>> So while the commit description is incorrect, the code is safe with the
>>> current device model.
>>>
>>> I am not comfortable keeping untested 32-bit mode.
>>> Were you using it?
>>
>> I'm not using it. I did have some code to set these CFI values based on the parameters used to control the interleaving <https://github.com/stevecheckoway/qemu/commit/f9a79a6e18b2c7c5a05e344ff554a7d980a56042#diff-d33881bd0ef099e2f46ebd4797c653bcR599>.
>>
>> In general, a better testing harness would be nice though.
> 
> We can revert it if it helps you.

So after further analysis, there are not guest visible changes, because
32-bit accesses are still valid (.valid.max_access_size = 4) but now
they are processed as two 16-bit accesses, shifted by
access_with_adjusted_size().
Well, I haven't checked (yet) when the guest and the flash are in
different endianess, and I wish we don't use that.

Now I see 2 different guests "registering" the flash in 32-bit access:

- PPC/taihu_405ep

  The CFI id matches the S29AL008J that is a 1MB in x16, while the code
  QEMU forces it to be 2MB, and checking Linux it expects a 4MB flash
  there, Yay \o/

- ARM/Digic4

  While the comment says "Samsung K8P3215UQB 64M Bit (4Mx16)", this
  flash is 32Mb (2MB). Also note the CFI id does not match the comment.
  Again, Yay.

Anyway, better safe than sorry, so I'll revert.

Thanks for following and catching this,

Phil.

[...]
>>>>> Remove the 32-bit dead code.
>>>>>
>>>>> Reviewed-by: Alistair Francis <alistair.francis@wdc.com>
>>>>> Message-Id: <20190627202719.17739-29-philmd@redhat.com>
>>>>> Signed-off-by: Philippe Mathieu-Daudé <philmd@redhat.com>
>>>>> ---
>>>>> hw/block/pflash_cfi02.c | 5 +----
>>>>> 1 file changed, 1 insertion(+), 4 deletions(-)
>>>>>
>>>>> diff --git a/hw/block/pflash_cfi02.c b/hw/block/pflash_cfi02.c
>>>>> index 83084b9d72..5392290c72 100644
>>>>> --- a/hw/block/pflash_cfi02.c
>>>>> +++ b/hw/block/pflash_cfi02.c
>>>>> @@ -317,8 +317,6 @@ static uint64_t pflash_read(void *opaque, hwaddr offset, unsigned int width)
>>>>>    boff = offset & 0xFF;
>>>>>    if (pfl->width == 2) {
>>>>>        boff = boff >> 1;
>>>>> -    } else if (pfl->width == 4) {
>>>>> -        boff = boff >> 2;
>>>>>    }
>>>>>    switch (pfl->cmd) {
>>>>>    default:
>>>>> @@ -449,8 +447,6 @@ static void pflash_write(void *opaque, hwaddr offset, uint64_t value,
>>>>>    boff = offset;
>>>>>    if (pfl->width == 2) {
>>>>>        boff = boff >> 1;
>>>>> -    } else if (pfl->width == 4) {
>>>>> -        boff = boff >> 2;
>>>>>    }
>>>>>    /* Only the least-significant 11 bits are used in most cases. */
>>>>>    boff &= 0x7FF;
>>>>> @@ -710,6 +706,7 @@ static void pflash_write(void *opaque, hwaddr offset, uint64_t value,
>>>>> static const MemoryRegionOps pflash_cfi02_ops = {
>>>>>    .read = pflash_read,
>>>>>    .write = pflash_write,
>>>>> +    .impl.max_access_size = 2,
>>>>>    .valid.min_access_size = 1,
>>>>>    .valid.max_access_size = 4,
>>>>>    .endianness = DEVICE_NATIVE_ENDIAN,
>>>>> -- 
>>>>> 2.20.1


  reply	other threads:[~2019-07-04 12:48 UTC|newest]

Thread overview: 37+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2019-07-02  0:58 [Qemu-devel] [PULL 00/27] pflash-next patches Philippe Mathieu-Daudé
2019-07-02  0:58 ` [Qemu-devel] [PULL 01/27] tests/pflash-cfi02: Add test for supported CFI commands Philippe Mathieu-Daudé
2019-07-02  0:58 ` [Qemu-devel] [PULL 02/27] hw/block/pflash: Simplify trace_pflash_io_read/write() Philippe Mathieu-Daudé
2019-07-02  0:58 ` [Qemu-devel] [PULL 03/27] hw/block/pflash: Simplify trace_pflash_data_read/write() Philippe Mathieu-Daudé
2019-07-02  0:58 ` [Qemu-devel] [PULL 04/27] hw/block/pflash_cfi02: Fix debug format string Philippe Mathieu-Daudé
2019-07-02  0:58 ` [Qemu-devel] [PULL 05/27] hw/block/pflash_cfi02: Add an enum to define the write cycles Philippe Mathieu-Daudé
2019-07-02  0:58 ` [Qemu-devel] [PULL 06/27] hw/block/pflash_cfi02: Add helpers to manipulate the status bits Philippe Mathieu-Daudé
2019-07-02  0:58 ` [Qemu-devel] [PULL 07/27] hw/block/pflash_cfi02: Simplify a statement using fall through Philippe Mathieu-Daudé
2019-07-02  0:58 ` [Qemu-devel] [PULL 08/27] hw/block/pflash_cfi02: Use the ldst API in pflash_write() Philippe Mathieu-Daudé
2019-07-02  0:58 ` [Qemu-devel] [PULL 09/27] hw/block/pflash_cfi02: Use the ldst API in pflash_read() Philippe Mathieu-Daudé
2019-07-02  0:58 ` [Qemu-devel] [PULL 10/27] hw/block/pflash_cfi02: Extract the pflash_data_read() function Philippe Mathieu-Daudé
2019-07-02  0:58 ` [Qemu-devel] [PULL 11/27] hw/block/pflash_cfi02: Unify the MemoryRegionOps Philippe Mathieu-Daudé
2019-07-02  0:58 ` [Qemu-devel] [PULL 12/27] hw/block/pflash_cfi02: Fix command address comparison Philippe Mathieu-Daudé
2019-07-02  0:58 ` [Qemu-devel] [PULL 13/27] tests/pflash-cfi02: Refactor to support testing multiple configurations Philippe Mathieu-Daudé
2019-07-02  0:58 ` [Qemu-devel] [PULL 14/27] hw/block/pflash_cfi02: Remove pointless local variable Philippe Mathieu-Daudé
2019-07-02  0:59 ` [Qemu-devel] [PULL 15/27] hw/block/pflash_cfi02: Document the current CFI values Philippe Mathieu-Daudé
2019-07-02  0:59 ` [Qemu-devel] [PULL 16/27] hw/block/pflash_cfi02: Hold the PRI table offset in a variable Philippe Mathieu-Daudé
2019-07-02  0:59 ` [Qemu-devel] [PULL 17/27] hw/block/pflash_cfi02: Document 'Page Mode' operations are not supported Philippe Mathieu-Daudé
2019-07-02  0:59 ` [Qemu-devel] [PULL 18/27] hw/block/pflash_cfi02: Implement nonuniform sector sizes Philippe Mathieu-Daudé
2019-07-02  0:59 ` [Qemu-devel] [PULL 19/27] hw/block/pflash_cfi02: Extract pflash_regions_count() Philippe Mathieu-Daudé
2019-07-02  0:59 ` [Qemu-devel] [PULL 20/27] hw/block/pflash_cfi02: Split if() condition Philippe Mathieu-Daudé
2019-07-02  0:59 ` [Qemu-devel] [PULL 21/27] hw/block/pflash_cfi02: Fix CFI in autoselect mode Philippe Mathieu-Daudé
2019-07-02  0:59 ` [Qemu-devel] [PULL 22/27] hw/block/pflash_cfi02: Fix reset command not ignored during erase Philippe Mathieu-Daudé
2019-07-02  0:59 ` [Qemu-devel] [PULL 23/27] hw/block/pflash_cfi02: Implement multi-sector erase Philippe Mathieu-Daudé
2019-07-02  0:59 ` [Qemu-devel] [PULL 24/27] hw/block/pflash_cfi02: Implement erase suspend/resume Philippe Mathieu-Daudé
2019-07-11 12:35   ` Peter Maydell
2019-07-11 12:51     ` Philippe Mathieu-Daudé
2019-07-02  0:59 ` [Qemu-devel] [PULL 25/27] hw/block/pflash_cfi02: Use chip erase time specified in the CFI table Philippe Mathieu-Daudé
2019-07-02  0:59 ` [Qemu-devel] [PULL 26/27] hw/block/pflash_cfi02: Document commands Philippe Mathieu-Daudé
2019-07-02  0:59 ` [Qemu-devel] [PULL 27/27] hw/block/pflash_cfi02: Reduce I/O accesses to 16-bit Philippe Mathieu-Daudé
2019-07-03 15:52   ` Stephen Checkoway
2019-07-03 16:02     ` Philippe Mathieu-Daudé
2019-07-03 16:20       ` Stephen Checkoway
2019-07-03 16:36         ` Philippe Mathieu-Daudé
2019-07-04 12:45           ` Philippe Mathieu-Daudé [this message]
2019-07-08 17:00             ` Stephen Checkoway
2019-07-02 17:56 ` [Qemu-devel] [PULL 00/27] pflash-next patches Peter Maydell

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=9cf78fb6-e56c-8ebc-3158-34cdf8fa70e6@redhat.com \
    --to=philmd@redhat.com \
    --cc=alistair.francis@wdc.com \
    --cc=antonynpavlov@gmail.com \
    --cc=david@gibson.dropbear.id.au \
    --cc=kwolf@redhat.com \
    --cc=lvivier@redhat.com \
    --cc=mreitz@redhat.com \
    --cc=pbonzini@redhat.com \
    --cc=peter.maydell@linaro.org \
    --cc=qemu-block@nongnu.org \
    --cc=qemu-devel@nongnu.org \
    --cc=qemu-ppc@nongnu.org \
    --cc=stephen.checkoway@oberlin.edu \
    --cc=thuth@redhat.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 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).