All of lore.kernel.org
 help / color / mirror / Atom feed
From: Pu Wen <puwen@hygon.cn>
To: tglx@linutronix.de, mingo@redhat.com, hpa@zytor.com,
	x86@kernel.org, thomas.lendacky@amd.com, bp@alien8.de,
	pbonzini@redhat.com
Cc: linux-kernel@vger.kernel.org, linux-arch@vger.kernel.org,
	Pu Wen <puwen@hygon.cn>
Subject: [PATCH v5 05/16] x86/pmu: enable Hygon support to PMU infrastructure
Date: Wed, 29 Aug 2018 20:43:54 +0800	[thread overview]
Message-ID: <dcd5b900e26e3175e4cafded91ec28e53c79adf8.1535459013.git.puwen@hygon.cn> (raw)
In-Reply-To: <cover.1535459012.git.puwen@hygon.cn>

Hygon PMU arch is similar to AMD Family 17h. To support Hygon PMU, the
initialization flow for it just call amd_pmu_init() and change PMU name
to "HYGON". To share AMD's flow, add code check for Hygon family ID 18h
to run the code path of AMD family 17h in core/uncore functions.

Also it returns the bit offset of the performance counter register and
event selection register for Hygon CPU in the similar way as AMD does.

Signed-off-by: Pu Wen <puwen@hygon.cn>
---
 arch/x86/events/amd/core.c             |  6 ++++++
 arch/x86/events/amd/uncore.c           | 15 ++++++++++-----
 arch/x86/events/core.c                 |  4 ++++
 arch/x86/kernel/cpu/perfctr-watchdog.c |  2 ++
 4 files changed, 22 insertions(+), 5 deletions(-)

diff --git a/arch/x86/events/amd/core.c b/arch/x86/events/amd/core.c
index c84584b..6c13c9d 100644
--- a/arch/x86/events/amd/core.c
+++ b/arch/x86/events/amd/core.c
@@ -669,6 +669,12 @@ static int __init amd_core_pmu_init(void)
 		 * We fallback to using default amd_get_event_constraints.
 		 */
 		break;
+	case 0x18:
+		if (boot_cpu_data.x86_vendor == X86_VENDOR_HYGON) {
+			pr_cont("Fam18h ");
+			/* Using default amd_get_event_constraints. */
+			break;
+		}
 	default:
 		pr_err("core perfctr but no constraints; unknown hardware!\n");
 		return -ENODEV;
diff --git a/arch/x86/events/amd/uncore.c b/arch/x86/events/amd/uncore.c
index 981ba5e..9f2eb43 100644
--- a/arch/x86/events/amd/uncore.c
+++ b/arch/x86/events/amd/uncore.c
@@ -507,17 +507,22 @@ static int __init amd_uncore_init(void)
 {
 	int ret = -ENODEV;
 
-	if (boot_cpu_data.x86_vendor != X86_VENDOR_AMD)
+	if (boot_cpu_data.x86_vendor != X86_VENDOR_AMD &&
+	    boot_cpu_data.x86_vendor != X86_VENDOR_HYGON)
 		return -ENODEV;
 
 	if (!boot_cpu_has(X86_FEATURE_TOPOEXT))
 		return -ENODEV;
 
-	if (boot_cpu_data.x86 == 0x17) {
+	if ((boot_cpu_data.x86_vendor == X86_VENDOR_AMD &&
+	     boot_cpu_data.x86 == 0x17) ||
+	    (boot_cpu_data.x86_vendor == X86_VENDOR_HYGON &&
+	     boot_cpu_data.x86 == 0x18)) {
 		/*
-		 * For F17h, the Northbridge counters are repurposed as Data
-		 * Fabric counters. Also, L3 counters are supported too. The PMUs
-		 * are exported based on  family as either L2 or L3 and NB or DF.
+		 * For AMD F17h or Hygon F18h, the Northbridge counters are
+		 * repurposed as DataFabric counters. Also, L3 counters
+		 * are supported too. The PMUs are exported based on
+		 * family as either L2 or L3 and NB or DF.
 		 */
 		num_counters_nb		  = NUM_COUNTERS_NB;
 		num_counters_llc	  = NUM_COUNTERS_L3;
diff --git a/arch/x86/events/core.c b/arch/x86/events/core.c
index 5f4829f..93e026b 100644
--- a/arch/x86/events/core.c
+++ b/arch/x86/events/core.c
@@ -1776,6 +1776,10 @@ static int __init init_hw_perf_events(void)
 	case X86_VENDOR_AMD:
 		err = amd_pmu_init();
 		break;
+	case X86_VENDOR_HYGON:
+		err = amd_pmu_init();
+		x86_pmu.name = "HYGON";
+		break;
 	default:
 		err = -ENOTSUPP;
 	}
diff --git a/arch/x86/kernel/cpu/perfctr-watchdog.c b/arch/x86/kernel/cpu/perfctr-watchdog.c
index d389083..9556930 100644
--- a/arch/x86/kernel/cpu/perfctr-watchdog.c
+++ b/arch/x86/kernel/cpu/perfctr-watchdog.c
@@ -46,6 +46,7 @@ static inline unsigned int nmi_perfctr_msr_to_bit(unsigned int msr)
 {
 	/* returns the bit offset of the performance counter register */
 	switch (boot_cpu_data.x86_vendor) {
+	case X86_VENDOR_HYGON:
 	case X86_VENDOR_AMD:
 		if (msr >= MSR_F15H_PERF_CTR)
 			return (msr - MSR_F15H_PERF_CTR) >> 1;
@@ -74,6 +75,7 @@ static inline unsigned int nmi_evntsel_msr_to_bit(unsigned int msr)
 {
 	/* returns the bit offset of the event selection register */
 	switch (boot_cpu_data.x86_vendor) {
+	case X86_VENDOR_HYGON:
 	case X86_VENDOR_AMD:
 		if (msr >= MSR_F15H_PERF_CTL)
 			return (msr - MSR_F15H_PERF_CTL) >> 1;
-- 
2.7.4


  parent reply	other threads:[~2018-08-29 12:44 UTC|newest]

Thread overview: 62+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2018-08-29 12:42 [PATCH v5 00/16] Add support for Hygon Dhyana Family 18h processor Pu Wen
2018-08-29 12:42 ` [PATCH v5 01/16] x86/cpu: create Dhyana init file and register new cpu_dev to system Pu Wen
2018-08-29 19:35   ` Andi Kleen
2018-08-30 17:40     ` Pu Wen
2018-08-30 12:35   ` Borislav Petkov
2018-08-30 18:02     ` Pu Wen
2018-08-29 12:43 ` [PATCH v5 02/16] x86/cache: get cache size/leaves and setup cache cpumap for Dhyana Pu Wen
2018-09-03  9:57   ` Borislav Petkov
2018-09-03 12:59     ` Pu Wen
2018-08-29 12:43 ` [PATCH v5 03/16] x86/mtrr: get MTRR number and support TOP_MEM2 Pu Wen
2018-09-03 19:04   ` Borislav Petkov
2018-09-04  3:02     ` Pu Wen
2018-09-04  8:02       ` Borislav Petkov
2018-09-04 12:43         ` Pu Wen
2018-08-29 12:43 ` [PATCH v5 04/16] x86/smpboot: smp init nodelay and no flush caches before sleep Pu Wen
2018-09-04  9:15   ` Borislav Petkov
2018-08-29 12:43 ` Pu Wen [this message]
2018-09-04 10:48   ` [PATCH v5 05/16] x86/pmu: enable Hygon support to PMU infrastructure Borislav Petkov
2018-09-04 13:32     ` Pu Wen
2018-08-29 12:44 ` [PATCH v5 06/16] x86/nops: init ideal_nops for Hygon Pu Wen
2018-09-04 14:01   ` Borislav Petkov
2018-08-29 12:44 ` [PATCH v5 07/16] x86/pci: add Hygon PCI vendor and northbridge support Pu Wen
2018-09-04 14:52   ` Borislav Petkov
2018-09-04 15:45     ` Pu Wen
2018-09-04 16:03       ` Borislav Petkov
2018-08-29 12:44 ` [PATCH v5 08/16] x86/apic: add modern APIC support for Hygon Pu Wen
2018-09-04 18:33   ` Borislav Petkov
2018-09-05  8:08     ` Pu Wen
2018-08-29 12:44 ` [PATCH v5 09/16] x86/bugs: add lfence mitigation to spectre v2 and no meltdown " Pu Wen
2018-09-05  9:13   ` Borislav Petkov
2018-09-05 10:40     ` Pu Wen
2018-08-29 12:44 ` [PATCH v5 10/16] x86/mce: enable Hygon support to MCE infrastructure Pu Wen
2018-08-29 12:44   ` [v5,10/16] " Pu Wen
2018-09-05  9:22   ` [PATCH v5 10/16] " Borislav Petkov
2018-09-05  9:22     ` [v5,10/16] " Borislav Petkov
2018-09-05 12:59     ` [PATCH v5 10/16] " Pu Wen
2018-09-05 12:59       ` [v5,10/16] " Pu Wen
2018-09-05 13:15       ` [PATCH v5 10/16] " Borislav Petkov
2018-09-05 13:15         ` [v5,10/16] " Borislav Petkov
2018-09-06  3:52         ` [PATCH v5 10/16] " Pu Wen
2018-09-06  3:52           ` [v5,10/16] " Pu Wen
2018-09-06  8:39           ` [PATCH v5 10/16] " Borislav Petkov
2018-09-06  8:39             ` [v5,10/16] " Borislav Petkov
2018-09-06 11:40             ` [PATCH v5 10/16] " Pu Wen
2018-09-06 11:40               ` [v5,10/16] " Pu Wen
2018-09-06 12:29               ` [PATCH v5 10/16] " Borislav Petkov
2018-09-06 12:29                 ` [v5,10/16] " Borislav Petkov
2018-09-06 15:47                 ` [PATCH v5 10/16] " Pu Wen
2018-09-06 15:47                   ` [v5,10/16] " Pu Wen
2018-08-29 12:45 ` [PATCH v5 11/16] x86/kvm: enable Hygon support to KVM infrastructure Pu Wen
2018-09-05 10:30   ` Borislav Petkov
2018-08-29 12:45 ` [PATCH v5 12/16] x86/xen: enable Hygon support to Xen Pu Wen
2018-08-29 12:45 ` Pu Wen
2018-08-29 12:45 ` [PATCH v5 13/16] driver/acpi: enable Hygon support to ACPI driver Pu Wen
2018-08-29 12:45 ` [PATCH v5 14/16] driver/cpufreq: enable Hygon support to cpufreq driver Pu Wen
2018-08-29 12:45 ` [PATCH v5 15/16] driver/edac: enable Hygon support to AMD64 EDAC driver Pu Wen
2018-08-29 12:45   ` [v5,15/16] " Pu Wen
2018-09-05 10:44   ` [PATCH v5 15/16] " Borislav Petkov
2018-09-05 10:44     ` [v5,15/16] " Borislav Petkov
2018-09-05 13:03     ` [PATCH v5 15/16] " Pu Wen
2018-09-05 13:03       ` [v5,15/16] " Pu Wen
2018-08-29 12:45 ` [PATCH v5 16/16] tools/cpupower: enable Hygon support to cpupower tool Pu Wen

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=dcd5b900e26e3175e4cafded91ec28e53c79adf8.1535459013.git.puwen@hygon.cn \
    --to=puwen@hygon.cn \
    --cc=bp@alien8.de \
    --cc=hpa@zytor.com \
    --cc=linux-arch@vger.kernel.org \
    --cc=linux-kernel@vger.kernel.org \
    --cc=mingo@redhat.com \
    --cc=pbonzini@redhat.com \
    --cc=tglx@linutronix.de \
    --cc=thomas.lendacky@amd.com \
    --cc=x86@kernel.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 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.