@@ -875,9 +875,22 @@ static void decode_fast_read_cmd(Flash *s)
{
s->needed_bytes = get_addr_length(s);
switch (get_man(s)) {
- /* Dummy cycles - modeled with bytes writes instead of bits */
+ /* Dummy cycles - modeled with bytes writes */
case MAN_WINBOND:
- s->needed_bytes += 8;
+ switch (s->cmd_in_progress) {
+ case FAST_READ:
+ case FAST_READ4:
+ s->needed_bytes += 1;
+ break;
+ case DOR:
+ case DOR4:
+ s->needed_bytes += 2;
+ break;
+ case QOR:
+ case QOR4:
+ s->needed_bytes += 4;
+ break;
+ }
break;
case MAN_NUMONYX:
s->needed_bytes += numonyx_extract_cfg_num_dummies(s);
@@ -906,7 +919,7 @@ static void decode_fast_read_cmd(Flash *s)
static void decode_dio_read_cmd(Flash *s)
{
s->needed_bytes = get_addr_length(s);
- /* Dummy cycles modeled with bytes writes instead of bits */
+ /* Dummy cycles modeled with bytes writes */
switch (get_man(s)) {
case MAN_WINBOND:
s->needed_bytes += WINBOND_CONTINUOUS_READ_MODE_CMD_LEN;
@@ -945,11 +958,10 @@ static void decode_dio_read_cmd(Flash *s)
static void decode_qio_read_cmd(Flash *s)
{
s->needed_bytes = get_addr_length(s);
- /* Dummy cycles modeled with bytes writes instead of bits */
+ /* Dummy cycles modeled with bytes writes */
switch (get_man(s)) {
case MAN_WINBOND:
- s->needed_bytes += WINBOND_CONTINUOUS_READ_MODE_CMD_LEN;
- s->needed_bytes += 4;
+ s->needed_bytes += WINBOND_CONTINUOUS_READ_MODE_CMD_LEN + 2;
break;
case MAN_SPANSION:
s->needed_bytes += SPANSION_CONTINUOUS_READ_MODE_CMD_LEN;