QEMU v11.1.0 added a virtio RTC device (virtio-rtc-pci and virtio-rtc-device), but U-Boot has no driver for it. This series adds one, so that "date" and anything else using dm_rtc_get() work on any virtio-capable QEMU target, not only on machines that also have a goldfish or PL031 RTC.
Patch 1 adds the driver, patch 2 updates the virtio documentation and patch 3 adds a MAINTAINERS entry. Patch 4 lets sandbox tests answer virtqueue requests as the device would, which patch 5 uses to test the driver. The main change in v3 is how the clock is chosen. Following Kuan-Wei's review, the driver now prefers a clock which smears leap seconds, as the Linux RTC class does, but falls back to the first other UTC clock, since QEMU only provides a VIRTIO_RTC_CLOCK_UTC clock. Patch 1 explains this in more detail. Tested on QEMU v11.1.2 with qemu-riscv64_smode_defconfig and RTC_GOLDFISH disabled, so that the virtio RTC is the only RTC: - With -device virtio-rtc-pci and with -device virtio-rtc-device, "date" reads the host time and advances between reads. - Setting the time fails with -ENOSYS, as the clocks are read-only. - With no virtio RTC device, "date" fails cleanly with err=-19. On sandbox, "ut dm virtio_rtc*" passes. Hung-Chun Tseng (5): virtio: rtc: Add virtio RTC driver doc: virtio: List the supported device types MAINTAINERS: Add entry for virtio RTC virtio: sandbox: Let tests emulate the device side of a virtqueue test: dm: Add tests for the virtio RTC driver MAINTAINERS | 6 + arch/sandbox/dts/test.dts | 5 + arch/sandbox/include/asm/test.h | 25 +++ doc/develop/driver-model/virtio.rst | 10 +- drivers/virtio/Kconfig | 11 + drivers/virtio/Makefile | 1 + drivers/virtio/virtio-uclass.c | 1 + drivers/virtio/virtio_rtc.c | 249 ++++++++++++++++++++++ drivers/virtio/virtio_sandbox.c | 15 ++ include/virtio.h | 4 +- test/dm/Makefile | 1 + test/dm/virtio_rtc.c | 306 ++++++++++++++++++++++++++++ 12 files changed, 632 insertions(+), 2 deletions(-) create mode 100644 drivers/virtio/virtio_rtc.c create mode 100644 test/dm/virtio_rtc.c base-commit: 32ebe922e574a733d01c3f106fa77d9176bfecad -- 2.43.0
