On Wed, Mar 20, 2019 at 06:49:40PM +0000, Suzuki K Poulose wrote: > The stimulus base for STM device must be listed as the second memory > resource, followed by the programming base address. Add support for > parsing the information for ACPI. > > Cc: Mathieu Poirier <mathieu.poirier@xxxxxxxxxx> > Cc: "Rafael J. Wysocki" <rjw@xxxxxxxxxxxxx> > Signed-off-by: Suzuki K Poulose <suzuki.poulose@xxxxxxx> > --- > drivers/hwtracing/coresight/coresight-stm.c | 43 +++++++++++++++++++++++++++++ > 1 file changed, 43 insertions(+) > > diff --git a/drivers/hwtracing/coresight/coresight-stm.c b/drivers/hwtracing/coresight/coresight-stm.c > index d94ae22..995443a 100644 > --- a/drivers/hwtracing/coresight/coresight-stm.c > +++ b/drivers/hwtracing/coresight/coresight-stm.c > @@ -16,6 +16,7 @@ > * (C) 2015-2016 Chunyan Zhang <zhang.chunyan@xxxxxxxxxx> > */ > #include <asm/local.h> > +#include <linux/acpi.h> > #include <linux/amba/bus.h> > #include <linux/bitmap.h> > #include <linux/clk.h> > @@ -717,10 +718,52 @@ static inline int of_stm_get_stimulus_area(struct device *dev, > } > #endif > > +#ifdef CONFIG_ACPI > +static int acpi_stm_get_stimulus_area(struct device *dev, struct resource *res) > +{ > + int rc; > + bool found_base = false; > + struct resource_entry *rent; > + LIST_HEAD(res_list); > + > + struct acpi_device *adev = ACPI_COMPANION(dev); > + > + if (!adev) > + return -ENODEV; > + rc = acpi_dev_get_resources(adev, &res_list, NULL, NULL); > + if (rc < 0) > + return rc; > + > + rc = -ENOENT; > + list_for_each_entry(rent, &res_list, node) { > + if (resource_type(rent->res) != IORESOURCE_MEM) > + continue; > + if (found_base) { > + *res = *rent->res; > + rc = 0; > + break; > + } > + > + found_base = true; Is the ACPI binding crystal clear on the fact that the second resource region has to be for stimulus ports? > + } > + > + acpi_dev_free_resource_list(&res_list); > + return rc; > +} > +#else > +static inline int acpi_stm_get_stimulus_area(struct device *dev, > + struct resource *res) > +{ > + return -ENOENT; > +} > +#endif > + > static int stm_get_stimulus_area(struct device *dev, struct resource *res) > { > if (dev->of_node) Wouldn't it be better to use is_of_node()? > return of_stm_get_stimulus_area(dev, res); > + else if (is_acpi_node(dev->fwnode) is_acpi_device_node()? > + return acpi_stm_get_stimulus_area(dev, res); > return -ENOENT; > } > > -- > 2.7.4 >