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 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.