From: Mika Westerberg <mika.westerberg@linux.intel.com>
To: Sven Peter <sven@kernel.org>
Cc: Heikki Krogerus <heikki.krogerus@linux.intel.com>,
Greg Kroah-Hartman <gregkh@linuxfoundation.org>,
Rob Herring <robh@kernel.org>,
Krzysztof Kozlowski <krzk+dt@kernel.org>,
Conor Dooley <conor+dt@kernel.org>, Janne Grunau <j@jannau.net>,
Neal Gompa <neal@gompa.dev>,
Andreas Noever <andreas.noever@gmail.com>,
Mika Westerberg <westeri@kernel.org>,
Yehezkel Bernat <YehezkelShB@gmail.com>,
Philipp Zabel <p.zabel@pengutronix.de>,
Konrad Dybcio <konradybcio@kernel.org>,
linux-usb@vger.kernel.org, devicetree@vger.kernel.org,
linux-kernel@vger.kernel.org, asahi@lists.linux.dev,
linux-arm-kernel@lists.infradead.org
Subject: Re: [PATCH v2 13/22] thunderbolt: Add ring register accessors to tb_nhi_ops
Date: Tue, 8 Sep 2026 10:32:00 +0200 [thread overview]
Message-ID: <20260908083200.GB106095@black.igk.intel.com> (raw)
In-Reply-To: <20260906-b4-apple-soc-tbt-v2-13-1f80085f93fb@kernel.org>
Hi,
On Sun, Sep 06, 2026 at 08:36:36PM +0200, Sven Peter wrote:
> The ring descriptor and options registers are laid out differently on
> the Apple NHI. Add optional tb_nhi_ops hooks for their base addresses
> which fall back to the standard USB4 register layout when they are not
> set.
>
> Signed-off-by: Sven Peter <sven@kernel.org>
> ---
> drivers/thunderbolt/nhi.c | 32 ++++++++++++++++++++++++++------
> drivers/thunderbolt/nhi.h | 6 ++++++
> 2 files changed, 32 insertions(+), 6 deletions(-)
>
> diff --git a/drivers/thunderbolt/nhi.c b/drivers/thunderbolt/nhi.c
> index fc54ff7edfb9..1b1e4a12c744 100644
> --- a/drivers/thunderbolt/nhi.c
> +++ b/drivers/thunderbolt/nhi.c
> @@ -179,19 +179,37 @@ void nhi_disable_interrupts(struct tb_nhi *nhi)
> static void __iomem *ring_desc_base(struct tb_ring *ring)
> {
> void __iomem *io = ring->nhi->iobase;
> +
Unintended change?
> io += ring->is_tx ? REG_TX_RING_BASE : REG_RX_RING_BASE;
> io += ring->hop * 16;
> return io;
> }
>
> +static void __iomem *nhi_ring_desc_base(struct tb_ring *ring)
> +{
> + if (ring->nhi->ops->ring_desc_base)
> + return ring->nhi->ops->ring_desc_base(ring);
> +
> + return ring_desc_base(ring);
> +}
> +
> static void __iomem *ring_options_base(struct tb_ring *ring)
> {
> void __iomem *io = ring->nhi->iobase;
> +
Ditto here.
> io += ring->is_tx ? REG_TX_OPTIONS_BASE : REG_RX_OPTIONS_BASE;
> io += ring->hop * 32;
> return io;
> }
>
> +static void __iomem *nhi_ring_options_base(struct tb_ring *ring)
> +{
> + if (ring->nhi->ops->ring_options_base)
> + return ring->nhi->ops->ring_options_base(ring);
> +
> + return ring_options_base(ring);
This is better IMO. Although I think even better would be to populate
nhi->ops for both the standard NHI and for Apple (and possibly others) and
then we can just do:
ring->nhi->ops->ring_options_base(..)
or with a wrapper like this that makes it slightly more readable.
It does not need to be part of this series but wanted to mention here.
> +}
> +
> static void ring_iowrite_cons(struct tb_ring *ring, u16 cons)
> {
> /*
> @@ -199,29 +217,31 @@ static void ring_iowrite_cons(struct tb_ring *ring, u16 cons)
> * are ignored by the hardware so we can save one ioread32() by
> * filling the read-only bits with zeroes.
> */
> - iowrite32(cons, ring_desc_base(ring) + 8);
> + iowrite32(cons, nhi_ring_desc_base(ring) + 8);
> }
>
> static void ring_iowrite_prod(struct tb_ring *ring, u16 prod)
> {
> /* See ring_iowrite_cons() above for explanation */
> - iowrite32(prod << 16, ring_desc_base(ring) + 8);
> + iowrite32(prod << 16, nhi_ring_desc_base(ring) + 8);
> }
>
> static void ring_iowrite32desc(struct tb_ring *ring, u32 value, u32 offset)
> {
> - iowrite32(value, ring_desc_base(ring) + offset);
> + iowrite32(value, nhi_ring_desc_base(ring) + offset);
> }
>
> static void ring_iowrite64desc(struct tb_ring *ring, u64 value, u32 offset)
> {
> - iowrite32(value, ring_desc_base(ring) + offset);
> - iowrite32(value >> 32, ring_desc_base(ring) + offset + 4);
> + void __iomem *base = nhi_ring_desc_base(ring);
> +
> + iowrite32(value, base + offset);
> + iowrite32(value >> 32, base + offset + 4);
> }
>
> static void ring_iowrite32options(struct tb_ring *ring, u32 value, u32 offset)
> {
> - iowrite32(value, ring_options_base(ring) + offset);
> + iowrite32(value, nhi_ring_options_base(ring) + offset);
> }
>
> static bool ring_full(struct tb_ring *ring)
> diff --git a/drivers/thunderbolt/nhi.h b/drivers/thunderbolt/nhi.h
> index 4884c3f5a2b2..3a963b0b5b46 100644
> --- a/drivers/thunderbolt/nhi.h
> +++ b/drivers/thunderbolt/nhi.h
> @@ -52,6 +52,10 @@ extern const struct dev_pm_ops nhi_pm_ops;
> * @post_nvm_auth: hook to run after Thunderbolt 3 NVM authentication
> * @request_ring_irq: NHI specific interrupt retrieval hook
> * @release_ring_irq: NHI specific interrupt release hook
> + * @ring_desc_base: NHI specific hook returning the ring descriptor registers.
> + * If not set the standard USB4 NHI registers are used.
> + * @ring_options_base: NHI specific hook returning the ring option registers.
> + * If not set the standard USB4 NHI registers are used.
> * @ring_interrupt_active: NHI specific hook to activate/deactivate the
> * interrupt of a single ring. If not set the
> * standard USB4 NHI registers are used.
> @@ -70,6 +74,8 @@ struct tb_nhi_ops {
> void (*post_nvm_auth)(struct tb_nhi *nhi);
> int (*request_ring_irq)(struct tb_ring *ring, bool no_suspend);
> void (*release_ring_irq)(struct tb_ring *ring);
> + void __iomem *(*ring_desc_base)(struct tb_ring *ring);
> + void __iomem *(*ring_options_base)(struct tb_ring *ring);
> void (*ring_interrupt_active)(struct tb_ring *ring, bool active);
> bool (*is_present)(struct tb_nhi *nhi);
> int (*init_interrupts)(struct tb_nhi *nhi);
>
> --
> 2.55.0
>
next prev parent reply other threads:[~2026-09-08 8:32 UTC|newest]
Thread overview: 55+ messages / expand[flat|nested] mbox.gz Atom feed top
2026-09-06 18:36 [PATCH v2 00/22] Initial USB4/Thunderbolt support for Apple M1/M2/M3 SoCs Sven Peter
2026-09-06 18:36 ` [PATCH v2 01/22] usb: typec: Add alternate mode state notifiers Sven Peter
2026-09-06 18:48 ` sashiko-bot
2026-09-07 13:27 ` Joshua Peisach
2026-09-08 12:00 ` Heikki Krogerus
2026-09-06 18:36 ` [PATCH v2 02/22] usb: typec: Represent USB4 on the Type-C bus Sven Peter
2026-09-06 18:52 ` sashiko-bot
2026-09-07 13:31 ` Joshua Peisach
2026-09-08 12:07 ` Heikki Krogerus
2026-09-06 18:36 ` [PATCH v2 03/22] usb: typec: tipd: Register a USB4 port mode for CD321x Sven Peter
2026-09-06 18:47 ` sashiko-bot
2026-09-06 18:36 ` [PATCH v2 04/22] usb: typec: tipd: Publish CD321x partner alternate modes Sven Peter
2026-09-06 18:54 ` sashiko-bot
2026-09-06 18:36 ` [PATCH v2 05/22] dt-bindings: thunderbolt: Add Apple USB4/Thunderbolt NHI Sven Peter
2026-09-17 22:30 ` Rob Herring (Arm)
2026-09-06 18:36 ` [PATCH v2 06/22] dt-bindings: thunderbolt: Add Apple USB4/Thunderbolt ACIO block Sven Peter
2026-09-17 22:33 ` Rob Herring (Arm)
2026-09-06 18:36 ` [PATCH v2 07/22] thunderbolt: Try reading host DROM from device tree first Sven Peter
2026-09-15 17:20 ` Konrad Dybcio
2026-09-06 18:36 ` [PATCH v2 08/22] thunderbolt: Don't read the UID if we already know it Sven Peter
2026-09-06 19:07 ` sashiko-bot
2026-09-06 18:36 ` [PATCH v2 09/22] thunderbolt: Allocate ring HopID before requesting the ring interrupt Sven Peter
2026-09-06 18:36 ` [PATCH v2 10/22] thunderbolt: Unlock host router ports during startup Sven Peter
2026-09-06 19:03 ` sashiko-bot
2026-09-08 8:22 ` Mika Westerberg
2026-09-06 18:36 ` [PATCH v2 11/22] thunderbolt: Find Apple VSE capability " Sven Peter
2026-09-06 18:45 ` sashiko-bot
2026-09-07 13:38 ` Joshua Peisach
2026-09-08 20:24 ` Sven Peter
2026-09-06 18:36 ` [PATCH v2 12/22] thunderbolt: Add ring_interrupt_active to tb_nhi_ops Sven Peter
2026-09-06 18:36 ` [PATCH v2 13/22] thunderbolt: Add ring register accessors " Sven Peter
2026-09-08 8:32 ` Mika Westerberg [this message]
2026-09-06 18:36 ` [PATCH v2 14/22] thunderbolt: Add ring_interrupt_mask " Sven Peter
2026-09-06 18:36 ` [PATCH v2 15/22] thunderbolt: Add ring_configure " Sven Peter
2026-09-06 18:53 ` sashiko-bot
2026-09-06 18:36 ` [PATCH v2 16/22] thunderbolt: Add add_links " Sven Peter
2026-09-06 18:55 ` sashiko-bot
2026-09-08 8:35 ` Mika Westerberg
2026-09-06 18:36 ` [PATCH v2 17/22] thunderbolt: Add QUIRK_NO_USB3_BW_ALLOC Sven Peter
2026-09-06 18:36 ` [PATCH v2 18/22] thunderbolt: Export symbols required by the Apple Silicon driver Sven Peter
2026-09-06 18:36 ` [PATCH v2 19/22] thunderbolt: Add Apple Silicon support Sven Peter
2026-09-06 18:59 ` sashiko-bot
2026-09-08 9:18 ` Mika Westerberg
2026-09-08 19:02 ` Sven Peter
2026-09-08 19:04 ` Sven Peter
2026-09-09 6:06 ` Mika Westerberg
2026-09-09 15:20 ` Sven Peter
2026-09-09 15:25 ` Sven Peter
2026-09-10 4:52 ` Mika Westerberg
2026-09-10 4:50 ` Mika Westerberg
2026-09-06 18:36 ` [PATCH v2 20/22] arm64: dts: apple: t8103: Add USB4 ACIO and NHI Sven Peter
2026-09-06 18:36 ` [PATCH v2 21/22] arm64: dts: apple: t8112: " Sven Peter
2026-09-06 18:36 ` [PATCH v2 22/22] arm64: dts: apple: t60xx: " Sven Peter
2026-09-06 18:57 ` sashiko-bot
2026-09-07 13:52 ` [PATCH v2 00/22] Initial USB4/Thunderbolt support for Apple M1/M2/M3 SoCs Joshua Peisach
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=20260908083200.GB106095@black.igk.intel.com \
--to=mika.westerberg@linux.intel.com \
--cc=YehezkelShB@gmail.com \
--cc=andreas.noever@gmail.com \
--cc=asahi@lists.linux.dev \
--cc=conor+dt@kernel.org \
--cc=devicetree@vger.kernel.org \
--cc=gregkh@linuxfoundation.org \
--cc=heikki.krogerus@linux.intel.com \
--cc=j@jannau.net \
--cc=konradybcio@kernel.org \
--cc=krzk+dt@kernel.org \
--cc=linux-arm-kernel@lists.infradead.org \
--cc=linux-kernel@vger.kernel.org \
--cc=linux-usb@vger.kernel.org \
--cc=neal@gompa.dev \
--cc=p.zabel@pengutronix.de \
--cc=robh@kernel.org \
--cc=sven@kernel.org \
--cc=westeri@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 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.