[spi_passthru] Test write_status opcodes

Signed-off-by: Chris Frantz <cfrantz@google.com>
diff --git a/sw/host/opentitanlib/src/spiflash/flash.rs b/sw/host/opentitanlib/src/spiflash/flash.rs
index e8bad7e..615be32 100644
--- a/sw/host/opentitanlib/src/spiflash/flash.rs
+++ b/sw/host/opentitanlib/src/spiflash/flash.rs
@@ -64,6 +64,10 @@
     // Winbond parts use 0x35 and 0x15 for extended status reads.
     pub const READ_STATUS2: u8 = 0x35;
     pub const READ_STATUS3: u8 = 0x15;
+    pub const WRITE_STATUS: u8 = 0x01;
+    // Winbond parts use 0x31 and 0x11 for extended status writes.
+    pub const WRITE_STATUS2: u8 = 0x31;
+    pub const WRITE_STATUS3: u8 = 0x11;
     pub const READ_ID: u8 = 0x9f;
     pub const ENTER_4B: u8 = 0xb7;
     pub const EXIT_4B: u8 = 0xe9;
diff --git a/sw/host/tests/chip/spi_passthru/src/main.rs b/sw/host/tests/chip/spi_passthru/src/main.rs
index cb552dd..6ecece8 100644
--- a/sw/host/tests/chip/spi_passthru/src/main.rs
+++ b/sw/host/tests/chip/spi_passthru/src/main.rs
@@ -196,6 +196,21 @@
     Ok(())
 }
 
+fn test_write_status(opts: &Opts, transport: &TransportWrapper, opcode: u8) -> Result<()> {
+    let uart = transport.uart("console")?;
+    let spi = transport.spi(&opts.spi)?;
+    let info = UploadInfo::execute(&*uart, || {
+        spi.run_transaction(&mut [Transfer::Write(&[opcode])])?;
+        Ok(())
+    })?;
+
+    assert_eq!(info.opcode, opcode);
+    assert_eq!(info.has_address, false);
+    assert_eq!(info.data_len, 0);
+    assert_eq!(info.flash_status & FLASH_STATUS_STD_BITS, FLASH_STATUS_WIP);
+    Ok(())
+}
+
 fn main() -> Result<()> {
     let opts = Opts::from_args();
     opts.init.init_logging();
@@ -212,5 +227,18 @@
     execute_test!(test_read_status_extended, &opts, &transport);
     execute_test!(test_read_sfdp, &opts, &transport);
     execute_test!(test_chip_erase, &opts, &transport);
+    execute_test!(test_write_status, &opts, &transport, SpiFlash::WRITE_STATUS);
+    execute_test!(
+        test_write_status,
+        &opts,
+        &transport,
+        SpiFlash::WRITE_STATUS2
+    );
+    execute_test!(
+        test_write_status,
+        &opts,
+        &transport,
+        SpiFlash::WRITE_STATUS3
+    );
     Ok(())
 }