qemu-devel
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [Qemu-devel] [PATCH v3 02/13] m25p80: Add support for SST READ ID 0x


From: mar.krzeminski
Subject: Re: [Qemu-devel] [PATCH v3 02/13] m25p80: Add support for SST READ ID 0x90/0xAB commands
Date: Wed, 25 Oct 2017 20:12:45 +0200
User-agent: Mozilla/5.0 (X11; Linux x86_64; rv:52.0) Gecko/20100101 Thunderbird/52.4.0



W dniu 24.10.2017 o 21:51, Francisco Iglesias pisze:
Add support for SST READ ID 0x90/0xAB commands for reading out the flash
manufacuter ID and device ID.

Signed-off-by: Francisco Iglesias <address@hidden>
---
  hw/block/m25p80.c | 20 ++++++++++++++++++++
  1 file changed, 20 insertions(+)

diff --git a/hw/block/m25p80.c b/hw/block/m25p80.c
index 2971519..c85e8fa 100644
--- a/hw/block/m25p80.c
+++ b/hw/block/m25p80.c
@@ -355,6 +355,8 @@ typedef enum {
      DPP = 0xa2,
      QPP = 0x32,
      QPP_4 = 0x34,
+    RDID_90 = 0x90,
+    RDID_AB = 0xab,
ERASE_4K = 0x20,
      ERASE4_4K = 0x21,
@@ -405,6 +407,7 @@ typedef enum {
      MAN_MACRONIX,
      MAN_NUMONYX,
      MAN_WINBOND,
+    MAN_SST,
      MAN_GENERIC,
  } Manufacturer;
@@ -476,6 +479,8 @@ static inline Manufacturer get_man(Flash *s)
          return MAN_SPANSION;
      case 0xC2:
          return MAN_MACRONIX;
+    case 0xBF:
+        return MAN_SST;
      default:
          return MAN_GENERIC;
      }
@@ -1018,6 +1023,21 @@ static void decode_new_cmd(Flash *s, uint32_t value)
          s->state = STATE_READING_DATA;
          break;
+ case RDID_90:
+    case RDID_AB:
+        DB_PRINT_L(0, "populated manf/dev ID\n");
+        if (get_man(s) == MAN_SST) {
+            s->data[0] = s->pi->id[0];
+            s->data[1] = s->pi->id[2];
+            s->pos = 0;
+            s->len = 2;
+            s->data_read_loop = true;
+            s->state = STATE_READING_DATA;
I am not sure about this. I am looking at SST25WF080 datasheet, and it seem that those commands
also expect address, and based on that returns manufacturer id or device id.
+        } else {
+            qemu_log_mask(LOG_GUEST_ERROR, "M25P80: Unknown cmd %x\n", value);
+        }
+        break;
+
      case BULK_ERASE:
          if (s->write_enable) {
              DB_PRINT_L(0, "chip erase\n");
Regard,
Marcin



reply via email to

[Prev in Thread] Current Thread [Next in Thread]