• Eduardo Valentin's avatar
    thermal: introduce clock cooling device · f9df89d8
    Eduardo Valentin authored
    This patch introduces a new thermal cooling device based on common clock
    framework. The original motivation to write this cooling device is to be
    able to cool down thermal zones using clocks that feed co-processors, such
    as GPUs, DSPs, Image Processing Co-processors, etc. But it is written
    in a way that it can be used on top of any clock.
    
    The implementation is pretty straight forward. The code creates
    a thermal cooling device based on a pair of a struct device and a clock name.
    The struct device is assumed to be usable by the OPP layer. The OPP layer
    is used as source of the list of possible frequencies. The (cpufreq) frequency
    table is then used as a map from frequencies to cooling states. Cooling
    states are indexes to the frequency table.
    
    The logic sits on top of common clock framework, specifically on clock
    pre notifications. Any PRE_RATE_CHANGE is hijacked, and the transition is
    only allowed when the new rate is within the thermal limit (cooling state -> freq).
    
    When a thermal cooling device state transition is requested, the clock
    is also checked to verify if the current clock rate is within the new
    thermal limit.
    
    Cc: Zhang Rui <rui.zhang@intel.com>
    Cc: Mike Turquette <mturquette@linaro.org>
    Cc: Nishanth Menon <nm@ti.com>
    Cc: Pavel Machek <pavel@ucw.cz>
    Cc: "Rafael J. Wysocki" <rjw@sisk.pl>
    Cc: Len Brown <len.brown@intel.com>
    Cc: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
    Cc: linux-pm@vger.kernel.org
    Cc: linux-arm-kernel@lists.infradead.org
    Cc: linux-kernel@vger.kernel.org
    Signed-off-by: default avatarEduardo Valentin <eduardo.valentin@ti.com>
    Signed-off-by: default avatarEduardo Valentin <edubezval@gmail.com>
    f9df89d8
clock_cooling.c 14.1 KB