Skip to content

Commit 3557a45

Browse files
committed
Merge branch 'for-next/perf' into for-next/core
* for-next/perf: perf/arm-cmn: Add CMN S3 ACPI binding perf/arm-cmn: Initialise cmn->cpu earlier perf/amlogic: Replace smp_processor_id() with raw_smp_processor_id() in meson_ddr_pmu_create() perf/arm-cmn: Fix REQ2/SNP2 mixup perf: Do not enable by default during compile testing perf: arm-ni: Fix missing platform_set_drvdata() perf: arm-ni: Unregister PMUs on probe failure perf/arm-cmn: Remove CMN-600 DTC domain special case
2 parents c734971 + 8c138a1 commit 3557a45

File tree

4 files changed

+30
-32
lines changed

4 files changed

+30
-32
lines changed

drivers/perf/Kconfig

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -202,7 +202,7 @@ config THUNDERX2_PMU
202202
tristate "Cavium ThunderX2 SoC PMU UNCORE"
203203
depends on ARCH_THUNDER2 || COMPILE_TEST
204204
depends on NUMA && ACPI
205-
default m
205+
default m if ARCH_THUNDER2
206206
help
207207
Provides support for ThunderX2 UNCORE events.
208208
The SoC has PMU support in its L3 cache controller (L3C) and

drivers/perf/amlogic/meson_ddr_pmu_core.c

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -511,7 +511,7 @@ int meson_ddr_pmu_create(struct platform_device *pdev)
511511

512512
fmt_attr_fill(pmu->info.hw_info->fmt_attr);
513513

514-
pmu->cpu = smp_processor_id();
514+
pmu->cpu = raw_smp_processor_id();
515515

516516
name = devm_kasprintf(&pdev->dev, GFP_KERNEL, DDR_PERF_DEV_NAME);
517517
if (!name)

drivers/perf/arm-cmn.c

Lines changed: 6 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -727,8 +727,8 @@ static umode_t arm_cmn_event_attr_is_visible(struct kobject *kobj,
727727

728728
if ((chan == 5 && cmn->rsp_vc_num < 2) ||
729729
(chan == 6 && cmn->dat_vc_num < 2) ||
730-
(chan == 7 && cmn->snp_vc_num < 2) ||
731-
(chan == 8 && cmn->req_vc_num < 2))
730+
(chan == 7 && cmn->req_vc_num < 2) ||
731+
(chan == 8 && cmn->snp_vc_num < 2))
732732
return 0;
733733
}
734734

@@ -882,8 +882,8 @@ static umode_t arm_cmn_event_attr_is_visible(struct kobject *kobj,
882882
_CMN_EVENT_XP(pub_##_name, (_event) | (4 << 5)), \
883883
_CMN_EVENT_XP(rsp2_##_name, (_event) | (5 << 5)), \
884884
_CMN_EVENT_XP(dat2_##_name, (_event) | (6 << 5)), \
885-
_CMN_EVENT_XP(snp2_##_name, (_event) | (7 << 5)), \
886-
_CMN_EVENT_XP(req2_##_name, (_event) | (8 << 5))
885+
_CMN_EVENT_XP(req2_##_name, (_event) | (7 << 5)), \
886+
_CMN_EVENT_XP(snp2_##_name, (_event) | (8 << 5))
887887

888888
#define CMN_EVENT_XP_DAT(_name, _event) \
889889
_CMN_EVENT_XP_PORT(dat_##_name, (_event) | (3 << 5)), \
@@ -2167,13 +2167,6 @@ static int arm_cmn_init_dtcs(struct arm_cmn *cmn)
21672167

21682168
cmn->xps = arm_cmn_node(cmn, CMN_TYPE_XP);
21692169

2170-
if (cmn->part == PART_CMN600 && cmn->num_dtcs > 1) {
2171-
/* We do at least know that a DTC's XP must be in that DTC's domain */
2172-
dn = arm_cmn_node(cmn, CMN_TYPE_DTC);
2173-
for (int i = 0; i < cmn->num_dtcs; i++)
2174-
arm_cmn_node_to_xp(cmn, dn + i)->dtc = i;
2175-
}
2176-
21772170
for (dn = cmn->dns; dn->type; dn++) {
21782171
if (dn->type == CMN_TYPE_XP)
21792172
continue;
@@ -2558,6 +2551,7 @@ static int arm_cmn_probe(struct platform_device *pdev)
25582551

25592552
cmn->dev = &pdev->dev;
25602553
cmn->part = (unsigned long)device_get_match_data(cmn->dev);
2554+
cmn->cpu = cpumask_local_spread(0, dev_to_node(cmn->dev));
25612555
platform_set_drvdata(pdev, cmn);
25622556

25632557
if (cmn->part == PART_CMN600 && has_acpi_companion(cmn->dev)) {
@@ -2585,7 +2579,6 @@ static int arm_cmn_probe(struct platform_device *pdev)
25852579
if (err)
25862580
return err;
25872581

2588-
cmn->cpu = cpumask_local_spread(0, dev_to_node(cmn->dev));
25892582
cmn->pmu = (struct pmu) {
25902583
.module = THIS_MODULE,
25912584
.parent = cmn->dev,
@@ -2651,6 +2644,7 @@ static const struct acpi_device_id arm_cmn_acpi_match[] = {
26512644
{ "ARMHC600", PART_CMN600 },
26522645
{ "ARMHC650" },
26532646
{ "ARMHC700" },
2647+
{ "ARMHC003" },
26542648
{}
26552649
};
26562650
MODULE_DEVICE_TABLE(acpi, arm_cmn_acpi_match);

drivers/perf/arm-ni.c

Lines changed: 22 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -575,6 +575,23 @@ static int arm_ni_init_cd(struct arm_ni *ni, struct arm_ni_node *node, u64 res_s
575575
return err;
576576
}
577577

578+
static void arm_ni_remove(struct platform_device *pdev)
579+
{
580+
struct arm_ni *ni = platform_get_drvdata(pdev);
581+
582+
for (int i = 0; i < ni->num_cds; i++) {
583+
struct arm_ni_cd *cd = ni->cds + i;
584+
585+
if (!cd->pmu_base)
586+
continue;
587+
588+
writel_relaxed(0, cd->pmu_base + NI_PMCR);
589+
writel_relaxed(U32_MAX, cd->pmu_base + NI_PMINTENCLR);
590+
perf_pmu_unregister(&cd->pmu);
591+
cpuhp_state_remove_instance_nocalls(arm_ni_hp_state, &cd->cpuhp_node);
592+
}
593+
}
594+
578595
static void arm_ni_probe_domain(void __iomem *base, struct arm_ni_node *node)
579596
{
580597
u32 reg = readl_relaxed(base + NI_NODE_TYPE);
@@ -643,6 +660,7 @@ static int arm_ni_probe(struct platform_device *pdev)
643660
ni->num_cds = num_cds;
644661
ni->part = part;
645662
ni->id = atomic_fetch_inc(&id);
663+
platform_set_drvdata(pdev, ni);
646664

647665
for (int v = 0; v < cfg.num_components; v++) {
648666
reg = readl_relaxed(cfg.base + NI_CHILD_PTR(v));
@@ -656,32 +674,18 @@ static int arm_ni_probe(struct platform_device *pdev)
656674
reg = readl_relaxed(pd.base + NI_CHILD_PTR(c));
657675
arm_ni_probe_domain(base + reg, &cd);
658676
ret = arm_ni_init_cd(ni, &cd, res->start);
659-
if (ret)
677+
if (ret) {
678+
ni->cds[cd.id].pmu_base = NULL;
679+
arm_ni_remove(pdev);
660680
return ret;
681+
}
661682
}
662683
}
663684
}
664685

665686
return 0;
666687
}
667688

668-
static void arm_ni_remove(struct platform_device *pdev)
669-
{
670-
struct arm_ni *ni = platform_get_drvdata(pdev);
671-
672-
for (int i = 0; i < ni->num_cds; i++) {
673-
struct arm_ni_cd *cd = ni->cds + i;
674-
675-
if (!cd->pmu_base)
676-
continue;
677-
678-
writel_relaxed(0, cd->pmu_base + NI_PMCR);
679-
writel_relaxed(U32_MAX, cd->pmu_base + NI_PMINTENCLR);
680-
perf_pmu_unregister(&cd->pmu);
681-
cpuhp_state_remove_instance_nocalls(arm_ni_hp_state, &cd->cpuhp_node);
682-
}
683-
}
684-
685689
#ifdef CONFIG_OF
686690
static const struct of_device_id arm_ni_of_match[] = {
687691
{ .compatible = "arm,ni-700" },

0 commit comments

Comments
 (0)