diff mbox series

[3/9] hw/block: m25p80: Fix the number of dummy bytes needed for Macronix flashes

Message ID 20210114150902.11515-4-bmeng.cn@gmail.com
State New
Headers show
Series hw/block: m25p80: Fix the mess of dummy bytes needed for fast read commands | expand

Commit Message

Bin Meng Jan. 14, 2021, 3:08 p.m. UTC
From: Bin Meng <bin.meng@windriver.com>

Per datasheet [1], the number of dummy cycles for Macronix flashes
is configurable via two volatible bits (DC1, DC2) in a configuration
register.

Do the same dummy cycle to dummy byte conversion fix as others.

[1] https://www.macronix.com/Lists/Datasheet/Attachments/7674/MX66U51235F,%201.8V,%20512Mb,%20v1.1.pdf

Fixes: cf6f1efe0b57 ("m25p80: Fast read commands family changes")
Signed-off-by: Bin Meng <bin.meng@windriver.com>
---

 hw/block/m25p80.c | 21 +++++++++++----------
 1 file changed, 11 insertions(+), 10 deletions(-)
diff mbox series

Patch

diff --git a/hw/block/m25p80.c b/hw/block/m25p80.c
index c8cd12a6d3..44508b3da9 100644
--- a/hw/block/m25p80.c
+++ b/hw/block/m25p80.c
@@ -949,10 +949,10 @@  static void decode_fast_read_cmd(Flash *s)
         break;
     case MAN_MACRONIX:
         if (extract32(s->volatile_cfg, 6, 2) == 1) {
-            s->needed_bytes += 6;
-        } else {
-            s->needed_bytes += 8;
+            qemu_log_mask(LOG_UNIMP,
+                          "M25P80: the number of dummy bits is not multiple of 8");
         }
+        s->needed_bytes += 1;
         break;
     case MAN_SPANSION:
         s->needed_bytes += extract32(s->spansion_cr2v,
@@ -989,13 +989,14 @@  static void decode_dio_read_cmd(Flash *s)
     case MAN_MACRONIX:
         switch (extract32(s->volatile_cfg, 6, 2)) {
         case 1:
-            s->needed_bytes += 6;
-            break;
+            qemu_log_mask(LOG_UNIMP,
+                          "M25P80: the number of dummy bits is not multiple of 8");
+        /* fall-through */
         case 2:
-            s->needed_bytes += 8;
+            s->needed_bytes += 2;
             break;
         default:
-            s->needed_bytes += 4;
+            s->needed_bytes += 1;
             break;
         }
         break;
@@ -1028,13 +1029,13 @@  static void decode_qio_read_cmd(Flash *s)
     case MAN_MACRONIX:
         switch (extract32(s->volatile_cfg, 6, 2)) {
         case 1:
-            s->needed_bytes += 4;
+            s->needed_bytes += 2;
             break;
         case 2:
-            s->needed_bytes += 8;
+            s->needed_bytes += 4;
             break;
         default:
-            s->needed_bytes += 6;
+            s->needed_bytes += 3;
             break;
         }
         break;