On Tue, Feb 25, 2020 at 5:52 AM Damien Hedde <damien.he...@greensocs.com> wrote: > > This prints the clocks attached to a DeviceState when using > "info qtree" monitor command. For every clock, it displays the > direction, the name and if the clock is forwarded. For input clock, > it displays also the frequency. > > This is based on the original work of Frederic Konrad. > > Here follows a sample of `info qtree` output on xilinx_zynq machine > after linux boot with only one uart clocked: > > bus: main-system-bus > > type System > > [...] > > dev: cadence_uart, id "" > > gpio-out "sysbus-irq" 1 > > clock-in "refclk" freq_hz=0.000000e+00 > > chardev = "" > > mmio 00000000e0001000/0000000000001000 > > dev: cadence_uart, id "" > > gpio-out "sysbus-irq" 1 > > clock-in "refclk" freq_hz=1.375661e+07 > > chardev = "serial0" > > mmio 00000000e0000000/0000000000001000 > > [...] > > dev: xilinx,zynq_slcr, id "" > > clock-out "uart1_ref_clk" freq_hz=0.000000e+00 > > clock-out "uart0_ref_clk" freq_hz=1.375661e+07 > > clock-in "ps_clk" freq_hz=3.333333e+07 > > mmio 00000000f8000000/0000000000001000 > > Signed-off-by: Damien Hedde <damien.he...@greensocs.com> > Reviewed-by: Philippe Mathieu-Daudé <phi...@redhat.com> > Reviewed-by: Peter Maydell <peter.mayd...@linaro.org>
Reviewed-by: Alistair Francis <alistair.fran...@wdc.com> Alistair > --- > > v7: > + print output clocks frequencies too > + add sample of qtree message above > + display frequencies in floating-point > --- > qdev-monitor.c | 9 +++++++++ > 1 file changed, 9 insertions(+) > > diff --git a/qdev-monitor.c b/qdev-monitor.c > index 8ce71a206b..1d84b4e416 100644 > --- a/qdev-monitor.c > +++ b/qdev-monitor.c > @@ -38,6 +38,7 @@ > #include "migration/misc.h" > #include "migration/migration.h" > #include "qemu/cutils.h" > +#include "hw/clock.h" > > /* > * Aliases were a bad idea from the start. Let's keep them > @@ -736,6 +737,7 @@ static void qdev_print(Monitor *mon, DeviceState *dev, > int indent) > ObjectClass *class; > BusState *child; > NamedGPIOList *ngl; > + NamedClockList *ncl; > > qdev_printf("dev: %s, id \"%s\"\n", object_get_typename(OBJECT(dev)), > dev->id ? dev->id : ""); > @@ -750,6 +752,13 @@ static void qdev_print(Monitor *mon, DeviceState *dev, > int indent) > ngl->num_out); > } > } > + QLIST_FOREACH(ncl, &dev->clocks, node) { > + qdev_printf("clock-%s%s \"%s\" freq_hz=%e\n", > + ncl->output ? "out" : "in", > + ncl->alias ? " (alias)" : "", > + ncl->name, > + CLOCK_PERIOD_TO_HZ(1.0 * clock_get(ncl->clock))); > + } > class = object_get_class(OBJECT(dev)); > do { > qdev_print_props(mon, dev, DEVICE_CLASS(class)->props_, indent); > -- > 2.25.1 > >