Hi Jacob,

> -----Original Message-----
> From: Jacob Pan [mailto:jacob.jun....@linux.intel.com]
> Sent: Monday, April 28, 2014 7:35 PM
> To: Linux PM; Wysocki, Rafael J; LKML
> Cc: David E. Box; Alan Cox; R, Durgadoss; Accardi, Kristen C; Jacob Pan
> Subject: [PATCH 5/5] powercap/rapl: change floor frequency for vallewview
> 
> RAPL power limit reduce power by limiting CPU P-state and
> other techniques. On Valleyview, RAPL power limit cannot
> go to LFM (low frequency mode) if we don't set the floor
> frequency via IOSF mailbox.
> 
> This patch enables setting of floor frquency such that
> RAPL power limit is more effective.
> 
> Signed-off-by: Jacob Pan <jacob.jun....@linux.intel.com>
> ---
>  drivers/powercap/intel_rapl.c | 27 +++++++++++++++++++--------
>  1 file changed, 19 insertions(+), 8 deletions(-)
> 
> diff --git a/drivers/powercap/intel_rapl.c b/drivers/powercap/intel_rapl.c
> index b1cda6f..13e4776 100644
> --- a/drivers/powercap/intel_rapl.c
> +++ b/drivers/powercap/intel_rapl.c
> @@ -32,6 +32,7 @@
> 
>  #include <asm/processor.h>
>  #include <asm/cpu_device_id.h>
> +#include <asm/iosf_mbi.h>
> 
>  /* bitmasks for RAPL MSRs, used by primitive access functions */
>  #define ENERGY_STATUS_MASK      0xffffffff
> @@ -336,11 +337,17 @@ static int find_nr_power_limit(struct rapl_domain *rd)
>       return i;
>  }
> 
> +#define VLV_CPU_POWER_BUDGET_CTL (0x2)
> +static const struct x86_cpu_id valleyview_id[] = {
> +     { X86_VENDOR_INTEL, 6, 0x37},
> +     {}
> +};

There are other platforms that have this FloorFreq register as well.
And those addresses are not '0x02'. So, we need to have a cpu_id based
table to define the address of the floor freq register as well.
[This is not specific to valleyview.]

Also, is there a plan to expose this floor freq ratio through Sysfs for
runtime configuration. ? May be through a standard thermal cooling device
interface ?

> +
>  static int set_domain_enable(struct powercap_zone *power_zone, bool mode)
>  {
>       struct rapl_domain *rd = power_zone_to_rapl_domain(power_zone);
>       int nr_powerlimit;
> -
> +     u32 mdata = 0;
>       if (rd->state & DOMAIN_STATE_BIOS_LOCKED)
>               return -EACCES;
>       get_online_cpus();
> @@ -350,7 +357,16 @@ static int set_domain_enable(struct powercap_zone
> *power_zone, bool mode)
>       /* always enable clamp such that p-state can go below OS requested
>        * range. power capping priority over guranteed frequency.
>        */
> -     rapl_write_data_raw(rd, PL1_CLAMP, mode);
> +     if (x86_match_cpu(valleyview_id)) {
> +             iosf_mbi_read(BT_MBI_UNIT_PMC, BT_MBI_PMC_READ,
> +                     VLV_CPU_POWER_BUDGET_CTL, &mdata);
> +             mdata &= ~(0x7f << 8);
> +             mdata |= 1 << 8;
> +             iosf_mbi_write(BT_MBI_UNIT_PMC, BT_MBI_PMC_WRITE,
> +                     VLV_CPU_POWER_BUDGET_CTL, mdata);
> +     } else
> +             rapl_write_data_raw(rd, PL1_CLAMP, mode);
> +
>       /* some domains have pl2 */
>       if (nr_powerlimit > 1) {
>               rapl_write_data_raw(rd, PL2_ENABLE, mode);
> @@ -833,11 +849,6 @@ static int rapl_write_data_raw(struct rapl_domain *rd,
>       return 0;
>  }
> 
> -static const struct x86_cpu_id energy_unit_quirk_ids[] = {
> -     { X86_VENDOR_INTEL, 6, 0x37},/* Valleyview */
> -     {}
> -};

Same thing here. There are other Atom platforms that need this
conversion quirk. So, please keep the table as is.

Thanks,
Durga

> -
>  static int rapl_check_unit(struct rapl_package *rp, int cpu)
>  {
>       u64 msr_val;
> @@ -859,7 +870,7 @@ static int rapl_check_unit(struct rapl_package *rp, int 
> cpu)
>        */
>       value = (msr_val & ENERGY_UNIT_MASK) >> ENERGY_UNIT_OFFSET;
>       /* some CPUs have different way to calculate energy unit */
> -     if (x86_match_cpu(energy_unit_quirk_ids))
> +     if (x86_match_cpu(valleyview_id))
>               rp->energy_unit_divisor = 1000000 / (1 << value);
>       else
>               rp->energy_unit_divisor = 1 << value;
> --
> 1.8.1.2

--
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Please read the FAQ at  http://www.tux.org/lkml/

Reply via email to