Message ID | 20200629053450.12392-1-rui.zhang@intel.com (mailing list archive) |
---|---|
State | Mainlined, archived |
Headers | show |
Series | powercap/intel_rapl: add support for Sapphire Rapids | expand |
On Mon, Jun 29, 2020 at 8:57 PM Zhang Rui <rui.zhang@intel.com> wrote: > > RAPL on SPR behaves similar to HSW server, except that SPR uses a fixed > energy unit (1 Joule) for the PSYS RAPL domain. > > Signed-off-by: Zhang Rui <rui.zhang@intel.com> > --- > drivers/powercap/intel_rapl_common.c | 23 ++++++++++++++++++++++- > 1 file changed, 22 insertions(+), 1 deletion(-) > > diff --git a/drivers/powercap/intel_rapl_common.c b/drivers/powercap/intel_rapl_common.c > index 61a63a16b5e7..b739ce4f390d 100644 > --- a/drivers/powercap/intel_rapl_common.c > +++ b/drivers/powercap/intel_rapl_common.c > @@ -93,6 +93,7 @@ struct rapl_defaults { > u64 (*compute_time_window)(struct rapl_package *rp, u64 val, > bool to_raw); > unsigned int dram_domain_energy_unit; > + unsigned int psys_domain_energy_unit; > }; > static struct rapl_defaults *rapl_defaults; > > @@ -533,12 +534,23 @@ static void rapl_init_domains(struct rapl_package *rp) > for (j = 0; j < RAPL_DOMAIN_REG_MAX; j++) > rd->regs[j] = rp->priv->regs[i][j]; > > - if (i == RAPL_DOMAIN_DRAM) { > + switch (i) { > + case RAPL_DOMAIN_DRAM: > rd->domain_energy_unit = > rapl_defaults->dram_domain_energy_unit; > if (rd->domain_energy_unit) > pr_info("DRAM domain energy unit %dpj\n", > rd->domain_energy_unit); > + break; > + case RAPL_DOMAIN_PLATFORM: > + rd->domain_energy_unit = > + rapl_defaults->psys_domain_energy_unit; > + if (rd->domain_energy_unit) > + pr_info("Platform domain energy unit %dpj\n", > + rd->domain_energy_unit); > + break; > + default: > + break; > } > rd++; > } > @@ -919,6 +931,14 @@ static const struct rapl_defaults rapl_defaults_hsw_server = { > .dram_domain_energy_unit = 15300, > }; > > +static const struct rapl_defaults rapl_defaults_spr_server = { > + .check_unit = rapl_check_unit_core, > + .set_floor_freq = set_floor_freq_default, > + .compute_time_window = rapl_compute_time_window_core, > + .dram_domain_energy_unit = 15300, > + .psys_domain_energy_unit = 1000000000, > +}; > + > static const struct rapl_defaults rapl_defaults_byt = { > .floor_freq_reg_addr = IOSF_CPU_POWER_BUDGET_CTL_BYT, > .check_unit = rapl_check_unit_atom, > @@ -978,6 +998,7 @@ static const struct x86_cpu_id rapl_ids[] __initconst = { > X86_MATCH_INTEL_FAM6_MODEL(COMETLAKE_L, &rapl_defaults_core), > X86_MATCH_INTEL_FAM6_MODEL(COMETLAKE, &rapl_defaults_core), > X86_MATCH_INTEL_FAM6_MODEL(TIGERLAKE_L, &rapl_defaults_core), > + X86_MATCH_INTEL_FAM6_MODEL(SAPPHIRERAPIDS_X, &rapl_defaults_spr_server), > > X86_MATCH_INTEL_FAM6_MODEL(ATOM_SILVERMONT, &rapl_defaults_byt), > X86_MATCH_INTEL_FAM6_MODEL(ATOM_AIRMONT, &rapl_defaults_cht), > -- Applied as 5.9 material, thanks!
diff --git a/drivers/powercap/intel_rapl_common.c b/drivers/powercap/intel_rapl_common.c index 61a63a16b5e7..b739ce4f390d 100644 --- a/drivers/powercap/intel_rapl_common.c +++ b/drivers/powercap/intel_rapl_common.c @@ -93,6 +93,7 @@ struct rapl_defaults { u64 (*compute_time_window)(struct rapl_package *rp, u64 val, bool to_raw); unsigned int dram_domain_energy_unit; + unsigned int psys_domain_energy_unit; }; static struct rapl_defaults *rapl_defaults; @@ -533,12 +534,23 @@ static void rapl_init_domains(struct rapl_package *rp) for (j = 0; j < RAPL_DOMAIN_REG_MAX; j++) rd->regs[j] = rp->priv->regs[i][j]; - if (i == RAPL_DOMAIN_DRAM) { + switch (i) { + case RAPL_DOMAIN_DRAM: rd->domain_energy_unit = rapl_defaults->dram_domain_energy_unit; if (rd->domain_energy_unit) pr_info("DRAM domain energy unit %dpj\n", rd->domain_energy_unit); + break; + case RAPL_DOMAIN_PLATFORM: + rd->domain_energy_unit = + rapl_defaults->psys_domain_energy_unit; + if (rd->domain_energy_unit) + pr_info("Platform domain energy unit %dpj\n", + rd->domain_energy_unit); + break; + default: + break; } rd++; } @@ -919,6 +931,14 @@ static const struct rapl_defaults rapl_defaults_hsw_server = { .dram_domain_energy_unit = 15300, }; +static const struct rapl_defaults rapl_defaults_spr_server = { + .check_unit = rapl_check_unit_core, + .set_floor_freq = set_floor_freq_default, + .compute_time_window = rapl_compute_time_window_core, + .dram_domain_energy_unit = 15300, + .psys_domain_energy_unit = 1000000000, +}; + static const struct rapl_defaults rapl_defaults_byt = { .floor_freq_reg_addr = IOSF_CPU_POWER_BUDGET_CTL_BYT, .check_unit = rapl_check_unit_atom, @@ -978,6 +998,7 @@ static const struct x86_cpu_id rapl_ids[] __initconst = { X86_MATCH_INTEL_FAM6_MODEL(COMETLAKE_L, &rapl_defaults_core), X86_MATCH_INTEL_FAM6_MODEL(COMETLAKE, &rapl_defaults_core), X86_MATCH_INTEL_FAM6_MODEL(TIGERLAKE_L, &rapl_defaults_core), + X86_MATCH_INTEL_FAM6_MODEL(SAPPHIRERAPIDS_X, &rapl_defaults_spr_server), X86_MATCH_INTEL_FAM6_MODEL(ATOM_SILVERMONT, &rapl_defaults_byt), X86_MATCH_INTEL_FAM6_MODEL(ATOM_AIRMONT, &rapl_defaults_cht),
RAPL on SPR behaves similar to HSW server, except that SPR uses a fixed energy unit (1 Joule) for the PSYS RAPL domain. Signed-off-by: Zhang Rui <rui.zhang@intel.com> --- drivers/powercap/intel_rapl_common.c | 23 ++++++++++++++++++++++- 1 file changed, 22 insertions(+), 1 deletion(-)