From: Thomas Gleixner <tglx@kernel.org>
To: Meghana Malladi <m-malladi@ti.com>,
grzegorz.jaszczyk@linaro.org, maz@kernel.org, rogerq@ti.com,
david@lechnology.com, afd@ti.com
Cc: linux-kernel@vger.kernel.org, srk@ti.com,
Vignesh Raghavendra <vigneshr@ti.com>,
Roger Quadros <rogerq@kernel.org>,
danishanwar@ti.com, m-malladi@ti.com, Suman Anna <s-anna@ti.com>,
Grygorii Strashko <grygorii.strashko@ti.com>
Subject: Re: [PATCH v2 3/3] irqchip/irq-pruss-intc: Fix processing of IEP interrupts
Date: Sun, 22 Feb 2026 23:55:32 +0100 [thread overview]
Message-ID: <87v7fov15n.ffs@tglx> (raw)
In-Reply-To: <20260218093730.3123342-4-m-malladi@ti.com>
On Wed, Feb 18 2026 at 15:07, Meghana Malladi wrote:
> IEP compare/capture events are level-triggered and remain asserted until
> the IEP CMP/CAP status register is cleared. The PRUSS INTC acknowledges
The INTC does not acknowledge anything. The driver does.
> this event (via SICR) before the IEP source is actually cleared, leaving the
> SECR latch still set. When linux unmasks the interrupt after the threaded
> handler completes, the INTC still sees the event as pending, resulting in
> an unintended second interrupt.
>
> The solution is to actually ack these IRQs from pruss_intc_irq_unmask()
s/IRQ/interrupt/g
> after the IRQ source is cleared in HW.
>
> The interrupt handling sequence is as follows:
> IEP hardware
> ============
> [1] Compare match occurs
> [2] IEP sets CMP/CAP status bit = 1
> [3] Output level stays HIGH until software clears IEP status
>
> PRUSS INTC
> ==========
> [4] Detects level HIGH → sets SECR[event] = 1
> [5] Raises host IRQ to Linux
>
> Linux interrupt flow (oneshot)
> ==============================
> HARD IRQ:
> [6] pruss_intc_irq_handler()
> [7] mask_ack_irq()
> → writes SICR = event
> → tries to clear SECR
> BUT level still HIGH → INTC still sees it pending
>
> THREAD HANDLER:
> [8] icss_iep_cap_cmp_handler()
> → clears IEP CMP/CAP status bit
> → IEP output level goes LOW
>
> IRQ FINALIZATION:
> [9] irq_finalize_oneshot()
> [10] pruss_intc_irq_unmask():
> Without fix:
> - EISR reenables event
> - INTC still thinks event pending (stale SECR)
> → SECOND IRQ (spurious)
>
> With fix:
> - Write SICR again (now level LOW → INTC clears latch)
> - Then EISR enables event cleanly
> → No spurious IRQ
Having the ACK in the unmask is fundamentally wrong and a horrible hack.
The driver uses the wrong handler. That's what handle_fasteoi_irq() is
for.
All you need is to set the IRQCHIP_EOI_THREADED flag on the interrupt
chip and implement irq_eoi() instead of irq_ack().
For the non-threaded cases this spares the mask/unmask dance
completely. For the threaded oneshot case it masks on entry and
irq_finalize_oneshot() does the EOI and the unmask via
unmask_threaded_irq().
No?
Thanks,
tglx
prev parent reply other threads:[~2026-02-22 22:55 UTC|newest]
Thread overview: 8+ messages / expand[flat|nested] mbox.gz Atom feed top
2026-02-18 9:37 [PATCH v2 0/3] Bug Fixes for PRUSS irqchip driver Meghana Malladi
2026-02-18 9:37 ` [PATCH v2 1/3] irqchip/irq-pruss-intc: Fix enabling of intc events Meghana Malladi
2026-02-22 22:32 ` Thomas Gleixner
2026-02-18 9:37 ` [PATCH v2 2/3] irqchip/irq-pruss-intc: Fix listed IRQ type in /proc/interrupts Meghana Malladi
2026-02-22 22:39 ` Thomas Gleixner
2026-02-22 22:46 ` Thomas Gleixner
2026-02-18 9:37 ` [PATCH v2 3/3] irqchip/irq-pruss-intc: Fix processing of IEP interrupts Meghana Malladi
2026-02-22 22:55 ` Thomas Gleixner [this message]
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=87v7fov15n.ffs@tglx \
--to=tglx@kernel.org \
--cc=afd@ti.com \
--cc=danishanwar@ti.com \
--cc=david@lechnology.com \
--cc=grygorii.strashko@ti.com \
--cc=grzegorz.jaszczyk@linaro.org \
--cc=linux-kernel@vger.kernel.org \
--cc=m-malladi@ti.com \
--cc=maz@kernel.org \
--cc=rogerq@kernel.org \
--cc=rogerq@ti.com \
--cc=s-anna@ti.com \
--cc=srk@ti.com \
--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