powerpc/pseries/dma: Enable SWIOTLB
authorAlexey Kardashevskiy <aik@ozlabs.ru>
Tue, 7 May 2019 06:25:59 +0000 (16:25 +1000)
committerMichael Ellerman <mpe@ellerman.id.au>
Wed, 3 Jul 2019 05:19:35 +0000 (15:19 +1000)
So far the pseries platforms has always been using IOMMU making
SWIOTLB unnecessary. Now we want secure guests which means devices can
only access certain areas of guest physical memory; we are going to
use SWIOTLB for this purpose.

This allows SWIOTLB for pseries. By default there is no change in
behavior.

This enables SWIOTLB when the "swiotlb" kernel parameter is set to
"force".

With the SWIOTLB enabled, the kernel creates a directly mapped DMA
window (using the usual DDW mechanism) and implements SWIOTLB on top
of that.

Signed-off-by: Alexey Kardashevskiy <aik@ozlabs.ru>
Signed-off-by: Michael Ellerman <mpe@ellerman.id.au>
arch/powerpc/platforms/pseries/Kconfig
arch/powerpc/platforms/pseries/setup.c

index 9c6b3d860518128a50d51cb91fd39bac5f3c4f5f..b9e8b608de01b557f4a81f65f7cc85d29d69bc30 100644 (file)
@@ -23,6 +23,7 @@ config PPC_PSERIES
        select ARCH_RANDOM
        select PPC_DOORBELL
        select FORCE_SMP
+       select SWIOTLB
        default y
 
 config PPC_SPLPAR
index e4f0dfd4ae33458f6a4a9450b3df9c42c55a26c1..30d72b587ac59828e3b6ebbe7556c107fceca010 100644 (file)
@@ -42,6 +42,7 @@
 #include <linux/of.h>
 #include <linux/of_pci.h>
 #include <linux/memblock.h>
+#include <linux/swiotlb.h>
 
 #include <asm/mmu.h>
 #include <asm/processor.h>
@@ -71,6 +72,7 @@
 #include <asm/isa-bridge.h>
 #include <asm/security_features.h>
 #include <asm/asm-const.h>
+#include <asm/swiotlb.h>
 
 #include "pseries.h"
 #include "../../../../drivers/pci/pci.h"
@@ -797,6 +799,9 @@ static void __init pSeries_setup_arch(void)
        }
 
        ppc_md.pcibios_root_bridge_prepare = pseries_root_bridge_prepare;
+
+       if (swiotlb_force == SWIOTLB_FORCE)
+               ppc_swiotlb_enable = 1;
 }
 
 static void pseries_panic(char *str)