All of lore.kernel.org
 help / color / mirror / Atom feed
From: "Mi, Dapeng" <dapeng1.mi@linux.intel.com>
To: "Chen, Zide" <zide.chen@intel.com>,
	Peter Zijlstra <peterz@infradead.org>,
	Ingo Molnar <mingo@redhat.com>,
	Arnaldo Carvalho de Melo <acme@kernel.org>,
	Namhyung Kim <namhyung@kernel.org>,
	Ian Rogers <irogers@google.com>,
	Adrian Hunter <adrian.hunter@intel.com>,
	Alexander Shishkin <alexander.shishkin@linux.intel.com>,
	Andi Kleen <ak@linux.intel.com>,
	Eranian Stephane <eranian@google.com>
Cc: linux-kernel@vger.kernel.org, linux-perf-users@vger.kernel.org
Subject: Re: [PATCH V2 7/7] perf/x86/intel/uncore: Implement global init callback for GNR uncore
Date: Fri, 29 May 2026 16:47:39 +0800	[thread overview]
Message-ID: <93acba88-3f6a-43dc-8392-63d977fb2dfa@linux.intel.com> (raw)
In-Reply-To: <03ad940f-747b-432c-9dca-1be305ee5cc7@intel.com>


On 5/29/2026 2:14 AM, Chen, Zide wrote:
>
> On 5/28/2026 1:46 AM, Mi, Dapeng wrote:
>> On 5/27/2026 11:11 PM, Zide Chen wrote:
>>> On Sierra Forest and Clearwater Forest, the FRZ_ALL bit in the global
>>> control register defaults to 0 at boot, but UBOX PMON units do not
>>> work until the global control register is explicitly written with 0
>>> to trigger hardware initialization properly.
>>>
>>> Implement the generic uncore_msr_global_init() callback and add it to
>>> gnr_uncore_init[], which is shared by GNR, GRR, SRF, and CWF.
>> Need a "Fixes" tag?
> No Fixes tag needed. This is a hardware initialization workaround rather
> than a fix for a software bug. The register defaults to 0, but the
> hardware requires an explicit write to trigger PMON functionality.

Zide, per my understanding, some uncore PMUs can't work for SRF and CWF
without this change. Is it right? If so, we need to add a "Fixes" tag to
ensure this patch is merged to the corresponding stable branches. Thanks.


>
>> Reviewed-by: Dapeng Mi <dapeng1.mi@linux.intel.com>
>>
>>
>>> Signed-off-by: Zide Chen <zide.chen@intel.com>
>>> ---
>>> V2:
>>> - Propagate return value of wrmsrq_on_cpu() to global_init().
>>> ---
>>>  arch/x86/events/intel/uncore.c           | 13 ++++++++++++-
>>>  arch/x86/events/intel/uncore.h           |  2 +-
>>>  arch/x86/events/intel/uncore_discovery.c |  2 +-
>>>  3 files changed, 14 insertions(+), 3 deletions(-)
>>>
>>> diff --git a/arch/x86/events/intel/uncore.c b/arch/x86/events/intel/uncore.c
>>> index 4b3a1fa5b41b..7857959c6e82 100644
>>> --- a/arch/x86/events/intel/uncore.c
>>> +++ b/arch/x86/events/intel/uncore.c
>>> @@ -1716,7 +1716,7 @@ static int __init uncore_mmio_init(void)
>>>  	return ret;
>>>  }
>>>  
>>> -static int uncore_mmio_global_init(u64 ctl)
>>> +static int uncore_mmio_global_init(int die, u64 ctl)
>>>  {
>>>  	void __iomem *io_addr;
>>>  
>>> @@ -1731,6 +1731,16 @@ static int uncore_mmio_global_init(u64 ctl)
>>>  	return 0;
>>>  }
>>>  
>>> +static int uncore_msr_global_init(int die, u64 msr)
>>> +{
>>> +	int cpu = uncore_die_to_cpu(die);
>>> +
>>> +	if (cpu == -1)
>>> +		return -ENODEV;
>>> +
>>> +	return wrmsrq_on_cpu(cpu, msr, 0);
>>> +}
>>> +
>>>  static const struct uncore_plat_init nhm_uncore_init __initconst = {
>>>  	.cpu_init = nhm_uncore_cpu_init,
>>>  };
>>> @@ -1871,6 +1881,7 @@ static const struct uncore_plat_init gnr_uncore_init __initconst = {
>>>  	.domain[0].base_is_pci = true,
>>>  	.domain[0].discovery_base = UNCORE_DISCOVERY_TABLE_DEVICE,
>>>  	.domain[0].units_ignore = gnr_uncore_units_ignore,
>>> +	.domain[0].global_init = uncore_msr_global_init,
>>>  };
>>>  
>>>  static const struct uncore_plat_init dmr_uncore_init __initconst = {
>>> diff --git a/arch/x86/events/intel/uncore.h b/arch/x86/events/intel/uncore.h
>>> index 94c68e3417b6..c2e5ccb1d72c 100644
>>> --- a/arch/x86/events/intel/uncore.h
>>> +++ b/arch/x86/events/intel/uncore.h
>>> @@ -53,7 +53,7 @@ struct uncore_discovery_domain {
>>>  	/* MSR address or PCI device used as the discovery base */
>>>  	u32	discovery_base;
>>>  	bool	base_is_pci;
>>> -	int	(*global_init)(u64 ctl);
>>> +	int	(*global_init)(int die, u64 ctl);
>>>  
>>>  	/* The units in the discovery table should be ignored. */
>>>  	int	*units_ignore;
>>> diff --git a/arch/x86/events/intel/uncore_discovery.c b/arch/x86/events/intel/uncore_discovery.c
>>> index af2217b44a81..e36613d934b1 100644
>>> --- a/arch/x86/events/intel/uncore_discovery.c
>>> +++ b/arch/x86/events/intel/uncore_discovery.c
>>> @@ -287,7 +287,7 @@ static int __parse_discovery_table(struct uncore_discovery_domain *domain,
>>>  	if (!io_addr)
>>>  		return -ENOMEM;
>>>  
>>> -	if (domain->global_init && domain->global_init(global.ctl)) {
>>> +	if (domain->global_init && domain->global_init(die, global.ctl)) {
>>>  		ret = -ENODEV;
>>>  		goto out;
>>>  	}
>

  reply	other threads:[~2026-05-29  8:47 UTC|newest]

Thread overview: 28+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2026-05-27 15:11 [PATCH V2 1/7] perf/x86/intel/uncore: Fix discovery unit lookup for multi-die systems Zide Chen
2026-05-27 15:11 ` [PATCH V2 2/7] perf/x86/intel/uncore: Guard against invalid box control address Zide Chen
2026-05-27 17:28   ` sashiko-bot
2026-05-29 18:30     ` Chen, Zide
2026-05-28  6:03   ` Mi, Dapeng
2026-05-27 15:11 ` [PATCH V2 3/7] perf/x86/intel/uncore: Fix PCI device refcount leak in UPI discovery Zide Chen
2026-05-28  6:34   ` Mi, Dapeng
2026-05-27 15:11 ` [PATCH V2 4/7] perf/x86/intel/uncore: Defer ADL global PMON enable to enable_box() Zide Chen
2026-05-27 18:17   ` sashiko-bot
2026-05-28  6:35   ` Mi, Dapeng
2026-05-28 18:07     ` Chen, Zide
2026-05-27 15:11 ` [PATCH V2 5/7] perf/x86/intel/uncore: Move die_to_cpu() to uncore.c Zide Chen
2026-05-28  6:36   ` Mi, Dapeng
2026-05-29 10:54   ` Peter Zijlstra
2026-05-27 15:11 ` [PATCH V2 6/7] perf/x86/intel/uncore: Fix uncore_die_to_cpu() for offline dies Zide Chen
2026-05-27 19:56   ` sashiko-bot
2026-05-28  6:38   ` Mi, Dapeng
2026-05-27 15:11 ` [PATCH V2 7/7] perf/x86/intel/uncore: Implement global init callback for GNR uncore Zide Chen
2026-05-27 20:45   ` sashiko-bot
2026-05-29 18:30     ` Chen, Zide
2026-05-28  6:46   ` Mi, Dapeng
2026-05-28 18:14     ` Chen, Zide
2026-05-29  8:47       ` Mi, Dapeng [this message]
2026-05-29 10:55         ` Peter Zijlstra
2026-05-29 15:03           ` Chen, Zide
2026-05-27 15:45 ` [PATCH V2 1/7] perf/x86/intel/uncore: Fix discovery unit lookup for multi-die systems sashiko-bot
2026-05-29 18:31   ` Chen, Zide
2026-05-28  6:01 ` Mi, Dapeng

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=93acba88-3f6a-43dc-8392-63d977fb2dfa@linux.intel.com \
    --to=dapeng1.mi@linux.intel.com \
    --cc=acme@kernel.org \
    --cc=adrian.hunter@intel.com \
    --cc=ak@linux.intel.com \
    --cc=alexander.shishkin@linux.intel.com \
    --cc=eranian@google.com \
    --cc=irogers@google.com \
    --cc=linux-kernel@vger.kernel.org \
    --cc=linux-perf-users@vger.kernel.org \
    --cc=mingo@redhat.com \
    --cc=namhyung@kernel.org \
    --cc=peterz@infradead.org \
    --cc=zide.chen@intel.com \
    /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 an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.