mirror of
https://mirrors.bfsu.edu.cn/git/linux.git
synced 2024-12-05 01:54:09 +08:00
drivers/perf: hisi: Associate PMUs in SICL with CPUs online
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>
This commit is contained in:
parent
47a9ed88a4
commit
807907dae9
@ -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;
|
||||
|
||||
|
@ -458,6 +458,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);
|
||||
|
@ -81,6 +81,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 */
|
||||
|
Loading…
Reference in New Issue
Block a user