- Created qtest to check initialization of registers in PSPI Module - Implemented test into Build File
Tested: ./build/tests/qtest/npcm8xx-pspi_test Signed-off-by: Tim Lee <timlee660...@gmail.com> --- MAINTAINERS | 1 + tests/qtest/meson.build | 3 + tests/qtest/npcm8xx_pspi-test.c | 104 ++++++++++++++++++++++++++++++++ 3 files changed, 108 insertions(+) create mode 100644 tests/qtest/npcm8xx_pspi-test.c diff --git a/MAINTAINERS b/MAINTAINERS index d54b5578f8..0162f59bf7 100644 --- a/MAINTAINERS +++ b/MAINTAINERS @@ -892,6 +892,7 @@ F: hw/sensor/adm1266.c F: include/hw/*/npcm* F: tests/qtest/npcm* F: tests/qtest/adm1266-test.c +F: tests/qtest/npcm8xx_pspi-test.c F: pc-bios/npcm7xx_bootrom.bin F: pc-bios/npcm8xx_bootrom.bin F: roms/vbootrom diff --git a/tests/qtest/meson.build b/tests/qtest/meson.build index 3136d15e0f..88672a8b00 100644 --- a/tests/qtest/meson.build +++ b/tests/qtest/meson.build @@ -210,6 +210,8 @@ qtests_npcm7xx = \ 'npcm7xx_watchdog_timer-test', 'npcm_gmac-test'] + \ (slirp.found() ? ['npcm7xx_emc-test'] : []) +qtests_npcm8xx = \ + ['npcm8xx_pspi-test'] qtests_aspeed = \ ['aspeed_hace-test', 'aspeed_smc-test', @@ -257,6 +259,7 @@ qtests_aarch64 = \ (config_all_accel.has_key('CONFIG_TCG') and \ config_all_devices.has_key('CONFIG_TPM_TIS_I2C') ? ['tpm-tis-i2c-test'] : []) + \ (config_all_devices.has_key('CONFIG_ASPEED_SOC') ? qtests_aspeed64 : []) + \ + (config_all_devices.has_key('CONFIG_NPCM8XX') ? qtests_npcm8xx : []) + \ ['arm-cpu-features', 'numa-test', 'boot-serial-test', diff --git a/tests/qtest/npcm8xx_pspi-test.c b/tests/qtest/npcm8xx_pspi-test.c new file mode 100644 index 0000000000..107bce681f --- /dev/null +++ b/tests/qtest/npcm8xx_pspi-test.c @@ -0,0 +1,104 @@ +#include "qemu/osdep.h" +#include "libqtest.h" +#include "qemu/module.h" + +#define DATA_OFFSET 0x00 +#define CTL_SPIEN 0x01 +#define CTL_OFFSET 0x02 +#define CTL_MOD 0x04 + +typedef struct PSPI { + uint64_t base_addr; +} PSPI; + +PSPI pspi_defs = { + .base_addr = 0xf0201000 +}; + +static uint16_t pspi_read_data(QTestState *qts, const PSPI *pspi) +{ + return qtest_readw(qts, pspi->base_addr + DATA_OFFSET); +} + +static void pspi_write_data(QTestState *qts, const PSPI *pspi, uint16_t value) +{ + qtest_writew(qts, pspi->base_addr + DATA_OFFSET, value); +} + +static uint32_t pspi_read_ctl(QTestState *qts, const PSPI *pspi) +{ + return qtest_readl(qts, pspi->base_addr + CTL_OFFSET); +} + +static void pspi_write_ctl(QTestState *qts, const PSPI *pspi, uint32_t value) +{ + qtest_writel(qts, pspi->base_addr + CTL_OFFSET, value); +} + +/* Check PSPI can be reset to default value */ +static void test_init(gconstpointer pspi_p) +{ + const PSPI *pspi = pspi_p; + + QTestState *qts = qtest_init("-machine npcm845-evb"); + pspi_write_ctl(qts, pspi, CTL_SPIEN); + g_assert_cmphex(pspi_read_ctl(qts, pspi), ==, CTL_SPIEN); + + qtest_quit(qts); +} + +/* Check PSPI can be r/w data register */ +static void test_data(gconstpointer pspi_p) +{ + const PSPI *pspi = pspi_p; + uint16_t test = 0x1234; + uint16_t output; + + QTestState *qts = qtest_init("-machine npcm845-evb"); + + /* Write to data register */ + pspi_write_data(qts, pspi, test); + printf("Wrote 0x%x to data register\n", test); + + /* Read from data register */ + output = pspi_read_data(qts, pspi); + printf("Read 0x%x from data register\n", output); + + qtest_quit(qts); +} + +/* Check PSPI can be r/w control register */ +static void test_ctl(gconstpointer pspi_p) +{ + const PSPI *pspi = pspi_p; + uint8_t control = CTL_MOD; + + QTestState *qts = qtest_init("-machine npcm845-evb"); + + /* Write CTL_MOD value to control register for 16-bit interface mode */ + qtest_memwrite(qts, pspi->base_addr + CTL_OFFSET, + &control, sizeof(control)); + g_assert_cmphex(pspi_read_ctl(qts, pspi), ==, control); + printf("Wrote CTL_MOD to control register\n"); + + qtest_quit(qts); +} + +static void pspi_add_test(const char *name, const PSPI* wd, + GTestDataFunc fn) +{ + g_autofree char *full_name = g_strdup_printf("npcm8xx_pspi/%s", name); + qtest_add_data_func(full_name, wd, fn); +} + +#define add_test(name, td) pspi_add_test(#name, td, test_##name) + +int main(int argc, char **argv) +{ + g_test_init(&argc, &argv, NULL); + + add_test(init, &pspi_defs); + add_test(ctl, &pspi_defs); + add_test(data, &pspi_defs); + return g_test_run(); +} -- 2.34.1