Received: by 2002:ac0:a5a7:0:0:0:0:0 with SMTP id m36-v6csp2981574imm; Sun, 19 Aug 2018 09:21:44 -0700 (PDT) X-Google-Smtp-Source: AA+uWPxXeDpVf5KtOxivVjGYkdrrjBXYIgLembBqJb/A+AVKi4txaHBiyUYb0bOdtinLGJ/It9Pz X-Received: by 2002:a17:902:2ac3:: with SMTP id j61-v6mr41423534plb.172.1534695704650; Sun, 19 Aug 2018 09:21:44 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1534695704; cv=none; d=google.com; s=arc-20160816; b=NoHYUunIOe4Rraw/6LPGTIExnjuz40iTm+S7eTWPi3bmHPSFFQ000djRM6aj6aHmK+ TcsnXTYYvmVbFyhq4yjA0idMzCKbkdstgMGxkFB3zmnhDk94fnu7CTKx/GsZYKdSDJDT NAhm1/YzBi/9v5KG9hPI4UUSPbFtUOymIjZ58vjznCIMPwRbRqhlr8g2blprAYJxQmGb 40uHQiZ/oN7MET7g8rxHf1j0zKw37I3gxxgiHuoQePWmvo9aRnkz5WpuLAORvQCcgjbH vZrUMo5J32M82Vlw4t8XAsJfsoFEpcBXysKSg8GfAM/Bb3QvUWsUkqlDlxZTQbdaEC0X bdsA== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:sender:references:in-reply-to:message-id:date :subject:cc:to:from:arc-authentication-results; bh=1nsDwQ1s5Bpz4h8S616AEby/1Hrta4qC1KTtQMyuE1Q=; b=eOXs5euR/GK9Fe5wA5m/j2T3QBPz0XZSFpTZXAB6PEtP87Yhouvf74p9jBYo6Sf3aa +rAueGQ4eXPCbwVV60vUAVNM2TRDZGJgW6jkNCV13yZiipWmtY3izX0bvnq1vALfl4J1 0jdShbnQTexJcUxBo1I36UmvHECB0Rs8rOKZrc7wk2UscP0MJkOLRBtV8Zzp2/1ItJR3 EdvhwEeLJWZUiIVXzoS+R+MQ8InY9h3x4eZTeMnm+gDNx7ogOsHzZO9hyNeWKH5+8VvG JLdTQCFOWkorYq6LF9VZ0QFehMoOpDf+qPjM/VVnNrUesoSWtiQS2D5VekP8q2LOpudz 0JZw== ARC-Authentication-Results: i=1; mx.google.com; spf=pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org Return-Path: Received: from vger.kernel.org (vger.kernel.org. [209.132.180.67]) by mx.google.com with ESMTP id z19-v6si6980459pgi.388.2018.08.19.09.21.29; Sun, 19 Aug 2018 09:21:44 -0700 (PDT) Received-SPF: pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) client-ip=209.132.180.67; Authentication-Results: mx.google.com; spf=pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1726776AbeHSTW1 (ORCPT + 99 others); Sun, 19 Aug 2018 15:22:27 -0400 Received: from smtp20.cstnet.cn ([159.226.251.20]:47299 "EHLO cstnet.cn" rhost-flags-OK-OK-OK-FAIL) by vger.kernel.org with ESMTP id S1726565AbeHSTW1 (ORCPT ); Sun, 19 Aug 2018 15:22:27 -0400 Received: from localhost.localdomain (unknown [110.184.154.248]) by APP-10 (Coremail) with SMTP id tACowAD3_GBolnlbz4ywAg--.141S2; Mon, 20 Aug 2018 00:10:20 +0800 (CST) From: Pu Wen 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 Subject: [PATCH v4 05/16] x86/pmu: enable Hygon support to PMU infrastructure Date: Mon, 20 Aug 2018 00:10:07 +0800 Message-Id: <420a5832c6e910d4068d9939178c17be1020a6bc.1534599097.git.puwen@hygon.cn> X-Mailer: git-send-email 2.7.4 In-Reply-To: References: X-CM-TRANSID: tACowAD3_GBolnlbz4ywAg--.141S2 X-Coremail-Antispam: 1UD129KBjvJXoWxWr48XFy5GF18Jr45GFyxGrg_yoWrGryxpr ZrArs5tr97uasrX3s8trWkXrWUZFykKayFgw45K34xAF15Z3s8Xr4Ikw1rtay5Wr95CFyr tw18uw48X3ykAaDanT9S1TB71UUUUU7qnTZGkaVYY2UrUUUUjbIjqfuFe4nvWSU5nxnvy2 9KBjDU0xBIdaVrnRJUUUvF14x267AKxVW8JVW5JwAFc2x0x2IEx4CE42xK8VAvwI8IcIk0 rVWrJVCq3wAFIxvE14AKwVWUJVWUGwA2ocxC64kIII0Yj41l84x0c7CEw4AK67xGY2AK02 1l84ACjcxK6xIIjxv20xvE14v26ryj6F1UM28EF7xvwVC0I7IYx2IY6xkF7I0E14v26r4U JVWxJr1l84ACjcxK6I8E87Iv67AKxVW8JVWxJwA2z4x0Y4vEx4A2jsIEc7CjxVAFwI0_Gr 0_Gr1UM2AIxVAIcxkEcVAq07x20xvEncxIr21l5I8CrVACY4xI64kE6c02F40Ex7xfMcIj 6xIIjxv20xvE14v26r1q6rW5McIj6I8E87Iv67AKxVW8JVWxJwAm72CE4IkC6x0Yz7v_Jr 0_Gr1lF7xvr2IYc2Ij64vIr41lF7I21c0EjII2zVCS5cI20VAGYxC7M4IIrI8v6xkF7I0E 8cxan2IY04v7MxAIw28IcxkI7VAKI48JMxC20s026xCaFVCjc4AY6r1j6r4UMI8I3I0E5I 8CrVAFwI0_Jr0_Jr4lx2IqxVCjr7xvwVAFwI0_JrI_JrWlx4CE17CEb7AF67AKxVWUtVW8 ZwCIc40Y0x0EwIxGrwCI42IY6xIIjxv20xvE14v26ryj6F1UMIIF0xvE2Ix0cI8IcVCY1x 0267AKxVW8Jr0_Cr1UMIIF0xvE42xK8VAvwI8IcIk0rVW8JVW3JwCI42IY6I8E87Iv67AK xVW8JVWxJwCI42IY6I8E87Iv6xkF7I0E14v26r4j6r4UJbIYCTnIWIevJa73UjIFyTuYvj fU5nmRUUUUU X-Originating-IP: [110.184.154.248] X-CM-SenderInfo: psxzv046klw03qof0z/ Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org 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 --- 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