Message ID | 20231220235459.2965548-1-markhas@chromium.org |
---|---|
Headers | show |
Series | Improve IRQ wake capability reporting and update the cros_ec driver to use it | expand |
Hi, On Wed, Dec 20, 2023 at 3:55 PM Mark Hasemeyer <markhas@chromium.org> wrote: > > The cros_ec driver currently assumes that cros-ec-spi compatible device > nodes are a wakeup-source even though the wakeup-source property is not > defined. > > Add the wakeup-source property to all cros-ec-spi compatible device > nodes to match expected behavior. > > Signed-off-by: Mark Hasemeyer <markhas@chromium.org> > --- > > Changes in v2: > -Split by arch/soc > > arch/arm64/boot/dts/qcom/sdm845-cheza.dtsi | 1 + > 1 file changed, 1 insertion(+) Reviewed-by: Douglas Anderson <dianders@chromium.org>
On 21/12/2023 00:54, Mark Hasemeyer wrote: > The cros_ec driver currently assumes that cros-ec-spi compatible device > nodes are a wakeup-source even though the wakeup-source property is not > defined. > > Add the wakeup-source property to all cros-ec-spi compatible device > nodes to match expected behavior. > You do not need this property, if driver assumes that. Just enable it unconditionally. I don't think anything from previous discussion was resolved. Best regards, Krzysztof
On Wed, Dec 20, 2023 at 04:54:14PM -0700, Mark Hasemeyer wrote: > Currently the cros_ec driver assumes that its associated interrupt is > wake capable. This is an incorrect assumption as some Chromebooks use a > separate wake pin, while others overload the interrupt for wake and IO. > This patch train updates the driver to query the underlying ACPI/DT data > to determine whether or not the IRQ should be enabled for wake. > > Both the device tree and ACPI systems have methods for reporting IRQ > wake capability. In device tree based systems, a node can advertise > itself as a 'wakeup-source'. In ACPI based systems, GpioInt and > Interrupt resource descriptors can use the 'SharedAndWake' or > 'ExclusiveAndWake' share types. > > Some logic is added to the platform, ACPI, and DT subsystems to more > easily pipe wakeirq information up to the driver. Just wondering if you used --histogram diff algo when preparing patches.
On Wed, Dec 20, 2023 at 04:54:31PM -0700, Mark Hasemeyer wrote: > Add wake capability information to the IRQ resource. Wake capability is > assumed based on conventions provided in the devicetree wakeup-source > binding documentation. An interrupt is considered wake capable if the > following are true: > 1. A wakeup-source property exits in the same device node as the > interrupt. > 2. The IRQ is marked as dedicated by setting its interrupt-name to > "wakeup". > > The wakeup-source documentation states that dedicated interrupts can use > device specific interrupt names and device drivers are still welcome to > use their own naming schemes. This API is provided as a helper if one is > willing to conform to the above conventions. > > The ACPI subsystems already provides similar APIs that allow one to > query the wake capability of an IRQ. This brings closer feature parity > to the devicetree. ... > r->start = r->end = irq; > r->flags = IORESOURCE_IRQ | irqd_get_trigger_type(irq_get_irq_data(irq)); > + if (__of_irq_wake_capable(dev, index)) > + r->flags |= IORESOURCE_IRQ_WAKECAPABLE; > r->name = name ? name : of_node_full_name(dev); irq_flags = irqd_get_trigger_type(irq_get_irq_data(irq)); if (__of_irq_wake_capable(dev, index)) irq_flags |= IORESOURCE_IRQ_WAKECAPABLE; *r = DEFINE_RES_NAMED(irq, 1, name ?: of_node_full_name(dev), irq_flags); ? ... Or even refactor ioport.h (in a separate patch) as we seems already have two users (and might be more in the existing code): #define DEFINE_RES_IRQ_NAMED_FLAGS(_irq, _name, _flags) \ DEFINE_RES_NAMED((_irq), 1, (_name), (_flags) | IORESOURCE_IRQ) #define DEFINE_RES_IRQ_NAMED(_irq, _name) \ DEFINE_RES_IRQ_NAMED_FLAGS((_irq), (_name), 0) #define DEFINE_RES_IRQ(_irq) \ DEFINE_RES_IRQ_NAMED((_irq), NULL) (Note, I will Ack such a patch once it appears.)
> Please use subject prefixes matching the subsystem. You can get them for > example with `git log --oneline -- DIRECTORY_OR_FILE` on the directory > your patch is touching. > > You nicely skipped all my filters... No need to resend to fix this, but > fix it if sending a new version. I picked up the tags by using that exact command against "wakeup-source.txt". "Documentation: devicetree:" was used in the originating commit and is why I used it. There isn't really a consistent history wrt to tags on this file. Looking at the containing directory, "dt-bindings: power" looks pretty common. I'll use that unless you'd prefer something else.
> You do not need this property, if driver assumes that. Just enable it > unconditionally. The goal of this patch series is to change exactly that: to prevent the driver from unconditionally enabling the irq for wake. The driver works across numerous buses (spi, uart, i2c, lpc) and supports DT and ACPI. SPI+DT systems all happen to need irq wake enabled. > I don't think anything from previous discussion was > resolved. Which previous discussion do you mean? In v1 it was suggested to split up the DTS changes by arch/soc and add a cover letter (which I did). Wrt to the binding discussion, Sudeep said the new documentation wording looked good to him [1]. [1]: https://lore.kernel.org/all/ZYAjxxHcCOgDVMTQ@bogus/
On 21/12/2023 19:29, Mark Hasemeyer wrote: >> You do not need this property, if driver assumes that. Just enable it >> unconditionally. > > The goal of this patch series is to change exactly that: to prevent > the driver from unconditionally enabling the irq for wake. But why? What is the problem being solved? Is unconditional wakeup in the driver incorrect? If so, mention it shortly in the commit msg, what is rationale because existing one does not justify this change. > The driver works across numerous buses (spi, uart, i2c, lpc) and > supports DT and ACPI. > SPI+DT systems all happen to need irq wake enabled. > >> I don't think anything from previous discussion was >> resolved. > > Which previous discussion do you mean? In v1 it was suggested to split https://lore.kernel.org/all/20231213221124.GB2115075-robh@kernel.org/ Best regards, Krzysztof
On 21/12/2023 19:16, Mark Hasemeyer wrote: >> Please use subject prefixes matching the subsystem. You can get them for >> example with `git log --oneline -- DIRECTORY_OR_FILE` on the directory >> your patch is touching. >> >> You nicely skipped all my filters... No need to resend to fix this, but >> fix it if sending a new version. > > I picked up the tags by using that exact command against "wakeup-source.txt". > "Documentation: devicetree:" was used in the originating commit and is > why I used it. There isn't really a consistent history wrt to tags on > this file. Looking at the containing directory, "dt-bindings: power" All bindings use dt-bindings: prefix. Either first or second. It's the only correct, even though you will find way too many wrong ones... yet still my command gives you the answer. Best regards, Krzysztof
> >> You do not need this property, if driver assumes that. Just enable it > >> unconditionally. > > > > The goal of this patch series is to change exactly that: to prevent > > the driver from unconditionally enabling the irq for wake. > > But why? What is the problem being solved? Is unconditional wakeup in > the driver incorrect? If so, mention it shortly in the commit msg, what > is rationale because existing one does not justify this change. The cover letter talks about it: "Currently the cros_ec driver assumes that its associated interrupt is wake capable. This is an incorrect assumption as some Chromebooks use a separate wake pin, while others overload the interrupt for wake and IO." With the current assumption, spurious wakes can occur on systems that use a separate wake pin. I can add wording to the dts patches to help clarify. > > The driver works across numerous buses (spi, uart, i2c, lpc) and > > supports DT and ACPI. > > SPI+DT systems all happen to need irq wake enabled. > > > >> I don't think anything from previous discussion was > >> resolved. > > > > Which previous discussion do you mean? In v1 it was suggested to split > > https://lore.kernel.org/all/20231213221124.GB2115075-robh@kernel.org/ Hmm, I thought that was addressed [2]. I was referencing the existing binding documentation. From there, there was discussion about updating the docs to clarify what was actually intended (patch 3 in this series). I also addressed the ABI break concern in the thread and mentioned it in patch 22. "For device tree base systems, it is not an issue as the relevant device tree entries have been updated and DTS is built from source for each ChromeOS update." Is there a specific concern you feel is not resolved? Or can I make something more clear? [2] https://lore.kernel.org/all/CANg-bXCG61HFW7JFuAd3k+OrCG_F9F3e8brjM-pmBauS53aobQ@mail.gmail.com/
On 21/12/2023 20:24, Mark Hasemeyer wrote: >>>> You do not need this property, if driver assumes that. Just enable it >>>> unconditionally. >>> >>> The goal of this patch series is to change exactly that: to prevent >>> the driver from unconditionally enabling the irq for wake. >> >> But why? What is the problem being solved? Is unconditional wakeup in >> the driver incorrect? If so, mention it shortly in the commit msg, what >> is rationale because existing one does not justify this change. > > The cover letter talks about it: > "Currently the cros_ec driver assumes that its associated interrupt is > wake capable. This is an incorrect assumption as some Chromebooks use > a separate wake pin, while others overload the interrupt for wake and > IO." > With the current assumption, spurious wakes can occur on systems that > use a separate wake pin. This sentence would be enough. > I can add wording to the dts patches to help clarify. > >>> The driver works across numerous buses (spi, uart, i2c, lpc) and >>> supports DT and ACPI. >>> SPI+DT systems all happen to need irq wake enabled. >>> >>>> I don't think anything from previous discussion was >>>> resolved. >>> >>> Which previous discussion do you mean? In v1 it was suggested to split >> >> https://lore.kernel.org/all/20231213221124.GB2115075-robh@kernel.org/ > > Hmm, I thought that was addressed [2]. I was referencing the existing > binding documentation. From there, there was discussion about updating > the docs to clarify what was actually intended (patch 3 in this > series). I also addressed the ABI break concern in the thread and > mentioned it in patch 22. > "For device tree base systems, it is not an issue as the relevant > device tree entries have been updated and DTS is built from source for > each ChromeOS update." > > Is there a specific concern you feel is not resolved? Or can I make > something more clear? > Seems fine, thanks. Best regards, Krzysztof
On Wed, 20 Dec 2023 16:54:31 -0700, Mark Hasemeyer wrote: > Add wake capability information to the IRQ resource. Wake capability is > assumed based on conventions provided in the devicetree wakeup-source > binding documentation. An interrupt is considered wake capable if the > following are true: > 1. A wakeup-source property exits in the same device node as the > interrupt. > 2. The IRQ is marked as dedicated by setting its interrupt-name to > "wakeup". > > The wakeup-source documentation states that dedicated interrupts can use > device specific interrupt names and device drivers are still welcome to > use their own naming schemes. This API is provided as a helper if one is > willing to conform to the above conventions. > > The ACPI subsystems already provides similar APIs that allow one to > query the wake capability of an IRQ. This brings closer feature parity > to the devicetree. > > Signed-off-by: Mark Hasemeyer <markhas@chromium.org> > --- > > Changes in v2: > -Update logic to return true only if wakeup-source property and > "wakeup" interrupt-name are defined > -irq->IRQ, api->API > > drivers/of/irq.c | 32 +++++++++++++++++++++++++++++++- > 1 file changed, 31 insertions(+), 1 deletion(-) > Reviewed-by: Rob Herring <robh@kernel.org>
On Wed, 20 Dec 2023 16:54:33 -0700, Mark Hasemeyer wrote: > The extern keyword is implicit for function declarations. > Remove it where possible and adjust the line wrapping accordingly. > > Signed-off-by: Mark Hasemeyer <markhas@chromium.org> > --- > > Changes in v2: > -New patch > > include/linux/of_irq.h | 35 +++++++++++++++++------------------ > 1 file changed, 17 insertions(+), 18 deletions(-) > Acked-by: Rob Herring <robh@kernel.org>
> Or even refactor ioport.h (in a separate patch) as we seems already have > two users (and might be more in the existing code): > > #define DEFINE_RES_IRQ_NAMED_FLAGS(_irq, _name, _flags) \ > DEFINE_RES_NAMED((_irq), 1, (_name), (_flags) | IORESOURCE_IRQ) > #define DEFINE_RES_IRQ_NAMED(_irq, _name) \ > DEFINE_RES_IRQ_NAMED_FLAGS((_irq), (_name), 0) > #define DEFINE_RES_IRQ(_irq) \ > DEFINE_RES_IRQ_NAMED((_irq), NULL) > > (Note, I will Ack such a patch once it appears.) I'll add a new patch to the series. I'll probably include the MEM, IO, and RES variants as well.
> Just wondering if you used --histogram diff algo when preparing patches.
Not knowingly. I use patman which uses 'git format-patch' under the
covers with some added options:
https://github.com/siemens/u-boot/blob/master/tools/patman/gitutil.py#L308
On Fri, Dec 22, 2023 at 03:30:43PM -0700, Mark Hasemeyer wrote: > > Just wondering if you used --histogram diff algo when preparing patches. > > Not knowingly. I use patman which uses 'git format-patch' under the > covers with some added options: > https://github.com/siemens/u-boot/blob/master/tools/patman/gitutil.py#L308 Add a configuration into your ~/.gitconfig (or local for the project), it really makes the difference.