RK3588 Linked Clock Gate support
RK3588 has a few NIU clock gates, which are normal clock gates, but in addition to the enable bit in the register also require another clock to be enabled for passing through the parent clock.
In the vendor kernel tree is is being implemented by each of those clocks being described in their own DT node. Then runtime PM is used to enable the additionally required clocks when a clock is ungated. This is not acceptable upstream, since there should only be a single clock controller node.
In the upstream kernel, I implemented a hack (that has already been discussed for RK356x): All of the extra clocks are marked critical and thus are never disabled. This obviously wastes power, but was the quickest option to get the platform supported upstream.
Elaine Zhang send a proper implementation, which handles this with a custom clock type, which extends the clock gate driver. Stephen Boyd suggested to use the clock PM code and there were some misunderstandings, so I send a v7 for her series hoping that code is easier to understand than text:
https://lore.kernel.org/all/20231213185114.47565-1-sebastian.reichel@collabora.com/