Re: [RFC PATCH 00/16] Centralize the ownership of power rail votes for Qualcomm clocks
From: Jerome Brunet
Date: Fri Oct 23 2026 - 06:40:39 EST
> On Qualcomm SoCs, both the PLLs and other types of clocks alike require
> specific voltage rail levels to operate in-spec, but through the
> separation and decentralization of clock and voltage votes, these
> requirements are often not met and are never explicitly stated.
> This results in clocks being undervolted, or at the very least a state
> we're unable to reason about.
>
> The devices consuming these clocks very rarely have their own
> requirements in that regard. (1)
>
> This series moves the frequency-power_domain-perf_state mappings inside
> the clock drivers, ensuring a single, trusted source of truth is
> established and that the silicon is no longer driven at out-of-spec
> conditions.
>
> To illustrate the nuances involved, here's a couple examples of hidden
> dependencies, as found on SM8650:
> * video_cc_mvs0_clk requires LOW_SVS to run at 900 MHz, but the
> PLL it sources the signal from requires SVS (higher corner) to
> produce that frequency. Similarly, to produce 1140 MHz, the clock
> requires SVS, but the PLL then requires SVS_L1.
> Analogous story for mvs1_clk.
> * gpu_cc_gmu_clk requires MX to be at SVS to output 625 MHz, the PLL
> requires SVS_L1 to produce that frequency.
> * A number of camera clocks follow the same pattern.
> * Additionally, some clocks like cam_cc_cci_{0,1,2}_clk require
> MMCX to run at LOW_SVS, but the PLL has the additional requirement
> of keeping MXC (a wholly different rail) at SVS_L1.
>
> There's a broad agreement that a consumer should only have to care
> about the clock it consumes, and that configuring its parents is the
> responsibility of the CCF. Requiring the consumers to care about the
> above cases (as is the expectation today) is a clear violation of
> that contract.
This is a fairly bold statement. Yes, the CCF's task is to make it as
easy as possible for a consumer to enable, disable and set the rate of
a clock, and I agree a consumer should not have to know what the
parents of its clock need.
That does not make the framework responsible for it. Taken that far,
the CCF would become a de facto platform coordinator, which it is not
meant to be. The clock driver knows what its clocks need; the framework
should give it the hooks to act at the right time, and stop there.
When coordination is needed across devices, there are dedicated
frameworks for it, like OPP and genpd.
--
Jerome