diff mbox series

[PULL,17/31] qdev-monitor: print the device's clock with info qtree

Message ID 20200430115142.13430-18-peter.maydell@linaro.org
State Accepted
Commit 9f2ff99c7f2392fe30e9e74d3e26a4c01820f53e
Headers show
Series target-arm queue | expand

Commit Message

Peter Maydell April 30, 2020, 11:51 a.m. UTC
From: Damien Hedde <damien.hedde@greensocs.com>


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.hedde@greensocs.com>

Reviewed-by: Philippe Mathieu-Daudé <philmd@redhat.com>

Reviewed-by: Peter Maydell <peter.maydell@linaro.org>

Reviewed-by: Alistair Francis <alistair.francis@wdc.com>

Reviewed-by: Edgar E. Iglesias <edgar.iglesias@xilinx.com>

Message-id: 20200406135251.157596-10-damien.hedde@greensocs.com
Signed-off-by: Peter Maydell <peter.maydell@linaro.org>

---
 qdev-monitor.c | 9 +++++++++
 1 file changed, 9 insertions(+)

-- 
2.20.1
diff mbox series

Patch

diff --git a/qdev-monitor.c b/qdev-monitor.c
index 9833b335496..56cee1483fa 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
@@ -737,6 +738,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 : "");
@@ -751,6 +753,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);