From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from eggs.gnu.org ([2001:4830:134:3::10]:47384) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1bDBcR-0007Z8-Kp for qemu-devel@nongnu.org; Wed, 15 Jun 2016 10:16:36 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1bDBcN-0002FO-U4 for qemu-devel@nongnu.org; Wed, 15 Jun 2016 10:16:34 -0400 Received: from mail-db3on0143.outbound.protection.outlook.com ([157.55.234.143]:43904 helo=emea01-db3-obe.outbound.protection.outlook.com) by eggs.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1bDBcN-0002F6-Fj for qemu-devel@nongnu.org; Wed, 15 Jun 2016 10:16:31 -0400 From: Date: Wed, 15 Jun 2016 15:41:10 +0200 Message-ID: <1465998071-7355-9-git-send-email-marcin.krzeminski@nokia.com> In-Reply-To: <1465998071-7355-1-git-send-email-marcin.krzeminski@nokia.com> References: <1465998071-7355-1-git-send-email-marcin.krzeminski@nokia.com> MIME-Version: 1.0 Content-Type: text/plain Subject: [Qemu-devel] [PATCH 8/9] m25p80: Fast read commands family changes. List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , To: qemu-devel@nongnu.org Cc: crosthwaitepeter@gmail.com, pawel.lenkow@itlen.com, rfsw-patches@mlist.emea.nsn-intra.net, peter.maydell@linaro.org, clg@fr.ibm.com From: Marcin Krzeminski Add support for Spansion and Macronix flashes. Additionally Numonyx(Micron) move from default in fast read commands family. Signed-off-by: Marcin Krzeminski --- hw/block/m25p80.c | 72 ++++++++++++++++++++++++++++++++++++++++++++++++------- 1 file changed, 64 insertions(+), 8 deletions(-) diff --git a/hw/block/m25p80.c b/hw/block/m25p80.c index 21998db..7bc0e03 100644 --- a/hw/block/m25p80.c +++ b/hw/block/m25p80.c @@ -758,9 +758,23 @@ static void decode_new_cmd(Flash *s, uint32_t value) case QOR4: s->needed_bytes = get_addr_length(s); switch (get_man(s)) { + /* Dummy cycles - modeled with bytes writes instead of bits */ case MAN_NUMONYX: s->needed_bytes += extract32(s->volatile_cfg, 4, 4); break; + case MAN_MACRONIX: + if (extract32(s->volatile_cfg, 6, 2) == 1) { + s->needed_bytes += 6; + } else { + s->needed_bytes += 8; + } + break; + case MAN_SPANSION: + s->needed_bytes += extract32(s->spansion_cr2v, + SPANSION_DUMMY_CLK_POS, + SPANSION_DUMMY_CLK_LEN + ); + break; default: break; } @@ -771,15 +785,36 @@ static void decode_new_cmd(Flash *s, uint32_t value) case DIOR: case DIOR4: + s->needed_bytes = get_addr_length(s); + /* Dummy cycles modeled with bytes writes instead of bits */ switch (get_man(s)) { case MAN_WINBOND: + s->needed_bytes += 4; + break; case MAN_SPANSION: - s->needed_bytes = 4; + s->needed_bytes += extract32(s->spansion_cr2v, + SPANSION_DUMMY_CLK_POS, + SPANSION_DUMMY_CLK_LEN + ); break; - default: - s->needed_bytes = get_addr_length(s); - /* Dummy cycles modeled with bytes writes instead of bits */ + case MAN_NUMONYX: s->needed_bytes += extract32(s->volatile_cfg, 4, 4); + break; + case MAN_MACRONIX: + switch (extract32(s->volatile_cfg, 6, 2)) { + case 1: + s->needed_bytes += 6; + break; + case 2: + s->needed_bytes += 8; + break; + default: + s->needed_bytes += 4; + break; + } + break; + default: + break; } s->pos = 0; s->len = 0; @@ -788,15 +823,36 @@ static void decode_new_cmd(Flash *s, uint32_t value) case QIOR: case QIOR4: + s->needed_bytes = get_addr_length(s); + /* Dummy cycles modeled with bytes writes instead of bits */ switch (get_man(s)) { case MAN_WINBOND: + s->needed_bytes += 4; + break; case MAN_SPANSION: - s->needed_bytes = 6; + s->needed_bytes += extract32(s->spansion_cr2v, + SPANSION_DUMMY_CLK_POS, + SPANSION_DUMMY_CLK_LEN + ); break; - default: - s->needed_bytes = get_addr_length(s); - /* Dummy cycles modeled with bytes writes instead of bits */ + case MAN_NUMONYX: s->needed_bytes += extract32(s->volatile_cfg, 4, 4); + break; + case MAN_MACRONIX: + switch (extract32(s->volatile_cfg, 6, 2)) { + case 1: + s->needed_bytes += 4; + break; + case 2: + s->needed_bytes += 8; + break; + default: + s->needed_bytes += 6; + break; + } + break; + default: + break; } s->pos = 0; s->len = 0; -- 2.7.4