On Tue, Jul 7, 2026 at 3:54 AM Kuan-Wei Chiu <[email protected]> wrote:
>
> i Joel and Alistair,
>
> On Wed, Jul 01, 2026 at 01:05:55PM +0930, Joel Stanley wrote:
> > On Mon, 29 Jun 2026 at 11:21, Alistair Francis <[email protected]> wrote:
> > >
> > > On Wed, Jun 17, 2026 at 5:04 AM Kuan-Wei Chiu <[email protected]> 
> > > wrote:
> > > >
> > > > Add minimal qtest coverage for the Milk-V Duo machine to validate basic
> > > > MMIO mapping and register access.
> > > >
> > > > Currently tested:
> > > > - Verify DW8250 UART component version and type signatures.
> > > > - Test read/write access to CV1800B clock bypass register.
> > > >
> > > > Tested with:
> > > > $ meson test -C build -v qemu:qtest-riscv64/milkv-duo-test
> > > > [...]
> > > > Ok:                 1
> > > > Fail:               0
> > > >
> > > > Signed-off-by: Kuan-Wei Chiu <[email protected]>
> > > > ---
> > > >  MAINTAINERS                  |  1 +
> > > >  tests/qtest/meson.build      |  3 +-
> > > >  tests/qtest/milkv-duo-test.c | 70 ++++++++++++++++++++++++++++++++++++
> > > >  3 files changed, 73 insertions(+), 1 deletion(-)
> > > >  create mode 100644 tests/qtest/milkv-duo-test.c
> > > >
> > > > diff --git a/MAINTAINERS b/MAINTAINERS
> > > > index e197dcb5b2..472513537f 100644
> > > > --- a/MAINTAINERS
> > > > +++ b/MAINTAINERS
> > > > @@ -1807,6 +1807,7 @@ F: hw/riscv/milkv_duo.c
> > > >  F: include/hw/char/dw8250.h
> > > >  F: include/hw/misc/cv1800b_clk.h
> > > >  F: include/hw/riscv/cv1800b.h
> > > > +F: tests/qtest/milkv-duo-test.c
> > > >
> > > >  RX Machines
> > > >  -----------
> > > > diff --git a/tests/qtest/meson.build b/tests/qtest/meson.build
> > > > index 4897325d84..38acbdc0c8 100644
> > > > --- a/tests/qtest/meson.build
> > > > +++ b/tests/qtest/meson.build
> > > > @@ -293,7 +293,8 @@ qtests_riscv64 = ['riscv-csr-test'] + \
> > > >    (config_all_devices.has_key('CONFIG_IOMMU_TESTDEV') and
> > > >     config_all_devices.has_key('CONFIG_RISCV_IOMMU') ?
> > > >     ['iommu-riscv-test'] : []) + \
> > > > -  (config_all_devices.has_key('CONFIG_K230') ? ['k230-wdt-test'] : [])
> > > > +  (config_all_devices.has_key('CONFIG_K230') ? ['k230-wdt-test'] : []) 
> > > > + \
> > > > +   ['milkv-duo-test']
> > > >
> > > >  qos_test_ss = ss.source_set()
> > > >  qos_test_ss.add(
> > > > diff --git a/tests/qtest/milkv-duo-test.c b/tests/qtest/milkv-duo-test.c
> > > > new file mode 100644
> > > > index 0000000000..06064b8733
> > > > --- /dev/null
> > > > +++ b/tests/qtest/milkv-duo-test.c
> > > > @@ -0,0 +1,70 @@
> > > > +/*
> > > > + * QTest for Milk-V Duo Board
> > > > + *
> > > > + * Copyright (c) 2026 Kuan-Wei Chiu <[email protected]>
> > > > + *
> > > > + * SPDX-License-Identifier: GPL-2.0-or-later
> > > > + */
> > > > +
> > > > +#include "qemu/osdep.h"
> > > > +#include "libqtest.h"
> > > > +
> > > > +#define CV1800B_CLK_BASE            0x03002000
> > > > +#define CV1800B_CLK_BYPASS          0x030
> > > > +#define CV1800B_CLK_BYPASS_RESET    0xFFFFFFFF
> > > > +#define TEST_PATTERN_5A             0x5A5A5A5A
> > > > +#define TEST_PATTERN_A5             0xA5A5A5A5
> > > > +
> > > > +#define CV1800B_UART0_BASE          0x04140000
> > > > +#define DW_UART_UCV                 0xF8
> > > > +#define DW_UART_CTR                 0xFC
> > > > +#define DW_UART_VERSION_3_23A       0x3332332A
> > > > +#define DW_UART_TYPE_SIGNATURE      0x44570110
> > > > +
> > > > +static void test_milkv_duo_uart(void)
> > > > +{
> > > > +    QTestState *qts;
> > > > +    uint32_t component_version;
> > > > +    uint32_t component_type;
> > > > +
> > > > +    qts = qtest_init("-M milkv-duo");
> > > > +
> > > > +    component_version = qtest_readl(qts, CV1800B_UART0_BASE + 
> > > > DW_UART_UCV);
> > > > +    g_assert_cmphex(component_version, ==, DW_UART_VERSION_3_23A);
> > > > +
> > > > +    component_type = qtest_readl(qts, CV1800B_UART0_BASE + 
> > > > DW_UART_CTR);
> > > > +    g_assert_cmphex(component_type, ==, DW_UART_TYPE_SIGNATURE);
> > > > +
> > > > +    qtest_quit(qts);
> > > > +}
> > > > +
> > > > +static void test_milkv_duo_clk(void)
> > > > +{
> > > > +    QTestState *qts;
> > > > +    uint32_t clk_bypass_val;
> > > > +
> > > > +    qts = qtest_init("-M milkv-duo");
> > > > +
> > > > +    clk_bypass_val = qtest_readl(qts, CV1800B_CLK_BASE + 
> > > > CV1800B_CLK_BYPASS);
> > > > +    g_assert_cmphex(clk_bypass_val, ==, CV1800B_CLK_BYPASS_RESET);
> > > > +
> > > > +    qtest_writel(qts, CV1800B_CLK_BASE + CV1800B_CLK_BYPASS, 
> > > > TEST_PATTERN_5A);
> > > > +    clk_bypass_val = qtest_readl(qts, CV1800B_CLK_BASE + 
> > > > CV1800B_CLK_BYPASS);
> > > > +    g_assert_cmphex(clk_bypass_val, ==, TEST_PATTERN_5A);
> > > > +
> > > > +    qtest_writel(qts, CV1800B_CLK_BASE + CV1800B_CLK_BYPASS, 
> > > > TEST_PATTERN_A5);
> > > > +    clk_bypass_val = qtest_readl(qts, CV1800B_CLK_BASE + 
> > > > CV1800B_CLK_BYPASS);
> > > > +    g_assert_cmphex(clk_bypass_val, ==, TEST_PATTERN_A5);
> > > > +
> > > > +    qtest_quit(qts);
> > > > +}
> > > > +
> > > > +int main(int argc, char **argv)
> > > > +{
> > > > +    g_test_init(&argc, &argv, NULL);
> > > > +
> > > > +    qtest_add_func("/riscv/milkv-duo/uart", test_milkv_duo_uart);
> > > > +    qtest_add_func("/riscv/milkv-duo/clk", test_milkv_duo_clk);
> > >
> > > Thanks for the tests. These are just checking some static values
> > > though. Can you also add a boot test?
> >
> > +1
> >
> >  A functional test that exercises -bios -kernel -dtb, as well as the
> > sd device would be great.
>
> I'll try to add the boot test.
>
> I assume this means the test will need a way to fetch the kernel image
> and dtb from somewhere. Would it be acceptable to host these files on
> my personal github, or is there a more appropriate place I should
> upload them to?

I think personal GitHub is fine, from memory that is what others do.
If there is some official source that would be better though

Alistair

>
> Regards,
> Kuan-Wei

Reply via email to