iommu: Allow io-pgtable to be used outside of drivers/iommu/
Subsystems (6)
PATCH 1/1 iommu: Allow io-pgtable to be used outside of drivers/iommu/
Move io-pgtable.h to include/linux/ and export alloc_io_pgtable_ops and free_io_pgtable_ops. This enables drivers outside drivers/iommu/ to use the ARM page table library. Specifically, some ARM Mali GPUs use the ARM page table formats.
---
This will be needed for an in-progress Mali GPU DRM driver. It's using the page table lib, but is not a full IOMMU driver.
It's going to be a few cycles I'd guess before the DRM driver is anywhere close to merging. So I can carry this if preferred, but release early, release often.
Rob
drivers/iommu/arm-smmu-v3.c | 3 +--
drivers/iommu/arm-smmu.c | 2 +-
drivers/iommu/io-pgtable-arm-v7s.c | 3 +--
drivers/iommu/io-pgtable-arm.c | 3 +--
drivers/iommu/io-pgtable.c | 5 +++--
drivers/iommu/ipmmu-vmsa.c | 3 +--
drivers/iommu/msm_iommu.c | 2 +-
drivers/iommu/mtk_iommu.h | 3 +--
drivers/iommu/qcom_iommu.c | 2 +-
{drivers/iommu => include/linux}/io-pgtable.h | 0
10 files changed, 11 insertions(+), 15 deletions(-)
rename {drivers/iommu => include/linux}/io-pgtable.h (100%)drivers/iommu/arm-smmu-v3.c +1 -2
@@ -18,6 +18,7 @@#include <linux/dma-iommu.h> #include <linux/err.h> #include <linux/interrupt.h> +#include <linux/io-pgtable.h> #include <linux/iommu.h> #include <linux/iopoll.h> #include <linux/init.h>
@@ -32,8 +33,6 @@#include <linux/amba/bus.h> -#include "io-pgtable.h" -/* MMIO registers */ #define ARM_SMMU_IDR0 0x0#define IDR0_ST_LVL GENMASK(28, 27)
drivers/iommu/arm-smmu.c +1 -1
@@ -39,6 +39,7 @@#include <linux/interrupt.h> #include <linux/io.h> #include <linux/io-64-nonatomic-hi-lo.h> +#include <linux/io-pgtable.h> #include <linux/iommu.h> #include <linux/iopoll.h> #include <linux/init.h>
@@ -56,7 +57,6 @@#include <linux/amba/bus.h> #include <linux/fsl/mc.h> -#include "io-pgtable.h" #include "arm-smmu-regs.h" #define ARM_MMU500_ACTLR_CPRE (1 << 1)
drivers/iommu/io-pgtable-arm-v7s.c +1 -2
@@ -35,6 +35,7 @@#include <linux/atomic.h> #include <linux/dma-mapping.h> #include <linux/gfp.h> +#include <linux/io-pgtable.h> #include <linux/iommu.h> #include <linux/kernel.h> #include <linux/kmemleak.h>
@@ -45,8 +46,6 @@#include <asm/barrier.h> -#include "io-pgtable.h" -/* Struct accessors */ #define io_pgtable_to_data (x) \ container_of((x), struct arm_v7s_io_pgtable, iop)
drivers/iommu/io-pgtable-arm.c +1 -2
@@ -22,6 +22,7 @@#include <linux/atomic.h> #include <linux/bitops.h> +#include <linux/io-pgtable.h> #include <linux/iommu.h> #include <linux/kernel.h> #include <linux/sizes.h>
@@ -31,8 +32,6 @@#include <asm/barrier.h> -#include "io-pgtable.h" -#define ARM_LPAE_MAX_ADDR_BITS 52#define ARM_LPAE_S2_MAX_CONCAT_PAGES 16#define ARM_LPAE_MAX_LEVELS 4
drivers/iommu/io-pgtable.c +3 -2
@@ -19,11 +19,10 @@*/ #include <linux/bug.h> +#include <linux/io-pgtable.h> #include <linux/kernel.h> #include <linux/types.h> -#include "io-pgtable.h" -static const struct io_pgtable_init_fns * io_pgtable_init_table[IO_PGTABLE_NUM_FMTS ] = { #ifdef CONFIG_IOMMU_IO_PGTABLE_LPAE
@@ -61,6 +60,7 @@ struct io_pgtable_ops *alloc_io_pgtable_ops(enum io_pgtable_fmt fmt,return &iop->ops; } +EXPORT_SYMBOL_GPL (alloc_io_pgtable_ops);/* * It is the IOMMU driver's responsibility to ensure that the page table
@@ -77,3 +77,4 @@ void free_io_pgtable_ops(struct io_pgtable_ops *ops)io_pgtable_tlb_flush_all (iop); io_pgtable_init_table[iop->fmt]->free (iop); } +EXPORT_SYMBOL_GPL (free_io_pgtable_ops);
drivers/iommu/ipmmu-vmsa.c +1 -2
@@ -15,6 +15,7 @@#include <linux/init.h> #include <linux/interrupt.h> #include <linux/io.h> +#include <linux/io-pgtable.h> #include <linux/iommu.h> #include <linux/of.h> #include <linux/of_device.h>
@@ -35,8 +36,6 @@#define arm_iommu_detach_device (...) do {} while (0)#endif -#include "io-pgtable.h" -#define IPMMU_CTX_MAX 8struct ipmmu_features {
drivers/iommu/msm_iommu.c +1 -1
@@ -23,6 +23,7 @@#include <linux/platform_device.h> #include <linux/errno.h> #include <linux/io.h> +#include <linux/io-pgtable.h> #include <linux/interrupt.h> #include <linux/list.h> #include <linux/spinlock.h>
@@ -37,7 +38,6 @@#include "msm_iommu_hw-8xxx.h" #include "msm_iommu.h" -#include "io-pgtable.h" #define MRC (reg, processor, op1, crn, crm, op2) \ __asm__ __volatile__ ( \
drivers/iommu/mtk_iommu.h +1 -2
@@ -19,13 +19,12 @@#include <linux/component.h> #include <linux/device.h> #include <linux/io.h> +#include <linux/io-pgtable.h> #include <linux/iommu.h> #include <linux/list.h> #include <linux/spinlock.h> #include <soc/mediatek/smi.h> -#include "io-pgtable.h" -struct mtk_iommu_suspend_reg {u32 standard_axi_mode;u32 dcm_dis;
drivers/iommu/qcom_iommu.c +1 -1
@@ -26,6 +26,7 @@#include <linux/interrupt.h> #include <linux/io.h> #include <linux/io-64-nonatomic-hi-lo.h> +#include <linux/io-pgtable.h> #include <linux/iommu.h> #include <linux/iopoll.h> #include <linux/kconfig.h>
@@ -42,7 +43,6 @@#include <linux/slab.h> #include <linux/spinlock.h> -#include "io-pgtable.h" #include "arm-smmu-regs.h" #define SMMU_INTR_SEL_NS 0x2000
include/linux/io-pgtable.h renamed from drivers/iommu/io-pgtable.h +0 -0
Signature · 1 line
2.19.1
Quoted 4 lines · Rob Herring
Move
io-pgtable.htoinclude/linux/and exportalloc_io_pgtable_opsandfree_io_pgtable_ops. This enables drivers outsidedrivers/iommu/to use the ARM page table library. Specifically, some ARM Mali GPUs use the ARM page table formats.
Maybe rename it to arm-io-pgtable.h to make the usage a little more clear?
Robin Murphy
reviewerQuoted 8 lines · Christoph Hellwig
Quoted 4 lines · Rob Herring
Move
io-pgtable.htoinclude/linux/and exportalloc_io_pgtable_opsandfree_io_pgtable_ops. This enables drivers outsidedrivers/iommu/to use the ARM page table library. Specifically, some ARM Mali GPUs use the ARM page table formats.Maybe rename it to
arm-io-pgtable.hto make the usage a little more clear?
It's not Arm-specific, though - the whole point of io-pgtable is to be an architecture-agnostic library of IOMMU pagetable code. It just happens that the only formats implemented so far are the Arm ones that already have more than one in-tree user each.
Robin.
Quoted 7 lines · Robin Murphy
Quoted 6 lines · Christoph Hellwig
Quoted 4 lines · Rob Herring
Move
io-pgtable.htoinclude/linux/and exportalloc_io_pgtable_opsandfree_io_pgtable_ops. This enables drivers outsidedrivers/iommu/to use the ARM page table library. Specifically, some ARM Mali GPUs use the ARM page table formats.
Quoted 7 lines
Quoted 2 lines
Maybe rename it to
arm-io-pgtable.hto make the usage a little more clear?It's not Arm-specific, though - the whole point of io-pgtable is to be an architecture-agnostic library of IOMMU pagetable code. It just happens that the only formats implemented so far are the Arm ones that already have more than one in-tree user each.
Oh, ok. I always thought of it as an ARM thing, but then I missed the intention behind it.
Quoted 9 lines · Christoph Hellwig
Quoted 4 lines · Rob Herring
Move
io-pgtable.htoinclude/linux/and exportalloc_io_pgtable_opsandfree_io_pgtable_ops. This enables drivers outsidedrivers/iommu/to use the ARM page table library. Specifically, some ARM Mali GPUs use the ARM page table formats.Maybe rename it to
arm-io-pgtable.hto make the usage a little more clear?
I should drop the first 'ARM' in the commit message.
Rob
Joerg Roedel
maintainerQuoted 8 lines · Rob Herring
Quoted 7 lines · Christoph Hellwig
Quoted 4 lines · Rob Herring
Move
io-pgtable.htoinclude/linux/and exportalloc_io_pgtable_opsandfree_io_pgtable_ops. This enables drivers outsidedrivers/iommu/to use the ARM page table library. Specifically, some ARM Mali GPUs use the ARM page table formats.
Quoted 4 lines
Quoted 2 lines
Maybe rename it to
arm-io-pgtable.hto make the usage a little more clear?I should drop the first 'ARM' in the commit message.
Dropped and applied, thanks.