clock: Add new clock_has_source() function

Add a function for checking whether a clock has a source.  This is
useful for devices which have input clocks that must be wired up by
the board as it allows them to fail in realize rather than ploughing
on with a zero-period clock.

Signed-off-by: Peter Maydell <peter.maydell@linaro.org>
Reviewed-by: Luc Michel <luc@lmichel.fr>
Reviewed-by: Philippe Mathieu-Daudé <f4bug@amsat.org>
Tested-by: Philippe Mathieu-Daudé <f4bug@amsat.org>
Message-id: 20210128114145.20536-3-peter.maydell@linaro.org
Message-id: 20210121190622.22000-3-peter.maydell@linaro.org
This commit is contained in:
Peter Maydell 2021-01-28 11:41:22 +00:00
parent ad140dadd5
commit 132b10251c
2 changed files with 31 additions and 0 deletions

View File

@ -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
-------------------------------

View File

@ -139,6 +139,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.