Newer
Older
mbed-os / hal / tests / TESTS / mbed_hal / ospi / main.cpp
@rogeryou rogeryou on 15 Sep 2020 64 KB add opsi driver
/* mbed Microcontroller Library
 * Copyright (c) 2018-2020 ARM Limited
 * SPDX-License-Identifier: Apache-2.0
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *     http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */

#if !DEVICE_OSPI
#error [NOT_SUPPORTED] OSPI not supported for this target
#else

#include "utest/utest.h"
#include "unity/unity.h"
#include "greentea-client/test_env.h"
#include "ospi_test.h"
#include "ospi_test_utils.h"

#include "mbed.h"
#include "ospi_api.h"
#include "hal/us_ticker_api.h"


#if !defined(OSPI_FLASH_CHIP_STRING)
#error [NOT_SUPPORTED] OSPI test not supported for this target
#else

using namespace utest::v1;

// uncomment to enable verbose mode
//#define OSPI_TEST_LOG_DATA
//#define OSPI_TEST_LOG_FLASH_TIME
//#define OSPI_TEST_LOG_FLASH_STATUS



#ifndef OSPI_MIN_FREQUENCY
#define OSPI_MIN_FREQUENCY  1000000
#endif

// max write size is usually page size
#define DATA_SIZE_256  (OSPI_PAGE_SIZE)
#define DATA_SIZE_1024 (OSPI_PAGE_SIZE * 4)

uint8_t tx_buf[DATA_SIZE_1024];
uint8_t rx_buf[DATA_SIZE_1024];


// write address should be page aligned
#define TEST_FLASH_ADDRESS 0x0

#define TEST_REPEAT_SINGLE 1
#define TEST_REPEAT_MULTIPLE 4

// write block of data in single write operation
#define WRITE_SINGLE 1
// write block of data in adjacent locations in multiple write operations
#define WRITE_MULTIPLE 4

// read block of data in single read operation
#define READ_SINGLE 1
// read block of data in adjacent locations in multiple read operations
#define READ_MULTIPLE 4


// some target defines OSPI pins as integers thus conversion needed
#define OPIN_0 static_cast<PinName>(MBED_CONF_DRIVERS_OSPI_IO0)
#define OPIN_1 static_cast<PinName>(MBED_CONF_DRIVERS_OSPI_IO1)
#define OPIN_2 static_cast<PinName>(MBED_CONF_DRIVERS_OSPI_IO2)
#define OPIN_3 static_cast<PinName>(MBED_CONF_DRIVERS_OSPI_IO3)
#define OPIN_4 static_cast<PinName>(MBED_CONF_DRIVERS_OSPI_IO4)
#define OPIN_5 static_cast<PinName>(MBED_CONF_DRIVERS_OSPI_IO5)
#define OPIN_6 static_cast<PinName>(MBED_CONF_DRIVERS_OSPI_IO6)
#define OPIN_7 static_cast<PinName>(MBED_CONF_DRIVERS_OSPI_IO7)
#define QSCK   static_cast<PinName>(MBED_CONF_DRIVERS_OSPI_SCK)
#define QCSN   static_cast<PinName>(MBED_CONF_DRIVERS_OSPI_CSN)
#define DQS    static_cast<PinName>(MBED_CONF_DRIVERS_OSPI_DQS)

static uint32_t gen_flash_address()
{
    srand(ticker_read(get_us_ticker_data()));
    uint32_t address = (((uint32_t)rand()) % OSPI_SECTOR_COUNT) * OSPI_SECTOR_SIZE;
    address &= 0xFFFFFF; // Ensure address is within 24 bits so as to not have to deal with 4-byte addressing
    return address;
}

static void log_data(const char *str, uint8_t *data, uint32_t size)
{
    utest_printf("%s: ", str);
    for (uint32_t j = 0; j < size; j++) {
        utest_printf("%02X ", data[j]);
    }
    utest_printf("\r\n");
}


static void _ospi_write_read_test(Ospi &ospi, ospi_bus_width_t write_inst_width, ospi_bus_width_t write_addr_width,
                                  ospi_bus_width_t write_data_width, ospi_bus_width_t write_alt_width, uint32_t write_cmd,
                                  ospi_address_size_t write_addr_size, ospi_alt_size_t write_alt_size,
                                  uint32_t write_count, ospi_bus_width_t read_inst_width, ospi_bus_width_t read_addr_width,
                                  ospi_bus_width_t read_data_width, ospi_bus_width_t read_alt_width, uint32_t read_cmd,
                                  int read_dummy_cycles, ospi_address_size_t read_addr_size, ospi_alt_size_t read_alt_size,
                                  uint32_t read_count, uint32_t test_count, uint32_t data_size,
                                  uint32_t flash_addr)
{
    ospi_status_t ret = OSPI_STATUS_OK;

    Timer timer;
    int erase_time = 0, write_time = 0, read_time = 0;
    size_t buf_len = data_size;

    for (uint32_t tc = 0; tc < test_count; tc++) {

        srand(ticker_read(get_us_ticker_data()));
        for (uint32_t i = 0; i < data_size; i++) {
            tx_buf[i] = (uint8_t)(rand() & 0xFF);
        }

        ret = write_enable(ospi);
        TEST_ASSERT_EQUAL(OSPI_STATUS_OK, ret);

        timer.reset();
        timer.start();

        ret = erase(SECTOR_ERASE, flash_addr, ospi);
        TEST_ASSERT_EQUAL(OSPI_STATUS_OK, ret);
        WAIT_FOR(SECTOR_ERASE_MAX_TIME, ospi);

        timer.stop();
        erase_time = timer.read_us();

        // switching to extended-SPI/DPI/QPI mode here for write operation
        // for DPI/QPI ospi.cmd is automatically switched to 2_2_2/4_4_4 mode
        ret = mode_enable(ospi, write_inst_width, write_addr_width, write_data_width);
        TEST_ASSERT_EQUAL(OSPI_STATUS_OK, ret);

        const uint32_t write_size = data_size / write_count;
        for (uint32_t wc = 0, write_start = flash_addr; wc < write_count; wc++, write_start += write_size) {
            ret = write_enable(ospi);
            TEST_ASSERT_EQUAL(OSPI_STATUS_OK, ret);

            timer.reset();
            timer.start();

            buf_len = write_size;
            ospi.cmd.configure(write_inst_width, write_addr_width, write_data_width, write_alt_width, write_addr_size, write_alt_size);
            ospi.cmd.build(write_cmd, write_start);
            ret = ospi_write(&ospi.handle, ospi.cmd.get(), tx_buf + wc * write_size, &buf_len);
            TEST_ASSERT_EQUAL(OSPI_STATUS_OK, ret);
            TEST_ASSERT_EQUAL(write_size, buf_len);

            if (is_extended_mode(write_inst_width, write_addr_width, write_data_width)) {
                // on some flash chips in extended-SPI mode, control commands works only in 1-1-1 mode
                // so switching back to 1-1-1 mode
                ospi.cmd.configure(MODE_1_1_1, ADDR_SIZE_32, ALT_SIZE_8);
            }

            WAIT_FOR(PAGE_PROG_MAX_TIME, ospi);

            timer.stop();
            write_time = timer.read_us();
        }

        // switching back to single channel SPI
        ret = mode_disable(ospi, write_inst_width, write_addr_width, write_data_width);
        TEST_ASSERT_EQUAL(OSPI_STATUS_OK, ret);

        // switching to extended-SPI/DPI/QPI mode here for read operation
        // for DPI/QPI ospi.cmd is automatically switched to 2_2_2/4_4_4 mode
        ret = mode_enable(ospi, read_inst_width, read_addr_width, read_data_width);
        TEST_ASSERT_EQUAL(OSPI_STATUS_OK, ret);

        memset(rx_buf, 0, sizeof(rx_buf));
        const uint32_t read_size = data_size / read_count;
        ospi.cmd.configure(read_inst_width, read_addr_width, read_data_width, read_alt_width, read_addr_size, read_alt_size, read_dummy_cycles);
        for (uint32_t rc = 0, read_start = flash_addr; rc < read_count; rc++, read_start += read_size) {
            timer.reset();
            timer.start();

            buf_len = read_size;
            ospi.cmd.build(read_cmd, read_start);
            ret = ospi_read(&ospi.handle, ospi.cmd.get(), rx_buf + rc * read_size, &buf_len);
            TEST_ASSERT_EQUAL(OSPI_STATUS_OK, ret);
            TEST_ASSERT_EQUAL(read_size, buf_len);

            timer.stop();
            read_time = timer.read_us();
        }
        ospi.cmd.set_dummy_cycles(0);

        if (is_extended_mode(read_inst_width, read_addr_width, read_data_width)) {
            // on some flash chips in extended-SPI mode, control commands works only in 1-1-1 mode
            // so switching back to 1-1-1 mode
            ospi.cmd.configure(MODE_1_1_1, ADDR_SIZE_32, ALT_SIZE_8);
        }

        // switching back to single channel SPI
        ret = mode_disable(ospi, read_inst_width, read_addr_width, read_data_width);
        TEST_ASSERT_EQUAL(OSPI_STATUS_OK, ret);

        for (uint32_t i = 0; i < data_size; i++) {
            if (tx_buf[i] != rx_buf[i]) {
                log_data("tx data", tx_buf, data_size);
                log_data("rx data", rx_buf, data_size);
                utest_printf("erase/write/read time: %d/%d/%d [us]\r\n", erase_time, write_time, read_time);
                TEST_ASSERT_EQUAL(tx_buf[i], rx_buf[i]);
            }
        }

#ifdef OSPI_TEST_LOG_FLASH_TIME
        utest_printf("erase/write/read time: %d/%d/%d [us]\r\n", erase_time, write_time, read_time);
#endif

#ifdef OSPI_TEST_LOG_DATA
        log_data("tx data", tx_buf, data_size);
        log_data("rx data", rx_buf, data_size);
        utest_printf("rx/tx data match\r\n");
#endif
    }
}


template <  ospi_bus_width_t write_inst_width,
            ospi_bus_width_t write_addr_width,
            ospi_bus_width_t write_data_width,
            ospi_bus_width_t write_alt_width,
            unsigned int write_cmd,
            ospi_address_size_t write_addr_size,
            ospi_alt_size_t write_alt_size,
            uint32_t write_count,
            ospi_bus_width_t read_inst_width,
            ospi_bus_width_t read_addr_width,
            ospi_bus_width_t read_data_width,
            ospi_bus_width_t read_alt_width,
            unsigned int read_cmd,
            int read_dummy_cycles,
            ospi_address_size_t read_addr_size,
            ospi_alt_size_t read_alt_size,
            int frequency,
            uint32_t read_count,
            uint32_t test_count,
            uint32_t data_size,
            uint32_t flash_addr>
void ospi_write_read_test(void)
{
    ospi_status_t ret;
    Ospi ospi;

    uint32_t addr = flash_addr;
    if (addr == 0) {
        // if no specified address selected, use random one to extend flash life
        addr = gen_flash_address();
    }

    ospi_init(&ospi.handle, OPIN_0, OPIN_1, OPIN_2, OPIN_3, OPIN_4, OPIN_5, OPIN_6, OPIN_7, QSCK, QCSN, DQS, OSPI_COMMON_MAX_FREQUENCY, 0);

    ret = ospi_frequency(&ospi.handle, frequency);
    TEST_ASSERT_EQUAL(OSPI_STATUS_OK, ret);

    ospi.cmd.configure(MODE_1_1_1, ADDR_SIZE_32, ALT_SIZE_8);
    flash_init(ospi);

    // switch memory to high performance mode (if available)
    ret = fast_mode_enable(ospi);
    TEST_ASSERT_EQUAL(OSPI_STATUS_OK, ret);

#ifdef OSPI_TEST_LOG_FLASH_STATUS
    log_register(STATUS_REG, OSPI_STATUS_REG_SIZE, ospi, "Status register");
    log_register(CONFIG_REG0, OSPI_CONFIG_REG_0_SIZE, ospi, "Config register 0");
#ifdef CONFIG_REG1
    log_register(CONFIG_REG1, OSPI_CONFIG_REG_1_SIZE, ospi, "Config register 1");
#endif
#ifdef CONFIG_REG2
    log_register(CONFIG_REG2, OSPI_CONFIG_REG_2_SIZE, ospi, "Config register 2");
#endif
#endif

    _ospi_write_read_test(ospi, write_inst_width, write_addr_width, write_data_width, write_alt_width, write_cmd,
                          write_addr_size, write_alt_size, write_count, read_inst_width,
                          read_addr_width, read_data_width, read_alt_width, read_cmd, read_dummy_cycles,
                          read_addr_size, read_alt_size, read_count, test_count,
                          data_size, addr);

    ret = fast_mode_disable(ospi);
    TEST_ASSERT_EQUAL(OSPI_STATUS_OK, ret);

    ospi_free(&ospi.handle);
}


void ospi_init_free_test(void)
{
    Ospi ospi;
    ospi_status_t ret;

    ret = ospi_init(&ospi.handle, OPIN_0, OPIN_1, OPIN_2, OPIN_3, OPIN_4, OPIN_5, OPIN_6, OPIN_7, QSCK, QCSN, DQS, OSPI_COMMON_MAX_FREQUENCY, 0);
    TEST_ASSERT_EQUAL(OSPI_STATUS_OK, ret);
    ret = ospi_free(&ospi.handle);
    TEST_ASSERT_EQUAL(OSPI_STATUS_OK, ret);


    ret = ospi_init(&ospi.handle, OPIN_0, OPIN_1, OPIN_2, OPIN_3, OPIN_4, OPIN_5, OPIN_6, OPIN_7, QSCK, QCSN, DQS, OSPI_COMMON_MAX_FREQUENCY, 0);
    TEST_ASSERT_EQUAL(OSPI_STATUS_OK, ret);
    ret = ospi_free(&ospi.handle);
    TEST_ASSERT_EQUAL(OSPI_STATUS_OK, ret);


    ret = ospi_init(&ospi.handle, OPIN_0, OPIN_1, OPIN_2, OPIN_3, OPIN_4, OPIN_5, OPIN_6, OPIN_7, QSCK, QCSN, DQS, OSPI_COMMON_MAX_FREQUENCY, 0);
    TEST_ASSERT_EQUAL(OSPI_STATUS_OK, ret);
    ret = ospi_free(&ospi.handle);
    TEST_ASSERT_EQUAL(OSPI_STATUS_OK, ret);


    ret = ospi_init(&ospi.handle, OPIN_0, OPIN_1, OPIN_2, OPIN_3, OPIN_4, OPIN_5, OPIN_6, OPIN_7, QSCK, QCSN, DQS, OSPI_COMMON_MAX_FREQUENCY, 0);
    TEST_ASSERT_EQUAL(OSPI_STATUS_OK, ret);

    // check if the memory is working properly
    ospi.cmd.configure(MODE_1_1_1, ADDR_SIZE_32, ALT_SIZE_8);
    flash_init(ospi);

#ifdef OSPI_TEST_LOG_FLASH_STATUS
    log_register(STATUS_REG, OSPI_STATUS_REG_SIZE, ospi, "Status register");
    log_register(CONFIG_REG0, OSPI_CONFIG_REG_0_SIZE, ospi, "Config register 0");
#ifdef CONFIG_REG1
    log_register(CONFIG_REG1, OSPI_CONFIG_REG_1_SIZE, ospi, "Config register 1");
#endif
#ifdef CONFIG_REG2
    log_register(CONFIG_REG2, OSPI_CONFIG_REG_2_SIZE, ospi, "Config register 2");
#endif
#endif

    _ospi_write_read_test(ospi, WRITE_1_1_1, ADDR_SIZE_32, ALT_SIZE_8, WRITE_SINGLE, READ_1_1_1, ADDR_SIZE_32, ALT_SIZE_8, READ_SINGLE, TEST_REPEAT_SINGLE, DATA_SIZE_256, TEST_FLASH_ADDRESS);
    ospi_free(&ospi.handle);
}


void ospi_frequency_test(void)
{
    Ospi ospi;
    ospi_status_t ret;
    int freq = OSPI_COMMON_MAX_FREQUENCY;

    ret = ospi_init(&ospi.handle, OPIN_0, OPIN_1, OPIN_2, OPIN_3, OPIN_4, OPIN_5, OPIN_6, OPIN_7, QSCK, QCSN, DQS, freq, 0);
    TEST_ASSERT_EQUAL(OSPI_STATUS_OK, ret);

    while (ret == OSPI_STATUS_OK && freq >= OSPI_MIN_FREQUENCY) {
        // check if the memory is working properly
        ospi.cmd.configure(MODE_1_1_1, ADDR_SIZE_32, ALT_SIZE_8);
        ret = ospi_frequency(&ospi.handle, freq);
        flash_init(ospi);
        _ospi_write_read_test(ospi, WRITE_1_1_1, ADDR_SIZE_32, ALT_SIZE_8, WRITE_SINGLE, READ_1_1_1, ADDR_SIZE_32, ALT_SIZE_8, READ_SINGLE, TEST_REPEAT_SINGLE, DATA_SIZE_256, TEST_FLASH_ADDRESS);

        utest_printf("frequency setting %d [Hz] - OK\r\n", freq);

        freq /= 2;
    }

    ospi_free(&ospi.handle);
}


void ospi_memory_id_test()
{
    utest_printf("*** %s memory config loaded ***\r\n", OSPI_FLASH_CHIP_STRING);
}


Case cases[] = {
    Case("ospi memory id test", ospi_memory_id_test),
    Case("ospi init/free test", ospi_init_free_test),
    Case("ospi frequency setting test", ospi_frequency_test),
    //   read/x1 write/x1 - read/write block of data in single write/read operation
    //   read/x4 write/x4 - read/write block of data in adjacent locations in multiple write/read operations
    //   repeat/xN        - test repeat count (new data pattern each time)
    //   1-1-1            - single channel SPI
    //   1-1-2            - Dual data (extended SPI)
    //   1-2-2            - Dual I/O  (extended SPI)
    //   1-1-4            - Quad data (extended SPI)
    //   1-4-4            - Quad I/O  (extended SPI)
    //   2-2-2            - DPI (multi-channel SPI)
    //   4-4-4            - QPI (multi-channel SPI)
    Case("ospi write(1-1-1)/x1  read(1-1-1)/x1  repeat/x1  test", ospi_write_read_test<WRITE_1_1_1, ADDR_SIZE_32, ALT_SIZE_8, WRITE_SINGLE,   READ_1_1_1, ADDR_SIZE_32, ALT_SIZE_8, OSPI_COMMON_MAX_FREQUENCY, READ_SINGLE,   TEST_REPEAT_SINGLE,   DATA_SIZE_256,  TEST_FLASH_ADDRESS>),
    Case("ospi write(1-1-1)/x4  read(1-1-1)/x1  repeat/x1  test", ospi_write_read_test<WRITE_1_1_1, ADDR_SIZE_32, ALT_SIZE_8, WRITE_MULTIPLE, READ_1_1_1, ADDR_SIZE_32, ALT_SIZE_8, OSPI_COMMON_MAX_FREQUENCY, READ_SINGLE,   TEST_REPEAT_SINGLE,   DATA_SIZE_1024, TEST_FLASH_ADDRESS>),
    Case("ospi write(1-1-1)/x1  read(1-1-1)/x4  repeat/x1  test", ospi_write_read_test<WRITE_1_1_1, ADDR_SIZE_32, ALT_SIZE_8, WRITE_SINGLE,   READ_1_1_1, ADDR_SIZE_32, ALT_SIZE_8, OSPI_COMMON_MAX_FREQUENCY, READ_MULTIPLE, TEST_REPEAT_SINGLE,   DATA_SIZE_256,  TEST_FLASH_ADDRESS>),
    Case("ospi write(1-1-1)/x1  read(1-1-1)/x1  repeat/x4  test", ospi_write_read_test<WRITE_1_1_1, ADDR_SIZE_32, ALT_SIZE_8, WRITE_SINGLE,   READ_1_1_1, ADDR_SIZE_32, ALT_SIZE_8, OSPI_COMMON_MAX_FREQUENCY, READ_SINGLE,   TEST_REPEAT_MULTIPLE, DATA_SIZE_256,  TEST_FLASH_ADDRESS>),
#ifdef READ_1_1_2
    Case("ospi write(1-1-1)/x1  read(1-1-2)/x1  repeat/x1  test", ospi_write_read_test<WRITE_1_1_1, ADDR_SIZE_32, ALT_SIZE_8, WRITE_SINGLE,   READ_1_1_2, ADDR_SIZE_32, ALT_SIZE_8, OSPI_COMMON_MAX_FREQUENCY, READ_SINGLE,   TEST_REPEAT_SINGLE,   DATA_SIZE_256,  TEST_FLASH_ADDRESS>),
    Case("ospi write(1-1-1)/x4  read(1-1-2)/x1  repeat/x1  test", ospi_write_read_test<WRITE_1_1_1, ADDR_SIZE_32, ALT_SIZE_8, WRITE_MULTIPLE, READ_1_1_2, ADDR_SIZE_32, ALT_SIZE_8, OSPI_COMMON_MAX_FREQUENCY, READ_SINGLE,   TEST_REPEAT_SINGLE,   DATA_SIZE_1024, TEST_FLASH_ADDRESS>),
    Case("ospi write(1-1-1)/x1  read(1-1-2)/x4  repeat/x1  test", ospi_write_read_test<WRITE_1_1_1, ADDR_SIZE_32, ALT_SIZE_8, WRITE_SINGLE,   READ_1_1_2, ADDR_SIZE_32, ALT_SIZE_8, OSPI_COMMON_MAX_FREQUENCY, READ_MULTIPLE, TEST_REPEAT_SINGLE,   DATA_SIZE_256,  TEST_FLASH_ADDRESS>),
    Case("ospi write(1-1-1)/x1  read(1-1-2)/x1  repeat/x4  test", ospi_write_read_test<WRITE_1_1_1, ADDR_SIZE_32, ALT_SIZE_8, WRITE_SINGLE,   READ_1_1_2, ADDR_SIZE_32, ALT_SIZE_8, OSPI_COMMON_MAX_FREQUENCY, READ_SINGLE,   TEST_REPEAT_MULTIPLE, DATA_SIZE_256,  TEST_FLASH_ADDRESS>),
#endif
#ifdef READ_1_2_2
    Case("ospi write(1-1-1)/x1  read(1-2-2)/x1  repeat/x1  test", ospi_write_read_test<WRITE_1_1_1, ADDR_SIZE_32, ALT_SIZE_8, WRITE_SINGLE,   READ_1_2_2, ADDR_SIZE_32, ALT_SIZE_8, OSPI_COMMON_MAX_FREQUENCY, READ_SINGLE,   TEST_REPEAT_SINGLE,   DATA_SIZE_256,  TEST_FLASH_ADDRESS>),
    Case("ospi write(1-1-1)/x4  read(1-2-2)/x1  repeat/x1  test", ospi_write_read_test<WRITE_1_1_1, ADDR_SIZE_32, ALT_SIZE_8, WRITE_MULTIPLE, READ_1_2_2, ADDR_SIZE_32, ALT_SIZE_8, OSPI_COMMON_MAX_FREQUENCY, READ_SINGLE,   TEST_REPEAT_SINGLE,   DATA_SIZE_1024, TEST_FLASH_ADDRESS>),
    Case("ospi write(1-1-1)/x1  read(1-2-2)/x4  repeat/x1  test", ospi_write_read_test<WRITE_1_1_1, ADDR_SIZE_32, ALT_SIZE_8, WRITE_SINGLE,   READ_1_2_2, ADDR_SIZE_32, ALT_SIZE_8, OSPI_COMMON_MAX_FREQUENCY, READ_MULTIPLE, TEST_REPEAT_SINGLE,   DATA_SIZE_256,  TEST_FLASH_ADDRESS>),
    Case("ospi write(1-1-1)/x1  read(1-2-2)/x1  repeat/x4  test", ospi_write_read_test<WRITE_1_1_1, ADDR_SIZE_32, ALT_SIZE_8, WRITE_SINGLE,   READ_1_2_2, ADDR_SIZE_32, ALT_SIZE_8, OSPI_COMMON_MAX_FREQUENCY, READ_SINGLE,   TEST_REPEAT_MULTIPLE, DATA_SIZE_256,  TEST_FLASH_ADDRESS>),
#endif
#ifdef READ_2_2_2
    Case("ospi write(1-1-1)/x1  read(2-2-2)/x1  repeat/x1  test", ospi_write_read_test<WRITE_1_1_1, ADDR_SIZE_32, ALT_SIZE_8, WRITE_SINGLE,   READ_2_2_2, ADDR_SIZE_32, ALT_SIZE_8, OSPI_COMMON_MAX_FREQUENCY, READ_SINGLE,   TEST_REPEAT_SINGLE,   DATA_SIZE_256,  TEST_FLASH_ADDRESS>),
    Case("ospi write(1-1-1)/x4  read(2-2-2)/x1  repeat/x1  test", ospi_write_read_test<WRITE_1_1_1, ADDR_SIZE_32, ALT_SIZE_8, WRITE_MULTIPLE, READ_2_2_2, ADDR_SIZE_32, ALT_SIZE_8, OSPI_COMMON_MAX_FREQUENCY, READ_SINGLE,   TEST_REPEAT_SINGLE,   DATA_SIZE_1024, TEST_FLASH_ADDRESS>),
    Case("ospi write(1-1-1)/x1  read(2-2-2)/x4  repeat/x1  test", ospi_write_read_test<WRITE_1_1_1, ADDR_SIZE_32, ALT_SIZE_8, WRITE_SINGLE,   READ_2_2_2, ADDR_SIZE_32, ALT_SIZE_8, OSPI_COMMON_MAX_FREQUENCY, READ_MULTIPLE, TEST_REPEAT_SINGLE,   DATA_SIZE_256,  TEST_FLASH_ADDRESS>),
    Case("ospi write(1-1-1)/x1  read(2-2-2)/x1  repeat/x4  test", ospi_write_read_test<WRITE_1_1_1, ADDR_SIZE_32, ALT_SIZE_8, WRITE_SINGLE,   READ_2_2_2, ADDR_SIZE_32, ALT_SIZE_8, OSPI_COMMON_MAX_FREQUENCY, READ_SINGLE,   TEST_REPEAT_MULTIPLE, DATA_SIZE_256,  TEST_FLASH_ADDRESS>),
#endif
#ifdef READ_1_1_4
    Case("ospi write(1-1-1)/x1  read(1-1-4)/x1  repeat/x1  test", ospi_write_read_test<WRITE_1_1_1, ADDR_SIZE_32, ALT_SIZE_8, WRITE_SINGLE,   READ_1_1_4, ADDR_SIZE_32, ALT_SIZE_8, OSPI_COMMON_MAX_FREQUENCY, READ_SINGLE,   TEST_REPEAT_SINGLE,   DATA_SIZE_256,  TEST_FLASH_ADDRESS>),
    Case("ospi write(1-1-1)/x4  read(1-1-4)/x1  repeat/x1  test", ospi_write_read_test<WRITE_1_1_1, ADDR_SIZE_32, ALT_SIZE_8, WRITE_MULTIPLE, READ_1_1_4, ADDR_SIZE_32, ALT_SIZE_8, OSPI_COMMON_MAX_FREQUENCY, READ_SINGLE,   TEST_REPEAT_SINGLE,   DATA_SIZE_1024, TEST_FLASH_ADDRESS>),
    Case("ospi write(1-1-1)/x1  read(1-1-4)/x4  repeat/x1  test", ospi_write_read_test<WRITE_1_1_1, ADDR_SIZE_32, ALT_SIZE_8, WRITE_SINGLE,   READ_1_1_4, ADDR_SIZE_32, ALT_SIZE_8, OSPI_COMMON_MAX_FREQUENCY, READ_MULTIPLE, TEST_REPEAT_SINGLE,   DATA_SIZE_256,  TEST_FLASH_ADDRESS>),
    Case("ospi write(1-1-1)/x1  read(1-1-4)/x1  repeat/x4  test", ospi_write_read_test<WRITE_1_1_1, ADDR_SIZE_32, ALT_SIZE_8, WRITE_SINGLE,   READ_1_1_4, ADDR_SIZE_32, ALT_SIZE_8, OSPI_COMMON_MAX_FREQUENCY, READ_SINGLE,   TEST_REPEAT_MULTIPLE, DATA_SIZE_256,  TEST_FLASH_ADDRESS>),
#endif
#ifdef READ_1_4_4
    Case("ospi write(1-1-1)/x1  read(1-4-4)/x1  repeat/x1  test", ospi_write_read_test<WRITE_1_1_1, ADDR_SIZE_32, ALT_SIZE_8, WRITE_SINGLE,   READ_1_4_4, ADDR_SIZE_32, ALT_SIZE_8, OSPI_COMMON_MAX_FREQUENCY, READ_SINGLE,   TEST_REPEAT_SINGLE,   DATA_SIZE_256,  TEST_FLASH_ADDRESS>),
    Case("ospi write(1-1-1)/x4  read(1-4-4)/x1  repeat/x1  test", ospi_write_read_test<WRITE_1_1_1, ADDR_SIZE_32, ALT_SIZE_8, WRITE_MULTIPLE, READ_1_4_4, ADDR_SIZE_32, ALT_SIZE_8, OSPI_COMMON_MAX_FREQUENCY, READ_SINGLE,   TEST_REPEAT_SINGLE,   DATA_SIZE_1024, TEST_FLASH_ADDRESS>),
    Case("ospi write(1-1-1)/x1  read(1-4-4)/x4  repeat/x1  test", ospi_write_read_test<WRITE_1_1_1, ADDR_SIZE_32, ALT_SIZE_8, WRITE_SINGLE,   READ_1_4_4, ADDR_SIZE_32, ALT_SIZE_8, OSPI_COMMON_MAX_FREQUENCY, READ_MULTIPLE, TEST_REPEAT_SINGLE,   DATA_SIZE_256,  TEST_FLASH_ADDRESS>),
    Case("ospi write(1-1-1)/x1  read(1-4-4)/x1  repeat/x4  test", ospi_write_read_test<WRITE_1_1_1, ADDR_SIZE_32, ALT_SIZE_8, WRITE_SINGLE,   READ_1_4_4, ADDR_SIZE_32, ALT_SIZE_8, OSPI_COMMON_MAX_FREQUENCY, READ_SINGLE,   TEST_REPEAT_MULTIPLE, DATA_SIZE_256,  TEST_FLASH_ADDRESS>),
#endif
#ifdef READ_4_4_4
    Case("ospi write(1-1-1)/x1  read(4-4-4)/x1  repeat/x1  test", ospi_write_read_test<WRITE_1_1_1, ADDR_SIZE_32, ALT_SIZE_8, WRITE_SINGLE,   READ_4_4_4, ADDR_SIZE_32, ALT_SIZE_8, OSPI_COMMON_MAX_FREQUENCY, READ_SINGLE,   TEST_REPEAT_SINGLE,   DATA_SIZE_256,  TEST_FLASH_ADDRESS>),
    Case("ospi write(1-1-1)/x4  read(4-4-4)/x1  repeat/x1  test", ospi_write_read_test<WRITE_1_1_1, ADDR_SIZE_32, ALT_SIZE_8, WRITE_MULTIPLE, READ_4_4_4, ADDR_SIZE_32, ALT_SIZE_8, OSPI_COMMON_MAX_FREQUENCY, READ_SINGLE,   TEST_REPEAT_SINGLE,   DATA_SIZE_1024, TEST_FLASH_ADDRESS>),
    Case("ospi write(1-1-1)/x1  read(4-4-4)/x4  repeat/x1  test", ospi_write_read_test<WRITE_1_1_1, ADDR_SIZE_32, ALT_SIZE_8, WRITE_SINGLE,   READ_4_4_4, ADDR_SIZE_32, ALT_SIZE_8, OSPI_COMMON_MAX_FREQUENCY, READ_MULTIPLE, TEST_REPEAT_SINGLE,   DATA_SIZE_256,  TEST_FLASH_ADDRESS>),
    Case("ospi write(1-1-1)/x1  read(4-4-4)/x1  repeat/x4  test", ospi_write_read_test<WRITE_1_1_1, ADDR_SIZE_32, ALT_SIZE_8, WRITE_SINGLE,   READ_4_4_4, ADDR_SIZE_32, ALT_SIZE_8, OSPI_COMMON_MAX_FREQUENCY, READ_SINGLE,   TEST_REPEAT_MULTIPLE, DATA_SIZE_256,  TEST_FLASH_ADDRESS>),
#endif

#ifdef WRITE_1_2_2
    Case("ospi write(1-2-2)/x1  read(1-1-1)/x1  repeat/x1  test", ospi_write_read_test<WRITE_1_2_2, ADDR_SIZE_32, ALT_SIZE_8, WRITE_SINGLE,   READ_1_1_1, ADDR_SIZE_32, ALT_SIZE_8, OSPI_COMMON_MAX_FREQUENCY, READ_SINGLE,   TEST_REPEAT_SINGLE,   DATA_SIZE_256,  TEST_FLASH_ADDRESS>),
    Case("ospi write(1-2-2)/x4  read(1-1-1)/x1  repeat/x1  test", ospi_write_read_test<WRITE_1_2_2, ADDR_SIZE_32, ALT_SIZE_8, WRITE_MULTIPLE, READ_1_1_1, ADDR_SIZE_32, ALT_SIZE_8, OSPI_COMMON_MAX_FREQUENCY, READ_SINGLE,   TEST_REPEAT_SINGLE,   DATA_SIZE_1024, TEST_FLASH_ADDRESS>),
    Case("ospi write(1-2-2)/x1  read(1-1-1)/x4  repeat/x1  test", ospi_write_read_test<WRITE_1_2_2, ADDR_SIZE_32, ALT_SIZE_8, WRITE_SINGLE,   READ_1_1_1, ADDR_SIZE_32, ALT_SIZE_8, OSPI_COMMON_MAX_FREQUENCY, READ_MULTIPLE, TEST_REPEAT_SINGLE,   DATA_SIZE_256,  TEST_FLASH_ADDRESS>),
    Case("ospi write(1-2-2)/x1  read(1-1-1)/x1  repeat/x4  test", ospi_write_read_test<WRITE_1_2_2, ADDR_SIZE_32, ALT_SIZE_8, WRITE_SINGLE,   READ_1_1_1, ADDR_SIZE_32, ALT_SIZE_8, OSPI_COMMON_MAX_FREQUENCY, READ_SINGLE,   TEST_REPEAT_MULTIPLE, DATA_SIZE_256,  TEST_FLASH_ADDRESS>),
    Case("ospi write(1-2-2)/x1  read(1-1-2)/x1  repeat/x1  test", ospi_write_read_test<WRITE_1_2_2, ADDR_SIZE_32, ALT_SIZE_8, WRITE_SINGLE,   READ_1_1_2, ADDR_SIZE_32, ALT_SIZE_8, OSPI_COMMON_MAX_FREQUENCY, READ_SINGLE,   TEST_REPEAT_SINGLE,   DATA_SIZE_256,  TEST_FLASH_ADDRESS>),
    Case("ospi write(1-2-2)/x4  read(1-1-2)/x1  repeat/x1  test", ospi_write_read_test<WRITE_1_2_2, ADDR_SIZE_32, ALT_SIZE_8, WRITE_MULTIPLE, READ_1_1_2, ADDR_SIZE_32, ALT_SIZE_8, OSPI_COMMON_MAX_FREQUENCY, READ_SINGLE,   TEST_REPEAT_SINGLE,   DATA_SIZE_1024, TEST_FLASH_ADDRESS>),
    Case("ospi write(1-2-2)/x1  read(1-1-2)/x4  repeat/x1  test", ospi_write_read_test<WRITE_1_2_2, ADDR_SIZE_32, ALT_SIZE_8, WRITE_SINGLE,   READ_1_1_2, ADDR_SIZE_32, ALT_SIZE_8, OSPI_COMMON_MAX_FREQUENCY, READ_MULTIPLE, TEST_REPEAT_SINGLE,   DATA_SIZE_256,  TEST_FLASH_ADDRESS>),
    Case("ospi write(1-2-2)/x1  read(1-1-2)/x1  repeat/x4  test", ospi_write_read_test<WRITE_1_2_2, ADDR_SIZE_32, ALT_SIZE_8, WRITE_SINGLE,   READ_1_1_2, ADDR_SIZE_32, ALT_SIZE_8, OSPI_COMMON_MAX_FREQUENCY, READ_SINGLE,   TEST_REPEAT_MULTIPLE, DATA_SIZE_256,  TEST_FLASH_ADDRESS>),
    Case("ospi write(1-2-2)/x1  read(1-2-2)/x1  repeat/x1  test", ospi_write_read_test<WRITE_1_2_2, ADDR_SIZE_32, ALT_SIZE_8, WRITE_SINGLE,   READ_1_2_2, ADDR_SIZE_32, ALT_SIZE_8, OSPI_COMMON_MAX_FREQUENCY, READ_SINGLE,   TEST_REPEAT_SINGLE,   DATA_SIZE_256,  TEST_FLASH_ADDRESS>),
    Case("ospi write(1-2-2)/x4  read(1-2-2)/x1  repeat/x1  test", ospi_write_read_test<WRITE_1_2_2, ADDR_SIZE_32, ALT_SIZE_8, WRITE_MULTIPLE, READ_1_2_2, ADDR_SIZE_32, ALT_SIZE_8, OSPI_COMMON_MAX_FREQUENCY, READ_SINGLE,   TEST_REPEAT_SINGLE,   DATA_SIZE_1024, TEST_FLASH_ADDRESS>),
    Case("ospi write(1-2-2)/x1  read(1-2-2)/x4  repeat/x1  test", ospi_write_read_test<WRITE_1_2_2, ADDR_SIZE_32, ALT_SIZE_8, WRITE_SINGLE,   READ_1_2_2, ADDR_SIZE_32, ALT_SIZE_8, OSPI_COMMON_MAX_FREQUENCY, READ_MULTIPLE, TEST_REPEAT_SINGLE,   DATA_SIZE_256,  TEST_FLASH_ADDRESS>),
    Case("ospi write(1-2-2)/x1  read(1-2-2)/x1  repeat/x4  test", ospi_write_read_test<WRITE_1_2_2, ADDR_SIZE_32, ALT_SIZE_8, WRITE_SINGLE,   READ_1_2_2, ADDR_SIZE_32, ALT_SIZE_8, OSPI_COMMON_MAX_FREQUENCY, READ_SINGLE,   TEST_REPEAT_MULTIPLE, DATA_SIZE_256,  TEST_FLASH_ADDRESS>),
#ifdef READ_2_2_2
    Case("ospi write(1-2-2)/x1  read(2-2-2)/x1  repeat/x1  test", ospi_write_read_test<WRITE_1_2_2, ADDR_SIZE_32, ALT_SIZE_8, WRITE_SINGLE,   READ_2_2_2, ADDR_SIZE_32, ALT_SIZE_8, OSPI_COMMON_MAX_FREQUENCY, READ_SINGLE,   TEST_REPEAT_SINGLE,   DATA_SIZE_256,  TEST_FLASH_ADDRESS>),
    Case("ospi write(1-2-2)/x4  read(2-2-2)/x1  repeat/x1  test", ospi_write_read_test<WRITE_1_2_2, ADDR_SIZE_32, ALT_SIZE_8, WRITE_MULTIPLE, READ_2_2_2, ADDR_SIZE_32, ALT_SIZE_8, OSPI_COMMON_MAX_FREQUENCY, READ_SINGLE,   TEST_REPEAT_SINGLE,   DATA_SIZE_1024, TEST_FLASH_ADDRESS>),
    Case("ospi write(1-2-2)/x1  read(2-2-2)/x4  repeat/x1  test", ospi_write_read_test<WRITE_1_2_2, ADDR_SIZE_32, ALT_SIZE_8, WRITE_SINGLE,   READ_2_2_2, ADDR_SIZE_32, ALT_SIZE_8, OSPI_COMMON_MAX_FREQUENCY, READ_MULTIPLE, TEST_REPEAT_SINGLE,   DATA_SIZE_256,  TEST_FLASH_ADDRESS>),
    Case("ospi write(1-2-2)/x1  read(2-2-2)/x1  repeat/x4  test", ospi_write_read_test<WRITE_1_2_2, ADDR_SIZE_32, ALT_SIZE_8, WRITE_SINGLE,   READ_2_2_2, ADDR_SIZE_32, ALT_SIZE_8, OSPI_COMMON_MAX_FREQUENCY, READ_SINGLE,   TEST_REPEAT_MULTIPLE, DATA_SIZE_256,  TEST_FLASH_ADDRESS>),
#endif
#ifdef READ_1_1_4
    Case("ospi write(1-2-2)/x1  read(1-1-4)/x1  repeat/x1  test", ospi_write_read_test<WRITE_1_2_2, ADDR_SIZE_32, ALT_SIZE_8, WRITE_SINGLE,   READ_1_1_4, ADDR_SIZE_32, ALT_SIZE_8, OSPI_COMMON_MAX_FREQUENCY, READ_SINGLE,   TEST_REPEAT_SINGLE,   DATA_SIZE_256,  TEST_FLASH_ADDRESS>),
    Case("ospi write(1-2-2)/x4  read(1-1-4)/x1  repeat/x1  test", ospi_write_read_test<WRITE_1_2_2, ADDR_SIZE_32, ALT_SIZE_8, WRITE_MULTIPLE, READ_1_1_4, ADDR_SIZE_32, ALT_SIZE_8, OSPI_COMMON_MAX_FREQUENCY, READ_SINGLE,   TEST_REPEAT_SINGLE,   DATA_SIZE_1024, TEST_FLASH_ADDRESS>),
    Case("ospi write(1-2-2)/x1  read(1-1-4)/x4  repeat/x1  test", ospi_write_read_test<WRITE_1_2_2, ADDR_SIZE_32, ALT_SIZE_8, WRITE_SINGLE,   READ_1_1_4, ADDR_SIZE_32, ALT_SIZE_8, OSPI_COMMON_MAX_FREQUENCY, READ_MULTIPLE, TEST_REPEAT_SINGLE,   DATA_SIZE_256,  TEST_FLASH_ADDRESS>),
    Case("ospi write(1-2-2)/x1  read(1-1-4)/x1  repeat/x4  test", ospi_write_read_test<WRITE_1_2_2, ADDR_SIZE_32, ALT_SIZE_8, WRITE_SINGLE,   READ_1_1_4, ADDR_SIZE_32, ALT_SIZE_8, OSPI_COMMON_MAX_FREQUENCY, READ_SINGLE,   TEST_REPEAT_MULTIPLE, DATA_SIZE_256,  TEST_FLASH_ADDRESS>),
#endif
    Case("ospi write(1-2-2)/x1  read(1-4-4)/x1  repeat/x1  test", ospi_write_read_test<WRITE_1_2_2, ADDR_SIZE_32, ALT_SIZE_8, WRITE_SINGLE,   READ_1_4_4, ADDR_SIZE_32, ALT_SIZE_8, OSPI_COMMON_MAX_FREQUENCY, READ_SINGLE,   TEST_REPEAT_SINGLE,   DATA_SIZE_256,  TEST_FLASH_ADDRESS>),
    Case("ospi write(1-2-2)/x4  read(1-4-4)/x1  repeat/x1  test", ospi_write_read_test<WRITE_1_2_2, ADDR_SIZE_32, ALT_SIZE_8, WRITE_MULTIPLE, READ_1_4_4, ADDR_SIZE_32, ALT_SIZE_8, OSPI_COMMON_MAX_FREQUENCY, READ_SINGLE,   TEST_REPEAT_SINGLE,   DATA_SIZE_1024, TEST_FLASH_ADDRESS>),
    Case("ospi write(1-2-2)/x1  read(1-4-4)/x4  repeat/x1  test", ospi_write_read_test<WRITE_1_2_2, ADDR_SIZE_32, ALT_SIZE_8, WRITE_SINGLE,   READ_1_4_4, ADDR_SIZE_32, ALT_SIZE_8, OSPI_COMMON_MAX_FREQUENCY, READ_MULTIPLE, TEST_REPEAT_SINGLE,   DATA_SIZE_256,  TEST_FLASH_ADDRESS>),
    Case("ospi write(1-2-2)/x1  read(1-4-4)/x1  repeat/x4  test", ospi_write_read_test<WRITE_1_2_2, ADDR_SIZE_32, ALT_SIZE_8, WRITE_SINGLE,   READ_1_4_4, ADDR_SIZE_32, ALT_SIZE_8, OSPI_COMMON_MAX_FREQUENCY, READ_SINGLE,   TEST_REPEAT_MULTIPLE, DATA_SIZE_256,  TEST_FLASH_ADDRESS>),
#ifdef READ_4_4_4
    Case("ospi write(1-2-2)/x1  read(4-4-4)/x1  repeat/x1  test", ospi_write_read_test<WRITE_1_2_2, ADDR_SIZE_32, ALT_SIZE_8, WRITE_SINGLE,   READ_4_4_4, ADDR_SIZE_32, ALT_SIZE_8, OSPI_COMMON_MAX_FREQUENCY, READ_SINGLE,   TEST_REPEAT_SINGLE,   DATA_SIZE_256,  TEST_FLASH_ADDRESS>),
    Case("ospi write(1-2-2)/x4  read(4-4-4)/x1  repeat/x1  test", ospi_write_read_test<WRITE_1_2_2, ADDR_SIZE_32, ALT_SIZE_8, WRITE_MULTIPLE, READ_4_4_4, ADDR_SIZE_32, ALT_SIZE_8, OSPI_COMMON_MAX_FREQUENCY, READ_SINGLE,   TEST_REPEAT_SINGLE,   DATA_SIZE_1024, TEST_FLASH_ADDRESS>),
    Case("ospi write(1-2-2)/x1  read(4-4-4)/x4  repeat/x1  test", ospi_write_read_test<WRITE_1_2_2, ADDR_SIZE_32, ALT_SIZE_8, WRITE_SINGLE,   READ_4_4_4, ADDR_SIZE_32, ALT_SIZE_8, OSPI_COMMON_MAX_FREQUENCY, READ_MULTIPLE, TEST_REPEAT_SINGLE,   DATA_SIZE_256,  TEST_FLASH_ADDRESS>),
    Case("ospi write(1-2-2)/x1  read(4-4-4)/x1  repeat/x4  test", ospi_write_read_test<WRITE_1_2_2, ADDR_SIZE_32, ALT_SIZE_8, WRITE_SINGLE,   READ_4_4_4, ADDR_SIZE_32, ALT_SIZE_8, OSPI_COMMON_MAX_FREQUENCY, READ_SINGLE,   TEST_REPEAT_MULTIPLE, DATA_SIZE_256,  TEST_FLASH_ADDRESS>),
#endif
#endif

#ifdef WRITE_2_2_2
    Case("ospi write(2-2-2)/x1  read(1-1-1)/x1  repeat/x1  test", ospi_write_read_test<WRITE_2_2_2, ADDR_SIZE_32, ALT_SIZE_8, WRITE_SINGLE,   READ_1_1_1, ADDR_SIZE_32, ALT_SIZE_8, OSPI_COMMON_MAX_FREQUENCY, READ_SINGLE,   TEST_REPEAT_SINGLE,   DATA_SIZE_256,  TEST_FLASH_ADDRESS>),
    Case("ospi write(2-2-2)/x4  read(1-1-1)/x1  repeat/x1  test", ospi_write_read_test<WRITE_2_2_2, ADDR_SIZE_32, ALT_SIZE_8, WRITE_MULTIPLE, READ_1_1_1, ADDR_SIZE_32, ALT_SIZE_8, OSPI_COMMON_MAX_FREQUENCY, READ_SINGLE,   TEST_REPEAT_SINGLE,   DATA_SIZE_1024, TEST_FLASH_ADDRESS>),
    Case("ospi write(2-2-2)/x1  read(1-1-1)/x4  repeat/x1  test", ospi_write_read_test<WRITE_2_2_2, ADDR_SIZE_32, ALT_SIZE_8, WRITE_SINGLE,   READ_1_1_1, ADDR_SIZE_32, ALT_SIZE_8, OSPI_COMMON_MAX_FREQUENCY, READ_MULTIPLE, TEST_REPEAT_SINGLE,   DATA_SIZE_256,  TEST_FLASH_ADDRESS>),
    Case("ospi write(2-2-2)/x1  read(1-1-1)/x1  repeat/x4  test", ospi_write_read_test<WRITE_2_2_2, ADDR_SIZE_32, ALT_SIZE_8, WRITE_SINGLE,   READ_1_1_1, ADDR_SIZE_32, ALT_SIZE_8, OSPI_COMMON_MAX_FREQUENCY, READ_SINGLE,   TEST_REPEAT_MULTIPLE, DATA_SIZE_256,  TEST_FLASH_ADDRESS>),
    Case("ospi write(2-2-2)/x1  read(1-1-2)/x1  repeat/x1  test", ospi_write_read_test<WRITE_2_2_2, ADDR_SIZE_32, ALT_SIZE_8, WRITE_SINGLE,   READ_1_1_2, ADDR_SIZE_32, ALT_SIZE_8, OSPI_COMMON_MAX_FREQUENCY, READ_SINGLE,   TEST_REPEAT_SINGLE,   DATA_SIZE_256,  TEST_FLASH_ADDRESS>),
    Case("ospi write(2-2-2)/x4  read(1-1-2)/x1  repeat/x1  test", ospi_write_read_test<WRITE_2_2_2, ADDR_SIZE_32, ALT_SIZE_8, WRITE_MULTIPLE, READ_1_1_2, ADDR_SIZE_32, ALT_SIZE_8, OSPI_COMMON_MAX_FREQUENCY, READ_SINGLE,   TEST_REPEAT_SINGLE,   DATA_SIZE_1024, TEST_FLASH_ADDRESS>),
    Case("ospi write(2-2-2)/x1  read(1-1-2)/x4  repeat/x1  test", ospi_write_read_test<WRITE_2_2_2, ADDR_SIZE_32, ALT_SIZE_8, WRITE_SINGLE,   READ_1_1_2, ADDR_SIZE_32, ALT_SIZE_8, OSPI_COMMON_MAX_FREQUENCY, READ_MULTIPLE, TEST_REPEAT_SINGLE,   DATA_SIZE_256,  TEST_FLASH_ADDRESS>),
    Case("ospi write(2-2-2)/x1  read(1-1-2)/x1  repeat/x4  test", ospi_write_read_test<WRITE_2_2_2, ADDR_SIZE_32, ALT_SIZE_8, WRITE_SINGLE,   READ_1_1_2, ADDR_SIZE_32, ALT_SIZE_8, OSPI_COMMON_MAX_FREQUENCY, READ_SINGLE,   TEST_REPEAT_MULTIPLE, DATA_SIZE_256,  TEST_FLASH_ADDRESS>),
    Case("ospi write(2-2-2)/x1  read(1-2-2)/x1  repeat/x1  test", ospi_write_read_test<WRITE_2_2_2, ADDR_SIZE_32, ALT_SIZE_8, WRITE_SINGLE,   READ_1_2_2, ADDR_SIZE_32, ALT_SIZE_8, OSPI_COMMON_MAX_FREQUENCY, READ_SINGLE,   TEST_REPEAT_SINGLE,   DATA_SIZE_256,  TEST_FLASH_ADDRESS>),
    Case("ospi write(2-2-2)/x4  read(1-2-2)/x1  repeat/x1  test", ospi_write_read_test<WRITE_2_2_2, ADDR_SIZE_32, ALT_SIZE_8, WRITE_MULTIPLE, READ_1_2_2, ADDR_SIZE_32, ALT_SIZE_8, OSPI_COMMON_MAX_FREQUENCY, READ_SINGLE,   TEST_REPEAT_SINGLE,   DATA_SIZE_1024, TEST_FLASH_ADDRESS>),
    Case("ospi write(2-2-2)/x1  read(1-2-2)/x4  repeat/x1  test", ospi_write_read_test<WRITE_2_2_2, ADDR_SIZE_32, ALT_SIZE_8, WRITE_SINGLE,   READ_1_2_2, ADDR_SIZE_32, ALT_SIZE_8, OSPI_COMMON_MAX_FREQUENCY, READ_MULTIPLE, TEST_REPEAT_SINGLE,   DATA_SIZE_256,  TEST_FLASH_ADDRESS>),
    Case("ospi write(2-2-2)/x1  read(1-2-2)/x1  repeat/x4  test", ospi_write_read_test<WRITE_2_2_2, ADDR_SIZE_32, ALT_SIZE_8, WRITE_SINGLE,   READ_1_2_2, ADDR_SIZE_32, ALT_SIZE_8, OSPI_COMMON_MAX_FREQUENCY, READ_SINGLE,   TEST_REPEAT_MULTIPLE, DATA_SIZE_256,  TEST_FLASH_ADDRESS>),
#ifdef READ_2_2_2
    Case("ospi write(2-2-2)/x1  read(2-2-2)/x1  repeat/x1  test", ospi_write_read_test<WRITE_2_2_2, ADDR_SIZE_32, ALT_SIZE_8, WRITE_SINGLE,   READ_2_2_2, ADDR_SIZE_32, ALT_SIZE_8, OSPI_COMMON_MAX_FREQUENCY, READ_SINGLE,   TEST_REPEAT_SINGLE,   DATA_SIZE_256,  TEST_FLASH_ADDRESS>),
    Case("ospi write(2-2-2)/x4  read(2-2-2)/x1  repeat/x1  test", ospi_write_read_test<WRITE_2_2_2, ADDR_SIZE_32, ALT_SIZE_8, WRITE_MULTIPLE, READ_2_2_2, ADDR_SIZE_32, ALT_SIZE_8, OSPI_COMMON_MAX_FREQUENCY, READ_SINGLE,   TEST_REPEAT_SINGLE,   DATA_SIZE_1024, TEST_FLASH_ADDRESS>),
    Case("ospi write(2-2-2)/x1  read(2-2-2)/x4  repeat/x1  test", ospi_write_read_test<WRITE_2_2_2, ADDR_SIZE_32, ALT_SIZE_8, WRITE_SINGLE,   READ_2_2_2, ADDR_SIZE_32, ALT_SIZE_8, OSPI_COMMON_MAX_FREQUENCY, READ_MULTIPLE, TEST_REPEAT_SINGLE,   DATA_SIZE_256,  TEST_FLASH_ADDRESS>),
    Case("ospi write(2-2-2)/x1  read(2-2-2)/x1  repeat/x4  test", ospi_write_read_test<WRITE_2_2_2, ADDR_SIZE_32, ALT_SIZE_8, WRITE_SINGLE,   READ_2_2_2, ADDR_SIZE_32, ALT_SIZE_8, OSPI_COMMON_MAX_FREQUENCY, READ_SINGLE,   TEST_REPEAT_MULTIPLE, DATA_SIZE_256,  TEST_FLASH_ADDRESS>),
#endif
#ifdef READ_1_1_4
    Case("ospi write(2-2-2)/x1  read(1-1-4)/x1  repeat/x1  test", ospi_write_read_test<WRITE_2_2_2, ADDR_SIZE_32, ALT_SIZE_8, WRITE_SINGLE,   READ_1_1_4, ADDR_SIZE_32, ALT_SIZE_8, OSPI_COMMON_MAX_FREQUENCY, READ_SINGLE,   TEST_REPEAT_SINGLE,   DATA_SIZE_256,  TEST_FLASH_ADDRESS>),
    Case("ospi write(2-2-2)/x4  read(1-1-4)/x1  repeat/x1  test", ospi_write_read_test<WRITE_2_2_2, ADDR_SIZE_32, ALT_SIZE_8, WRITE_MULTIPLE, READ_1_1_4, ADDR_SIZE_32, ALT_SIZE_8, OSPI_COMMON_MAX_FREQUENCY, READ_SINGLE,   TEST_REPEAT_SINGLE,   DATA_SIZE_1024, TEST_FLASH_ADDRESS>),
    Case("ospi write(2-2-2)/x1  read(1-1-4)/x4  repeat/x1  test", ospi_write_read_test<WRITE_2_2_2, ADDR_SIZE_32, ALT_SIZE_8, WRITE_SINGLE,   READ_1_1_4, ADDR_SIZE_32, ALT_SIZE_8, OSPI_COMMON_MAX_FREQUENCY, READ_MULTIPLE, TEST_REPEAT_SINGLE,   DATA_SIZE_256,  TEST_FLASH_ADDRESS>),
    Case("ospi write(2-2-2)/x1  read(1-1-4)/x1  repeat/x4  test", ospi_write_read_test<WRITE_2_2_2, ADDR_SIZE_32, ALT_SIZE_8, WRITE_SINGLE,   READ_1_1_4, ADDR_SIZE_32, ALT_SIZE_8, OSPI_COMMON_MAX_FREQUENCY, READ_SINGLE,   TEST_REPEAT_MULTIPLE, DATA_SIZE_256,  TEST_FLASH_ADDRESS>),
#endif
    Case("ospi write(2-2-2)/x1  read(1-4-4)/x1  repeat/x1  test", ospi_write_read_test<WRITE_2_2_2, ADDR_SIZE_32, ALT_SIZE_8, WRITE_SINGLE,   READ_1_4_4, ADDR_SIZE_32, ALT_SIZE_8, OSPI_COMMON_MAX_FREQUENCY, READ_SINGLE,   TEST_REPEAT_SINGLE,   DATA_SIZE_256,  TEST_FLASH_ADDRESS>),
    Case("ospi write(2-2-2)/x4  read(1-4-4)/x1  repeat/x1  test", ospi_write_read_test<WRITE_2_2_2, ADDR_SIZE_32, ALT_SIZE_8, WRITE_MULTIPLE, READ_1_4_4, ADDR_SIZE_32, ALT_SIZE_8, OSPI_COMMON_MAX_FREQUENCY, READ_SINGLE,   TEST_REPEAT_SINGLE,   DATA_SIZE_1024, TEST_FLASH_ADDRESS>),
    Case("ospi write(2-2-2)/x1  read(1-4-4)/x4  repeat/x1  test", ospi_write_read_test<WRITE_2_2_2, ADDR_SIZE_32, ALT_SIZE_8, WRITE_SINGLE,   READ_1_4_4, ADDR_SIZE_32, ALT_SIZE_8, OSPI_COMMON_MAX_FREQUENCY, READ_MULTIPLE, TEST_REPEAT_SINGLE,   DATA_SIZE_256,  TEST_FLASH_ADDRESS>),
    Case("ospi write(2-2-2)/x1  read(1-4-4)/x1  repeat/x4  test", ospi_write_read_test<WRITE_2_2_2, ADDR_SIZE_32, ALT_SIZE_8, WRITE_SINGLE,   READ_1_4_4, ADDR_SIZE_32, ALT_SIZE_8, OSPI_COMMON_MAX_FREQUENCY, READ_SINGLE,   TEST_REPEAT_MULTIPLE, DATA_SIZE_256,  TEST_FLASH_ADDRESS>),
#ifdef READ_4_4_4
    Case("ospi write(2-2-2)/x1  read(4-4-4)/x1  repeat/x1  test", ospi_write_read_test<WRITE_2_2_2, ADDR_SIZE_32, ALT_SIZE_8, WRITE_SINGLE,   READ_4_4_4, ADDR_SIZE_32, ALT_SIZE_8, OSPI_COMMON_MAX_FREQUENCY, READ_SINGLE,   TEST_REPEAT_SINGLE,   DATA_SIZE_256,  TEST_FLASH_ADDRESS>),
    Case("ospi write(2-2-2)/x4  read(4-4-4)/x1  repeat/x1  test", ospi_write_read_test<WRITE_2_2_2, ADDR_SIZE_32, ALT_SIZE_8, WRITE_MULTIPLE, READ_4_4_4, ADDR_SIZE_32, ALT_SIZE_8, OSPI_COMMON_MAX_FREQUENCY, READ_SINGLE,   TEST_REPEAT_SINGLE,   DATA_SIZE_1024, TEST_FLASH_ADDRESS>),
    Case("ospi write(2-2-2)/x1  read(4-4-4)/x4  repeat/x1  test", ospi_write_read_test<WRITE_2_2_2, ADDR_SIZE_32, ALT_SIZE_8, WRITE_SINGLE,   READ_4_4_4, ADDR_SIZE_32, ALT_SIZE_8, OSPI_COMMON_MAX_FREQUENCY, READ_MULTIPLE, TEST_REPEAT_SINGLE,   DATA_SIZE_256,  TEST_FLASH_ADDRESS>),
    Case("ospi write(2-2-2)/x1  read(4-4-4)/x1  repeat/x4  test", ospi_write_read_test<WRITE_2_2_2, ADDR_SIZE_32, ALT_SIZE_8, WRITE_SINGLE,   READ_4_4_4, ADDR_SIZE_32, ALT_SIZE_8, OSPI_COMMON_MAX_FREQUENCY, READ_SINGLE,   TEST_REPEAT_MULTIPLE, DATA_SIZE_256,  TEST_FLASH_ADDRESS>),
#endif
#endif

#ifdef WRITE_1_1_4
    Case("ospi write(1-1-4)/x1  read(1-1-1)/x1  repeat/x1  test", ospi_write_read_test<WRITE_1_1_4, ADDR_SIZE_32, ALT_SIZE_8, WRITE_SINGLE,   READ_1_1_1, ADDR_SIZE_32, ALT_SIZE_8, OSPI_COMMON_MAX_FREQUENCY, READ_SINGLE,   TEST_REPEAT_SINGLE,   DATA_SIZE_256,  TEST_FLASH_ADDRESS>),
    Case("ospi write(1-1-4)/x4  read(1-1-1)/x1  repeat/x1  test", ospi_write_read_test<WRITE_1_1_4, ADDR_SIZE_32, ALT_SIZE_8, WRITE_MULTIPLE, READ_1_1_1, ADDR_SIZE_32, ALT_SIZE_8, OSPI_COMMON_MAX_FREQUENCY, READ_SINGLE,   TEST_REPEAT_SINGLE,   DATA_SIZE_1024, TEST_FLASH_ADDRESS>),
    Case("ospi write(1-1-4)/x1  read(1-1-1)/x4  repeat/x1  test", ospi_write_read_test<WRITE_1_1_4, ADDR_SIZE_32, ALT_SIZE_8, WRITE_SINGLE,   READ_1_1_1, ADDR_SIZE_32, ALT_SIZE_8, OSPI_COMMON_MAX_FREQUENCY, READ_MULTIPLE, TEST_REPEAT_SINGLE,   DATA_SIZE_256,  TEST_FLASH_ADDRESS>),
    Case("ospi write(1-1-4)/x1  read(1-1-1)/x1  repeat/x4  test", ospi_write_read_test<WRITE_1_1_4, ADDR_SIZE_32, ALT_SIZE_8, WRITE_SINGLE,   READ_1_1_1, ADDR_SIZE_32, ALT_SIZE_8, OSPI_COMMON_MAX_FREQUENCY, READ_SINGLE,   TEST_REPEAT_MULTIPLE, DATA_SIZE_256,  TEST_FLASH_ADDRESS>),
    Case("ospi write(1-1-4)/x1  read(1-1-2)/x1  repeat/x1  test", ospi_write_read_test<WRITE_1_1_4, ADDR_SIZE_32, ALT_SIZE_8, WRITE_SINGLE,   READ_1_1_2, ADDR_SIZE_32, ALT_SIZE_8, OSPI_COMMON_MAX_FREQUENCY, READ_SINGLE,   TEST_REPEAT_SINGLE,   DATA_SIZE_256,  TEST_FLASH_ADDRESS>),
    Case("ospi write(1-1-4)/x4  read(1-1-2)/x1  repeat/x1  test", ospi_write_read_test<WRITE_1_1_4, ADDR_SIZE_32, ALT_SIZE_8, WRITE_MULTIPLE, READ_1_1_2, ADDR_SIZE_32, ALT_SIZE_8, OSPI_COMMON_MAX_FREQUENCY, READ_SINGLE,   TEST_REPEAT_SINGLE,   DATA_SIZE_1024, TEST_FLASH_ADDRESS>),
    Case("ospi write(1-1-4)/x1  read(1-1-2)/x4  repeat/x1  test", ospi_write_read_test<WRITE_1_1_4, ADDR_SIZE_32, ALT_SIZE_8, WRITE_SINGLE,   READ_1_1_2, ADDR_SIZE_32, ALT_SIZE_8, OSPI_COMMON_MAX_FREQUENCY, READ_MULTIPLE, TEST_REPEAT_SINGLE,   DATA_SIZE_256,  TEST_FLASH_ADDRESS>),
    Case("ospi write(1-1-4)/x1  read(1-1-2)/x1  repeat/x4  test", ospi_write_read_test<WRITE_1_1_4, ADDR_SIZE_32, ALT_SIZE_8, WRITE_SINGLE,   READ_1_1_2, ADDR_SIZE_32, ALT_SIZE_8, OSPI_COMMON_MAX_FREQUENCY, READ_SINGLE,   TEST_REPEAT_MULTIPLE, DATA_SIZE_256,  TEST_FLASH_ADDRESS>),
    Case("ospi write(1-1-4)/x1  read(1-2-2)/x1  repeat/x1  test", ospi_write_read_test<WRITE_1_1_4, ADDR_SIZE_32, ALT_SIZE_8, WRITE_SINGLE,   READ_1_2_2, ADDR_SIZE_32, ALT_SIZE_8, OSPI_COMMON_MAX_FREQUENCY, READ_SINGLE,   TEST_REPEAT_SINGLE,   DATA_SIZE_256,  TEST_FLASH_ADDRESS>),
    Case("ospi write(1-1-4)/x4  read(1-2-2)/x1  repeat/x1  test", ospi_write_read_test<WRITE_1_1_4, ADDR_SIZE_32, ALT_SIZE_8, WRITE_MULTIPLE, READ_1_2_2, ADDR_SIZE_32, ALT_SIZE_8, OSPI_COMMON_MAX_FREQUENCY, READ_SINGLE,   TEST_REPEAT_SINGLE,   DATA_SIZE_1024, TEST_FLASH_ADDRESS>),
    Case("ospi write(1-1-4)/x1  read(1-2-2)/x4  repeat/x1  test", ospi_write_read_test<WRITE_1_1_4, ADDR_SIZE_32, ALT_SIZE_8, WRITE_SINGLE,   READ_1_2_2, ADDR_SIZE_32, ALT_SIZE_8, OSPI_COMMON_MAX_FREQUENCY, READ_MULTIPLE, TEST_REPEAT_SINGLE,   DATA_SIZE_256,  TEST_FLASH_ADDRESS>),
    Case("ospi write(1-1-4)/x1  read(1-2-2)/x1  repeat/x4  test", ospi_write_read_test<WRITE_1_1_4, ADDR_SIZE_32, ALT_SIZE_8, WRITE_SINGLE,   READ_1_2_2, ADDR_SIZE_32, ALT_SIZE_8, OSPI_COMMON_MAX_FREQUENCY, READ_SINGLE,   TEST_REPEAT_MULTIPLE, DATA_SIZE_256,  TEST_FLASH_ADDRESS>),
#ifdef READ_2_2_2
    Case("ospi write(1-1-4)/x1  read(2-2-2)/x1  repeat/x1  test", ospi_write_read_test<WRITE_1_1_4, ADDR_SIZE_32, ALT_SIZE_8, WRITE_SINGLE,   READ_2_2_2, ADDR_SIZE_32, ALT_SIZE_8, OSPI_COMMON_MAX_FREQUENCY, READ_SINGLE,   TEST_REPEAT_SINGLE,   DATA_SIZE_256,  TEST_FLASH_ADDRESS>),
    Case("ospi write(1-1-4)/x4  read(2-2-2)/x1  repeat/x1  test", ospi_write_read_test<WRITE_1_1_4, ADDR_SIZE_32, ALT_SIZE_8, WRITE_MULTIPLE, READ_2_2_2, ADDR_SIZE_32, ALT_SIZE_8, OSPI_COMMON_MAX_FREQUENCY, READ_SINGLE,   TEST_REPEAT_SINGLE,   DATA_SIZE_1024, TEST_FLASH_ADDRESS>),
    Case("ospi write(1-1-4)/x1  read(2-2-2)/x4  repeat/x1  test", ospi_write_read_test<WRITE_1_1_4, ADDR_SIZE_32, ALT_SIZE_8, WRITE_SINGLE,   READ_2_2_2, ADDR_SIZE_32, ALT_SIZE_8, OSPI_COMMON_MAX_FREQUENCY, READ_MULTIPLE, TEST_REPEAT_SINGLE,   DATA_SIZE_256,  TEST_FLASH_ADDRESS>),
    Case("ospi write(1-1-4)/x1  read(2-2-2)/x1  repeat/x4  test", ospi_write_read_test<WRITE_1_1_4, ADDR_SIZE_32, ALT_SIZE_8, WRITE_SINGLE,   READ_2_2_2, ADDR_SIZE_32, ALT_SIZE_8, OSPI_COMMON_MAX_FREQUENCY, READ_SINGLE,   TEST_REPEAT_MULTIPLE, DATA_SIZE_256,  TEST_FLASH_ADDRESS>),
#endif
#ifdef READ_1_1_4
    Case("ospi write(1-1-4)/x1  read(1-1-4)/x1  repeat/x1  test", ospi_write_read_test<WRITE_1_1_4, ADDR_SIZE_32, ALT_SIZE_8, WRITE_SINGLE,   READ_1_1_4, ADDR_SIZE_32, ALT_SIZE_8, OSPI_COMMON_MAX_FREQUENCY, READ_SINGLE,   TEST_REPEAT_SINGLE,   DATA_SIZE_256,  TEST_FLASH_ADDRESS>),
    Case("ospi write(1-1-4)/x4  read(1-1-4)/x1  repeat/x1  test", ospi_write_read_test<WRITE_1_1_4, ADDR_SIZE_32, ALT_SIZE_8, WRITE_MULTIPLE, READ_1_1_4, ADDR_SIZE_32, ALT_SIZE_8, OSPI_COMMON_MAX_FREQUENCY, READ_SINGLE,   TEST_REPEAT_SINGLE,   DATA_SIZE_1024, TEST_FLASH_ADDRESS>),
    Case("ospi write(1-1-4)/x1  read(1-1-4)/x4  repeat/x1  test", ospi_write_read_test<WRITE_1_1_4, ADDR_SIZE_32, ALT_SIZE_8, WRITE_SINGLE,   READ_1_1_4, ADDR_SIZE_32, ALT_SIZE_8, OSPI_COMMON_MAX_FREQUENCY, READ_MULTIPLE, TEST_REPEAT_SINGLE,   DATA_SIZE_256,  TEST_FLASH_ADDRESS>),
    Case("ospi write(1-1-4)/x1  read(1-1-4)/x1  repeat/x4  test", ospi_write_read_test<WRITE_1_1_4, ADDR_SIZE_32, ALT_SIZE_8, WRITE_SINGLE,   READ_1_1_4, ADDR_SIZE_32, ALT_SIZE_8, OSPI_COMMON_MAX_FREQUENCY, READ_SINGLE,   TEST_REPEAT_MULTIPLE, DATA_SIZE_256,  TEST_FLASH_ADDRESS>),
#endif
    Case("ospi write(1-1-4)/x1  read(1-4-4)/x1  repeat/x1  test", ospi_write_read_test<WRITE_1_1_4, ADDR_SIZE_32, ALT_SIZE_8, WRITE_SINGLE,   READ_1_4_4, ADDR_SIZE_32, ALT_SIZE_8, OSPI_COMMON_MAX_FREQUENCY, READ_SINGLE,   TEST_REPEAT_SINGLE,   DATA_SIZE_256,  TEST_FLASH_ADDRESS>),
    Case("ospi write(1-1-4)/x4  read(1-4-4)/x1  repeat/x1  test", ospi_write_read_test<WRITE_1_1_4, ADDR_SIZE_32, ALT_SIZE_8, WRITE_MULTIPLE, READ_1_4_4, ADDR_SIZE_32, ALT_SIZE_8, OSPI_COMMON_MAX_FREQUENCY, READ_SINGLE,   TEST_REPEAT_SINGLE,   DATA_SIZE_1024, TEST_FLASH_ADDRESS>),
    Case("ospi write(1-1-4)/x1  read(1-4-4)/x4  repeat/x1  test", ospi_write_read_test<WRITE_1_1_4, ADDR_SIZE_32, ALT_SIZE_8, WRITE_SINGLE,   READ_1_4_4, ADDR_SIZE_32, ALT_SIZE_8, OSPI_COMMON_MAX_FREQUENCY, READ_MULTIPLE, TEST_REPEAT_SINGLE,   DATA_SIZE_256,  TEST_FLASH_ADDRESS>),
    Case("ospi write(1-1-4)/x1  read(1-4-4)/x1  repeat/x4  test", ospi_write_read_test<WRITE_1_1_4, ADDR_SIZE_32, ALT_SIZE_8, WRITE_SINGLE,   READ_1_4_4, ADDR_SIZE_32, ALT_SIZE_8, OSPI_COMMON_MAX_FREQUENCY, READ_SINGLE,   TEST_REPEAT_MULTIPLE, DATA_SIZE_256,  TEST_FLASH_ADDRESS>),
#ifdef READ_4_4_4
    Case("ospi write(1-1-4)/x1  read(4-4-4)/x1  repeat/x1  test", ospi_write_read_test<WRITE_1_1_4, ADDR_SIZE_32, ALT_SIZE_8, WRITE_SINGLE,   READ_4_4_4, ADDR_SIZE_32, ALT_SIZE_8, OSPI_COMMON_MAX_FREQUENCY, READ_SINGLE,   TEST_REPEAT_SINGLE,   DATA_SIZE_256,  TEST_FLASH_ADDRESS>),
    Case("ospi write(1-1-4)/x4  read(4-4-4)/x1  repeat/x1  test", ospi_write_read_test<WRITE_1_1_4, ADDR_SIZE_32, ALT_SIZE_8, WRITE_MULTIPLE, READ_4_4_4, ADDR_SIZE_32, ALT_SIZE_8, OSPI_COMMON_MAX_FREQUENCY, READ_SINGLE,   TEST_REPEAT_SINGLE,   DATA_SIZE_1024, TEST_FLASH_ADDRESS>),
    Case("ospi write(1-1-4)/x1  read(4-4-4)/x4  repeat/x1  test", ospi_write_read_test<WRITE_1_1_4, ADDR_SIZE_32, ALT_SIZE_8, WRITE_SINGLE,   READ_4_4_4, ADDR_SIZE_32, ALT_SIZE_8, OSPI_COMMON_MAX_FREQUENCY, READ_MULTIPLE, TEST_REPEAT_SINGLE,   DATA_SIZE_256,  TEST_FLASH_ADDRESS>),
    Case("ospi write(1-1-4)/x1  read(4-4-4)/x1  repeat/x4  test", ospi_write_read_test<WRITE_1_1_4, ADDR_SIZE_32, ALT_SIZE_8, WRITE_SINGLE,   READ_4_4_4, ADDR_SIZE_32, ALT_SIZE_8, OSPI_COMMON_MAX_FREQUENCY, READ_SINGLE,   TEST_REPEAT_MULTIPLE, DATA_SIZE_256,  TEST_FLASH_ADDRESS>),
#endif
#endif

#ifdef WRITE_1_4_4
    Case("ospi write(1-4-4)/x1  read(1-1-1)/x1  repeat/x1  test", ospi_write_read_test<WRITE_1_4_4, ADDR_SIZE_32, ALT_SIZE_8, WRITE_SINGLE,   READ_1_1_1, ADDR_SIZE_32, ALT_SIZE_8, OSPI_COMMON_MAX_FREQUENCY, READ_SINGLE,   TEST_REPEAT_SINGLE,   DATA_SIZE_256,  TEST_FLASH_ADDRESS>),
    Case("ospi write(1-4-4)/x4  read(1-1-1)/x1  repeat/x1  test", ospi_write_read_test<WRITE_1_4_4, ADDR_SIZE_32, ALT_SIZE_8, WRITE_MULTIPLE, READ_1_1_1, ADDR_SIZE_32, ALT_SIZE_8, OSPI_COMMON_MAX_FREQUENCY, READ_SINGLE,   TEST_REPEAT_SINGLE,   DATA_SIZE_1024, TEST_FLASH_ADDRESS>),
    Case("ospi write(1-4-4)/x1  read(1-1-1)/x4  repeat/x1  test", ospi_write_read_test<WRITE_1_4_4, ADDR_SIZE_32, ALT_SIZE_8, WRITE_SINGLE,   READ_1_1_1, ADDR_SIZE_32, ALT_SIZE_8, OSPI_COMMON_MAX_FREQUENCY, READ_MULTIPLE, TEST_REPEAT_SINGLE,   DATA_SIZE_256,  TEST_FLASH_ADDRESS>),
    Case("ospi write(1-4-4)/x1  read(1-1-1)/x1  repeat/x4  test", ospi_write_read_test<WRITE_1_4_4, ADDR_SIZE_32, ALT_SIZE_8, WRITE_SINGLE,   READ_1_1_1, ADDR_SIZE_32, ALT_SIZE_8, OSPI_COMMON_MAX_FREQUENCY, READ_SINGLE,   TEST_REPEAT_MULTIPLE, DATA_SIZE_256,  TEST_FLASH_ADDRESS>),
    Case("ospi write(1-4-4)/x1  read(1-1-2)/x1  repeat/x1  test", ospi_write_read_test<WRITE_1_4_4, ADDR_SIZE_32, ALT_SIZE_8, WRITE_SINGLE,   READ_1_1_2, ADDR_SIZE_32, ALT_SIZE_8, OSPI_COMMON_MAX_FREQUENCY, READ_SINGLE,   TEST_REPEAT_SINGLE,   DATA_SIZE_256,  TEST_FLASH_ADDRESS>),
    Case("ospi write(1-4-4)/x4  read(1-1-2)/x1  repeat/x1  test", ospi_write_read_test<WRITE_1_4_4, ADDR_SIZE_32, ALT_SIZE_8, WRITE_MULTIPLE, READ_1_1_2, ADDR_SIZE_32, ALT_SIZE_8, OSPI_COMMON_MAX_FREQUENCY, READ_SINGLE,   TEST_REPEAT_SINGLE,   DATA_SIZE_1024, TEST_FLASH_ADDRESS>),
    Case("ospi write(1-4-4)/x1  read(1-1-2)/x4  repeat/x1  test", ospi_write_read_test<WRITE_1_4_4, ADDR_SIZE_32, ALT_SIZE_8, WRITE_SINGLE,   READ_1_1_2, ADDR_SIZE_32, ALT_SIZE_8, OSPI_COMMON_MAX_FREQUENCY, READ_MULTIPLE, TEST_REPEAT_SINGLE,   DATA_SIZE_256,  TEST_FLASH_ADDRESS>),
    Case("ospi write(1-4-4)/x1  read(1-1-2)/x1  repeat/x4  test", ospi_write_read_test<WRITE_1_4_4, ADDR_SIZE_32, ALT_SIZE_8, WRITE_SINGLE,   READ_1_1_2, ADDR_SIZE_32, ALT_SIZE_8, OSPI_COMMON_MAX_FREQUENCY, READ_SINGLE,   TEST_REPEAT_MULTIPLE, DATA_SIZE_256,  TEST_FLASH_ADDRESS>),
    Case("ospi write(1-4-4)/x1  read(1-2-2)/x1  repeat/x1  test", ospi_write_read_test<WRITE_1_4_4, ADDR_SIZE_32, ALT_SIZE_8, WRITE_SINGLE,   READ_1_2_2, ADDR_SIZE_32, ALT_SIZE_8, OSPI_COMMON_MAX_FREQUENCY, READ_SINGLE,   TEST_REPEAT_SINGLE,   DATA_SIZE_256,  TEST_FLASH_ADDRESS>),
    Case("ospi write(1-4-4)/x4  read(1-2-2)/x1  repeat/x1  test", ospi_write_read_test<WRITE_1_4_4, ADDR_SIZE_32, ALT_SIZE_8, WRITE_MULTIPLE, READ_1_2_2, ADDR_SIZE_32, ALT_SIZE_8, OSPI_COMMON_MAX_FREQUENCY, READ_SINGLE,   TEST_REPEAT_SINGLE,   DATA_SIZE_1024, TEST_FLASH_ADDRESS>),
    Case("ospi write(1-4-4)/x1  read(1-2-2)/x4  repeat/x1  test", ospi_write_read_test<WRITE_1_4_4, ADDR_SIZE_32, ALT_SIZE_8, WRITE_SINGLE,   READ_1_2_2, ADDR_SIZE_32, ALT_SIZE_8, OSPI_COMMON_MAX_FREQUENCY, READ_MULTIPLE, TEST_REPEAT_SINGLE,   DATA_SIZE_256,  TEST_FLASH_ADDRESS>),
    Case("ospi write(1-4-4)/x1  read(1-2-2)/x1  repeat/x4  test", ospi_write_read_test<WRITE_1_4_4, ADDR_SIZE_32, ALT_SIZE_8, WRITE_SINGLE,   READ_1_2_2, ADDR_SIZE_32, ALT_SIZE_8, OSPI_COMMON_MAX_FREQUENCY, READ_SINGLE,   TEST_REPEAT_MULTIPLE, DATA_SIZE_256,  TEST_FLASH_ADDRESS>),
#ifdef READ_2_2_2
    Case("ospi write(1-4-4)/x1  read(2-2-2)/x1  repeat/x1  test", ospi_write_read_test<WRITE_1_4_4, ADDR_SIZE_32, ALT_SIZE_8, WRITE_SINGLE,   READ_2_2_2, ADDR_SIZE_32, ALT_SIZE_8, OSPI_COMMON_MAX_FREQUENCY, READ_SINGLE,   TEST_REPEAT_SINGLE,   DATA_SIZE_256,  TEST_FLASH_ADDRESS>),
    Case("ospi write(1-4-4)/x4  read(2-2-2)/x1  repeat/x1  test", ospi_write_read_test<WRITE_1_4_4, ADDR_SIZE_32, ALT_SIZE_8, WRITE_MULTIPLE, READ_2_2_2, ADDR_SIZE_32, ALT_SIZE_8, OSPI_COMMON_MAX_FREQUENCY, READ_SINGLE,   TEST_REPEAT_SINGLE,   DATA_SIZE_1024, TEST_FLASH_ADDRESS>),
    Case("ospi write(1-4-4)/x1  read(2-2-2)/x4  repeat/x1  test", ospi_write_read_test<WRITE_1_4_4, ADDR_SIZE_32, ALT_SIZE_8, WRITE_SINGLE,   READ_2_2_2, ADDR_SIZE_32, ALT_SIZE_8, OSPI_COMMON_MAX_FREQUENCY, READ_MULTIPLE, TEST_REPEAT_SINGLE,   DATA_SIZE_256,  TEST_FLASH_ADDRESS>),
    Case("ospi write(1-4-4)/x1  read(2-2-2)/x1  repeat/x4  test", ospi_write_read_test<WRITE_1_4_4, ADDR_SIZE_32, ALT_SIZE_8, WRITE_SINGLE,   READ_2_2_2, ADDR_SIZE_32, ALT_SIZE_8, OSPI_COMMON_MAX_FREQUENCY, READ_SINGLE,   TEST_REPEAT_MULTIPLE, DATA_SIZE_256,  TEST_FLASH_ADDRESS>),
#endif
#ifdef READ_1_1_4
    Case("ospi write(1-4-4)/x1  read(1-1-4)/x1  repeat/x1  test", ospi_write_read_test<WRITE_1_4_4, ADDR_SIZE_32, ALT_SIZE_8, WRITE_SINGLE,   READ_1_1_4, ADDR_SIZE_32, ALT_SIZE_8, OSPI_COMMON_MAX_FREQUENCY, READ_SINGLE,   TEST_REPEAT_SINGLE,   DATA_SIZE_256,  TEST_FLASH_ADDRESS>),
    Case("ospi write(1-4-4)/x4  read(1-1-4)/x1  repeat/x1  test", ospi_write_read_test<WRITE_1_4_4, ADDR_SIZE_32, ALT_SIZE_8, WRITE_MULTIPLE, READ_1_1_4, ADDR_SIZE_32, ALT_SIZE_8, OSPI_COMMON_MAX_FREQUENCY, READ_SINGLE,   TEST_REPEAT_SINGLE,   DATA_SIZE_1024, TEST_FLASH_ADDRESS>),
    Case("ospi write(1-4-4)/x1  read(1-1-4)/x4  repeat/x1  test", ospi_write_read_test<WRITE_1_4_4, ADDR_SIZE_32, ALT_SIZE_8, WRITE_SINGLE,   READ_1_1_4, ADDR_SIZE_32, ALT_SIZE_8, OSPI_COMMON_MAX_FREQUENCY, READ_MULTIPLE, TEST_REPEAT_SINGLE,   DATA_SIZE_256,  TEST_FLASH_ADDRESS>),
    Case("ospi write(1-4-4)/x1  read(1-1-4)/x1  repeat/x4  test", ospi_write_read_test<WRITE_1_4_4, ADDR_SIZE_32, ALT_SIZE_8, WRITE_SINGLE,   READ_1_1_4, ADDR_SIZE_32, ALT_SIZE_8, OSPI_COMMON_MAX_FREQUENCY, READ_SINGLE,   TEST_REPEAT_MULTIPLE, DATA_SIZE_256,  TEST_FLASH_ADDRESS>),
#endif
    Case("ospi write(1-4-4)/x1  read(1-4-4)/x1  repeat/x1  test", ospi_write_read_test<WRITE_1_4_4, ADDR_SIZE_32, ALT_SIZE_8, WRITE_SINGLE,   READ_1_4_4, ADDR_SIZE_32, ALT_SIZE_8, OSPI_COMMON_MAX_FREQUENCY, READ_SINGLE,   TEST_REPEAT_SINGLE,   DATA_SIZE_256,  TEST_FLASH_ADDRESS>),
    Case("ospi write(1-4-4)/x4  read(1-4-4)/x1  repeat/x1  test", ospi_write_read_test<WRITE_1_4_4, ADDR_SIZE_32, ALT_SIZE_8, WRITE_MULTIPLE, READ_1_4_4, ADDR_SIZE_32, ALT_SIZE_8, OSPI_COMMON_MAX_FREQUENCY, READ_SINGLE,   TEST_REPEAT_SINGLE,   DATA_SIZE_1024, TEST_FLASH_ADDRESS>),
    Case("ospi write(1-4-4)/x1  read(1-4-4)/x4  repeat/x1  test", ospi_write_read_test<WRITE_1_4_4, ADDR_SIZE_32, ALT_SIZE_8, WRITE_SINGLE,   READ_1_4_4, ADDR_SIZE_32, ALT_SIZE_8, OSPI_COMMON_MAX_FREQUENCY, READ_MULTIPLE, TEST_REPEAT_SINGLE,   DATA_SIZE_256,  TEST_FLASH_ADDRESS>),
    Case("ospi write(1-4-4)/x1  read(1-4-4)/x1  repeat/x4  test", ospi_write_read_test<WRITE_1_4_4, ADDR_SIZE_32, ALT_SIZE_8, WRITE_SINGLE,   READ_1_4_4, ADDR_SIZE_32, ALT_SIZE_8, OSPI_COMMON_MAX_FREQUENCY, READ_SINGLE,   TEST_REPEAT_MULTIPLE, DATA_SIZE_256,  TEST_FLASH_ADDRESS>),
#ifdef READ_4_4_4
    Case("ospi write(1-4-4)/x1  read(4-4-4)/x1  repeat/x1  test", ospi_write_read_test<WRITE_1_4_4, ADDR_SIZE_32, ALT_SIZE_8, WRITE_SINGLE,   READ_4_4_4, ADDR_SIZE_32, ALT_SIZE_8, OSPI_COMMON_MAX_FREQUENCY, READ_SINGLE,   TEST_REPEAT_SINGLE,   DATA_SIZE_256,  TEST_FLASH_ADDRESS>),
    Case("ospi write(1-4-4)/x4  read(4-4-4)/x1  repeat/x1  test", ospi_write_read_test<WRITE_1_4_4, ADDR_SIZE_32, ALT_SIZE_8, WRITE_MULTIPLE, READ_4_4_4, ADDR_SIZE_32, ALT_SIZE_8, OSPI_COMMON_MAX_FREQUENCY, READ_SINGLE,   TEST_REPEAT_SINGLE,   DATA_SIZE_1024, TEST_FLASH_ADDRESS>),
    Case("ospi write(1-4-4)/x1  read(4-4-4)/x4  repeat/x1  test", ospi_write_read_test<WRITE_1_4_4, ADDR_SIZE_32, ALT_SIZE_8, WRITE_SINGLE,   READ_4_4_4, ADDR_SIZE_32, ALT_SIZE_8, OSPI_COMMON_MAX_FREQUENCY, READ_MULTIPLE, TEST_REPEAT_SINGLE,   DATA_SIZE_256,  TEST_FLASH_ADDRESS>),
    Case("ospi write(1-4-4)/x1  read(4-4-4)/x1  repeat/x4  test", ospi_write_read_test<WRITE_1_4_4, ADDR_SIZE_32, ALT_SIZE_8, WRITE_SINGLE,   READ_4_4_4, ADDR_SIZE_32, ALT_SIZE_8, OSPI_COMMON_MAX_FREQUENCY, READ_SINGLE,   TEST_REPEAT_MULTIPLE, DATA_SIZE_256,  TEST_FLASH_ADDRESS>),
#endif
#endif

#ifdef WRITE_4_4_4
    Case("ospi write(4-4-4)/x1  read(1-1-1)/x1  repeat/x1  test", ospi_write_read_test<WRITE_4_4_4, ADDR_SIZE_32, ALT_SIZE_8, WRITE_SINGLE,   READ_1_1_1, ADDR_SIZE_32, ALT_SIZE_8, OSPI_COMMON_MAX_FREQUENCY, READ_SINGLE,   TEST_REPEAT_SINGLE,   DATA_SIZE_256,  TEST_FLASH_ADDRESS>),
    Case("ospi write(4-4-4)/x4  read(1-1-1)/x1  repeat/x1  test", ospi_write_read_test<WRITE_4_4_4, ADDR_SIZE_32, ALT_SIZE_8, WRITE_MULTIPLE, READ_1_1_1, ADDR_SIZE_32, ALT_SIZE_8, OSPI_COMMON_MAX_FREQUENCY, READ_SINGLE,   TEST_REPEAT_SINGLE,   DATA_SIZE_1024, TEST_FLASH_ADDRESS>),
    Case("ospi write(4-4-4)/x1  read(1-1-1)/x4  repeat/x1  test", ospi_write_read_test<WRITE_4_4_4, ADDR_SIZE_32, ALT_SIZE_8, WRITE_SINGLE,   READ_1_1_1, ADDR_SIZE_32, ALT_SIZE_8, OSPI_COMMON_MAX_FREQUENCY, READ_MULTIPLE, TEST_REPEAT_SINGLE,   DATA_SIZE_256,  TEST_FLASH_ADDRESS>),
    Case("ospi write(4-4-4)/x1  read(1-1-1)/x1  repeat/x4  test", ospi_write_read_test<WRITE_4_4_4, ADDR_SIZE_32, ALT_SIZE_8, WRITE_SINGLE,   READ_1_1_1, ADDR_SIZE_32, ALT_SIZE_8, OSPI_COMMON_MAX_FREQUENCY, READ_SINGLE,   TEST_REPEAT_MULTIPLE, DATA_SIZE_256,  TEST_FLASH_ADDRESS>),
    Case("ospi write(4-4-4)/x1  read(1-1-2)/x1  repeat/x1  test", ospi_write_read_test<WRITE_4_4_4, ADDR_SIZE_32, ALT_SIZE_8, WRITE_SINGLE,   READ_1_1_2, ADDR_SIZE_32, ALT_SIZE_8, OSPI_COMMON_MAX_FREQUENCY, READ_SINGLE,   TEST_REPEAT_SINGLE,   DATA_SIZE_256,  TEST_FLASH_ADDRESS>),
    Case("ospi write(4-4-4)/x4  read(1-1-2)/x1  repeat/x1  test", ospi_write_read_test<WRITE_4_4_4, ADDR_SIZE_32, ALT_SIZE_8, WRITE_MULTIPLE, READ_1_1_2, ADDR_SIZE_32, ALT_SIZE_8, OSPI_COMMON_MAX_FREQUENCY, READ_SINGLE,   TEST_REPEAT_SINGLE,   DATA_SIZE_1024, TEST_FLASH_ADDRESS>),
    Case("ospi write(4-4-4)/x1  read(1-1-2)/x4  repeat/x1  test", ospi_write_read_test<WRITE_4_4_4, ADDR_SIZE_32, ALT_SIZE_8, WRITE_SINGLE,   READ_1_1_2, ADDR_SIZE_32, ALT_SIZE_8, OSPI_COMMON_MAX_FREQUENCY, READ_MULTIPLE, TEST_REPEAT_SINGLE,   DATA_SIZE_256,  TEST_FLASH_ADDRESS>),
    Case("ospi write(4-4-4)/x1  read(1-1-2)/x1  repeat/x4  test", ospi_write_read_test<WRITE_4_4_4, ADDR_SIZE_32, ALT_SIZE_8, WRITE_SINGLE,   READ_1_1_2, ADDR_SIZE_32, ALT_SIZE_8, OSPI_COMMON_MAX_FREQUENCY, READ_SINGLE,   TEST_REPEAT_MULTIPLE, DATA_SIZE_256,  TEST_FLASH_ADDRESS>),
    Case("ospi write(4-4-4)/x1  read(1-2-2)/x1  repeat/x1  test", ospi_write_read_test<WRITE_4_4_4, ADDR_SIZE_32, ALT_SIZE_8, WRITE_SINGLE,   READ_1_2_2, ADDR_SIZE_32, ALT_SIZE_8, OSPI_COMMON_MAX_FREQUENCY, READ_SINGLE,   TEST_REPEAT_SINGLE,   DATA_SIZE_256,  TEST_FLASH_ADDRESS>),
    Case("ospi write(4-4-4)/x4  read(1-2-2)/x1  repeat/x1  test", ospi_write_read_test<WRITE_4_4_4, ADDR_SIZE_32, ALT_SIZE_8, WRITE_MULTIPLE, READ_1_2_2, ADDR_SIZE_32, ALT_SIZE_8, OSPI_COMMON_MAX_FREQUENCY, READ_SINGLE,   TEST_REPEAT_SINGLE,   DATA_SIZE_1024, TEST_FLASH_ADDRESS>),
    Case("ospi write(4-4-4)/x1  read(1-2-2)/x4  repeat/x1  test", ospi_write_read_test<WRITE_4_4_4, ADDR_SIZE_32, ALT_SIZE_8, WRITE_SINGLE,   READ_1_2_2, ADDR_SIZE_32, ALT_SIZE_8, OSPI_COMMON_MAX_FREQUENCY, READ_MULTIPLE, TEST_REPEAT_SINGLE,   DATA_SIZE_256,  TEST_FLASH_ADDRESS>),
    Case("ospi write(4-4-4)/x1  read(1-2-2)/x1  repeat/x4  test", ospi_write_read_test<WRITE_4_4_4, ADDR_SIZE_32, ALT_SIZE_8, WRITE_SINGLE,   READ_1_2_2, ADDR_SIZE_32, ALT_SIZE_8, OSPI_COMMON_MAX_FREQUENCY, READ_SINGLE,   TEST_REPEAT_MULTIPLE, DATA_SIZE_256,  TEST_FLASH_ADDRESS>),
#ifdef READ_2_2_2
    Case("ospi write(4-4-4)/x1  read(2-2-2)/x1  repeat/x1  test", ospi_write_read_test<WRITE_4_4_4, ADDR_SIZE_32, ALT_SIZE_8, WRITE_SINGLE,   READ_2_2_2, ADDR_SIZE_32, ALT_SIZE_8, OSPI_COMMON_MAX_FREQUENCY, READ_SINGLE,   TEST_REPEAT_SINGLE,   DATA_SIZE_256,  TEST_FLASH_ADDRESS>),
    Case("ospi write(4-4-4)/x4  read(2-2-2)/x1  repeat/x1  test", ospi_write_read_test<WRITE_4_4_4, ADDR_SIZE_32, ALT_SIZE_8, WRITE_MULTIPLE, READ_2_2_2, ADDR_SIZE_32, ALT_SIZE_8, OSPI_COMMON_MAX_FREQUENCY, READ_SINGLE,   TEST_REPEAT_SINGLE,   DATA_SIZE_1024, TEST_FLASH_ADDRESS>),
    Case("ospi write(4-4-4)/x1  read(2-2-2)/x4  repeat/x1  test", ospi_write_read_test<WRITE_4_4_4, ADDR_SIZE_32, ALT_SIZE_8, WRITE_SINGLE,   READ_2_2_2, ADDR_SIZE_32, ALT_SIZE_8, OSPI_COMMON_MAX_FREQUENCY, READ_MULTIPLE, TEST_REPEAT_SINGLE,   DATA_SIZE_256,  TEST_FLASH_ADDRESS>),
    Case("ospi write(4-4-4)/x1  read(2-2-2)/x1  repeat/x4  test", ospi_write_read_test<WRITE_4_4_4, ADDR_SIZE_32, ALT_SIZE_8, WRITE_SINGLE,   READ_2_2_2, ADDR_SIZE_32, ALT_SIZE_8, OSPI_COMMON_MAX_FREQUENCY, READ_SINGLE,   TEST_REPEAT_MULTIPLE, DATA_SIZE_256,  TEST_FLASH_ADDRESS>),
#endif
#ifdef READ_1_1_4
    Case("ospi write(4-4-4)/x1  read(1-1-4)/x1  repeat/x1  test", ospi_write_read_test<WRITE_4_4_4, ADDR_SIZE_32, ALT_SIZE_8, WRITE_SINGLE,   READ_1_1_4, ADDR_SIZE_32, ALT_SIZE_8, OSPI_COMMON_MAX_FREQUENCY, READ_SINGLE,   TEST_REPEAT_SINGLE,   DATA_SIZE_256,  TEST_FLASH_ADDRESS>),
    Case("ospi write(4-4-4)/x4  read(1-1-4)/x1  repeat/x1  test", ospi_write_read_test<WRITE_4_4_4, ADDR_SIZE_32, ALT_SIZE_8, WRITE_MULTIPLE, READ_1_1_4, ADDR_SIZE_32, ALT_SIZE_8, OSPI_COMMON_MAX_FREQUENCY, READ_SINGLE,   TEST_REPEAT_SINGLE,   DATA_SIZE_1024, TEST_FLASH_ADDRESS>),
    Case("ospi write(4-4-4)/x1  read(1-1-4)/x4  repeat/x1  test", ospi_write_read_test<WRITE_4_4_4, ADDR_SIZE_32, ALT_SIZE_8, WRITE_SINGLE,   READ_1_1_4, ADDR_SIZE_32, ALT_SIZE_8, OSPI_COMMON_MAX_FREQUENCY, READ_MULTIPLE, TEST_REPEAT_SINGLE,   DATA_SIZE_256,  TEST_FLASH_ADDRESS>),
    Case("ospi write(4-4-4)/x1  read(1-1-4)/x1  repeat/x4  test", ospi_write_read_test<WRITE_4_4_4, ADDR_SIZE_32, ALT_SIZE_8, WRITE_SINGLE,   READ_1_1_4, ADDR_SIZE_32, ALT_SIZE_8, OSPI_COMMON_MAX_FREQUENCY, READ_SINGLE,   TEST_REPEAT_MULTIPLE, DATA_SIZE_256,  TEST_FLASH_ADDRESS>),
#endif
    Case("ospi write(4-4-4)/x1  read(1-4-4)/x1  repeat/x1  test", ospi_write_read_test<WRITE_4_4_4, ADDR_SIZE_32, ALT_SIZE_8, WRITE_SINGLE,   READ_1_4_4, ADDR_SIZE_32, ALT_SIZE_8, OSPI_COMMON_MAX_FREQUENCY, READ_SINGLE,   TEST_REPEAT_SINGLE,   DATA_SIZE_256,  TEST_FLASH_ADDRESS>),
    Case("ospi write(4-4-4)/x4  read(1-4-4)/x1  repeat/x1  test", ospi_write_read_test<WRITE_4_4_4, ADDR_SIZE_32, ALT_SIZE_8, WRITE_MULTIPLE, READ_1_4_4, ADDR_SIZE_32, ALT_SIZE_8, OSPI_COMMON_MAX_FREQUENCY, READ_SINGLE,   TEST_REPEAT_SINGLE,   DATA_SIZE_1024, TEST_FLASH_ADDRESS>),
    Case("ospi write(4-4-4)/x1  read(1-4-4)/x4  repeat/x1  test", ospi_write_read_test<WRITE_4_4_4, ADDR_SIZE_32, ALT_SIZE_8, WRITE_SINGLE,   READ_1_4_4, ADDR_SIZE_32, ALT_SIZE_8, OSPI_COMMON_MAX_FREQUENCY, READ_MULTIPLE, TEST_REPEAT_SINGLE,   DATA_SIZE_256,  TEST_FLASH_ADDRESS>),
    Case("ospi write(4-4-4)/x1  read(1-4-4)/x1  repeat/x4  test", ospi_write_read_test<WRITE_4_4_4, ADDR_SIZE_32, ALT_SIZE_8, WRITE_SINGLE,   READ_1_4_4, ADDR_SIZE_32, ALT_SIZE_8, OSPI_COMMON_MAX_FREQUENCY, READ_SINGLE,   TEST_REPEAT_MULTIPLE, DATA_SIZE_256,  TEST_FLASH_ADDRESS>),
#ifdef READ_4_4_4
    Case("ospi write(4-4-4)/x1  read(4-4-4)/x1  repeat/x1  test", ospi_write_read_test<WRITE_4_4_4, ADDR_SIZE_32, ALT_SIZE_8, WRITE_SINGLE,   READ_4_4_4, ADDR_SIZE_32, ALT_SIZE_8, OSPI_COMMON_MAX_FREQUENCY, READ_SINGLE,   TEST_REPEAT_SINGLE,   DATA_SIZE_256,  TEST_FLASH_ADDRESS>),
    Case("ospi write(4-4-4)/x4  read(4-4-4)/x1  repeat/x1  test", ospi_write_read_test<WRITE_4_4_4, ADDR_SIZE_32, ALT_SIZE_8, WRITE_MULTIPLE, READ_4_4_4, ADDR_SIZE_32, ALT_SIZE_8, OSPI_COMMON_MAX_FREQUENCY, READ_SINGLE,   TEST_REPEAT_SINGLE,   DATA_SIZE_1024, TEST_FLASH_ADDRESS>),
    Case("ospi write(4-4-4)/x1  read(4-4-4)/x4  repeat/x1  test", ospi_write_read_test<WRITE_4_4_4, ADDR_SIZE_32, ALT_SIZE_8, WRITE_SINGLE,   READ_4_4_4, ADDR_SIZE_32, ALT_SIZE_8, OSPI_COMMON_MAX_FREQUENCY, READ_MULTIPLE, TEST_REPEAT_SINGLE,   DATA_SIZE_256,  TEST_FLASH_ADDRESS>),
    Case("ospi write(4-4-4)/x1  read(4-4-4)/x1  repeat/x4  test", ospi_write_read_test<WRITE_4_4_4, ADDR_SIZE_32, ALT_SIZE_8, WRITE_SINGLE,   READ_4_4_4, ADDR_SIZE_32, ALT_SIZE_8, OSPI_COMMON_MAX_FREQUENCY, READ_SINGLE,   TEST_REPEAT_MULTIPLE, DATA_SIZE_256,  TEST_FLASH_ADDRESS>),
#endif
#endif
#ifdef READ_8_8_8
    Case("ospi write(8_8_8)/x1  read(8_8_8)/x1  repeat/x1  test", ospi_write_read_test<WRITE_8_8_8, ADDR_SIZE_32, ALT_SIZE_8, WRITE_SINGLE,   READ_8_8_8, ADDR_SIZE_32, ALT_SIZE_8, OSPI_COMMON_MAX_FREQUENCY, READ_SINGLE,   TEST_REPEAT_SINGLE,   DATA_SIZE_256,  TEST_FLASH_ADDRESS>),
    Case("ospi write(8_8_8)/x4  read(8_8_8)/x1  repeat/x1  test", ospi_write_read_test<WRITE_8_8_8, ADDR_SIZE_32, ALT_SIZE_8, WRITE_MULTIPLE, READ_8_8_8, ADDR_SIZE_32, ALT_SIZE_8, OSPI_COMMON_MAX_FREQUENCY, READ_SINGLE,   TEST_REPEAT_SINGLE,   DATA_SIZE_1024, TEST_FLASH_ADDRESS>),
    Case("ospi write(8_8_8)/x1  read(8_8_8)/x4  repeat/x1  test", ospi_write_read_test<WRITE_8_8_8, ADDR_SIZE_32, ALT_SIZE_8, WRITE_SINGLE,   READ_8_8_8, ADDR_SIZE_32, ALT_SIZE_8, OSPI_COMMON_MAX_FREQUENCY, READ_MULTIPLE, TEST_REPEAT_SINGLE,   DATA_SIZE_256,  TEST_FLASH_ADDRESS>),
    Case("ospi write(8_8_8)/x1  read(8_8_8)/x1  repeat/x4  test", ospi_write_read_test<WRITE_8_8_8, ADDR_SIZE_32, ALT_SIZE_8, WRITE_SINGLE,   READ_8_8_8, ADDR_SIZE_32, ALT_SIZE_8, OSPI_COMMON_MAX_FREQUENCY, READ_SINGLE,   TEST_REPEAT_MULTIPLE, DATA_SIZE_256,  TEST_FLASH_ADDRESS>),
#endif

#ifdef READ_8D_8D_8D
    Case("ospi write(8D_8D_8D)/x1  read(8D_8D_8D)/x1  repeat/x1  test", ospi_write_read_test<WRITE_8D_8D_8D, ADDR_SIZE_32, ALT_SIZE_8, WRITE_SINGLE,   READ_8D_8D_8D, ADDR_SIZE_32, ALT_SIZE_8, OSPI_COMMON_MAX_FREQUENCY, READ_SINGLE,   TEST_REPEAT_SINGLE,   DATA_SIZE_256,  TEST_FLASH_ADDRESS>),
    Case("ospi write(8D_8D_8D)/x4  read(8D_8D_8D)/x1  repeat/x1  test", ospi_write_read_test<WRITE_8D_8D_8D, ADDR_SIZE_32, ALT_SIZE_8, WRITE_MULTIPLE, READ_8D_8D_8D, ADDR_SIZE_32, ALT_SIZE_8, OSPI_COMMON_MAX_FREQUENCY, READ_SINGLE,   TEST_REPEAT_SINGLE,   DATA_SIZE_1024, TEST_FLASH_ADDRESS>),
    Case("ospi write(8D_8D_8D)/x1  read(8D_8D_8D)/x4  repeat/x1  test", ospi_write_read_test<WRITE_8D_8D_8D, ADDR_SIZE_32, ALT_SIZE_8, WRITE_SINGLE,   READ_8D_8D_8D, ADDR_SIZE_32, ALT_SIZE_8, OSPI_COMMON_MAX_FREQUENCY, READ_MULTIPLE, TEST_REPEAT_SINGLE,   DATA_SIZE_256,  TEST_FLASH_ADDRESS>),
    Case("ospi write(8D_8D_8D)/x1  read(8D_8D_8D)/x1  repeat/x4  test", ospi_write_read_test<WRITE_8D_8D_8D, ADDR_SIZE_32, ALT_SIZE_8, WRITE_SINGLE,   READ_8D_8D_8D, ADDR_SIZE_32, ALT_SIZE_8, OSPI_COMMON_MAX_FREQUENCY, READ_SINGLE,   TEST_REPEAT_MULTIPLE, DATA_SIZE_256,  TEST_FLASH_ADDRESS>),
#endif
};

utest::v1::status_t greentea_test_setup(const size_t number_of_cases)
{
    GREENTEA_SETUP(180, "default_auto");
    return greentea_test_setup_handler(number_of_cases);
}

Specification specification(greentea_test_setup, cases, greentea_test_teardown_handler);

int main()
{
    Harness::run(specification);
}

#endif // !defined(OSPI_FLASH_CHIP_STRING)
#endif // !DEVICE_OSPI