Messages in this thread | | | From | "Rafael J. Wysocki" <> | Date | Mon, 27 Mar 2023 18:31:03 +0200 | Subject | Re: [PATCH v3 11/24] thermal: intel: hfi: Introduce Intel Thread Director classes |
| |
On Tue, Feb 7, 2023 at 6:02 AM Ricardo Neri <ricardo.neri-calderon@linux.intel.com> wrote: > > On Intel hybrid parts, each type of CPU has specific performance and > energy efficiency capabilities. The Intel Thread Director technology > extends the Hardware Feedback Interface (HFI) to provide performance and > energy efficiency data for advanced classes of instructions. > > Add support to parse per-class capabilities. > > Cc: Ben Segall <bsegall@google.com> > Cc: Daniel Bristot de Oliveira <bristot@redhat.com> > Cc: Dietmar Eggemann <dietmar.eggemann@arm.com> > Cc: Ionela Voinescu <ionela.voinescu@arm.com> > Cc: Joel Fernandes (Google) <joel@joelfernandes.org> > Cc: Len Brown <len.brown@intel.com> > Cc: Lukasz Luba <lukasz.luba@arm.com> > Cc: Mel Gorman <mgorman@suse.de> > Cc: Rafael J. Wysocki <rafael.j.wysocki@intel.com> > Cc: Srinivas Pandruvada <srinivas.pandruvada@linux.intel.com> > Cc: Steven Rostedt <rostedt@goodmis.org> > Cc: Tim C. Chen <tim.c.chen@intel.com> > Cc: Valentin Schneider <vschneid@redhat.com> > Cc: x86@kernel.org > Cc: linux-pm@vger.kernel.org > Cc: linux-kernel@vger.kernel.org > Signed-off-by: Ricardo Neri <ricardo.neri-calderon@linux.intel.com>
No objections to this patch, so
Acked-by: Rafael J. Wysocki <rafael.j.wysocki@intel.com>
> --- > Changes since v2: > * None > > Changes since v1: > * Removed a now obsolete comment. > --- > drivers/thermal/intel/intel_hfi.c | 30 ++++++++++++++++++++++++------ > 1 file changed, 24 insertions(+), 6 deletions(-) > > diff --git a/drivers/thermal/intel/intel_hfi.c b/drivers/thermal/intel/intel_hfi.c > index 6e604bda2b93..2527ae3836c7 100644 > --- a/drivers/thermal/intel/intel_hfi.c > +++ b/drivers/thermal/intel/intel_hfi.c > @@ -77,7 +77,7 @@ union cpuid6_edx { > * @ee_cap: Energy efficiency capability > * > * Capabilities of a logical processor in the HFI table. These capabilities are > - * unitless. > + * unitless and specific to each HFI class. > */ > struct hfi_cpu_data { > u8 perf_cap; > @@ -89,7 +89,8 @@ struct hfi_cpu_data { > * @perf_updated: Hardware updated performance capabilities > * @ee_updated: Hardware updated energy efficiency capabilities > * > - * Properties of the data in an HFI table. > + * Properties of the data in an HFI table. There exists one header per each > + * HFI class. > */ > struct hfi_hdr { > u8 perf_updated; > @@ -127,16 +128,21 @@ struct hfi_instance { > > /** > * struct hfi_features - Supported HFI features > + * @nr_classes: Number of classes supported > * @nr_table_pages: Size of the HFI table in 4KB pages > * @cpu_stride: Stride size to locate the capability data of a logical > * processor within the table (i.e., row stride) > + * @class_stride: Stride size to locate a class within the capability > + * data of a logical processor or the HFI table header > * @hdr_size: Size of the table header > * > * Parameters and supported features that are common to all HFI instances > */ > struct hfi_features { > + unsigned int nr_classes; > size_t nr_table_pages; > unsigned int cpu_stride; > + unsigned int class_stride; > unsigned int hdr_size; > }; > > @@ -333,8 +339,8 @@ static void init_hfi_cpu_index(struct hfi_cpu_info *info) > } > > /* > - * The format of the HFI table depends on the number of capabilities that the > - * hardware supports. Keep a data structure to navigate the table. > + * The format of the HFI table depends on the number of capabilities and classes > + * that the hardware supports. Keep a data structure to navigate the table. > */ > static void init_hfi_instance(struct hfi_instance *hfi_instance) > { > @@ -515,18 +521,30 @@ static __init int hfi_parse_features(void) > /* The number of 4KB pages required by the table */ > hfi_features.nr_table_pages = edx.split.table_pages + 1; > > + /* > + * Capability fields of an HFI class are grouped together. Classes are > + * contiguous in memory. Hence, use the number of supported features to > + * locate a specific class. > + */ > + hfi_features.class_stride = nr_capabilities; > + > + /* For now, use only one class of the HFI table */ > + hfi_features.nr_classes = 1; > + > /* > * The header contains change indications for each supported feature. > * The size of the table header is rounded up to be a multiple of 8 > * bytes. > */ > - hfi_features.hdr_size = DIV_ROUND_UP(nr_capabilities, 8) * 8; > + hfi_features.hdr_size = DIV_ROUND_UP(nr_capabilities * > + hfi_features.nr_classes, 8) * 8; > > /* > * Data of each logical processor is also rounded up to be a multiple > * of 8 bytes. > */ > - hfi_features.cpu_stride = DIV_ROUND_UP(nr_capabilities, 8) * 8; > + hfi_features.cpu_stride = DIV_ROUND_UP(nr_capabilities * > + hfi_features.nr_classes, 8) * 8; > > return 0; > } > -- > 2.25.1 >
| |