[sw/silicon_creeator] Register spi commands after initializing spi_device buffers

Signed-off-by: Alphan Ulusoy <alphan@google.com>
diff --git a/sw/device/silicon_creator/lib/drivers/spi_device.c b/sw/device/silicon_creator/lib/drivers/spi_device.c
index 6f12299..05c9bdb 100644
--- a/sw/device/silicon_creator/lib/drivers/spi_device.c
+++ b/sw/device/silicon_creator/lib/drivers/spi_device.c
@@ -529,6 +529,30 @@
                                kSpiDeviceJedecManufId);
   abs_mmio_write32(kBase + SPI_DEVICE_JEDEC_ID_REG_OFFSET, reg);
 
+  // Write SFDP table to the reserved region in spi_device buffer.
+  uint32_t dest = kSfdpAreaStartAddr;
+  const char *table = (const char *)&kSpiDeviceSfdpTable;
+  for (size_t i = 0; i < kSpiDeviceSfdpTableNumWords; ++i) {
+    abs_mmio_write32(dest, read_32(table));
+    dest += sizeof(uint32_t);
+    table += sizeof(uint32_t);
+  }
+  // Fill the remaining space with `0xff`s.
+  for (; dest < kSfdpAreaEndAddr; dest += sizeof(uint32_t)) {
+    abs_mmio_write32(dest, UINT32_MAX);
+  }
+
+  // Reset the payload buffer to prevent access faults when reading beyond
+  // current payload depth (see #11782).
+  for (size_t i = 0; i < kSpiDevicePayloadAreaNumBytes; i += sizeof(uint32_t)) {
+    abs_mmio_write32(
+        kBase + SPI_DEVICE_BUFFER_REG_OFFSET + kSpiDevicePayloadAreaOffset + i,
+        0);
+  }
+
+  // Reset status register
+  abs_mmio_write32(kBase + SPI_DEVICE_FLASH_STATUS_REG_OFFSET, 0);
+
   // Configure the READ_STATUS command (CMD_INFO_0).
   cmd_info_set((cmd_info_t){
       .reg_offset = SPI_DEVICE_CMD_INFO_0_REG_OFFSET,
@@ -593,30 +617,6 @@
   reg = bitfield_field32_write(reg, SPI_DEVICE_CMD_INFO_WRDI_OPCODE_FIELD,
                                kSpiDeviceOpcodeWriteDisable);
   abs_mmio_write32(kBase + SPI_DEVICE_CMD_INFO_WRDI_REG_OFFSET, reg);
-
-  // Write SFDP table to the reserved region in spi_device buffer.
-  uint32_t dest = kSfdpAreaStartAddr;
-  const char *table = (const char *)&kSpiDeviceSfdpTable;
-  for (size_t i = 0; i < kSpiDeviceSfdpTableNumWords; ++i) {
-    abs_mmio_write32(dest, read_32(table));
-    dest += sizeof(uint32_t);
-    table += sizeof(uint32_t);
-  }
-  // Fill the remaining space with `0xff`s.
-  for (; dest < kSfdpAreaEndAddr; dest += sizeof(uint32_t)) {
-    abs_mmio_write32(dest, UINT32_MAX);
-  }
-
-  // Reset the payload buffer to prevent access faults when reading beyond
-  // current payload depth (see #11782).
-  for (size_t i = 0; i < kSpiDevicePayloadAreaNumBytes; i += sizeof(uint32_t)) {
-    abs_mmio_write32(
-        kBase + SPI_DEVICE_BUFFER_REG_OFFSET + kSpiDevicePayloadAreaOffset + i,
-        0);
-  }
-
-  // Reset status register
-  abs_mmio_write32(kBase + SPI_DEVICE_FLASH_STATUS_REG_OFFSET, 0);
 }
 
 rom_error_t spi_device_cmd_get(spi_device_cmd_t *cmd) {
diff --git a/sw/device/silicon_creator/lib/drivers/spi_device_unittest.cc b/sw/device/silicon_creator/lib/drivers/spi_device_unittest.cc
index 93d8ff0..6381b26 100644
--- a/sw/device/silicon_creator/lib/drivers/spi_device_unittest.cc
+++ b/sw/device/silicon_creator/lib/drivers/spi_device_unittest.cc
@@ -55,6 +55,7 @@
       .chip_rev = 3,
   };
   EXPECT_CALL(lifecycle_, HwRev(NotNull())).WillOnce(SetArgPointee<0>(hw_rev));
+
   EXPECT_ABS_WRITE32(
       base_ + SPI_DEVICE_JEDEC_ID_REG_OFFSET,
       {
@@ -68,6 +69,26 @@
           {SPI_DEVICE_JEDEC_ID_MF_OFFSET, kSpiDeviceJedecManufId},
       });
 
+  std::array<uint32_t, kSpiDeviceSfdpAreaNumBytes / sizeof(uint32_t)>
+      sfdp_buffer;
+  sfdp_buffer.fill(std::numeric_limits<uint32_t>::max());
+  std::memcpy(sfdp_buffer.data(), &kSpiDeviceSfdpTable,
+              sizeof(kSpiDeviceSfdpTable));
+  uint32_t offset =
+      base_ + SPI_DEVICE_BUFFER_REG_OFFSET + kSpiDeviceSfdpAreaOffset;
+  for (size_t i = 0; i < sfdp_buffer.size(); ++i) {
+    EXPECT_ABS_WRITE32(offset, sfdp_buffer[i]);
+    offset += sizeof(uint32_t);
+  }
+
+  offset = base_ + SPI_DEVICE_BUFFER_REG_OFFSET + kSpiDevicePayloadAreaOffset;
+  for (size_t i = 0; i < kSpiDevicePayloadAreaNumWords; ++i) {
+    EXPECT_ABS_WRITE32(offset, 0);
+    offset += sizeof(uint32_t);
+  }
+
+  EXPECT_ABS_WRITE32(base_ + SPI_DEVICE_FLASH_STATUS_REG_OFFSET, 0);
+
   EXPECT_ABS_WRITE32(
       base_ + SPI_DEVICE_CMD_INFO_0_REG_OFFSET,
       {
@@ -147,26 +168,6 @@
                          {SPI_DEVICE_CMD_INFO_WRDI_VALID_BIT, 1},
                      });
 
-  std::array<uint32_t, kSpiDeviceSfdpAreaNumBytes / sizeof(uint32_t)>
-      sfdp_buffer;
-  sfdp_buffer.fill(std::numeric_limits<uint32_t>::max());
-  std::memcpy(sfdp_buffer.data(), &kSpiDeviceSfdpTable,
-              sizeof(kSpiDeviceSfdpTable));
-  uint32_t offset =
-      base_ + SPI_DEVICE_BUFFER_REG_OFFSET + kSpiDeviceSfdpAreaOffset;
-  for (size_t i = 0; i < sfdp_buffer.size(); ++i) {
-    EXPECT_ABS_WRITE32(offset, sfdp_buffer[i]);
-    offset += sizeof(uint32_t);
-  }
-
-  offset = base_ + SPI_DEVICE_BUFFER_REG_OFFSET + kSpiDevicePayloadAreaOffset;
-  for (size_t i = 0; i < kSpiDevicePayloadAreaNumWords; ++i) {
-    EXPECT_ABS_WRITE32(offset, 0);
-    offset += sizeof(uint32_t);
-  }
-
-  EXPECT_ABS_WRITE32(base_ + SPI_DEVICE_FLASH_STATUS_REG_OFFSET, 0);
-
   spi_device_init();
 }