]> git.ipfire.org Git - thirdparty/kernel/linux.git/commitdiff
iommu/apple-dart: Write to all DART_T8020_STREAM_SELECT
authorSven Peter <sven@svenpeter.dev>
Sun, 26 Nov 2023 15:17:00 +0000 (16:17 +0100)
committerJoerg Roedel <jroedel@suse.de>
Mon, 27 Nov 2023 10:15:27 +0000 (11:15 +0100)
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>
Link: https://lore.kernel.org/r/20231126151701.16534-3-sven@svenpeter.dev
Signed-off-by: Joerg Roedel <jroedel@suse.de>
drivers/iommu/apple-dart.c

index ee05f4824bfad1d6515fd506e9c1c2fd6760e18f..8b6b0cdba9b57a276e92c06ec5a41894bfbb930c 100644 (file)
@@ -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(