On 11-01-19, 11:58, Matthias Kaehlcke wrote: > On Fri, Jan 11, 2019 at 09:16:53AM +0530, Viresh Kumar wrote: > Just to gain a better understanding: is cpuidle cooling already > available for arm64 (or is there a patch set)? I came across the > relatively new idle injecting framework but it seems currently the > only user is the Intel powerclamp driver. Daniel was trying to upstream it earlier: lore.kernel.org/lkml/1522945005-7165-7-git-send-email-daniel.lezcano@xxxxxxxxxx > > > even though only one will be active at any given > > > time. However I wonder if we could change this: > > > > I won't say it that way. I see it as all the CPUs are active during a > > cooling state, i.e. they are all participating. > > agreed, I was referring to the CPU cooling device, which (without > cpuidle injection) could be considered a single device per freq domain. Even without cpuidle injection all CPUs actually take part in cooling. > > > For device tree based platform the above implies that cooling maps > > > must include a list of all possible cooling devices of a frequency > > > domain, even though only one of them will exist at any given time. > > > > > > For example: > > > > > > cooling-maps { > > > map0 { > > > trip = <&cpu_alert0>; > > > cooling-device = <&CPU0 THERMAL_NO_LIMIT 4>, > > > <&CPU1 THERMAL_NO_LIMIT 4>, > > > <&CPU2 THERMAL_NO_LIMIT 4>, > > > <&CPU3 THERMAL_NO_LIMIT 4>; > > > }; > > > map1 { > > > trip = <&cpu_crit0>; > > > cooling-device = <&CPU0 THERMAL_NO_LIMIT THERMAL_NO_LIMIT>, > > > <&CPU1 THERMAL_NO_LIMIT THERMAL_NO_LIMIT>, > > > <&CPU2 THERMAL_NO_LIMIT THERMAL_NO_LIMIT>, > > > <&CPU3 THERMAL_NO_LIMIT THERMAL_NO_LIMIT>; > > > > This is the right thing to do hardware description wise, no matter > > what the kernel does. > > Not sure I would call it a hardware description. I'd say we pretend > the thermal configuration is a hardware description so the DT folks > don't yell at us ;-) IMO a CPU cooling device is an abstraction, I > think there is no such IP block on most systems. Right. > It seems with cpuidle injection CPUs can perform cooling actions > individually, with that I agree that representing them as individual > cooling devices in the DT makes sense. Without that a cooling device > per freq domain would seem a resonable abstraction. But we actually have 4 different cooling devices no matter what. The only thing is that they switch their cooling state together. And that shouldn't bother DT is what I thought :) > One of the reasons I dislike the above list of cooling devices is that > it is repeated for different thermal-zone/cooling-maps, but I guess > we have to live with that, would be nice if the DT would allow to do > something like this: > > thermal-zones { > cooling_maps_fd0 : cooling-maps { > map0 { > trip = <&cpu_alert0>; > cooling-device = <&CPU0 THERMAL_NO_LIMIT 4>, > <&CPU1 THERMAL_NO_LIMIT 4>, > <&CPU2 THERMAL_NO_LIMIT 4>, > <&CPU3 THERMAL_NO_LIMIT 4>; > }; > map1 { > trip = <&cpu_crit0>; > cooling-device = <&CPU0 THERMAL_NO_LIMIT THERMAL_NO_LIMIT>, > <&CPU1 THERMAL_NO_LIMIT THERMAL_NO_LIMIT>, > <&CPU2 THERMAL_NO_LIMIT THERMAL_NO_LIMIT>, > <&CPU3 THERMAL_NO_LIMIT THERMAL_NO_LIMIT>; > }; > > cpu0-thermal { > ... > cooling-maps = @cooling_maps_fd0; > ... > }; > > cpu1-thermal { > ... > cooling-maps = @cooling_maps_fd0; > ... > }; > > ... > }; Yeah, maybe. There aren't lot of examples of such duplication though if I remember correctly. -- viresh