From: Meghana Malladi <m-malladi@ti.com>
To: Marc Zyngier <maz@kernel.org>, MD Danish Anwar <danishanwar@ti.com>
Cc: Grzegorz Jaszczyk <grzegorz.jaszczyk@linaro.org>,
Suman Anna <s-anna@ti.com>, David Lechner <david@lechnology.com>,
Roger Quadros <rogerq@kernel.org>, "Andrew F. Davis" <afd@ti.com>,
Thomas Gleixner <tglx@linutronix.de>,
<linux-kernel@vger.kernel.org>, <srk@ti.com>,
<r-gunasekaran@ti.com>, <vigneshr@ti.com>
Subject: Re: [PATCH 3/3] irqchip/irq-pruss-intc: Fix processing of IEP interrupts
Date: Wed, 18 Feb 2026 12:38:45 +0530 [thread overview]
Message-ID: <0968172c-4c41-4157-a13f-bad3dec677a9@ti.com> (raw)
In-Reply-To: <87ediu4nzs.wl-maz@kernel.org>
Hi Marc,
On 9/19/23 13:02, Marc Zyngier wrote:
> On Tue, 19 Sep 2023 07:19:00 +0100,
> MD Danish Anwar <danishanwar@ti.com> wrote:
>>
>> From: Suman Anna <s-anna@ti.com>
>>
>> It was discovered that IEP capture/compare IRQs (event #7 on all SoCs
>> and event #56 on K3 SoCs) are always triggered twice when PPS is
>> generated and CMP hit event detected by IEP.
>>
>> An example of the problem is:
>> pruss_intc_irq_handler
>> generic_handle_irq
>> handle_level_irq
>> mask_ack_irq -> IRQ 7 masked and asked in INTC,
>> but it's not yet cleared on HW level
>> handle_irq_event()
>> <threaded on RT>
>> icss_iep_cap_cmp_handler() -> IRQ 7 is actually processed in HW
>> irq_finalize_oneshot()
>> unmask_irq()
>> pruss_intc_irq_unmask() -> IRQ 7 status is still observed as set
>>
>> The solution is to actually ack these IRQs from pruss_intc_irq_unmask()
>> after the IRQ source is cleared in HW.
>
> What you don't explain is whether the interrupt is level or edge
> triggered? If it is level, then the "quirk" is that the interrupt
> controller is slow to recognise that the level has changed. If it is
> edge, this is a guaranteed recipe to lose interrupts.
>
These are level IRQs, but INTC has latency detecting the source
deassertion, causing the double delivery (The hardware keeps the event
asserted until cleared in IEP) - I will add more details about this fix
in the commit message for v2.
> Even if it is level, what happens if you issue a mask/unmask sequence
> outside of the interrupt handling and that such an interrupt becomes
> pending in between? Does this spurious ack have an effect on the now
> pending interrupt?
>
This ack will not result in any event loss outside IRQ context because,
even if a new event arrives between mask/unmask, it is not lost - as the
level stays asserted until the driver's IEP handler clears it.
>>
>> No public errata available for this yet.
>>
>> Fixes: 04e2d1e06978 ("irqchip/irq-pruss-intc: Add a PRUSS irqchip driver for PRUSS interrupts")
>>
>> Signed-off-by: Grygorii Strashko <grygorii.strashko@ti.com>
>
> Nit: drop the empty line after Fixes:.
>
>> Signed-off-by: Suman Anna <s-anna@ti.com>
>> Signed-off-by: MD Danish Anwar <danishanwar@ti.com>
>> ---
>> drivers/irqchip/irq-pruss-intc.c | 14 ++++++++++++++
>> 1 file changed, 14 insertions(+)
>>
>> diff --git a/drivers/irqchip/irq-pruss-intc.c b/drivers/irqchip/irq-pruss-intc.c
>> index 3cf684ede564..9907847dbda8 100644
>> --- a/drivers/irqchip/irq-pruss-intc.c
>> +++ b/drivers/irqchip/irq-pruss-intc.c
>> @@ -70,6 +70,8 @@
>> #define MAX_PRU_SYS_EVENTS 160
>> #define MAX_PRU_CHANNELS 20
>>
>> +#define MAX_PRU_INT_EVENTS 64
>> +
>> /**
>> * struct pruss_intc_map_record - keeps track of actual mapping state
>> * @value: The currently mapped value (channel or host)
>> @@ -85,10 +87,13 @@ struct pruss_intc_map_record {
>> * @num_system_events: number of input system events handled by the PRUSS INTC
>> * @num_host_events: number of host events (which is equal to number of
>> * channels) supported by the PRUSS INTC
>> + * @quirky_events: bitmask of events that need quirky IRQ handling (limited to
>> + * (internal sources only for now, so 64 bits suffice)
>> */
>> struct pruss_intc_match_data {
>> u8 num_system_events;
>> u8 num_host_events;
>> + u64 quirky_events;
>
> Why limit this to the first 64 interrupts, while the intc can deal
> with 160? What makes you confident that this is solely limited to this
> particular source? And why this source only?
>
This quirk only applies to internal IEP-generated events (IEP0 CMP/CAP &
IEP1 CMP/CAP) and there are no known external events with this behavior.
If future SoCs need quirks beyond 64, the field can be widened, as there
is no known case today.
> M.
>
next prev parent reply other threads:[~2026-02-18 7:08 UTC|newest]
Thread overview: 9+ messages / expand[flat|nested] mbox.gz Atom feed top
2023-09-19 6:18 [PATCH 0/3] Bug Fixes for PRUSS irqchip driver MD Danish Anwar
2023-09-19 6:18 ` [PATCH 1/3] irqchip/irq-pruss-intc: Fix enabling of intc events MD Danish Anwar
2023-09-19 6:18 ` [PATCH 2/3] irqchip/irq-pruss-intc: Fix listed IRQ type in /proc/interrupts MD Danish Anwar
2023-09-19 6:19 ` [PATCH 3/3] irqchip/irq-pruss-intc: Fix processing of IEP interrupts MD Danish Anwar
2023-09-19 7:32 ` Marc Zyngier
2026-02-18 7:08 ` Meghana Malladi [this message]
2026-02-18 11:04 ` Marc Zyngier
2026-02-18 11:26 ` Meghana Malladi
2026-02-22 20:59 ` Thomas Gleixner
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=0968172c-4c41-4157-a13f-bad3dec677a9@ti.com \
--to=m-malladi@ti.com \
--cc=afd@ti.com \
--cc=danishanwar@ti.com \
--cc=david@lechnology.com \
--cc=grzegorz.jaszczyk@linaro.org \
--cc=linux-kernel@vger.kernel.org \
--cc=maz@kernel.org \
--cc=r-gunasekaran@ti.com \
--cc=rogerq@kernel.org \
--cc=s-anna@ti.com \
--cc=srk@ti.com \
--cc=tglx@linutronix.de \
--cc=vigneshr@ti.com \
/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: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox
all inboxes | Powered by JetHome®