117 lines
4.2 KiB
Diff
117 lines
4.2 KiB
Diff
From 0b7b0513121aea4c200c8cd639edf3d1eda1c248 Mon Sep 17 00:00:00 2001
|
|
From: Qi Liu <liuqi115@huawei.com>
|
|
Date: Tue, 9 Aug 2022 23:06:42 +0800
|
|
Subject: [PATCH 30/55] drivers/perf: hisi: Associate PMUs in SICL with CPUs
|
|
online
|
|
|
|
mainline inclusion
|
|
from mainline-v5.19-rc1
|
|
commit 807907dae9701c4b0593d5195d4839f17d103314
|
|
category: feature
|
|
bugzilla: https://gitee.com/openeuler/kernel/issues/I5AZ87
|
|
CVE: NA
|
|
|
|
Reference: https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/commit/?id=807907dae970
|
|
|
|
--------------------------------------------------------------------------
|
|
|
|
If a PMU is in a SICL (Super IO cluster), it is not appropriate to
|
|
associate this PMU with a CPU die. So we associate it with all CPUs
|
|
online, rather than CPUs in the nearest SCCL.
|
|
|
|
As the firmware of Hip09 platform hasn't been published yet, change
|
|
of PMU driver will not influence backwards compatibility between
|
|
driver and firmware.
|
|
|
|
Signed-off-by: Qi Liu <liuqi115@huawei.com>
|
|
Reviewed-by: John Garry <john.garry@huawei.com>
|
|
Link: https://lore.kernel.org/r/20220415102352.6665-2-liuqi115@huawei.com
|
|
Signed-off-by: Will Deacon <will@kernel.org>
|
|
Signed-off-by: Wangming Shao <shaowangming@h-partners.com>
|
|
Reviewed-by: Junhao He <hejunhao3@huawei.com>
|
|
Reviewed-by: Yang Jihong <yangjihong1@huawei.com>
|
|
Signed-off-by: Zheng Zengkai <zhengzengkai@huawei.com>
|
|
Signed-off-by: hongrongxuan <hongrongxuan@huawei.com>
|
|
---
|
|
drivers/perf/hisilicon/hisi_uncore_pa_pmu.c | 18 +++++++-----------
|
|
drivers/perf/hisilicon/hisi_uncore_pmu.c | 4 ++++
|
|
drivers/perf/hisilicon/hisi_uncore_pmu.h | 1 +
|
|
3 files changed, 12 insertions(+), 11 deletions(-)
|
|
|
|
diff --git a/drivers/perf/hisilicon/hisi_uncore_pa_pmu.c b/drivers/perf/hisilicon/hisi_uncore_pa_pmu.c
|
|
index 390e59f4ef60..f1e6b5cee075 100644
|
|
--- a/drivers/perf/hisilicon/hisi_uncore_pa_pmu.c
|
|
+++ b/drivers/perf/hisilicon/hisi_uncore_pa_pmu.c
|
|
@@ -258,13 +258,12 @@ static int hisi_pa_pmu_init_data(struct platform_device *pdev,
|
|
struct hisi_pmu *pa_pmu)
|
|
{
|
|
/*
|
|
- * Use the SCCL_ID and the index ID to identify the PA PMU,
|
|
- * while SCCL_ID is the nearst SCCL_ID from this SICL and
|
|
- * CPU core is chosen from this SCCL to manage this PMU.
|
|
+ * As PA PMU is in a SICL, use the SICL_ID and the index ID
|
|
+ * to identify the PA PMU.
|
|
*/
|
|
if (device_property_read_u32(&pdev->dev, "hisilicon,scl-id",
|
|
- &pa_pmu->sccl_id)) {
|
|
- dev_err(&pdev->dev, "Cannot read sccl-id!\n");
|
|
+ &pa_pmu->sicl_id)) {
|
|
+ dev_err(&pdev->dev, "Cannot read sicl-id!\n");
|
|
return -EINVAL;
|
|
}
|
|
|
|
@@ -275,6 +274,7 @@ static int hisi_pa_pmu_init_data(struct platform_device *pdev,
|
|
}
|
|
|
|
pa_pmu->ccl_id = -1;
|
|
+ pa_pmu->sccl_id = -1;
|
|
|
|
pa_pmu->base = devm_platform_ioremap_resource(pdev, 0);
|
|
if (IS_ERR(pa_pmu->base)) {
|
|
@@ -399,13 +399,9 @@ static int hisi_pa_pmu_probe(struct platform_device *pdev)
|
|
ret = hisi_pa_pmu_dev_probe(pdev, pa_pmu);
|
|
if (ret)
|
|
return ret;
|
|
- /*
|
|
- * PA is attached in SICL and the CPU core is chosen to manage this
|
|
- * PMU which is the nearest SCCL, while its SCCL_ID is greater than
|
|
- * one with the SICL_ID.
|
|
- */
|
|
+
|
|
name = devm_kasprintf(&pdev->dev, GFP_KERNEL, "hisi_sicl%u_pa%u",
|
|
- pa_pmu->sccl_id - 1, pa_pmu->index_id);
|
|
+ pa_pmu->sicl_id, pa_pmu->index_id);
|
|
if (!name)
|
|
return -ENOMEM;
|
|
|
|
diff --git a/drivers/perf/hisilicon/hisi_uncore_pmu.c b/drivers/perf/hisilicon/hisi_uncore_pmu.c
|
|
index 4a781c2e1992..9aaaf9cf2b2a 100644
|
|
--- a/drivers/perf/hisilicon/hisi_uncore_pmu.c
|
|
+++ b/drivers/perf/hisilicon/hisi_uncore_pmu.c
|
|
@@ -468,6 +468,10 @@ static bool hisi_pmu_cpu_is_associated_pmu(struct hisi_pmu *hisi_pmu)
|
|
{
|
|
int sccl_id, ccl_id;
|
|
|
|
+ /* If SCCL_ID is -1, the PMU is in a SICL and has no CPU affinity */
|
|
+ if (hisi_pmu->sccl_id == -1)
|
|
+ return true;
|
|
+
|
|
if (hisi_pmu->ccl_id == -1) {
|
|
/* If CCL_ID is -1, the PMU only shares the same SCCL */
|
|
hisi_read_sccl_and_ccl_id(&sccl_id, NULL);
|
|
diff --git a/drivers/perf/hisilicon/hisi_uncore_pmu.h b/drivers/perf/hisilicon/hisi_uncore_pmu.h
|
|
index de6aa17a1355..75dfc12e6497 100644
|
|
--- a/drivers/perf/hisilicon/hisi_uncore_pmu.h
|
|
+++ b/drivers/perf/hisilicon/hisi_uncore_pmu.h
|
|
@@ -84,6 +84,7 @@ struct hisi_pmu {
|
|
struct device *dev;
|
|
struct hlist_node node;
|
|
int sccl_id;
|
|
+ int sicl_id;
|
|
int ccl_id;
|
|
void __iomem *base;
|
|
/* the ID of the PMU modules */
|
|
--
|
|
2.27.0
|
|
|