[Top][All Lists]

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [Qemu-devel] [PATCH] pflash_cfi01: fix per device sector length in C

From: David Engraf
Subject: Re: [Qemu-devel] [PATCH] pflash_cfi01: fix per device sector length in CFI table
Date: Thu, 12 Jan 2017 13:01:15 +0100

Am 12.01.2017 um 12:36 schrieb Andrew Jones:
On Thu, Jan 12, 2017 at 10:42:41AM +0000, Peter Maydell wrote:
On 12 January 2017 at 10:35, David Engraf <address@hidden> wrote:
The CFI entry for sector length must be set to sector length per device.
This is important for boards using multiple devices like the ARM Vexpress
board (width = 4, device-width = 2).

Linux and u-boots calculate the size ratio by dividing both values:

size_ratio = info->portwidth / info->chipwidth;

After that the sector length will be multiplied by the size_ratio, thus the
CFI entry for sector length is doubled. When Linux or u-boot send a sector
erase, they expect to erase the doubled sector length, but QEMU only erases
the board specified sector length.

This patch fixes the sector length in the CFI table to match the length per
device, equal to blocks_per_device.

Thanks for the patch. I haven't checked against the pflash spec yet,
but this looks like it's probably the right thing.

The only two machines which use a setup with multiple devices (ie
which specify device_width to the pflash_cfi01) are vexpress and virt.
For all other machines this patch leaves the behaviour unchanged.

Q: do we need to have some kind of nasty hack so that pre-2.9 virt
still gets the old broken values in the CFI table, for version and
migration compatibility? Ccing Drew for an opinion...

I'm pretty sure we need the nasty hack, but I'm also Ccing David for
his opinion.

I can update the patch if you give me some more information about the hack. Some ifdef for older versions?

Best regards
- David

reply via email to

[Prev in Thread] Current Thread [Next in Thread]