From: "Rafael J. Wysocki" <rafael@kernel.org> To: Daniel Scally <djrscally@gmail.com> Cc: Linux Kernel Mailing List <linux-kernel@vger.kernel.org>, ACPI Devel Maling List <linux-acpi@vger.kernel.org>, linux-gpio@vger.kernel.org, linux-i2c <linux-i2c@vger.kernel.org>, Platform Driver <platform-driver-x86@vger.kernel.org>, "open list:ACPI COMPONENT ARCHITECTURE (ACPICA)" <devel@acpica.org>, "Rafael J. Wysocki" <rjw@rjwysocki.net>, Len Brown <lenb@kernel.org>, andy@kernel.org, Mika Westerberg <mika.westerberg@linux.intel.com>, Linus Walleij <linus.walleij@linaro.org>, Bartosz Golaszewski <bgolaszewski@baylibre.com>, Wolfram Sang <wsa@kernel.org>, Lee Jones <lee.jones@linaro.org>, Hans de Goede <hdegoede@redhat.com>, Mark Gross <mgross@linux.intel.com>, Robert Moore <robert.moore@intel.com>, Erik Kaneda <erik.kaneda@intel.com>, Sakari Ailus <sakari.ailus@linux.intel.com>, Andy Shevchenko <andriy.shevchenko@linux.intel.com>, Laurent Pinchart <laurent.pinchart@ideasonboard.com>, Kieran Bingham <kieran.bingham@ideasonboard.com> Subject: Re: [PATCH v2 2/7] acpi: utils: Add function to fetch dependent acpi_devices Date: Mon, 18 Jan 2021 17:14:17 +0100 [thread overview] Message-ID: <CAJZ5v0gVQsZ4rxXW8uMidW9zfY_S50zpfrL-Gq0J3Z4-qqBiww@mail.gmail.com> (raw) In-Reply-To: <20210118003428.568892-3-djrscally@gmail.com> On Mon, Jan 18, 2021 at 1:37 AM Daniel Scally <djrscally@gmail.com> wrote: > > In some ACPI tables we encounter, devices use the _DEP method to assert > a dependence on other ACPI devices as opposed to the OpRegions that the > specification intends. We need to be able to find those devices "from" > the dependee, so add a function to parse all ACPI Devices and check if > the include the handle of the dependee device in their _DEP buffer. What exactly do you need this for? Would it be practical to look up the suppliers in acpi_dep_list instead? Note that supplier drivers may remove entries from there, but does that matter for your use case? > Signed-off-by: Daniel Scally <djrscally@gmail.com> > --- > Changes in v2: > - Used acpi_lpss_dep() as Andy suggested. > > drivers/acpi/utils.c | 34 ++++++++++++++++++++++++++++++++++ > include/acpi/acpi_bus.h | 2 ++ > 2 files changed, 36 insertions(+) > > diff --git a/drivers/acpi/utils.c b/drivers/acpi/utils.c > index 78b38775f18b..ec6a2406a886 100644 > --- a/drivers/acpi/utils.c > +++ b/drivers/acpi/utils.c > @@ -831,6 +831,18 @@ bool acpi_lpss_dep(struct acpi_device *adev, acpi_handle handle) > return false; > } > > +static int acpi_dev_match_by_dep(struct device *dev, const void *data) > +{ > + struct acpi_device *adev = to_acpi_device(dev); > + const struct acpi_device *dependee = data; > + acpi_handle handle = dependee->handle; > + > + if (acpi_lpss_dep(adev, handle)) > + return 1; > + > + return 0; > +} > + > /** > * acpi_dev_present - Detect that a given ACPI device is present > * @hid: Hardware ID of the device. > @@ -866,6 +878,28 @@ bool acpi_dev_present(const char *hid, const char *uid, s64 hrv) > } > EXPORT_SYMBOL(acpi_dev_present); > > +/** > + * acpi_dev_get_next_dep_dev - Return next ACPI device dependent on input dev > + * @adev: Pointer to the dependee device > + * @prev: Pointer to the previous dependent device (or NULL for first match) > + * > + * Return the next ACPI device which declares itself dependent on @adev in > + * the _DEP buffer. > + * > + * The caller is responsible to call put_device() on the returned device. > + */ > +struct acpi_device *acpi_dev_get_next_dep_dev(struct acpi_device *adev, > + struct acpi_device *prev) > +{ > + struct device *start = prev ? &prev->dev : NULL; > + struct device *dev; > + > + dev = bus_find_device(&acpi_bus_type, start, adev, acpi_dev_match_by_dep); > + > + return dev ? to_acpi_device(dev) : NULL; > +} > +EXPORT_SYMBOL(acpi_dev_get_next_dep_dev); > + > /** > * acpi_dev_get_next_match_dev - Return the next match of ACPI device > * @adev: Pointer to the previous acpi_device matching this @hid, @uid and @hrv > diff --git a/include/acpi/acpi_bus.h b/include/acpi/acpi_bus.h > index 02a716a0af5d..33deb22294f2 100644 > --- a/include/acpi/acpi_bus.h > +++ b/include/acpi/acpi_bus.h > @@ -683,6 +683,8 @@ static inline bool acpi_device_can_poweroff(struct acpi_device *adev) > > bool acpi_dev_hid_uid_match(struct acpi_device *adev, const char *hid2, const char *uid2); > > +struct acpi_device * > +acpi_dev_get_next_dep_dev(struct acpi_device *adev, struct acpi_device *prev); > struct acpi_device * > acpi_dev_get_next_match_dev(struct acpi_device *adev, const char *hid, const char *uid, s64 hrv); > struct acpi_device * > -- > 2.25.1 >
WARNING: multiple messages have this Message-ID (diff)
From: Rafael J. Wysocki <rafael at kernel.org> To: devel@acpica.org Subject: [Devel] Re: [PATCH v2 2/7] acpi: utils: Add function to fetch dependent acpi_devices Date: Mon, 18 Jan 2021 17:14:17 +0100 [thread overview] Message-ID: <CAJZ5v0gVQsZ4rxXW8uMidW9zfY_S50zpfrL-Gq0J3Z4-qqBiww@mail.gmail.com> (raw) In-Reply-To: 20210118003428.568892-3-djrscally@gmail.com [-- Attachment #1: Type: text/plain, Size: 3531 bytes --] On Mon, Jan 18, 2021 at 1:37 AM Daniel Scally <djrscally(a)gmail.com> wrote: > > In some ACPI tables we encounter, devices use the _DEP method to assert > a dependence on other ACPI devices as opposed to the OpRegions that the > specification intends. We need to be able to find those devices "from" > the dependee, so add a function to parse all ACPI Devices and check if > the include the handle of the dependee device in their _DEP buffer. What exactly do you need this for? Would it be practical to look up the suppliers in acpi_dep_list instead? Note that supplier drivers may remove entries from there, but does that matter for your use case? > Signed-off-by: Daniel Scally <djrscally(a)gmail.com> > --- > Changes in v2: > - Used acpi_lpss_dep() as Andy suggested. > > drivers/acpi/utils.c | 34 ++++++++++++++++++++++++++++++++++ > include/acpi/acpi_bus.h | 2 ++ > 2 files changed, 36 insertions(+) > > diff --git a/drivers/acpi/utils.c b/drivers/acpi/utils.c > index 78b38775f18b..ec6a2406a886 100644 > --- a/drivers/acpi/utils.c > +++ b/drivers/acpi/utils.c > @@ -831,6 +831,18 @@ bool acpi_lpss_dep(struct acpi_device *adev, acpi_handle handle) > return false; > } > > +static int acpi_dev_match_by_dep(struct device *dev, const void *data) > +{ > + struct acpi_device *adev = to_acpi_device(dev); > + const struct acpi_device *dependee = data; > + acpi_handle handle = dependee->handle; > + > + if (acpi_lpss_dep(adev, handle)) > + return 1; > + > + return 0; > +} > + > /** > * acpi_dev_present - Detect that a given ACPI device is present > * @hid: Hardware ID of the device. > @@ -866,6 +878,28 @@ bool acpi_dev_present(const char *hid, const char *uid, s64 hrv) > } > EXPORT_SYMBOL(acpi_dev_present); > > +/** > + * acpi_dev_get_next_dep_dev - Return next ACPI device dependent on input dev > + * @adev: Pointer to the dependee device > + * @prev: Pointer to the previous dependent device (or NULL for first match) > + * > + * Return the next ACPI device which declares itself dependent on @adev in > + * the _DEP buffer. > + * > + * The caller is responsible to call put_device() on the returned device. > + */ > +struct acpi_device *acpi_dev_get_next_dep_dev(struct acpi_device *adev, > + struct acpi_device *prev) > +{ > + struct device *start = prev ? &prev->dev : NULL; > + struct device *dev; > + > + dev = bus_find_device(&acpi_bus_type, start, adev, acpi_dev_match_by_dep); > + > + return dev ? to_acpi_device(dev) : NULL; > +} > +EXPORT_SYMBOL(acpi_dev_get_next_dep_dev); > + > /** > * acpi_dev_get_next_match_dev - Return the next match of ACPI device > * @adev: Pointer to the previous acpi_device matching this @hid, @uid and @hrv > diff --git a/include/acpi/acpi_bus.h b/include/acpi/acpi_bus.h > index 02a716a0af5d..33deb22294f2 100644 > --- a/include/acpi/acpi_bus.h > +++ b/include/acpi/acpi_bus.h > @@ -683,6 +683,8 @@ static inline bool acpi_device_can_poweroff(struct acpi_device *adev) > > bool acpi_dev_hid_uid_match(struct acpi_device *adev, const char *hid2, const char *uid2); > > +struct acpi_device * > +acpi_dev_get_next_dep_dev(struct acpi_device *adev, struct acpi_device *prev); > struct acpi_device * > acpi_dev_get_next_match_dev(struct acpi_device *adev, const char *hid, const char *uid, s64 hrv); > struct acpi_device * > -- > 2.25.1 >
next prev parent reply other threads:[~2021-01-18 16:16 UTC|newest] Thread overview: 107+ messages / expand[flat|nested] mbox.gz Atom feed top 2021-01-18 0:34 [PATCH v2 0/7] Introduce intel_skl_int3472 driver Daniel Scally 2021-01-18 0:34 ` [PATCH v2 1/7] acpi: utils: move acpi_lpss_dep() to utils Daniel Scally 2021-01-18 7:24 ` Laurent Pinchart 2021-01-18 8:31 ` Daniel Scally 2021-01-18 12:29 ` Andy Shevchenko 2021-01-18 12:35 ` Daniel Scally 2021-01-18 12:28 ` Andy Shevchenko 2021-01-18 16:06 ` Rafael J. Wysocki 2021-01-18 16:06 ` [Devel] " Rafael J. Wysocki 2021-01-18 16:42 ` Andy Shevchenko 2021-01-18 0:34 ` [PATCH v2 2/7] acpi: utils: Add function to fetch dependent acpi_devices Daniel Scally 2021-01-18 7:34 ` Laurent Pinchart 2021-01-18 8:37 ` Daniel Scally 2021-01-18 12:33 ` Andy Shevchenko 2021-01-18 13:37 ` Daniel Scally 2021-01-18 16:14 ` Rafael J. Wysocki [this message] 2021-01-18 16:14 ` [Devel] " Rafael J. Wysocki 2021-01-18 20:51 ` Daniel Scally 2021-01-19 13:15 ` Rafael J. Wysocki 2021-01-19 13:15 ` [Devel] " Rafael J. Wysocki 2021-01-19 13:28 ` Daniel Scally 2021-01-21 9:47 ` Daniel Scally 2021-01-21 11:58 ` Rafael J. Wysocki 2021-01-21 11:58 ` [Devel] " Rafael J. Wysocki 2021-01-21 12:04 ` Daniel Scally 2021-01-21 14:39 ` Rafael J. Wysocki 2021-01-21 14:39 ` [Devel] " Rafael J. Wysocki 2021-01-21 16:34 ` Daniel Scally 2021-01-21 18:08 ` Rafael J. Wysocki 2021-01-21 18:08 ` [Devel] " Rafael J. Wysocki 2021-01-21 21:06 ` Daniel Scally 2021-02-02 9:58 ` Daniel Scally 2021-02-02 11:27 ` Andy Shevchenko 2021-02-02 14:02 ` Rafael J. Wysocki 2021-02-02 14:02 ` [Devel] " Rafael J. Wysocki 2021-01-18 0:34 ` [PATCH v2 3/7] i2c: i2c-core-base: Use format macro in i2c_dev_set_name() Daniel Scally 2021-01-18 7:28 ` Laurent Pinchart 2021-01-18 12:41 ` Andy Shevchenko 2021-01-18 9:41 ` Sakari Ailus 2021-01-18 9:42 ` Sakari Ailus 2021-01-18 9:48 ` Wolfram Sang 2021-01-18 12:39 ` Andy Shevchenko 2021-01-18 0:34 ` [PATCH v2 4/7] i2c: i2c-core-acpi: Add i2c_acpi_dev_name() Daniel Scally 2021-01-18 9:18 ` Laurent Pinchart 2021-01-18 13:41 ` Andy Shevchenko 2021-01-19 13:19 ` Rafael J. Wysocki 2021-01-19 13:19 ` [Devel] " Rafael J. Wysocki 2021-01-28 9:00 ` Wolfram Sang 2021-01-28 9:15 ` Daniel Scally 2021-01-28 9:17 ` Wolfram Sang 2021-01-28 9:22 ` Daniel Scally 2021-01-18 13:39 ` Andy Shevchenko 2021-01-18 18:43 ` Joe Perches 2021-01-18 18:56 ` Andy Shevchenko 2021-01-18 19:00 ` Joe Perches 2021-01-18 19:01 ` Andy Shevchenko 2021-01-18 0:34 ` [PATCH v2 5/7] gpio: gpiolib-acpi: Export acpi_get_gpiod() Daniel Scally 2021-01-18 7:37 ` Laurent Pinchart 2021-01-18 13:45 ` Andy Shevchenko 2021-01-18 13:46 ` Andy Shevchenko 2021-01-18 21:32 ` Daniel Scally 2021-01-18 0:34 ` [PATCH v2 6/7] platform: x86: Add intel_skl_int3472 driver Daniel Scally 2021-01-18 9:15 ` Laurent Pinchart 2021-01-18 14:46 ` Andy Shevchenko 2021-01-18 21:19 ` Daniel Scally 2021-01-19 0:11 ` Daniel Scally 2021-01-19 6:21 ` Laurent Pinchart 2021-01-19 9:35 ` Andy Shevchenko 2021-01-19 16:49 ` Laurent Pinchart 2021-01-19 9:33 ` Andy Shevchenko 2021-01-19 9:34 ` Daniel Scally 2021-01-19 16:36 ` Laurent Pinchart 2021-01-19 17:43 ` Andy Shevchenko 2021-01-20 4:18 ` Laurent Pinchart 2021-01-20 11:44 ` Andy Shevchenko 2021-01-21 21:08 ` Daniel Scally 2021-01-19 9:24 ` Andy Shevchenko 2021-01-19 10:40 ` Daniel Scally 2021-01-19 11:08 ` Andy Shevchenko 2021-01-19 16:48 ` Laurent Pinchart 2021-01-19 17:51 ` Andy Shevchenko 2021-01-20 4:21 ` Laurent Pinchart 2021-01-20 12:57 ` Andy Shevchenko 2021-01-21 0:18 ` Daniel Scally 2021-02-07 11:00 ` Daniel Scally 2021-02-07 11:56 ` Andy Shevchenko 2021-02-07 11:56 ` [Devel] " Andy Shevchenko 2021-01-18 20:46 ` Daniel Scally 2021-01-19 6:19 ` Laurent Pinchart 2021-01-19 8:43 ` Daniel Scally 2021-01-19 16:33 ` Laurent Pinchart 2021-01-18 11:12 ` Barnabás Pőcze 2021-01-18 13:51 ` andriy.shevchenko 2021-01-18 14:51 ` Barnabás Pőcze 2021-01-18 15:23 ` andriy.shevchenko 2021-01-18 15:32 ` Hans de Goede 2021-01-18 15:48 ` andriy.shevchenko 2021-01-18 16:00 ` Daniel Scally 2021-01-18 16:03 ` Hans de Goede 2021-01-18 17:05 ` Laurent Pinchart 2021-01-19 10:56 ` Kieran Bingham 2021-01-19 11:11 ` Andy Shevchenko 2021-01-19 11:12 ` Daniel Scally 2021-01-18 0:34 ` [PATCH v2 7/7] mfd: Remove tps68470 MFD driver Daniel Scally 2021-01-18 7:42 ` Laurent Pinchart 2021-01-18 13:53 ` Andy Shevchenko 2021-01-18 20:07 ` Joe Perches
Reply instructions: You may reply publicly to this message via plain-text email using any one of the following methods: * Save the following mbox file, import it into your mail client, and reply-to-all from there: mbox Avoid top-posting and favor interleaved quoting: https://en.wikipedia.org/wiki/Posting_style#Interleaved_style * Reply using the --to, --cc, and --in-reply-to switches of git-send-email(1): git send-email \ --in-reply-to=CAJZ5v0gVQsZ4rxXW8uMidW9zfY_S50zpfrL-Gq0J3Z4-qqBiww@mail.gmail.com \ --to=rafael@kernel.org \ --cc=andriy.shevchenko@linux.intel.com \ --cc=andy@kernel.org \ --cc=bgolaszewski@baylibre.com \ --cc=devel@acpica.org \ --cc=djrscally@gmail.com \ --cc=erik.kaneda@intel.com \ --cc=hdegoede@redhat.com \ --cc=kieran.bingham@ideasonboard.com \ --cc=laurent.pinchart@ideasonboard.com \ --cc=lee.jones@linaro.org \ --cc=lenb@kernel.org \ --cc=linus.walleij@linaro.org \ --cc=linux-acpi@vger.kernel.org \ --cc=linux-gpio@vger.kernel.org \ --cc=linux-i2c@vger.kernel.org \ --cc=linux-kernel@vger.kernel.org \ --cc=mgross@linux.intel.com \ --cc=mika.westerberg@linux.intel.com \ --cc=platform-driver-x86@vger.kernel.org \ --cc=rjw@rjwysocki.net \ --cc=robert.moore@intel.com \ --cc=sakari.ailus@linux.intel.com \ --cc=wsa@kernel.org \ /path/to/YOUR_REPLY https://kernel.org/pub/software/scm/git/docs/git-send-email.html * If your mail client supports setting the In-Reply-To header via mailto: links, try the mailto: linkBe sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes, see mirroring instructions on how to clone and mirror all data and code used by this external index.