RE: [PATCH v2] ACPI: ARM Performance Monitoring Unit Table (APMT) initial support

From: Besar Wicaksono
Date: Fri Nov 11 2022 - 18:54:23 EST


Hi Will,


> -----Original Message-----
> From: Will Deacon <will@xxxxxxxxxx>
> Sent: Monday, November 7, 2022 1:11 PM
> To: Besar Wicaksono <bwicaksono@xxxxxxxxxx>
> Cc: rafael@xxxxxxxxxx; lenb@xxxxxxxxxx; catalin.marinas@xxxxxxx;
> lorenzo.pieralisi@xxxxxxx; guohanjun@xxxxxxxxxx;
> sudeep.holla@xxxxxxx; linux-tegra@xxxxxxxxxxxxxxx; Thierry Reding
> <treding@xxxxxxxxxx>; Jonathan Hunter <jonathanh@xxxxxxxxxx>; Vikram
> Sethi <vsethi@xxxxxxxxxx>; linux-acpi@xxxxxxxxxxxxxxx; linux-
> kernel@xxxxxxxxxxxxxxx; linux-arm-kernel@xxxxxxxxxxxxxxxxxxx
> Subject: Re: [PATCH v2] ACPI: ARM Performance Monitoring Unit Table
> (APMT) initial support
>
> External email: Use caution opening links or attachments
>
>
> On Wed, Sep 28, 2022 at 07:28:34PM -0500, Besar Wicaksono wrote:
> > diff --git a/drivers/acpi/arm64/apmt.c b/drivers/acpi/arm64/apmt.c
> > new file mode 100644
> > index 000000000000..f55167ca51e7
> > --- /dev/null
> > +++ b/drivers/acpi/arm64/apmt.c
> > @@ -0,0 +1,177 @@
> > +// SPDX-License-Identifier: GPL-2.0
> > +/*
> > + * ARM APMT table support.
> > + * Design document number: ARM DEN0117.
> > + *
> > + * Copyright (c) 2022, NVIDIA CORPORATION & AFFILIATES.
> > + *
> > + */
> > +
> > +#define pr_fmt(fmt) "ACPI: APMT: " fmt
> > +
> > +#include <linux/acpi.h>
> > +#include <linux/acpi_apmt.h>
> > +#include <linux/init.h>
> > +#include <linux/kernel.h>
> > +#include <linux/platform_device.h>
> > +
> > +#define DEV_NAME "arm-cs-arch-pmu"
> > +
> > +/* There can be up to 3 resources: page 0 and 1 address, and interrupt. */
> > +#define DEV_MAX_RESOURCE_COUNT 3
> > +
> > +/* Root pointer to the mapped APMT table */
> > +static struct acpi_table_header *apmt_table;
> > +
> > +static int __init apmt_init_resources(struct resource *res,
> > + struct acpi_apmt_node *node)
> > +{
> > + int irq, trigger;
> > + int num_res = 0;
> > +
> > + res[num_res].start = node->base_address0;
> > + res[num_res].end = node->base_address0 + SZ_4K - 1;
> > + res[num_res].flags = IORESOURCE_MEM;
> > +
> > + num_res++;
> > +
> > + res[num_res].start = node->base_address1;
> > + res[num_res].end = node->base_address1 + SZ_4K - 1;
> > + res[num_res].flags = IORESOURCE_MEM;
> > +
> > + num_res++;
> > +
> > + if (node->ovflw_irq != 0) {
> > + trigger = (node->ovflw_irq_flags &
> ACPI_APMT_OVFLW_IRQ_FLAGS_MODE);
> > + trigger = (trigger ==
> ACPI_APMT_OVFLW_IRQ_FLAGS_MODE_LEVEL) ?
> > + ACPI_LEVEL_SENSITIVE : ACPI_EDGE_SENSITIVE;
> > + irq = acpi_register_gsi(NULL, node->ovflw_irq, trigger,
> > + ACPI_ACTIVE_HIGH);
> > +
> > + if (irq <= 0) {
> > + pr_warn("APMT could not register gsi hwirq %d\n", irq);
> > + return num_res;
> > + }
> > +
> > + res[num_res].start = irq;
> > + res[num_res].end = irq;
> > + res[num_res].flags = IORESOURCE_IRQ;
> > +
> > + num_res++;
> > + }
> > +
> > + return num_res;
> > +}
> > +
> > +/**
> > + * apmt_add_platform_device() - Allocate a platform device for APMT
> node
> > + * @node: Pointer to device ACPI APMT node
> > + *
> > + * Returns: 0 on success, <0 failure
> > + */
> > +static int __init apmt_add_platform_device(struct acpi_apmt_node
> *node,
> > + struct fwnode_handle *fwnode)
>
> I queued this already, but my testing kicked up a nit that 'fwnode' is not
> described in the kerneldoc. Please can you send a follow-up fix for that,
> based on for-next/acpi? The indentation is also pretty weird with extra
> parameter.
>

Thanks for getting this patch. I have sent the follow-up fix with:
https://lore.kernel.org/linux-arm-kernel/20221111234323.16182-1-bwicaksono@xxxxxxxxxx/

Regards,
Besar

> Will