• Pierre Gondois's avatar
    cpufreq: CPPC: Add per_cpu efficiency_class · d3c3db41
    Pierre Gondois authored
    In ACPI, describing power efficiency of CPUs can be done through the
    following arm specific field:
    ACPI 6.4, s5.2.12.14 'GIC CPU Interface (GICC) Structure',
    'Processor Power Efficiency Class field':
      Describes the relative power efficiency of the associated pro-
      cessor. Lower efficiency class numbers are more efficient than
      higher ones (e.g. efficiency class 0 should be treated as more
      efficient than efficiency class 1). However, absolute values
      of this number have no meaning: 2 isn’t necessarily half as
      efficient as 1.
    
    The efficiency_class field is stored in the GicC structure of the
    ACPI MADT table and it's currently supported in Linux for arm64 only.
    Thus, this new functionality is introduced for arm64 only.
    
    To allow the cppc_cpufreq driver to know and preprocess the
    efficiency_class values of all the CPUs, add a per_cpu efficiency_class
    variable to store them.
    
    At least 2 different efficiency classes must be present,
    otherwise there is no use in creating an Energy Model.
    
    The efficiency_class values are squeezed in [0:#efficiency_class-1]
    while conserving the order. For instance, efficiency classes of:
      [111, 212, 250]
    will be mapped to:
      [0 (was 111), 1 (was 212), 2 (was 250)].
    
    Each policy being independently registered in the driver, populating
    the per_cpu efficiency_class is done only once at the driver
    initialization. This prevents from having each policy re-searching the
    efficiency_class values of other CPUs. The EM will be registered in a
    following patch.
    
    The patch also exports acpi_cpu_get_madt_gicc() to fetch the GicC
    structure of the ACPI MADT table for each CPU.
    Acked-by: default avatarCatalin Marinas <catalin.marinas@arm.com>
    Signed-off-by: default avatarPierre Gondois <Pierre.Gondois@arm.com>
    Acked-by: default avatarViresh Kumar <viresh.kumar@linaro.org>
    Signed-off-by: default avatarRafael J. Wysocki <rafael.j.wysocki@intel.com>
    d3c3db41
smp.c 24.6 KB