• Lukasz Luba's avatar
    PM: EM: convert power field to micro-Watts precision and align drivers · ae6ccaa6
    Lukasz Luba authored
    The milli-Watts precision causes rounding errors while calculating
    efficiency cost for each OPP. This is especially visible in the 'simple'
    Energy Model (EM), where the power for each OPP is provided from OPP
    framework. This can cause some OPPs to be marked inefficient, while
    using micro-Watts precision that might not happen.
    
    Update all EM users which access 'power' field and assume the value is
    in milli-Watts.
    
    Solve also an issue with potential overflow in calculation of energy
    estimation on 32bit machine. It's needed now since the power value
    (thus the 'cost' as well) are higher.
    
    Example calculation which shows the rounding error and impact:
    
    power = 'dyn-power-coeff' * volt_mV * volt_mV * freq_MHz
    
    power_a_uW = (100 * 600mW * 600mW * 500MHz) / 10^6 = 18000
    power_a_mW = (100 * 600mW * 600mW * 500MHz) / 10^9 = 18
    
    power_b_uW = (100 * 605mW * 605mW * 600MHz) / 10^6 = 21961
    power_b_mW = (100 * 605mW * 605mW * 600MHz) / 10^9 = 21
    
    max_freq = 2000MHz
    
    cost_a_mW = 18 * 2000MHz/500MHz = 72
    cost_a_uW = 18000 * 2000MHz/500MHz = 72000
    
    cost_b_mW = 21 * 2000MHz/600MHz = 70 // <- artificially better
    cost_b_uW = 21961 * 2000MHz/600MHz = 73203
    
    The 'cost_b_mW' (which is based on old milli-Watts) is misleadingly
    better that the 'cost_b_uW' (this patch uses micro-Watts) and such
    would have impact on the 'inefficient OPPs' information in the Cpufreq
    framework. This patch set removes the rounding issue.
    Signed-off-by: default avatarLukasz Luba <lukasz.luba@arm.com>
    Acked-by: default avatarDaniel Lezcano <daniel.lezcano@linaro.org>
    Acked-by: default avatarViresh Kumar <viresh.kumar@linaro.org>
    Signed-off-by: default avatarRafael J. Wysocki <rafael.j.wysocki@intel.com>
    ae6ccaa6
of.c 39.7 KB