16 #include "sw/device/lib/testing/spi_device_testutils.h"
17 #include "sw/device/lib/testing/spi_flash_testutils.h"
18 #include "sw/device/lib/testing/spi_host_testutils.h"
19 #include "sw/device/lib/testing/test_framework/check.h"
21 #include "sw/device/tests/spi_host_flash_test_impl.h"
25 static_assert(__BYTE_ORDER__ == __ORDER_LITTLE_ENDIAN__,
26 "This test assumes the target platform is little endian.");
28 OTTF_DEFINE_TEST_CONFIG();
30 static void init_test(dif_spi_host_t *spi_host, dt_pad_t csb_pad) {
34 CHECK_DIF_OK(dif_pinmux_init(base_addr, &pinmux));
36 spi_pinmux_platform_id_t platform_id = kSpiPinmuxPlatformIdCount;
39 platform_id = kSpiPinmuxPlatformIdTeacup;
42 platform_id = kSpiPinmuxPlatformIdCw310;
45 platform_id = kSpiPinmuxPlatformIdCw340;
48 CHECK(
false,
"Device not supported %u",
kDeviceType);
52 spi_host1_pinmux_connect_to_bob(&pinmux, csb_pad, platform_id));
55 CHECK_DIF_OK(dif_spi_host_init(base_addr, spi_host));
57 CHECK(
kClockFreqUsbHz <= UINT32_MAX,
"kClockFreqUsbHz must fit in uint32_t");
65 "SPI_HOST config failed!");
71 enum GigadeviceVendorSpecific {
72 kManufacturerId = 0xC8,
73 kPageQuadProgramOpcode = 0x32,
78 dt_pad_t csb_pads[] = {
84 for (
size_t i = 0; i <
ARRAYSIZE(csb_pads); ++i) {
85 LOG_INFO(
"Testing flash device %u", (uint32_t)(i + 1));
86 dif_spi_host_t spi_host;
88 init_test(&spi_host, csb_pads[i]);
93 EXECUTE_TEST(result, test_read_jedec, &spi_host, kManufacturerId);
96 if (is_4_bytes_address_mode_supported()) {
105 kPageQuadProgramOpcode, kTransactionWidthMode114);
110 return status_ok(result);