5 #ifndef OPENTITAN_SW_DEVICE_LIB_TESTING_SPI_FLASH_TESTUTILS_H_
6 #define OPENTITAN_SW_DEVICE_LIB_TESTING_SPI_FLASH_TESTUTILS_H_
12 #include "sw/device/lib/base/status.h"
17 uint8_t manufacturer_id;
18 uint8_t continuation_len;
23 kSfdpSignature = 0x50444653,
29 typedef enum spi_flash_testutils_transaction_width_mode {
31 kTransactionWidthMode111 = 0,
33 kTransactionWidthMode112,
36 kTransactionWidthMode122,
39 kTransactionWidthMode222,
41 kTransactionWidthMode114,
44 kTransactionWidthMode144,
47 kTransactionWidthMode444,
48 } spi_flash_testutils_transaction_width_mode_t;
63 uint8_t table_pointer[3];
69 #define SPI_FLASH_QUAD_ENABLE ((bitfield_field32_t){.mask = 7, .index = 20})
70 #define SPI_FLASH_ADDRESS_MODE ((bitfield_field32_t){.mask = 3, .index = 17})
80 status_t spi_flash_testutils_read_id(dif_spi_host_t *spih,
93 status_t spi_flash_testutils_read_sfdp(dif_spi_host_t *spih, uint32_t address,
94 void *buffer,
size_t length);
96 typedef enum spi_flash_status_bit {
97 kSpiFlashStatusBitWip = 0x1,
98 kSpiFlashStatusBitWel = 0x2,
99 } spi_flash_status_bit_t;
114 status_t spi_flash_testutils_read_status(dif_spi_host_t *spih, uint8_t opcode,
131 status_t spi_flash_testutils_write_status(dif_spi_host_t *spih, uint8_t opcode,
132 uint32_t
status,
size_t length);
141 status_t spi_flash_testutils_wait_until_not_busy(dif_spi_host_t *spih);
150 status_t spi_flash_testutils_issue_write_enable(dif_spi_host_t *spih);
162 status_t spi_flash_testutils_erase_chip(dif_spi_host_t *spih);
179 status_t spi_flash_testutils_erase_op(dif_spi_host_t *spih, uint8_t opcode,
180 uint32_t address,
bool addr_is_4b);
195 status_t spi_flash_testutils_erase_sector(dif_spi_host_t *spih,
196 uint32_t address,
bool addr_is_4b);
210 status_t spi_flash_testutils_erase_block32k(dif_spi_host_t *spih,
211 uint32_t address,
bool addr_is_4b);
225 status_t spi_flash_testutils_erase_block64k(dif_spi_host_t *spih,
226 uint32_t address,
bool addr_is_4b);
249 status_t spi_flash_testutils_program_op(
250 dif_spi_host_t *spih, uint8_t opcode,
const void *payload,
size_t length,
251 uint32_t address,
bool addr_is_4b,
252 spi_flash_testutils_transaction_width_mode_t page_program_mode);
273 status_t spi_flash_testutils_program_page(dif_spi_host_t *spih,
274 const void *payload,
size_t length,
275 uint32_t address,
bool addr_is_4b);
297 status_t spi_flash_testutils_program_page_quad(
298 dif_spi_host_t *spih, uint8_t opcode,
const void *payload,
size_t length,
299 uint32_t address,
bool addr_is_4b, uint8_t addr_width);
316 status_t spi_flash_testutils_read_op(dif_spi_host_t *spih, uint8_t opcode,
317 void *payload,
size_t length,
318 uint32_t address,
bool addr_is_4b,
319 uint8_t width, uint8_t dummy);
332 status_t spi_flash_testutils_quad_enable(dif_spi_host_t *spih, uint8_t method,
341 status_t spi_flash_testutils_enter_4byte_address_mode(dif_spi_host_t *spih);
350 status_t spi_flash_testutils_exit_4byte_address_mode(dif_spi_host_t *spih);
359 spi_flash_testutils_transaction_width_mode_t width_mode) {
360 switch (width_mode) {
361 case kTransactionWidthMode222:
363 case kTransactionWidthMode444:
377 spi_flash_testutils_transaction_width_mode_t width_mode) {
378 switch (width_mode) {
379 case kTransactionWidthMode122:
381 case kTransactionWidthMode222:
383 case kTransactionWidthMode144:
385 case kTransactionWidthMode444:
399 spi_flash_testutils_transaction_width_mode_t width_mode) {
400 switch (width_mode) {
401 case kTransactionWidthMode111:
403 case kTransactionWidthMode112:
405 case kTransactionWidthMode122:
407 case kTransactionWidthMode222: