public inbox for linux-doc@vger.kernel.org
 help / color / mirror / Atom feed
From: srinivas pandruvada <srinivas.pandruvada@linux.intel.com>
To: Maciej Wieczor-Retman <m.wieczorretman@pm.me>,
	skhan@linuxfoundation.org, 	ilpo.jarvinen@linux.intel.com,
	hansg@kernel.org, corbet@lwn.net
Cc: linux-kernel@vger.kernel.org,
	platform-driver-x86@vger.kernel.org,  linux-doc@vger.kernel.org,
	Maciej Wieczor-Retman <maciej.wieczor-retman@intel.com>
Subject: Re: [PATCH v3 2/2] platform/x86/intel-uncore-freq: Expose instance ID in the sysfs
Date: Wed, 22 Apr 2026 09:17:19 -0700	[thread overview]
Message-ID: <b0f831a9f9c59563b16de702b4e4c37c2279b45c.camel@linux.intel.com> (raw)
In-Reply-To: <b9ae8d5f1ab86bcdb1a8636fa48865a9e49e2e21.1775665057.git.m.wieczorretman@pm.me>

On Wed, 2026-04-08 at 16:27 +0000, Maciej Wieczor-Retman wrote:
> From: Maciej Wieczor-Retman <maciej.wieczor-retman@intel.com>
> 
> Insufficient data is exported to allow direct access to TPMI
> registers
> through MMIO. On non-partitioned systems domain_id can be used both
> for
> mapping CPUs to their compute die IDs and for mapping die indices to
> their MMIO memory blocks presented to userspace via TPMI debugfs.
> However on partitioned systems the debugfs association doesn't work
> anymore. This is due to how TPMI partitioning influences domain_id
> calculation. The previous association is lost on partitioned systems
> in
> order to keep using domain_id for mapping CPUs to compute dies.
> 
> Expose the instance ID in sysfs that's unique in the scope of one
> TPMI
> partition (and hence one TPMI device). It's a physical index into
> mapped
> MMIO blocks and can be used by userspace to figure out how to
> directly
> access TPMI registers.
> 
> Signed-off-by: Maciej Wieczor-Retman
> <maciej.wieczor-retman@intel.com>
Acked-by: Srinivas Pandruvada <srinivas.pandruvada@linux.intel.com>

> ---
> Changelog v3:
> - Change sprintf -> sysfs_emit in show_instance_id().
> - Change part of patch message 'MMIO memory blocks mapped' -> 'MMIO
>   memory blocks presented to userspace...'
> - Change assigning function to static inline.
> 
> Changelog v2:
> - Redo the patch message.
> - Redo the function comment that assigns instance_id.
> - Modify the documentation.
> 
>  .../pm/intel_uncore_frequency_scaling.rst         |  7 +++++++
>  .../uncore-frequency/uncore-frequency-common.c    | 10 ++++++++++
>  .../uncore-frequency/uncore-frequency-common.h    |  6 +++++-
>  .../uncore-frequency/uncore-frequency-tpmi.c      | 15
> ++++++++++++++-
>  4 files changed, 36 insertions(+), 2 deletions(-)
> 
> diff --git a/Documentation/admin-
> guide/pm/intel_uncore_frequency_scaling.rst b/Documentation/admin-
> guide/pm/intel_uncore_frequency_scaling.rst
> index d367ba4d744a..b43ad4d5e333 100644
> --- a/Documentation/admin-guide/pm/intel_uncore_frequency_scaling.rst
> +++ b/Documentation/admin-guide/pm/intel_uncore_frequency_scaling.rst
> @@ -88,8 +88,15 @@ and "fabric_cluster_id" in the directory.
>  
>  Attributes in each directory:
>  
> +``instance_id``
> +	This attribute is used to get die indices in userspace
> mapped MMIO
> +	blocks. Indices are local to a single TPMI partition. Needed
> for direct
> +	TPMI register access.
> +
>  ``domain_id``
>  	This attribute is used to get the power domain id of this
> instance.
> +	Indices are unique in all TPMI partitions on a given CPU
> package. Can be
> +	used to map compute dies to corresponding CPUs.
>  
>  ``die_id``
>  	This attribute is used to get the Linux die id of this
> instance.
> diff --git a/drivers/platform/x86/intel/uncore-frequency/uncore-
> frequency-common.c b/drivers/platform/x86/intel/uncore-
> frequency/uncore-frequency-common.c
> index 25ab511ed8d2..3b554418a7a3 100644
> --- a/drivers/platform/x86/intel/uncore-frequency/uncore-frequency-
> common.c
> +++ b/drivers/platform/x86/intel/uncore-frequency/uncore-frequency-
> common.c
> @@ -29,6 +29,13 @@ static ssize_t show_domain_id(struct kobject
> *kobj, struct kobj_attribute *attr,
>  	return sysfs_emit(buf, "%u\n", data->domain_id);
>  }
>  
> +static ssize_t show_instance_id(struct kobject *kobj, struct
> kobj_attribute *attr, char *buf)
> +{
> +	struct uncore_data *data = container_of(attr, struct
> uncore_data, instance_id_kobj_attr);
> +
> +	return sysfs_emit(buf, "%u\n", data->instance_id);
> +}
> +
>  static ssize_t show_fabric_cluster_id(struct kobject *kobj, struct
> kobj_attribute *attr, char *buf)
>  {
>  	struct uncore_data *data = container_of(attr, struct
> uncore_data, fabric_cluster_id_kobj_attr);
> @@ -200,6 +207,9 @@ static int create_attr_group(struct uncore_data
> *data, char *name)
>  	if (data->domain_id != UNCORE_DOMAIN_ID_INVALID) {
>  		init_attribute_root_ro(domain_id);
>  		data->uncore_attrs[index++] = &data-
> >domain_id_kobj_attr.attr;
> +		init_attribute_root_ro(instance_id);
> +		data->uncore_attrs[index++] = &data-
> >instance_id_kobj_attr.attr;
> +
>  		init_attribute_root_ro(fabric_cluster_id);
>  		data->uncore_attrs[index++] = &data-
> >fabric_cluster_id_kobj_attr.attr;
>  		init_attribute_root_ro(package_id);
> diff --git a/drivers/platform/x86/intel/uncore-frequency/uncore-
> frequency-common.h b/drivers/platform/x86/intel/uncore-
> frequency/uncore-frequency-common.h
> index 0d5fd91ee0aa..e319448dc1a4 100644
> --- a/drivers/platform/x86/intel/uncore-frequency/uncore-frequency-
> common.h
> +++ b/drivers/platform/x86/intel/uncore-frequency/uncore-frequency-
> common.h
> @@ -36,6 +36,7 @@
>   * @domain_id:		Power domain id for this instance
>   * @cluster_id:		cluster id in a domain
>   * @seqnum_id:		Unique sequential id to append to directory
> name
> + * @instance_id:	Die indices or feature instances for a
> single TPMI device
>   * @name:		Sysfs entry name for this instance
>   * @agent_type_mask:	Bit mask of all hardware agents for this
> domain
>   * @uncore_attr_group:	Attribute group storage
> @@ -56,6 +57,7 @@
>   * @elc_floor_freq_khz_kobj_attr: Storage for kobject attribute
> elc_floor_freq_khz
>   * @agent_types_kobj_attr: Storage for kobject attribute agent_type
>   * @die_id_kobj_attr:	Attribute storage for die_id information
> + * @instance_id_kobj_attr: Attribute storage for instance_id value
>   * @uncore_attrs:	Attribute storage for group creation
>   *
>   * This structure is used to encapsulate all data related to uncore
> sysfs
> @@ -72,6 +74,7 @@ struct uncore_data {
>  	int domain_id;
>  	int cluster_id;
>  	int seqnum_id;
> +	int instance_id;
>  	char name[32];
>  	u16  agent_type_mask;
>  
> @@ -90,7 +93,8 @@ struct uncore_data {
>  	struct kobj_attribute elc_floor_freq_khz_kobj_attr;
>  	struct kobj_attribute agent_types_kobj_attr;
>  	struct kobj_attribute die_id_kobj_attr;
> -	struct attribute *uncore_attrs[15];
> +	struct kobj_attribute instance_id_kobj_attr;
> +	struct attribute *uncore_attrs[16];
>  };
>  
>  #define UNCORE_DOMAIN_ID_INVALID	-1
> diff --git a/drivers/platform/x86/intel/uncore-frequency/uncore-
> frequency-tpmi.c b/drivers/platform/x86/intel/uncore-
> frequency/uncore-frequency-tpmi.c
> index 1237d9570886..32d03bee09a0 100644
> --- a/drivers/platform/x86/intel/uncore-frequency/uncore-frequency-
> tpmi.c
> +++ b/drivers/platform/x86/intel/uncore-frequency/uncore-frequency-
> tpmi.c
> @@ -385,7 +385,19 @@ static u8 io_die_index_next;
>  /* Lock to protect io_die_start, io_die_index_next */
>  static DEFINE_MUTEX(domain_lock);
>  
> -static void set_domain_id(int id,  int num_resources,
> +static inline void set_instance_id(int id, struct
> tpmi_uncore_cluster_info *cluster_info)
> +{
> +	/*
> +	 * On non-partitioned systems domain_id can be used for
> mapping both
> +	 * CPUs to compute die IDs and physical die indexes to MMIO
> mapped
> +	 * memory. However on partitioned systems domain_id loses
> the second
> +	 * association. Therefore instance_id should be used for
> that instead,
> +	 * while domain_id should still be used to match CPUs to
> compute dies.
> +	 */
> +	cluster_info->uncore_data.instance_id = id;
> +}
> +
> +static void set_domain_id(int id, int num_resources,
>  			  struct oobmsm_plat_info *plat_info,
>  			  struct tpmi_uncore_cluster_info
> *cluster_info)
>  {
> @@ -686,6 +698,7 @@ static int uncore_probe(struct auxiliary_device
> *auxdev, const struct auxiliary_
>  			set_cdie_id(i, cluster_info, plat_info);
>  
>  			set_domain_id(i, num_resources, plat_info,
> cluster_info);
> +			set_instance_id(i, cluster_info);
>  
>  			cluster_info->uncore_root = tpmi_uncore;
>  

      reply	other threads:[~2026-04-22 16:17 UTC|newest]

Thread overview: 5+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2026-04-08 16:27 [PATCH v3 0/2] platform/x86/intel-uncore-freq: Expose instance ID in the sysfs Maciej Wieczor-Retman
2026-04-08 16:27 ` [PATCH v3 1/2] platform/x86/intel-uncore-freq: Rename instance_id Maciej Wieczor-Retman
2026-04-22 15:49   ` srinivas pandruvada
2026-04-08 16:27 ` [PATCH v3 2/2] platform/x86/intel-uncore-freq: Expose instance ID in the sysfs Maciej Wieczor-Retman
2026-04-22 16:17   ` srinivas pandruvada [this message]

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=b0f831a9f9c59563b16de702b4e4c37c2279b45c.camel@linux.intel.com \
    --to=srinivas.pandruvada@linux.intel.com \
    --cc=corbet@lwn.net \
    --cc=hansg@kernel.org \
    --cc=ilpo.jarvinen@linux.intel.com \
    --cc=linux-doc@vger.kernel.org \
    --cc=linux-kernel@vger.kernel.org \
    --cc=m.wieczorretman@pm.me \
    --cc=maciej.wieczor-retman@intel.com \
    --cc=platform-driver-x86@vger.kernel.org \
    --cc=skhan@linuxfoundation.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox