Message ID | 20230128111114.4049-4-sven@svenpeter.dev (mailing list archive) |
---|---|
State | New, archived |
Headers | show |
Series | Apple M1 USB4/Thunderbolt DART support | expand |
On 28/01/2023 20.11, Sven Peter wrote: > 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. > > 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 7d8b2b90cdb6..7579c97a9062 100644 > --- a/drivers/iommu/apple-dart.c > +++ b/drivers/iommu/apple-dart.c > @@ -372,12 +372,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( Acked-by: Hector Martin <marcan@marcan.st> - Hector
diff --git a/drivers/iommu/apple-dart.c b/drivers/iommu/apple-dart.c index 7d8b2b90cdb6..7579c97a9062 100644 --- a/drivers/iommu/apple-dart.c +++ b/drivers/iommu/apple-dart.c @@ -372,12 +372,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(
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. Signed-off-by: Sven Peter <sven@svenpeter.dev> --- drivers/iommu/apple-dart.c | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-)