On Wed, May 28, 2025 at 07:16:47PM -0400, Brian Masney wrote:
> Document all of the members of struct clk_core.
>
> Signed-off-by: Brian Masney <bmasney@redhat.com>
> ---
> drivers/clk/clk.c | 42 ++++++++++++++++++++++++++++++++++++++++++
> 1 file changed, 42 insertions(+)
>
> diff --git a/drivers/clk/clk.c b/drivers/clk/clk.c
> index 0565c87656cf5c557d8259c71b5d2971a7ac87e8..a130eac9072dc7e71f840a0edf51c368650f8386 100644
> --- a/drivers/clk/clk.c
> +++ b/drivers/clk/clk.c
> @@ -57,6 +57,48 @@ struct clk_parent_map {
> int index;
> };
>
> +/**
> + * struct clk_core - This structure represents the internal state of a clk
> + * within the kernel's clock tree. Drivers do not interact with this structure
> + * directly. The clk_core is manipulated by the framework to manage clock
> + * operations, parent/child relationships, rate, and other properties.
> + *
> + * @name: Unique name of the clk for identification.
> + * @ops: Pointer to hardware-specific operations for this clk.
> + * @hw: Pointer for traversing from a struct clk to its
> + * corresponding hardware-specific structure.
> + * @owner: Kernel module owning this clk (for reference counting).
> + * @dev: Device associated with this clk (optional)
> + * @rpm_node: Node for runtime power management list management.
> + * @of_node: Device tree node associated with this clk (if applicable)
> + * @parent: Pointer to the current parent in the clock tree.
> + * @parents: Array of possible parents (for muxes/selectable parents).
> + * @num_parents: Number of possible parents
> + * @new_parent_index: Index of the new parent during parent change.
> + * @rate: Current clock rate (Hz).
I think we should define what current means here. clk_core->rate is
effectively a cached value of what the hardware has been programmed with.
It's initialized by reading the value at boot time, and will be updated
every time an operation affecting the rate will be performed.
Clocks the CLK_GET_RATE_NOCACHE flag however should not use this value,
as its rate is expected to change behind the kernel's back (because the
firmware might change it, for example).
Also, if the clock is orphan, it's set to 0 and updated when (and if)
its parent is later loaded, so its content is only ever valid if
clk_core->orphan is false.
> + * @req_rate: Requested clock rate (Hz).
and clk_core->req_rate is the last rate requested by a call to
clk_set_rate. It's initialized to clk_core->rate. It's also updated to
clk_core->rate every time the clock is reparented, and when we're doing
the orphan -> !orphan transition.
> + * @new_rate: New rate to be set during a rate change operation.
> + * @new_parent: Pointer to new parent during parent change.
> + * @new_child: Pointer to new child during reparenting.
> + * @flags: Clock property and capability flags.
> + * @orphan: True if this clk is currently orphaned.
> + * @rpm_enabled: True if runtime power management is enabled for this clk.
> + * @enable_count: Reference count of enables.
> + * @prepare_count: Reference count of prepares.
> + * @protect_count: Protection reference count against disable.
> + * @min_rate: Minimum supported clock rate (Hz).
> + * @max_rate: Maximum supported clock rate (Hz).
> + * @accuracy: Accuracy of the clock rate (Hz).
The unit is parts per billion
> + * @phase: Current phase (degrees or hardware-specific units).
It's degrees, not hardware specific units.
Maxime