On 31/03/2021 18:33, Lukasz Luba wrote: > When the temperature is below the first activation trip point the cooling > devices are not checked, so they cannot maintain fresh statistics. It > leads into the situation, when temperature crosses first trip point, the > statistics are stale and show state for very long period.
Can you elaborate the statistics you are referring to ? I can understand the pid controller needs temperature but I don't understand the statistics with the cooling device. > This has impact > on IPA algorithm calculation and wrong decisions. Thus, check the cooling > devices even when the temperature is low, to refresh these statistics. > > Signed-off-by: Lukasz Luba <lukasz.l...@arm.com> > --- > drivers/thermal/gov_power_allocator.c | 12 ++++++++++++ > 1 file changed, 12 insertions(+) > > diff --git a/drivers/thermal/gov_power_allocator.c > b/drivers/thermal/gov_power_allocator.c > index 2802a0e13c88..0cbd10cab193 100644 > --- a/drivers/thermal/gov_power_allocator.c > +++ b/drivers/thermal/gov_power_allocator.c > @@ -575,15 +575,27 @@ static void allow_maximum_power(struct > thermal_zone_device *tz) > { > struct thermal_instance *instance; > struct power_allocator_params *params = tz->governor_data; > + u32 req_power; > > mutex_lock(&tz->lock); > list_for_each_entry(instance, &tz->thermal_instances, tz_node) { > + struct thermal_cooling_device *cdev = instance->cdev; > + > if ((instance->trip != params->trip_max_desired_temperature) || > (!cdev_is_power_actor(instance->cdev))) > continue; > > instance->target = 0; > mutex_lock(&instance->cdev->lock); > + /* > + * Call for updating the cooling devices local stats and avoid > + * periods of dozen of seconds when those have not been > + * maintained. The long period would come into the first check > + * when lower threshold is crossed. Thus, limit it to single > + * one longer polling period. > + */ > + cdev->ops->get_requested_power(cdev, &req_power); > + > instance->cdev->updated = false; > mutex_unlock(&instance->cdev->lock); > thermal_cdev_update(instance->cdev); > -- <http://www.linaro.org/> Linaro.org │ Open source software for ARM SoCs Follow Linaro: <http://www.facebook.com/pages/Linaro> Facebook | <http://twitter.com/#!/linaroorg> Twitter | <http://www.linaro.org/linaro-blog/> Blog