From: Andrew Lunn <andrew@lunn.ch>
To: Francesco Dolcini <francesco.dolcini@toradex.com>
Cc: Francesco Dolcini <francesco@dolcini.it>,
Rob Herring <robh@kernel.org>,
Krzysztof Kozlowski <krzk+dt@kernel.org>,
Conor Dooley <conor+dt@kernel.org>, Frank Li <Frank.Li@nxp.com>,
Sascha Hauer <s.hauer@pengutronix.de>,
Pengutronix Kernel Team <kernel@pengutronix.de>,
Fabio Estevam <festevam@gmail.com>,
Shawn Guo <shawnguo@kernel.org>,
devicetree@vger.kernel.org, linux-kernel@vger.kernel.org,
imx@lists.linux.dev, linux-arm-kernel@lists.infradead.org,
Emanuele Ghidoli <emanuele.ghidoli@toradex.com>,
Ernest Van Hoecke <ernest.vanhoecke@toradex.com>,
Franz Schnyder <franz.schnyder@toradex.com>
Subject: Re: [PATCH v2 3/7] arm64: dts: freescale: Add Lino iMX93
Date: Tue, 15 Sep 2026 21:57:56 +0200 [thread overview]
Message-ID: <95dcbf3e-193d-460b-b6b9-cd412394e4c6@lunn.ch> (raw)
In-Reply-To: <aqmG91HwmKe-enfy@francesco-nb>
> Would you mind to articulate in which situation such race condition can
> happen?
Most PHYs have a number of interrupt sources. Taking a random example:
/* DM9161 Interrupt Register */
#define MII_DM9161_INTR_DPLX_CHANGE 0x0010
#define MII_DM9161_INTR_SPD_CHANGE 0x0008
#define MII_DM9161_INTR_LINK_CHANGE 0x0004
#define MII_DM9161_INTR_CHANGE \
(MII_DM9161_INTR_DPLX_CHANGE | \
MII_DM9161_INTR_SPD_CHANGE | \
MII_DM9161_INTR_LINK_CHANGE)
and a completely made up example which results in problems...
Three interrupts are enabled. Say the PHY reports a duplex change
first. That causes the interrupt line to go low, giving a downward
edge. The interrupt handler fires, and reads the interrupt status
register. In order the clear the interrupt you need to access another
register about duplex. Before you do that, the link interrupt fires,
setting the link bit in the status register. However, there is not
another edge, because the duplex interrupt has not been cleared
yet. The PHY driver does clear the duplex interrupt and exits the
interrupt handler.
The interrupt line is still low, indicating a link interrupt, but
without an edge, no interrupt handler is triggered. The interrupt has
been lost, and the link is reported down, despite being up.
If however you are using level interrupts, as soon as the interrupt
handler exits, and reenables the interrupt in the parent interrupt
controller, it fires again, and the link interrupt is handled.
If you have multiple interrupts indicated by a single line, you should
use level handling in the parent interrupt controller.
Andrew
next prev parent reply other threads:[~2026-09-15 19:58 UTC|newest]
Thread overview: 24+ messages / expand[flat|nested] mbox.gz Atom feed top
2026-09-11 9:19 [PATCH v2 0/7] arm64: dts: freescale: Add Toradex Lino and OSM iMX91/iMX93 Francesco Dolcini
2026-09-11 9:19 ` [PATCH v2 1/7] dt-bindings: arm: fsl: Add Lino iMX91/iMX93 Francesco Dolcini
2026-09-11 9:19 ` [PATCH v2 2/7] dt-bindings: arm: fsl: Add Toradex OSM iMX91/iMX93 Francesco Dolcini
2026-09-11 9:19 ` [PATCH v2 3/7] arm64: dts: freescale: Add Lino iMX93 Francesco Dolcini
2026-09-11 14:30 ` Frank Li
2026-09-14 5:42 ` Francesco Dolcini
2026-09-14 14:28 ` Frank Li
2026-09-14 14:36 ` Francesco Dolcini
2026-09-17 14:08 ` Francesco Dolcini
2026-09-17 15:51 ` Frank Li
2026-09-17 17:00 ` Francesco Dolcini
2026-09-15 13:19 ` Andrew Lunn
2026-09-15 13:28 ` Francesco Dolcini
2026-09-15 16:49 ` Andrew Lunn
2026-09-15 17:57 ` Francesco Dolcini
2026-09-15 19:57 ` Andrew Lunn [this message]
2026-09-16 5:57 ` Francesco Dolcini
2026-09-16 12:27 ` Andrew Lunn
2026-09-16 12:43 ` Francesco Dolcini
2026-09-16 13:03 ` Andrew Lunn
2026-09-11 9:19 ` [PATCH v2 4/7] arm64: dts: freescale: imx93-lino: Add dahlia Francesco Dolcini
2026-09-11 9:19 ` [PATCH v2 5/7] arm64: dts: freescale: Add Lino iMX91 Francesco Dolcini
2026-09-11 9:19 ` [PATCH v2 6/7] arm64: dts: freescale: Add Toradex OSM iMX93 Francesco Dolcini
2026-09-11 9:19 ` [PATCH v2 7/7] arm64: dts: freescale: Add Toradex OSM iMX91 Francesco Dolcini
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=95dcbf3e-193d-460b-b6b9-cd412394e4c6@lunn.ch \
--to=andrew@lunn.ch \
--cc=Frank.Li@nxp.com \
--cc=conor+dt@kernel.org \
--cc=devicetree@vger.kernel.org \
--cc=emanuele.ghidoli@toradex.com \
--cc=ernest.vanhoecke@toradex.com \
--cc=festevam@gmail.com \
--cc=francesco.dolcini@toradex.com \
--cc=francesco@dolcini.it \
--cc=franz.schnyder@toradex.com \
--cc=imx@lists.linux.dev \
--cc=kernel@pengutronix.de \
--cc=krzk+dt@kernel.org \
--cc=linux-arm-kernel@lists.infradead.org \
--cc=linux-kernel@vger.kernel.org \
--cc=robh@kernel.org \
--cc=s.hauer@pengutronix.de \
--cc=shawnguo@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: 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®