On Wed, Dec 04, 2019 at 02:47:03PM +0530, Viresh Kumar wrote: > On 04-12-19, 10:45, Mikko Perttunen wrote: > > Now, my original patchset (which this series is based on) did add > > nvidia,bpmp properties on the CPU DT nodes itself and query BPMP based on > > that. A change is still required for that since tegra_bpmp_get() currently > > takes a 'struct device *' which we don't have for a CPU DT node. > > I may be missing the context, but the CPUs always have a struct device > * for them, which we get via a call to get_cpu_device(cpu), isn't ? Yeah, the code that registers this device is in drivers/base/cpu.c in register_cpu(). It even retrieves the device tree node for the CPU from device tree and stores it in cpu->dev.of_node, so we should be able to just pass &cpu->dev to tegra_bpmp_get() in order to retrieve a reference to the BPMP. That said, I'm wondering if perhaps we could just add a compatible string to the /cpus node for cases like this where we don't have an actual device representing the CPU complex. There are a number of CPU frequency drivers that register dummy devices just so that they have something to bind a driver to. If we allow the /cpus node to represent the CPU complex (if no other "device" does that yet), we can add a compatible string and have the cpufreq driver match on that. Of course this would be slightly difficult to retrofit into existing drivers because they'd need to remain backwards compatible with existing device trees. But it would allow future drivers to do this a little more elegantly. For some SoCs this may not matter, but especially once you start depending on additional resources this would come in handy. Adding Rob and the device tree mailing list for feedback on this idea. Thierry