Am 21.04.2020 um 16:15 schrieb Tony Lindgren tony@atomide.com:
- Maxime Ripard maxime@cerno.tech [200421 11:22]:
On Tue, Apr 21, 2020 at 11:57:33AM +0200, Philipp Rossak wrote:
I had a look on genpd and I'm not really sure if that fits.
It is basically some bit that verify that the clocks should be enabled or disabled.
No, it can do much more than that. It's a framework to control the SoCs power domains, so clocks might be a part of it, but most of the time it's going to be about powering up a particular device.
Note that on omaps there are actually SoC module specific registers.
Ah, I see. This is of course a difference that the TI glue logic has its own registers in the same address range as the sgx and this can't be easily handled by a common sgx driver.
This indeed seems to be unique with omap.
And there can be multiple devices within a single target module on omaps. So the extra dts node and device is justified there.
For other SoCs, the SGX clocks are probably best handled directly in pvr-drv.c PM runtime functions unless a custom hardware wrapper with SoC specific registers exists.
That is why we need to evaluate what the better strategy is.
So we have a) omap which has a custom wrapper around the sgx b) others without, i.e. an empty (or pass-through) wrapper
Which one do we make the "standard" and which one the "exception"? What are good reasons for either one?
I am currently in strong favour of a) being standard because it makes the pvr-drv.c simpler and really generic (independent of wrapping into any SoC).
This will likely avoid problems if we find more SoC with yet another scheme how the SGX clocks are wrapped.
It also allows to handle different number of clocks (A31 seems to need 4, Samsung, A83 and JZ4780 one) without changing the sgx bindings or making big lists of conditionals. This variance would be handled outside the sgx core bindings and driver.
So instead of an img+omap.yaml and an img+a81.yaml and an img+a31.yaml etc. we have a single img,pvrsgx.yaml and individual wrappers (the omap one already exists as bindings/bus/ti-sysc.txt).
The only drawback is that we need this "pass-through" wrapper in DTS and driver code to handle clocks, power etc.
The second best solution in my view is to make b) the standard and allow the clock(s) to be optional to cover the omap case. And conditionals are added to properly describe the variance of how the sgx is wrapped/integrated.
IMHO this is a decision which can not be easily revised later. It is an architectural decision. So we should base it on strategic goals.
Regards,
Tony
BR and thanks for clarification, Nikolaus