Hi Damian, Luc, Peter. I've been debugging some odd issue with the clocks: a clock created in the machine (IOW, not a qdev clock) isn't always resetted, thus propagating its value. "not always" is the odd part. In the MPS2 board, the machine clock is propagated. Apparently because the peripherals are created directly in the machine_init() handler. When moving them out in a SoC QOM container, the clock isn't... I'm still having hard time to understand what is going on.
Alternatively I tried to strengthen the clock API by reducing the clock creation in 2 cases: machine/device. This way clocks aren't left dangling around alone. The qdev clocks are properly resetted, and for the machine clocks I register a generic reset handler. This way is safer, but I don't think we want to keep adding generic reset handlers, instead we'd like to remove them. I'll keep debugging to understand. Meanwhile posting this series as RFC to get feedback on the approach and start discussing on this issue. Regards, Phil. Philippe Mathieu-Daudé (9): hw/core/clock: Increase clock propagation trace events verbosity hw/core/machine: Add machine_create_constant_clock() helper hw/arm: Use new machine_create_constant_clock() helper hw/mips: Use new machine_create_constant_clock() helper hw/core/qdev-clock: Add qdev_ground_clock() helper hw/misc/bcm2835_cprman: Use qdev_ground_clock() helper hw/misc/bcm2835_cprman: Feed 'xosc' from the board hw/clock: Declare clock_new() internally hw/core/machine: Reset machine clocks using qemu_register_reset() hw/core/clock-internal.h | 32 ++++++++++++++++++++++++++++++++ include/hw/boards.h | 17 +++++++++++++++++ include/hw/clock.h | 13 ------------- include/hw/misc/bcm2835_cprman.h | 2 -- include/hw/qdev-clock.h | 9 +++++++++ hw/arm/bcm2835_peripherals.c | 1 + hw/arm/bcm2836.c | 1 + hw/arm/mps2-tz.c | 6 ++---- hw/arm/mps2.c | 3 +-- hw/arm/musca.c | 6 ++---- hw/arm/raspi.c | 4 ++++ hw/core/clock.c | 9 ++++++++- hw/core/machine.c | 20 ++++++++++++++++++++ hw/core/qdev-clock.c | 12 ++++++++++++ hw/mips/fuloong2e.c | 4 ++-- hw/mips/jazz.c | 6 +++--- hw/mips/loongson3_virt.c | 4 ++-- hw/mips/mipssim.c | 7 ++++--- hw/misc/bcm2835_cprman.c | 12 +++--------- MAINTAINERS | 1 + hw/core/trace-events | 3 ++- 21 files changed, 126 insertions(+), 46 deletions(-) create mode 100644 hw/core/clock-internal.h -- 2.26.3