[spi_device] SPI Device SRAM does not support byte-writes or read access
- Dominant language
- SystemVerilog
- Stars
- 3.6k
- Forks
- 1.1k
- Avg merge
- 2d 22h
- Merged PRs (30d)
- 141
Description
### Description
Non-word writes to the SPI Device SRAM cause a store fault. We can write unaligned data by manually masking the bits, but in the a0 [revision](https://github.com/lowRISC/opentitan/blob/master/hw/ip/spi_device/data/spi_device.hjson#L1557), there doesn't appear to be read access to the egress buffer, so this would require maintaining a shadow copy of the SRAM. See the Rust code below for an example to reproduce.
```rust
const SPI_DEVICE_BASE_ADDR: usize = 0x40050000;
const MAILBOX_RAW_ADDRESS: usize = SPI_DEVICE_BASE_ADDR + 0x1000 + 0x800;
const MAILBOX_SIZE: usize = 1024;
fn reset_mailbox(&self) {
// SAFETY: reference to mailbox destroyed on function end
unsafe { slice::from_raw_parts_mut(MAILBOX_RAW_ADDRESS as *mut _, MAILBOX_SIZE) }.fill(0);
fence();
}
```
Contributor guide
Assessment
This issue has not been assessed yet.