The Kendryte K230 machine currently lacks the Clock Management Unit (CMU)
register interface required by the K230 SDK U-Boot and the Linux K230 clock
driver. As a result, software probing the PLL and sysclk providers cannot
observe the expected reset values or register update semantics.
This series adds a minimal, deterministic K230 CMU model.
The model covers:
- four PLL register blocks at 0x91102000..0x9110203f;
- the defined sysclk registers in the 0x91100000 window;
- the software-visible SPI2AXI_CLK_DIV register at sysclk offset 0x108;
- reset values and writable/reserved/read-only masks;
- PLL control write-enable semantics;
- write-one-to-trigger update behavior;
- deterministic PLL lock and initialization status;
- VMState for stable PLL and sysclk register state;
- qtest coverage for reset, masks, write-enable, W1T, status, sysclk
updates, unknown offsets, and system reset;
- K230 machine wiring and user-facing documentation.
The model intentionally does not propagate clock frequencies to QEMU devices
or
change CPU execution speed. Peripheral reset, power control, and the
guest-initiated K230 reboot backend remain outside the scope of this series.
Those functions require separate reset/power models and a matching OpenSBI
backend.
The implementation is based only on the existing K230 machine and does not
depend on unmerged RMU, Timer, SPI, or SDHCI device series.
Testing:
- QTEST_QEMU_BINARY=/workspace/qemu/build/qemu-system-riscv64
/workspace/qemu/build/tests/qtest/k230-cmu-test
(10/10 subtests passed)
- QTEST_QEMU_BINARY=/workspace/qemu/build/qemu-system-riscv64
/workspace/qemu/build/tests/qtest/k230-wdt-test
(7/7 subtests passed)
- K230 direct Linux boot and K230 U-Boot boot
- Linux K230 clock probe and clk_summary validation
- CMU source/destination migration smoke
Signed-off-by: Simon Law <[email protected]>
---
Simon Law (4):
hw/misc: model K230 CMU registers
hw/riscv: connect the K230 CMU
tests/qtest: add K230 CMU coverage
docs/system/riscv: document K230 CMU support
MAINTAINERS | 4 +
docs/system/riscv/k230.rst | 22 ++
hw/misc/Kconfig | 3 +
hw/misc/k230_cmu.c | 881 ++++++++++++++++++++++++++++++++++++++++++++
hw/misc/meson.build | 1 +
hw/misc/trace-events | 9 +
hw/riscv/Kconfig | 1 +
hw/riscv/k230.c | 14 +-
include/hw/misc/k230_cmu.h | 58 +++
include/hw/riscv/k230.h | 2 +
tests/qtest/k230-cmu-test.c | 310 ++++++++++++++++
tests/qtest/meson.build | 3 +-
12 files changed, 1302 insertions(+), 6 deletions(-)
---
base-commit: f893c46c3931b3684d235d221bf8b7844ddbf1d7
change-id: 20260809-feat-k230-cmu-9b62e6dd23f3
Best regards,
--
Simon Law <[email protected]>