Hi Joe, On Thu, Nov 12, 2020 at 07:10:55PM -0800, Joe Komlodi wrote: > Numonyx chips determine the number of cycles to wait based on bits 7:4 > in the volatile configuration register. > > However, if these bits are 0x0 or 0xF, the number of dummy cycles to > wait is > 10 on a QIOR or QIOR4 command, or 8 on any other currently supported > fast read command. [1]
With above changed to: " However, if these bits are 0x0 or 0xF, the number of dummy cycles to wait is 10 on a QIOR or QIOR4 command or when in QIO mode and else 8 for the currently supported fast read commands. [1] " Reviewed-by: Francisco Iglesias <francisco.igles...@xilinx.com> Best regards, Francisco Iglesias > > [1] > https://www.micron.com/-/media/client/global/documents/products/data-sheet/nor-flash/serial-nor/mt25q/die-rev-b/mt25q_qlkt_u_02g_cbb_0.pdf?rev=9b167fbf2b3645efba6385949a72e453 > > Signed-off-by: Joe Komlodi <koml...@xilinx.com> > --- > hw/block/m25p80.c | 30 +++++++++++++++++++++++++++--- > 1 file changed, 27 insertions(+), 3 deletions(-) > > diff --git a/hw/block/m25p80.c b/hw/block/m25p80.c > index 2552f2c..0c78015 100644 > --- a/hw/block/m25p80.c > +++ b/hw/block/m25p80.c > @@ -837,6 +837,30 @@ static uint8_t numonyx_get_mode(Flash *s) > } > } > > +static uint8_t numonyx_extract_cfg_num_dummies(Flash *s) > +{ > + uint8_t num_dummies; > + uint8_t mode; > + assert(get_man(s) == MAN_NUMONYX); > + > + mode = numonyx_get_mode(s); > + num_dummies = extract32(s->volatile_cfg, 4, 4); > + > + if (num_dummies == 0x0 || num_dummies == 0xf) { > + switch (s->cmd_in_progress) { > + case QIOR: > + case QIOR4: > + num_dummies = 10; > + break; > + default: > + num_dummies = (mode == MODE_QIO) ? 10 : 8; > + break; > + } > + } > + > + return num_dummies; > +} > + > static void decode_fast_read_cmd(Flash *s) > { > s->needed_bytes = get_addr_length(s); > @@ -847,7 +871,7 @@ static void decode_fast_read_cmd(Flash *s) > s->state = STATE_COLLECTING_DATA; > break; > case MAN_NUMONYX: > - s->needed_bytes += extract32(s->volatile_cfg, 4, 4); > + s->needed_bytes += numonyx_extract_cfg_num_dummies(s); > s->state = STATE_COLLECTING_DATA; > break; > case MAN_MACRONIX: > @@ -891,7 +915,7 @@ static void decode_dio_read_cmd(Flash *s) > s->state = STATE_COLLECTING_DATA; > break; > case MAN_NUMONYX: > - s->needed_bytes += extract32(s->volatile_cfg, 4, 4); > + s->needed_bytes += numonyx_extract_cfg_num_dummies(s); > s->state = STATE_COLLECTING_DATA; > break; > case MAN_MACRONIX: > @@ -935,7 +959,7 @@ static void decode_qio_read_cmd(Flash *s) > s->state = STATE_COLLECTING_DATA; > break; > case MAN_NUMONYX: > - s->needed_bytes += extract32(s->volatile_cfg, 4, 4); > + s->needed_bytes += numonyx_extract_cfg_num_dummies(s); > s->state = STATE_COLLECTING_DATA; > break; > case MAN_MACRONIX: > -- > 2.7.4 >