Messages in this thread | | | Subject | Re: [PATCH v2] perf: arm_dsu: Support DSU ACPI devices. | From | Tuan Phan <> | Date | Thu, 21 May 2020 08:50:28 -0700 |
| |
> On May 21, 2020, at 6:55 AM, Sudeep Holla <sudeep.holla@arm.com> wrote: > > On Mon, May 11, 2020 at 01:32:40PM -0700, Tuan Phan wrote: >> Add ACPI node probing device support. Each DSU ACPI node >> defines a "cpus" package with a per cpu MPIDR element. >> >> Signed-off-by: Tuan Phan <tuanphan@os.amperecomputing.com> >> --- >> Changes in v2: >> - Removed IRQF_SHARED. >> - Fixed ACPI runtime detection. >> >> The ACPI binding spec for DSU ACPI node is under beta and located >> in ARM server group under project "ACPI on ARM". >> >> drivers/perf/arm_dsu_pmu.c | 71 ++++++++++++++++++++++++++++++++++++++++------ >> 1 file changed, 63 insertions(+), 8 deletions(-) >> >> diff --git a/drivers/perf/arm_dsu_pmu.c b/drivers/perf/arm_dsu_pmu.c >> index 70968c8..784d177 100644 >> --- a/drivers/perf/arm_dsu_pmu.c >> +++ b/drivers/perf/arm_dsu_pmu.c >> @@ -11,6 +11,7 @@ >> #define DRVNAME PMUNAME "_pmu" >> #define pr_fmt(fmt) DRVNAME ": " fmt >> >> +#include <linux/acpi.h> >> #include <linux/bitmap.h> >> #include <linux/bitops.h> >> #include <linux/bug.h> >> @@ -603,18 +604,21 @@ static struct dsu_pmu *dsu_pmu_alloc(struct platform_device *pdev) >> } >> >> /** >> - * dsu_pmu_dt_get_cpus: Get the list of CPUs in the cluster. >> + * dsu_pmu_dt_get_cpus: Get the list of CPUs in the cluster >> + * from device tree. >> */ >> -static int dsu_pmu_dt_get_cpus(struct device_node *dev, cpumask_t *mask) >> +static int dsu_pmu_dt_get_cpus(struct platform_device *pdev) >> { >> int i = 0, n, cpu; >> struct device_node *cpu_node; >> + struct dsu_pmu *dsu_pmu = >> + (struct dsu_pmu *) platform_get_drvdata(pdev); >> >> - n = of_count_phandle_with_args(dev, "cpus", NULL); >> + n = of_count_phandle_with_args(pdev->dev.of_node, "cpus", NULL); >> if (n <= 0) >> return -ENODEV; >> for (; i < n; i++) { >> - cpu_node = of_parse_phandle(dev, "cpus", i); >> + cpu_node = of_parse_phandle(pdev->dev.of_node, "cpus", i); >> if (!cpu_node) >> break; >> cpu = of_cpu_node_to_id(cpu_node); >> @@ -626,11 +630,54 @@ static int dsu_pmu_dt_get_cpus(struct device_node *dev, cpumask_t *mask) >> */ >> if (cpu < 0) >> continue; >> - cpumask_set_cpu(cpu, mask); >> + cpumask_set_cpu(cpu, &dsu_pmu->associated_cpus); >> } >> return 0; >> } >> >> +/** >> + * dsu_pmu_acpi_get_cpus: Get the list of CPUs in the cluster >> + * from ACPI. >> + */ >> +static int dsu_pmu_acpi_get_cpus(struct platform_device *pdev) >> +{ >> + int i, cpu, ret; >> + const union acpi_object *obj; >> + struct acpi_device *adev = ACPI_COMPANION(&pdev->dev); >> + struct dsu_pmu *dsu_pmu = >> + (struct dsu_pmu *) platform_get_drvdata(pdev); >> + >> + ret = acpi_dev_get_property(adev, "cpus", ACPI_TYPE_PACKAGE, &obj); > > I don't see any property "cpus" in the document: > DEN 0093 A (Generic ACPI for Arm Components 1.0) [1] > > Is there any newer updates that I need to look at ? > There is a newer DEN 0093 A version but it has not been public yet. Let abandon this patch and I will post new one when the document has been finalized and available to public.
Thanks,
> -- > Regards, > Sudeep > > [1] https://static.docs.arm.com/den0093/a/DEN0093_ACPI_Arm_Components_1.0.pdf
| |