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 9c6b3d8..b9e8b60 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 e4f0dfd..30d72b5 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)