linux-kernel.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
* [PATCH v4 0/3] Apple M1 USB4/Thunderbolt DART support
@ 2023-11-26 15:16 Sven Peter
  2023-11-26 15:16 ` [PATCH v4 1/3] dt-bindings: iommu: dart: Add t8103-usb4-dart compatible Sven Peter
                   ` (4 more replies)
  0 siblings, 5 replies; 6+ messages in thread
From: Sven Peter @ 2023-11-26 15:16 UTC (permalink / raw)
  To: Hector Martin, Sven Peter
  Cc: Rob Herring, Krzysztof Kozlowski, Conor Dooley,
	Alyssa Rosenzweig, Joerg Roedel, Will Deacon, Robin Murphy,
	linux-arm-kernel, asahi, iommu, devicetree, linux-kernel

Hi,

The M1 SoCs have a second slightly different variant of the regular
DART used for the USB4 PCIe ports. It supports 64 instead of 16 streams
which requires a minor change to the MMIO layout.
There seems to be no way to tell them apart from the regular DARTs by
just looking at the DART_PARAMs register so we have to add a new
compatible for those.

Changes since v3:
  none

Changes since v2:
  - drop the manual bypass disable
  - added Rob's tag

Changes since v1:
  - apple,t8103-usb4-dart instead of apple,t8103-dart-usb4 as the
    compatible
  - collected Hector's tags

Best,

Sven

Sven Peter (3):
  dt-bindings: iommu: dart: Add t8103-usb4-dart compatible
  iommu: dart: Write to all DART_T8020_STREAM_SELECT
  iommu: dart: Add support for t8103 USB4 DART

 .../devicetree/bindings/iommu/apple,dart.yaml |  1 +
 drivers/iommu/apple-dart.c                    | 35 +++++++++++++++++--
 2 files changed, 34 insertions(+), 2 deletions(-)

-- 
2.34.1


^ permalink raw reply	[flat|nested] 6+ messages in thread

* [PATCH v4 1/3] dt-bindings: iommu: dart: Add t8103-usb4-dart compatible
  2023-11-26 15:16 [PATCH v4 0/3] Apple M1 USB4/Thunderbolt DART support Sven Peter
@ 2023-11-26 15:16 ` Sven Peter
  2023-11-26 15:17 ` [PATCH v4 2/3] iommu: dart: Write to all DART_T8020_STREAM_SELECT Sven Peter
                   ` (3 subsequent siblings)
  4 siblings, 0 replies; 6+ messages in thread
From: Sven Peter @ 2023-11-26 15:16 UTC (permalink / raw)
  To: Hector Martin, Sven Peter, Rob Herring, Krzysztof Kozlowski,
	Conor Dooley
  Cc: Alyssa Rosenzweig, Joerg Roedel, Will Deacon, Robin Murphy,
	linux-arm-kernel, asahi, iommu, devicetree, linux-kernel,
	Rob Herring

This DART variant is found in the t8103 (M1) SoCs and used for the
USB4/Thunderbolt PCIe ports. Unlike the regular t8103 DART these support
up to 64 SIDs and require a slightly different MMIO layout.

Acked-by: Hector Martin <marcan@marcan.st>
Acked-by: Rob Herring <robh@kernel.org>
Signed-off-by: Sven Peter <sven@svenpeter.dev>
---
 Documentation/devicetree/bindings/iommu/apple,dart.yaml | 1 +
 1 file changed, 1 insertion(+)

diff --git a/Documentation/devicetree/bindings/iommu/apple,dart.yaml b/Documentation/devicetree/bindings/iommu/apple,dart.yaml
index 903edf85d72e..7adb1de455a5 100644
--- a/Documentation/devicetree/bindings/iommu/apple,dart.yaml
+++ b/Documentation/devicetree/bindings/iommu/apple,dart.yaml
@@ -24,6 +24,7 @@ properties:
   compatible:
     enum:
       - apple,t8103-dart
+      - apple,t8103-usb4-dart
       - apple,t8110-dart
       - apple,t6000-dart
 
-- 
2.34.1


^ permalink raw reply related	[flat|nested] 6+ messages in thread

* [PATCH v4 2/3] iommu: dart: Write to all DART_T8020_STREAM_SELECT
  2023-11-26 15:16 [PATCH v4 0/3] Apple M1 USB4/Thunderbolt DART support Sven Peter
  2023-11-26 15:16 ` [PATCH v4 1/3] dt-bindings: iommu: dart: Add t8103-usb4-dart compatible Sven Peter
@ 2023-11-26 15:17 ` Sven Peter
  2023-11-26 15:17 ` [PATCH v4 3/3] iommu: dart: Add support for t8103 USB4 DART Sven Peter
                   ` (2 subsequent siblings)
  4 siblings, 0 replies; 6+ messages in thread
From: Sven Peter @ 2023-11-26 15:17 UTC (permalink / raw)
  To: Hector Martin, Sven Peter, Joerg Roedel, Will Deacon, Robin Murphy
  Cc: Rob Herring, Krzysztof Kozlowski, Conor Dooley,
	Alyssa Rosenzweig, linux-arm-kernel, asahi, iommu, devicetree,
	linux-kernel

We're about to add support for a DART variant that use more than 16
streams and requires writing to two separate stream select registers
when issuing TLB flushes.

Acked-by: Hector Martin <marcan@marcan.st>
Signed-off-by: Sven Peter <sven@svenpeter.dev>
---
 drivers/iommu/apple-dart.c | 6 ++++--
 1 file changed, 4 insertions(+), 2 deletions(-)

diff --git a/drivers/iommu/apple-dart.c b/drivers/iommu/apple-dart.c
index ee05f4824bfa..8b6b0cdba9b5 100644
--- a/drivers/iommu/apple-dart.c
+++ b/drivers/iommu/apple-dart.c
@@ -368,12 +368,14 @@ apple_dart_t8020_hw_stream_command(struct apple_dart_stream_map *stream_map,
 			     u32 command)
 {
 	unsigned long flags;
-	int ret;
+	int ret, i;
 	u32 command_reg;
 
 	spin_lock_irqsave(&stream_map->dart->lock, flags);
 
-	writel(stream_map->sidmap[0], stream_map->dart->regs + DART_T8020_STREAM_SELECT);
+	for (i = 0; i < BITS_TO_U32(stream_map->dart->num_streams); i++)
+		writel(stream_map->sidmap[i],
+		       stream_map->dart->regs + DART_T8020_STREAM_SELECT + 4 * i);
 	writel(command, stream_map->dart->regs + DART_T8020_STREAM_COMMAND);
 
 	ret = readl_poll_timeout_atomic(
-- 
2.34.1


^ permalink raw reply related	[flat|nested] 6+ messages in thread

* [PATCH v4 3/3] iommu: dart: Add support for t8103 USB4 DART
  2023-11-26 15:16 [PATCH v4 0/3] Apple M1 USB4/Thunderbolt DART support Sven Peter
  2023-11-26 15:16 ` [PATCH v4 1/3] dt-bindings: iommu: dart: Add t8103-usb4-dart compatible Sven Peter
  2023-11-26 15:17 ` [PATCH v4 2/3] iommu: dart: Write to all DART_T8020_STREAM_SELECT Sven Peter
@ 2023-11-26 15:17 ` Sven Peter
  2023-11-26 17:32 ` [PATCH v4 0/3] Apple M1 USB4/Thunderbolt DART support Neal Gompa
  2023-11-27 10:15 ` Joerg Roedel
  4 siblings, 0 replies; 6+ messages in thread
From: Sven Peter @ 2023-11-26 15:17 UTC (permalink / raw)
  To: Hector Martin, Sven Peter, Joerg Roedel, Will Deacon, Robin Murphy
  Cc: Rob Herring, Krzysztof Kozlowski, Conor Dooley,
	Alyssa Rosenzweig, linux-arm-kernel, asahi, iommu, devicetree,
	linux-kernel

This variant of the regular t8103 DART is used for the two
USB4/Thunderbolt PCIe controllers. It supports 64 instead of 16 streams
which requires a slightly different MMIO layout.

Acked-by: Hector Martin <marcan@marcan.st>
Signed-off-by: Sven Peter <sven@svenpeter.dev>
---
 drivers/iommu/apple-dart.c | 29 +++++++++++++++++++++++++++++
 1 file changed, 29 insertions(+)

diff --git a/drivers/iommu/apple-dart.c b/drivers/iommu/apple-dart.c
index 8b6b0cdba9b5..f47f60c0a4d0 100644
--- a/drivers/iommu/apple-dart.c
+++ b/drivers/iommu/apple-dart.c
@@ -81,6 +81,7 @@
 #define DART_T8020_TCR_BYPASS_DAPF      BIT(12)
 
 #define DART_T8020_TTBR       0x200
+#define DART_T8020_USB4_TTBR  0x400
 #define DART_T8020_TTBR_VALID BIT(31)
 #define DART_T8020_TTBR_ADDR_FIELD_SHIFT 0
 #define DART_T8020_TTBR_SHIFT 12
@@ -1217,6 +1218,33 @@ static const struct apple_dart_hw apple_dart_hw_t8103 = {
 	.ttbr_shift = DART_T8020_TTBR_SHIFT,
 	.ttbr_count = 4,
 };
+
+static const struct apple_dart_hw apple_dart_hw_t8103_usb4 = {
+	.type = DART_T8020,
+	.irq_handler = apple_dart_t8020_irq,
+	.invalidate_tlb = apple_dart_t8020_hw_invalidate_tlb,
+	.oas = 36,
+	.fmt = APPLE_DART,
+	.max_sid_count = 64,
+
+	.enable_streams = DART_T8020_STREAMS_ENABLE,
+	.lock = DART_T8020_CONFIG,
+	.lock_bit = DART_T8020_CONFIG_LOCK,
+
+	.error = DART_T8020_ERROR,
+
+	.tcr = DART_T8020_TCR,
+	.tcr_enabled = DART_T8020_TCR_TRANSLATE_ENABLE,
+	.tcr_disabled = 0,
+	.tcr_bypass = 0,
+
+	.ttbr = DART_T8020_USB4_TTBR,
+	.ttbr_valid = DART_T8020_TTBR_VALID,
+	.ttbr_addr_field_shift = DART_T8020_TTBR_ADDR_FIELD_SHIFT,
+	.ttbr_shift = DART_T8020_TTBR_SHIFT,
+	.ttbr_count = 4,
+};
+
 static const struct apple_dart_hw apple_dart_hw_t6000 = {
 	.type = DART_T6000,
 	.irq_handler = apple_dart_t8020_irq,
@@ -1309,6 +1337,7 @@ static DEFINE_SIMPLE_DEV_PM_OPS(apple_dart_pm_ops, apple_dart_suspend, apple_dar
 
 static const struct of_device_id apple_dart_of_match[] = {
 	{ .compatible = "apple,t8103-dart", .data = &apple_dart_hw_t8103 },
+	{ .compatible = "apple,t8103-usb4-dart", .data = &apple_dart_hw_t8103_usb4 },
 	{ .compatible = "apple,t8110-dart", .data = &apple_dart_hw_t8110 },
 	{ .compatible = "apple,t6000-dart", .data = &apple_dart_hw_t6000 },
 	{},
-- 
2.34.1


^ permalink raw reply related	[flat|nested] 6+ messages in thread

* Re: [PATCH v4 0/3] Apple M1 USB4/Thunderbolt DART support
  2023-11-26 15:16 [PATCH v4 0/3] Apple M1 USB4/Thunderbolt DART support Sven Peter
                   ` (2 preceding siblings ...)
  2023-11-26 15:17 ` [PATCH v4 3/3] iommu: dart: Add support for t8103 USB4 DART Sven Peter
@ 2023-11-26 17:32 ` Neal Gompa
  2023-11-27 10:15 ` Joerg Roedel
  4 siblings, 0 replies; 6+ messages in thread
From: Neal Gompa @ 2023-11-26 17:32 UTC (permalink / raw)
  To: Sven Peter
  Cc: Hector Martin, Rob Herring, Krzysztof Kozlowski, Conor Dooley,
	Alyssa Rosenzweig, Joerg Roedel, Will Deacon, Robin Murphy,
	linux-arm-kernel, asahi, iommu, devicetree, linux-kernel

On Sun, Nov 26, 2023 at 10:17 AM Sven Peter <sven@svenpeter.dev> wrote:
>
> Hi,
>
> The M1 SoCs have a second slightly different variant of the regular
> DART used for the USB4 PCIe ports. It supports 64 instead of 16 streams
> which requires a minor change to the MMIO layout.
> There seems to be no way to tell them apart from the regular DARTs by
> just looking at the DART_PARAMs register so we have to add a new
> compatible for those.
>
> Changes since v3:
>   none
>
> Changes since v2:
>   - drop the manual bypass disable
>   - added Rob's tag
>
> Changes since v1:
>   - apple,t8103-usb4-dart instead of apple,t8103-dart-usb4 as the
>     compatible
>   - collected Hector's tags
>
> Best,
>
> Sven
>
> Sven Peter (3):
>   dt-bindings: iommu: dart: Add t8103-usb4-dart compatible
>   iommu: dart: Write to all DART_T8020_STREAM_SELECT
>   iommu: dart: Add support for t8103 USB4 DART
>
>  .../devicetree/bindings/iommu/apple,dart.yaml |  1 +
>  drivers/iommu/apple-dart.c                    | 35 +++++++++++++++++--
>  2 files changed, 34 insertions(+), 2 deletions(-)
>
> --
> 2.34.1
>
>

Series LGTM.

Reviewed-by: Neal Gompa <neal@gompa.dev>


-- 
真実はいつも一つ!/ Always, there's only one truth!

^ permalink raw reply	[flat|nested] 6+ messages in thread

* Re: [PATCH v4 0/3] Apple M1 USB4/Thunderbolt DART support
  2023-11-26 15:16 [PATCH v4 0/3] Apple M1 USB4/Thunderbolt DART support Sven Peter
                   ` (3 preceding siblings ...)
  2023-11-26 17:32 ` [PATCH v4 0/3] Apple M1 USB4/Thunderbolt DART support Neal Gompa
@ 2023-11-27 10:15 ` Joerg Roedel
  4 siblings, 0 replies; 6+ messages in thread
From: Joerg Roedel @ 2023-11-27 10:15 UTC (permalink / raw)
  To: Sven Peter
  Cc: Hector Martin, Rob Herring, Krzysztof Kozlowski, Conor Dooley,
	Alyssa Rosenzweig, Will Deacon, Robin Murphy, linux-arm-kernel,
	asahi, iommu, devicetree, linux-kernel

On Sun, Nov 26, 2023 at 04:16:58PM +0100, Sven Peter wrote:
> Sven Peter (3):
>   dt-bindings: iommu: dart: Add t8103-usb4-dart compatible
>   iommu: dart: Write to all DART_T8020_STREAM_SELECT
>   iommu: dart: Add support for t8103 USB4 DART
> 
>  .../devicetree/bindings/iommu/apple,dart.yaml |  1 +
>  drivers/iommu/apple-dart.c                    | 35 +++++++++++++++++--
>  2 files changed, 34 insertions(+), 2 deletions(-)

Applied, thanks.

^ permalink raw reply	[flat|nested] 6+ messages in thread

end of thread, other threads:[~2023-11-27 10:16 UTC | newest]

Thread overview: 6+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2023-11-26 15:16 [PATCH v4 0/3] Apple M1 USB4/Thunderbolt DART support Sven Peter
2023-11-26 15:16 ` [PATCH v4 1/3] dt-bindings: iommu: dart: Add t8103-usb4-dart compatible Sven Peter
2023-11-26 15:17 ` [PATCH v4 2/3] iommu: dart: Write to all DART_T8020_STREAM_SELECT Sven Peter
2023-11-26 15:17 ` [PATCH v4 3/3] iommu: dart: Add support for t8103 USB4 DART Sven Peter
2023-11-26 17:32 ` [PATCH v4 0/3] Apple M1 USB4/Thunderbolt DART support Neal Gompa
2023-11-27 10:15 ` Joerg Roedel

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).