5 #include "dt/dt_gpio.h"
6 #include "dt/dt_pinmux.h"
12 #include "sw/device/lib/testing/pinmux_testutils.h"
13 #include "sw/device/lib/testing/test_framework/check.h"
16 static const dt_gpio_t kGpioDt = kDtGpio;
17 static const dt_pinmux_t kPinmuxDt = kDtPinmuxAon;
19 static dif_gpio_t gpio;
20 static dif_pinmux_t pinmux;
21 OTTF_DEFINE_TEST_CONFIG();
24 static_assert(kDtGpioPeriphIoGpio0 == 0,
"kDtGpioPinGpio0 is expected to be 0");
26 "kDtGpioPinCount does not match kDifGpioNumPins");
36 static const uint32_t kGpioVals[] = {0xAAAAAAAA, 0x55555555, 0xA5A5A5A5,
49 static void test_gpio_write(uint32_t write_val, uint32_t compare_mask) {
57 uint32_t read_val = 0;
60 uint32_t expected = write_val & compare_mask;
61 uint32_t actual = read_val & compare_mask;
62 CHECK(expected == actual,
"%X != %X", expected, actual);
72 uint32_t gpio_mask = pinmux_testutils_get_testable_gpios_mask();
73 CHECK_DIF_OK(dif_pinmux_init_from_dt(kPinmuxDt, &pinmux));
76 if (gpio_mask & (1u << i)) {
79 dt_periph_io_t periph_io =
80 dt_gpio_periph_io(kGpioDt, kDtGpioPeriphIoGpio0 + i);
81 dt_pad_t pad = kPinmuxTestutilsGpioPads[i];
82 CHECK_STATUS_OK(pinmux_testutils_connect(&pinmux, periph_io,
83 kDtPeriphIoDirInout, pad));
86 CHECK_DIF_OK(dif_gpio_init_from_dt(kGpioDt, &gpio));
89 for (uint8_t i = 0; i <
ARRAYSIZE(kGpioVals); ++i) {
90 test_gpio_write(kGpioVals[i], gpio_mask);
95 for (uint32_t i = 1; i > 0; i <<= 1) {
96 test_gpio_write(i, gpio_mask);
97 test_gpio_write(~i, gpio_mask);