• Daniel Lezcano's avatar
    powercap/drivers/dtpm: Add API for dynamic thermal power management · a20d0ef9
    Daniel Lezcano authored
    On the embedded world, the complexity of the SoC leads to an
    increasing number of hotspots which need to be monitored and mitigated
    as a whole in order to prevent the temperature to go above the
    normative and legally stated 'skin temperature'.
    
    Another aspect is to sustain the performance for a given power budget,
    for example virtual reality where the user can feel dizziness if the
    GPU performance is capped while a big CPU is processing something
    else. Or reduce the battery charging because the dissipated power is
    too high compared with the power consumed by other devices.
    
    The userspace is the most adequate place to dynamically act on the
    different devices by limiting their power given an application
    profile: it has the knowledge of the platform.
    
    These userspace daemons are in charge of the Dynamic Thermal Power
    Management (DTPM).
    
    Nowadays, the dtpm daemons are abusing the thermal framework as they
    act on the cooling device state to force a specific and arbitrary
    state without taking care of the governor decisions. Given the closed
    loop of some governors that can confuse the logic or directly enter in
    a decision conflict.
    
    As the number of cooling device support is limited today to the CPU
    and the GPU, the dtpm daemons have little control on the power
    dissipation of the system. The out of tree solutions are hacking
    around here and there in the drivers, in the frameworks to have
    control on the devices. The common solution is to declare them as
    cooling devices.
    
    There is no unification of the power limitation unit, opaque states
    are used.
    
    This patch provides a way to create a hierarchy of constraints using
    the powercap framework. The devices which are registered as power
    limit-able devices are represented in this hierarchy as a tree. They
    are linked together with intermediate nodes which are just there to
    propagate the constraint to the children.
    
    The leaves of the tree are the real devices, the intermediate nodes
    are virtual, aggregating the children constraints and power
    characteristics.
    
    Each node have a weight on a 2^10 basis, in order to reflect the
    percentage of power distribution of the children's node. This
    percentage is used to dispatch the power limit to the children.
    
    The weight is computed against the max power of the siblings.
    
    This simple approach allows to do a fair distribution of the power
    limit.
    Signed-off-by: default avatarDaniel Lezcano <daniel.lezcano@linaro.org>
    Reviewed-by: default avatarLukasz Luba <lukasz.luba@arm.com>
    Tested-by: default avatarLukasz Luba <lukasz.luba@arm.com>
    Signed-off-by: default avatarRafael J. Wysocki <rafael.j.wysocki@intel.com>
    a20d0ef9
vmlinux.lds.h 32.2 KB