From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from eggs.gnu.org ([2001:4830:134:3::10]:34365) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1Vogas-0001SW-0T for qemu-devel@nongnu.org; Thu, 05 Dec 2013 16:36:27 -0500 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1Vogak-0003f1-4z for qemu-devel@nongnu.org; Thu, 05 Dec 2013 16:36:21 -0500 Received: from mail-pd0-f170.google.com ([209.85.192.170]:55680) by eggs.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1Vogaj-0003ew-VF for qemu-devel@nongnu.org; Thu, 05 Dec 2013 16:36:14 -0500 Received: by mail-pd0-f170.google.com with SMTP id g10so25467831pdj.15 for ; Thu, 05 Dec 2013 13:36:13 -0800 (PST) From: Roy Franz Date: Thu, 5 Dec 2013 13:35:57 -0800 Message-Id: <1386279359-32286-6-git-send-email-roy.franz@linaro.org> In-Reply-To: <1386279359-32286-1-git-send-email-roy.franz@linaro.org> References: <1386279359-32286-1-git-send-email-roy.franz@linaro.org> Subject: [Qemu-devel] [PATCH V5 5/7] Add max device width parameter for NOR devices List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , To: qemu-devel@nongnu.org, peter.maydell@linaro.org, kwolf@redhat.com, stefanha@redhat.com Cc: Roy Franz , patches@linaro.org For handling CFI and device ID reads, we need to not only know the width that a NOR flash device is configured for, but also its maximum width. The maximum width addressing mode is used for multi-width parts no matter which width they are configured for. The most common case is x16 parts that also support x8 mode. When configured for x8 operation these devices respond to CFI and device ID requests differently than native x8 NOR parts. Signed-off-by: Roy Franz --- hw/block/pflash_cfi01.c | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/hw/block/pflash_cfi01.c b/hw/block/pflash_cfi01.c index 82a2519..8f81341 100644 --- a/hw/block/pflash_cfi01.c +++ b/hw/block/pflash_cfi01.c @@ -74,6 +74,7 @@ struct pflash_t { uint64_t sector_len; uint8_t bank_width; uint8_t device_width; /* If 0, device width not specified. */ + uint8_t max_device_width; /* max device width in bytes */ uint8_t be; uint8_t wcycle; /* if 0, the flash is read normally */ int ro; @@ -635,6 +636,13 @@ static void pflash_cfi01_realize(DeviceState *dev, Error **errp) pfl->ro = 0; } + /* Default to devices being used at their maximum device width. This was + * assumed before the device_width support was added. + */ + if (!pfl->max_device_width) { + pfl->max_device_width = pfl->device_width; + } + pfl->timer = timer_new_ns(QEMU_CLOCK_VIRTUAL, pflash_timer, pfl); pfl->wcycle = 0; pfl->cmd = 0; @@ -730,6 +738,7 @@ static Property pflash_cfi01_properties[] = { DEFINE_PROP_UINT64("sector-length", struct pflash_t, sector_len, 0), DEFINE_PROP_UINT8("width", struct pflash_t, bank_width, 0), DEFINE_PROP_UINT8("device-width", struct pflash_t, device_width, 0), + DEFINE_PROP_UINT8("max-device-width", struct pflash_t, max_device_width, 0), DEFINE_PROP_UINT8("big-endian", struct pflash_t, be, 0), DEFINE_PROP_UINT16("id0", struct pflash_t, ident0, 0), DEFINE_PROP_UINT16("id1", struct pflash_t, ident1, 0), -- 1.7.10.4