Message ID | 20220712023219.41065-2-peter@pjd.dev (mailing list archive) |
---|---|
State | New, archived |
Headers | show |
Series | hw/gpio/aspeed: Don't let guests modify input pins | expand |
On 7/12/22 04:32, Peter Delevoryas wrote: > Verify the current behavior, which is that input pins can be modified by > guest OS register writes. > > Signed-off-by: Peter Delevoryas <peter@pjd.dev> Reviewed-by: Cédric Le Goater <clg@kaod.org> Thanks, C. > --- > tests/qtest/aspeed_gpio-test.c | 27 +++++++++++++++++++++++++++ > 1 file changed, 27 insertions(+) > > diff --git a/tests/qtest/aspeed_gpio-test.c b/tests/qtest/aspeed_gpio-test.c > index bac63e8742..8f52454099 100644 > --- a/tests/qtest/aspeed_gpio-test.c > +++ b/tests/qtest/aspeed_gpio-test.c > @@ -28,6 +28,11 @@ > #include "qapi/qmp/qdict.h" > #include "libqtest-single.h" > > +#define AST2600_GPIO_BASE 0x1E780000 > + > +#define GPIO_ABCD_DATA_VALUE 0x000 > +#define GPIO_ABCD_DIRECTION 0x004 > + > static void test_set_colocated_pins(const void *data) > { > QTestState *s = (QTestState *)data; > @@ -46,6 +51,27 @@ static void test_set_colocated_pins(const void *data) > g_assert(!qtest_qom_get_bool(s, "/machine/soc/gpio", "gpioV7")); > } > > +static void test_set_input_pins(const void *data) > +{ > + QTestState *s = (QTestState *)data; > + char name[16]; > + uint32_t value; > + > + qtest_writel(s, AST2600_GPIO_BASE + GPIO_ABCD_DIRECTION, 0x00000000); > + for (char c = 'A'; c <= 'D'; c++) { > + for (int i = 0; i < 8; i++) { > + sprintf(name, "gpio%c%d", c, i); > + qtest_qom_set_bool(s, "/machine/soc/gpio", name, true); > + } > + } > + value = qtest_readl(s, AST2600_GPIO_BASE + GPIO_ABCD_DATA_VALUE); > + g_assert_cmphex(value, ==, 0xffffffff); > + > + qtest_writel(s, AST2600_GPIO_BASE + GPIO_ABCD_DATA_VALUE, 0x00000000); > + value = qtest_readl(s, AST2600_GPIO_BASE + GPIO_ABCD_DATA_VALUE); > + g_assert_cmphex(value, ==, 0x00000000); > +} > + > int main(int argc, char **argv) > { > QTestState *s; > @@ -56,6 +82,7 @@ int main(int argc, char **argv) > s = qtest_init("-machine ast2600-evb"); > qtest_add_data_func("/ast2600/gpio/set_colocated_pins", s, > test_set_colocated_pins); > + qtest_add_data_func("/ast2600/gpio/set_input_pins", s, test_set_input_pins); > r = g_test_run(); > qtest_quit(s); >
diff --git a/tests/qtest/aspeed_gpio-test.c b/tests/qtest/aspeed_gpio-test.c index bac63e8742..8f52454099 100644 --- a/tests/qtest/aspeed_gpio-test.c +++ b/tests/qtest/aspeed_gpio-test.c @@ -28,6 +28,11 @@ #include "qapi/qmp/qdict.h" #include "libqtest-single.h" +#define AST2600_GPIO_BASE 0x1E780000 + +#define GPIO_ABCD_DATA_VALUE 0x000 +#define GPIO_ABCD_DIRECTION 0x004 + static void test_set_colocated_pins(const void *data) { QTestState *s = (QTestState *)data; @@ -46,6 +51,27 @@ static void test_set_colocated_pins(const void *data) g_assert(!qtest_qom_get_bool(s, "/machine/soc/gpio", "gpioV7")); } +static void test_set_input_pins(const void *data) +{ + QTestState *s = (QTestState *)data; + char name[16]; + uint32_t value; + + qtest_writel(s, AST2600_GPIO_BASE + GPIO_ABCD_DIRECTION, 0x00000000); + for (char c = 'A'; c <= 'D'; c++) { + for (int i = 0; i < 8; i++) { + sprintf(name, "gpio%c%d", c, i); + qtest_qom_set_bool(s, "/machine/soc/gpio", name, true); + } + } + value = qtest_readl(s, AST2600_GPIO_BASE + GPIO_ABCD_DATA_VALUE); + g_assert_cmphex(value, ==, 0xffffffff); + + qtest_writel(s, AST2600_GPIO_BASE + GPIO_ABCD_DATA_VALUE, 0x00000000); + value = qtest_readl(s, AST2600_GPIO_BASE + GPIO_ABCD_DATA_VALUE); + g_assert_cmphex(value, ==, 0x00000000); +} + int main(int argc, char **argv) { QTestState *s; @@ -56,6 +82,7 @@ int main(int argc, char **argv) s = qtest_init("-machine ast2600-evb"); qtest_add_data_func("/ast2600/gpio/set_colocated_pins", s, test_set_colocated_pins); + qtest_add_data_func("/ast2600/gpio/set_input_pins", s, test_set_input_pins); r = g_test_run(); qtest_quit(s);
Verify the current behavior, which is that input pins can be modified by guest OS register writes. Signed-off-by: Peter Delevoryas <peter@pjd.dev> --- tests/qtest/aspeed_gpio-test.c | 27 +++++++++++++++++++++++++++ 1 file changed, 27 insertions(+)