diff options
-rw-r--r-- | docs/devel/clocks.rst | 16 | ||||
-rw-r--r-- | include/hw/clock.h | 15 |
2 files changed, 31 insertions, 0 deletions
diff --git a/docs/devel/clocks.rst b/docs/devel/clocks.rst index 2548d84232..c54bbb8240 100644 --- a/docs/devel/clocks.rst +++ b/docs/devel/clocks.rst @@ -235,6 +235,22 @@ object during device instance init. For example: /* set initial value to 10ns / 100MHz */ clock_set_ns(clk, 10); +To enforce that the clock is wired up by the board code, you can +call ``clock_has_source()`` in your device's realize method: + +.. code-block:: c + + if (!clock_has_source(s->clk)) { + error_setg(errp, "MyDevice: clk input must be connected"); + return; + } + +Note that this only checks that the clock has been wired up; it is +still possible that the output clock connected to it is disabled +or has not yet been configured, in which case the period will be +zero. You should use the clock callback to find out when the clock +period changes. + Fetching clock frequency/period ------------------------------- diff --git a/include/hw/clock.h b/include/hw/clock.h index 6382f34656..e5f45e2626 100644 --- a/include/hw/clock.h +++ b/include/hw/clock.h @@ -140,6 +140,21 @@ void clock_clear_callback(Clock *clk); void clock_set_source(Clock *clk, Clock *src); /** + * clock_has_source: + * @clk: the clock + * + * Returns true if the clock has a source clock connected to it. + * This is useful for devices which have input clocks which must + * be connected by the board/SoC code which creates them. The + * device code can use this to check in its realize method that + * the clock has been connected. + */ +static inline bool clock_has_source(const Clock *clk) +{ + return clk->source != NULL; +} + +/** * clock_set: * @clk: the clock to initialize. * @value: the clock's value, 0 means unclocked |