From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from eggs.gnu.org ([2001:4830:134:3::10]:44368) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1bDsvQ-0005Y9-Kw for qemu-devel@nongnu.org; Fri, 17 Jun 2016 08:31:06 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1bDsvN-0006dq-FA for qemu-devel@nongnu.org; Fri, 17 Jun 2016 08:31:04 -0400 Received: from 3.mo53.mail-out.ovh.net ([178.33.44.239]:43997) by eggs.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1bDsvN-0006df-5e for qemu-devel@nongnu.org; Fri, 17 Jun 2016 08:31:01 -0400 Received: from player158.ha.ovh.net (b7.ovh.net [213.186.33.57]) by mo53.mail-out.ovh.net (Postfix) with ESMTP id 37527FF94EE for ; Fri, 17 Jun 2016 14:31:00 +0200 (CEST) References: <1466159314-28597-1-git-send-email-marcin.krzeminski@nokia.com> <1466159314-28597-9-git-send-email-marcin.krzeminski@nokia.com> From: =?UTF-8?Q?C=c3=a9dric_Le_Goater?= Message-ID: Date: Fri, 17 Jun 2016 14:30:54 +0200 MIME-Version: 1.0 In-Reply-To: <1466159314-28597-9-git-send-email-marcin.krzeminski@nokia.com> Content-Type: text/plain; charset=windows-1252 Content-Transfer-Encoding: quoted-printable Subject: Re: [Qemu-devel] [PATCH v2 08/10] 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, clg@fr.ibm.com On 06/17/2016 12:28 PM, marcin.krzeminski@nokia.com wrote: > From: Marcin Krzeminski >=20 > Support for Spansion and Macronix flashes. > Additionally Numonyx(Micron) moved from default > in fast read commands family. Also moved fast read > command decoding to functions. >=20 > Signed-off-by: Marcin Krzeminski Reviewed-by: C=E9dric Le Goater Thanks, it looks better. C. > --- > hw/block/m25p80.c | 145 ++++++++++++++++++++++++++++++++++++++++------= -------- > 1 file changed, 108 insertions(+), 37 deletions(-) >=20 > diff --git a/hw/block/m25p80.c b/hw/block/m25p80.c > index 21998db..f40fa99 100644 > --- a/hw/block/m25p80.c > +++ b/hw/block/m25p80.c > @@ -719,6 +719,111 @@ static void reset_memory(Flash *s) > DB_PRINT_L(0, "Reset done.\n"); > } > =20 > +static void decode_fast_read_cmd(Flash *s) > +{ > + s->needed_bytes =3D get_addr_length(s); > + switch (get_man(s)) { > + /* Dummy cycles - modeled with bytes writes instead of bits */ > + case MAN_NUMONYX: > + s->needed_bytes +=3D extract32(s->volatile_cfg, 4, 4); > + break; > + case MAN_MACRONIX: > + if (extract32(s->volatile_cfg, 6, 2) =3D=3D 1) { > + s->needed_bytes +=3D 6; > + } else { > + s->needed_bytes +=3D 8; > + } > + break; > + case MAN_SPANSION: > + s->needed_bytes +=3D extract32(s->spansion_cr2v, > + SPANSION_DUMMY_CLK_POS, > + SPANSION_DUMMY_CLK_LEN > + ); > + break; > + default: > + break; > + } > + s->pos =3D 0; > + s->len =3D 0; > + s->state =3D STATE_COLLECTING_DATA; > +} > + > +static void decode_dio_read_cmd(Flash *s) > +{ > + s->needed_bytes =3D get_addr_length(s); > + /* Dummy cycles modeled with bytes writes instead of bits */ > + switch (get_man(s)) { > + case MAN_WINBOND: > + s->needed_bytes =3D 4; > + break; > + case MAN_SPANSION: > + s->needed_bytes +=3D extract32(s->spansion_cr2v, > + SPANSION_DUMMY_CLK_POS, > + SPANSION_DUMMY_CLK_LEN > + ); > + break; > + case MAN_NUMONYX: > + s->needed_bytes +=3D extract32(s->volatile_cfg, 4, 4); > + break; > + case MAN_MACRONIX: > + switch (extract32(s->volatile_cfg, 6, 2)) { > + case 1: > + s->needed_bytes +=3D 6; > + break; > + case 2: > + s->needed_bytes +=3D 8; > + break; > + default: > + s->needed_bytes +=3D 4; > + break; > + } > + break; > + default: > + break; > + } > + s->pos =3D 0; > + s->len =3D 0; > + s->state =3D STATE_COLLECTING_DATA; > +} > + > +static void decode_qio_read_cmd(Flash *s) > +{ > + s->needed_bytes =3D get_addr_length(s); > + /* Dummy cycles modeled with bytes writes instead of bits */ > + switch (get_man(s)) { > + case MAN_WINBOND: > + s->needed_bytes =3D 6; > + break; > + case MAN_SPANSION: > + s->needed_bytes +=3D extract32(s->spansion_cr2v, > + SPANSION_DUMMY_CLK_POS, > + SPANSION_DUMMY_CLK_LEN > + ); > + break; > + case MAN_NUMONYX: > + s->needed_bytes +=3D extract32(s->volatile_cfg, 4, 4); > + break; > + case MAN_MACRONIX: > + switch (extract32(s->volatile_cfg, 6, 2)) { > + case 1: > + s->needed_bytes +=3D 4; > + break; > + case 2: > + s->needed_bytes +=3D 8; > + break; > + default: > + s->needed_bytes +=3D 6; > + break; > + } > + break; > + default: > + break; > + } > + s->pos =3D 0; > + s->len =3D 0; > + s->state =3D STATE_COLLECTING_DATA; > +} > + > static void decode_new_cmd(Flash *s, uint32_t value) > { > s->cmd_in_progress =3D value; > @@ -756,51 +861,17 @@ static void decode_new_cmd(Flash *s, uint32_t val= ue) > case DOR4: > case QOR: > case QOR4: > - s->needed_bytes =3D get_addr_length(s); > - switch (get_man(s)) { > - case MAN_NUMONYX: > - s->needed_bytes +=3D extract32(s->volatile_cfg, 4, 4); > - break; > - default: > - break; > - } > - s->pos =3D 0; > - s->len =3D 0; > - s->state =3D STATE_COLLECTING_DATA; > + decode_fast_read_cmd(s); > break; > =20 > case DIOR: > case DIOR4: > - switch (get_man(s)) { > - case MAN_WINBOND: > - case MAN_SPANSION: > - s->needed_bytes =3D 4; > - break; > - default: > - s->needed_bytes =3D get_addr_length(s); > - /* Dummy cycles modeled with bytes writes instead of bits = */ > - s->needed_bytes +=3D extract32(s->volatile_cfg, 4, 4); > - } > - s->pos =3D 0; > - s->len =3D 0; > - s->state =3D STATE_COLLECTING_DATA; > + decode_dio_read_cmd(s); > break; > =20 > case QIOR: > case QIOR4: > - switch (get_man(s)) { > - case MAN_WINBOND: > - case MAN_SPANSION: > - s->needed_bytes =3D 6; > - break; > - default: > - s->needed_bytes =3D get_addr_length(s); > - /* Dummy cycles modeled with bytes writes instead of bits = */ > - s->needed_bytes +=3D extract32(s->volatile_cfg, 4, 4); > - } > - s->pos =3D 0; > - s->len =3D 0; > - s->state =3D STATE_COLLECTING_DATA; > + decode_qio_read_cmd(s); > break; > =20 > case WRSR: >=20