From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from eggs.gnu.org ([2001:4830:134:3::10]:33213) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1bDRat-0006OC-9G for qemu-devel@nongnu.org; Thu, 16 Jun 2016 03:20:04 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1bDRaq-0000cZ-2R for qemu-devel@nongnu.org; Thu, 16 Jun 2016 03:20:03 -0400 Received: from 8.mo3.mail-out.ovh.net ([87.98.172.249]:42785) by eggs.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1bDRap-0000cK-OE for qemu-devel@nongnu.org; Thu, 16 Jun 2016 03:20:00 -0400 Received: from player772.ha.ovh.net (b7.ovh.net [213.186.33.57]) by mo3.mail-out.ovh.net (Postfix) with ESMTP id C1B94FFD054 for ; Thu, 16 Jun 2016 09:19:58 +0200 (CEST) References: <1465998071-7355-1-git-send-email-marcin.krzeminski@nokia.com> <1465998071-7355-9-git-send-email-marcin.krzeminski@nokia.com> From: =?UTF-8?Q?C=c3=a9dric_Le_Goater?= Message-ID: <57625319.1000107@kaod.org> Date: Thu, 16 Jun 2016 09:19:53 +0200 MIME-Version: 1.0 In-Reply-To: <1465998071-7355-9-git-send-email-marcin.krzeminski@nokia.com> Content-Type: text/plain; charset=windows-1252 Content-Transfer-Encoding: 7bit Subject: Re: [Qemu-devel] [PATCH 8/9] m25p80: Fast read commands family changes. List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , To: marcin.krzeminski@nokia.com, qemu-devel@nongnu.org Cc: crosthwaitepeter@gmail.com, pawel.lenkow@itlen.com, peter.maydell@linaro.org On 06/15/2016 03:41 PM, marcin.krzeminski@nokia.com wrote: > From: Marcin Krzeminski > > Add support for Spansion and Macronix flashes. > Additionally Numonyx(Micron) move from default > in fast read commands family. maybe we could start adding sub routines to decode some of the larger commands, to ease reading. DIOR and QIOR are good candidates. C. > 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; >