omap iommu changes to remove plat includes
Subsystems (6)
Tony Lindgren
maintainerv3 cover omap iommu changes to remove plat includes
Hi all,
Here's this one again fixed with the issues Laurent noticed.
Regards,
Tony
---
Ido Yariv (3):
ARM: OMAP: Merge iommu2.h into iommu.h
ARM: OMAP2+: Move iopgtable header to drivers/iommu/
ARM: OMAP2+: Make some definitions local
Tony Lindgren (3):
ARM: OMAP2+: Move plat/iovmm.h to include/linux/omap-iommu.h
ARM: OMAP2+: Move iommu2 to drivers/iommu/omap-iommu2.c
ARM: OMAP2+: Move iommu/iovmm headers to platform_data
arch/arm/mach-omap2/Makefile | 2 arch/arm/mach-omap2/devices.c | 2 arch/arm/mach-omap2/omap-iommu.c | 2 arch/arm/mach-omap2/omap_hwmod_3xxx_data.c | 2 arch/arm/mach-omap2/omap_hwmod_44xx_data.c | 2 arch/arm/plat-omap/include/plat/iommu2.h | 96 ------------------- arch/arm/plat-omap/include/plat/iovmm.h | 89 ------------------ drivers/iommu/Makefile | 1 drivers/iommu/omap-iommu-debug.c | 8 +- drivers/iommu/omap-iommu.c | 39 ++++++++ drivers/iommu/omap-iommu.h | 133 ++++++++++++++------------- drivers/iommu/omap-iommu2.c | 11 ++ drivers/iommu/omap-iopgtable.h | 22 ---- drivers/iommu/omap-iovmm.c | 50 ++++++++++ drivers/media/platform/omap3isp/isp.c | 1 drivers/media/platform/omap3isp/isp.h | 2 drivers/media/platform/omap3isp/ispccdc.c | 1 drivers/media/platform/omap3isp/ispstat.c | 1 drivers/media/platform/omap3isp/ispvideo.c | 3 - include/linux/omap-iommu.h | 47 ++++++++++ include/linux/platform_data/iommu-omap.h | 49 ++++++++++ 21 files changed, 273 insertions(+), 290 deletions(-) delete mode 100644 arch/arm/plat-omap/include/plat/iommu2.h delete mode 100644 arch/arm/plat-omap/include/plat/iovmm.h rename arch/arm/plat-omap/include/plat/iommu.h => drivers/iommu/omap-iommu.h (69%) rename arch/arm/mach-omap2/iommu2.c => drivers/iommu/omap-iommu2.c (96%) rename arch/arm/plat-omap/include/plat/iopgtable.h => drivers/iommu/omap-iopgtable.h (85%) create mode 100644 include/linux/omap-iommu.h create mode 100644 include/linux/platform_data/iommu-omap.h
Signature · 1 line
Signature
Tony Lindgren
maintainerPATCH v3 1/6 ARM: OMAP: Merge iommu2.h into iommu.h
From: Ido Yariv <[email protected]>
Since iommu is not supported on OMAP1 and will not likely to ever be supported, merge plat/iommu2.h into iommu.h so only one file would have to move to platform_data/ as part of the single zImage effort.
--- arch/arm/plat-omap/include/plat/iommu.h | 88 ++++++++++++++++++++++++++-- arch/arm/plat-omap/include/plat/iommu2.h | 96 ------------------------------ 2 files changed, 83 insertions(+), 101 deletions(-) delete mode 100644 arch/arm/plat-omap/include/plat/iommu2.h
arch/arm/plat-omap/include/plat/iommu.h +83 -5
@@ -13,6 +13,12 @@ #ifndef __MACH_IOMMU_H #define __MACH_IOMMU_H +#include <linux/io.h> + +#if defined(CONFIG_ARCH_OMAP1) +#error "iommu for this processor not implemented yet" +#endif + struct iotlb_entry { u32 da; u32 pa;
@@ -159,11 +165,70 @@ static inline struct omap_iommu *dev_to_omap_iommu(struct device *dev)#define OMAP_IOMMU_ERR_TBLWALK_FAULT (1 << 3)#define OMAP_IOMMU_ERR_MULTIHIT_FAULT (1 << 4) -#if defined(CONFIG_ARCH_OMAP1 ) -#error "iommu for this processor not implemented yet" -#else -#include <plat/iommu2.h> -#endif +/* +* MMU Register offsets +*/ +#define MMU_REVISION 0x00 +#define MMU_SYSCONFIG 0x10 +#define MMU_SYSSTATUS 0x14 +#define MMU_IRQSTATUS 0x18 +#define MMU_IRQENABLE 0x1c +#define MMU_WALKING_ST 0x40 +#define MMU_CNTL 0x44 +#define MMU_FAULT_AD 0x48 +#define MMU_TTB 0x4c +#define MMU_LOCK 0x50 +#define MMU_LD_TLB 0x54 +#define MMU_CAM 0x58 +#define MMU_RAM 0x5c +#define MMU_GFLUSH 0x60 +#define MMU_FLUSH_ENTRY 0x64 +#define MMU_READ_CAM 0x68 +#define MMU_READ_RAM 0x6c +#define MMU_EMU_FAULT_AD 0x70 + +#define MMU_REG_SIZE 256 + +/* +* MMU Register bit definitions +*/ +#define MMU_LOCK_BASE_SHIFT 10 +#define MMU_LOCK_BASE_MASK (0x1f << MMU_LOCK_BASE_SHIFT) +#define MMU_LOCK_BASE (x) \ + ((x & MMU_LOCK_BASE_MASK) >> MMU_LOCK_BASE_SHIFT) + +#define MMU_LOCK_VICT_SHIFT 4 +#define MMU_LOCK_VICT_MASK (0x1f << MMU_LOCK_VICT_SHIFT) +#define MMU_LOCK_VICT (x) \ + ((x & MMU_LOCK_VICT_MASK) >> MMU_LOCK_VICT_SHIFT) + +#define MMU_CAM_VATAG_SHIFT 12 +#define MMU_CAM_VATAG_MASK \ + ((~0UL >> MMU_CAM_VATAG_SHIFT) << MMU_CAM_VATAG_SHIFT) +#define MMU_CAM_P (1 << 3) +#define MMU_CAM_V (1 << 2) +#define MMU_CAM_PGSZ_MASK 3 +#define MMU_CAM_PGSZ_1M (0 << 0) +#define MMU_CAM_PGSZ_64K (1 << 0) +#define MMU_CAM_PGSZ_4K (2 << 0) +#define MMU_CAM_PGSZ_16M (3 << 0) + +#define MMU_RAM_PADDR_SHIFT 12 +#define MMU_RAM_PADDR_MASK \ + ((~0UL >> MMU_RAM_PADDR_SHIFT) << MMU_RAM_PADDR_SHIFT) +#define MMU_RAM_ENDIAN_SHIFT 9 +#define MMU_RAM_ENDIAN_MASK (1 << MMU_RAM_ENDIAN_SHIFT) +#define MMU_RAM_ENDIAN_BIG (1 << MMU_RAM_ENDIAN_SHIFT) +#define MMU_RAM_ENDIAN_LITTLE (0 << MMU_RAM_ENDIAN_SHIFT) +#define MMU_RAM_ELSZ_SHIFT 7 +#define MMU_RAM_ELSZ_MASK (3 << MMU_RAM_ELSZ_SHIFT) +#define MMU_RAM_ELSZ_8 (0 << MMU_RAM_ELSZ_SHIFT) +#define MMU_RAM_ELSZ_16 (1 << MMU_RAM_ELSZ_SHIFT) +#define MMU_RAM_ELSZ_32 (2 << MMU_RAM_ELSZ_SHIFT) +#define MMU_RAM_ELSZ_NONE (3 << MMU_RAM_ELSZ_SHIFT) +#define MMU_RAM_MIXED_SHIFT 6 +#define MMU_RAM_MIXED_MASK (1 << MMU_RAM_MIXED_SHIFT) +#define MMU_RAM_MIXED MMU_RAM_MIXED_MASK/* * utilities for super page(16MB, 1MB, 64KB and 4KB)
@@ -218,4 +283,17 @@ omap_iommu_dump_ctx(struct omap_iommu *obj, char *buf, ssize_t len);extern size_t omap_dump_tlb_entries (struct omap_iommu *obj,char *buf,ssize_t len); +/* +* register accessors +*/ +static inline u32 iommu_read_reg (struct omap_iommu *obj,size_t offs) +{ +return __raw_readl (obj->regbase + offs); +} + +static inline void iommu_write_reg (struct omap_iommu *obj,u32 val,size_t offs) +{ +__raw_writel (val, obj->regbase + offs); +} +#endif /* __MACH_IOMMU_H */
arch/arm/plat-omap/include/plat/iommu2.h deleted +0 -96
96 lines not on this page · raw message
Tony Lindgren
maintainerPATCH v3 2/6 ARM: OMAP2+: Move iopgtable header to drivers/iommu/
In reply to Tony LindgrenFrom: Ido Yariv <[email protected]>
The iopgtable header file is only used by the iommu & iovmm drivers, so move it to drivers/iommu/, as part of the single zImage effort.
--- drivers/iommu/omap-iommu-debug.c | 2 +- drivers/iommu/omap-iommu.c | 2 +- drivers/iommu/omap-iopgtable.h | 0 drivers/iommu/omap-iovmm.c | 2 +- 4 files changed, 3 insertions(+), 3 deletions(-) rename arch/arm/plat-omap/include/plat/iopgtable.h => drivers/iommu/omap-iopgtable.h (100%)
drivers/iommu/omap-iommu-debug.c +1 -1
@@ -22,7 +22,7 @@#include <plat/iommu.h> #include <plat/iovmm.h> -#include <plat/iopgtable.h> +#include "omap-iopgtable.h" #define MAXCOLUMN 100/* for short messages */
drivers/iommu/omap-iommu.c +1 -1
@@ -26,7 +26,7 @@#include <plat/iommu.h> -#include <plat/iopgtable.h> +#include "omap-iopgtable.h" #define for_each_iotlb_cr (obj, n, __i, cr) \ for (__i = 0; \
drivers/iommu/omap-iopgtable.h renamed from arch/arm/plat-omap/include/plat/iopgtable.h +0 -0
drivers/iommu/omap-iovmm.c +1 -1
@@ -24,7 +24,7 @@#include <plat/iommu.h> #include <plat/iovmm.h> -#include <plat/iopgtable.h> +#include "omap-iopgtable.h" static struct kmem_cache *iovm_area_cachep;
Tony Lindgren
maintainerPATCH v3 3/6 ARM: OMAP2+: Move plat/iovmm.h to include/linux/omap-iommu.h
In reply to Tony LindgrenLooks like the iommu framework does not have generic functions exported for all the needs yet. The hardware specific functions are defined in files like intel-iommu.h and amd-iommu.h. Follow the same standard for omap-iommu.h.
This is needed because we are removing plat and mach includes for ARM common zImage support. Further work should continue in the iommu framework context as only pure platform data will be communicated from arch/arm/*omap*/* code to the iommu framework.
--- arch/arm/mach-omap2/iommu2.c | 1 arch/arm/plat-omap/include/plat/iommu.h | 10 +-- arch/arm/plat-omap/include/plat/iovmm.h | 89 ---------------------------- drivers/iommu/omap-iommu-debug.c | 2 - drivers/iommu/omap-iommu.c | 1 drivers/iommu/omap-iovmm.c | 46 ++++++++++++++ drivers/media/platform/omap3isp/isp.c | 1 drivers/media/platform/omap3isp/isp.h | 2 - drivers/media/platform/omap3isp/ispccdc.c | 1 drivers/media/platform/omap3isp/ispstat.c | 1 drivers/media/platform/omap3isp/ispvideo.c | 2 - include/linux/omap-iommu.h | 47 +++++++++++++++ 12 files changed, 101 insertions(+), 102 deletions(-) delete mode 100644 arch/arm/plat-omap/include/plat/iovmm.h create mode 100644 include/linux/omap-iommu.h
arch/arm/mach-omap2/iommu2.c +1 -0
@@ -17,6 +17,7 @@#include <linux/module.h> #include <linux/slab.h> #include <linux/stringify.h> +#include <linux/omap-iommu.h> #include <plat/iommu.h>
arch/arm/plat-omap/include/plat/iommu.h +2 -8
@@ -216,13 +216,10 @@ static inline struct omap_iommu *dev_to_omap_iommu(struct device *dev)#define MMU_RAM_PADDR_SHIFT 12#define MMU_RAM_PADDR_MASK \ ((~0UL >> MMU_RAM_PADDR_SHIFT) << MMU_RAM_PADDR_SHIFT) -#define MMU_RAM_ENDIAN_SHIFT 9 +#define MMU_RAM_ENDIAN_MASK (1 << MMU_RAM_ENDIAN_SHIFT) -#define MMU_RAM_ENDIAN_BIG (1 << MMU_RAM_ENDIAN_SHIFT) -#define MMU_RAM_ENDIAN_LITTLE (0 << MMU_RAM_ENDIAN_SHIFT) -#define MMU_RAM_ELSZ_SHIFT 7#define MMU_RAM_ELSZ_MASK (3 << MMU_RAM_ELSZ_SHIFT) -#define MMU_RAM_ELSZ_8 (0 << MMU_RAM_ELSZ_SHIFT) +#define MMU_RAM_ELSZ_16 (1 << MMU_RAM_ELSZ_SHIFT)#define MMU_RAM_ELSZ_32 (2 << MMU_RAM_ELSZ_SHIFT)#define MMU_RAM_ELSZ_NONE (3 << MMU_RAM_ELSZ_SHIFT)
@@ -269,9 +266,6 @@ extern int omap_iommu_set_isr(const char *name, void *priv), void *isr_priv); -extern void omap_iommu_save_ctx (struct device *dev); -extern void omap_iommu_restore_ctx (struct device *dev); -extern int omap_install_iommu_arch (const struct iommu_functions *ops);extern void omap_uninstall_iommu_arch (const struct iommu_functions *ops);
arch/arm/plat-omap/include/plat/iovmm.h deleted +0 -89
89 lines not on this page · raw message
drivers/iommu/omap-iommu-debug.c +1 -1
@@ -18,9 +18,9 @@#include <linux/uaccess.h> #include <linux/platform_device.h> #include <linux/debugfs.h> +#include <linux/omap-iommu.h> #include <plat/iommu.h> -#include <plat/iovmm.h> #include "omap-iopgtable.h"
drivers/iommu/omap-iommu.c +1 -0
@@ -19,6 +19,7 @@#include <linux/clk.h> #include <linux/platform_device.h> #include <linux/iommu.h> +#include <linux/omap-iommu.h> #include <linux/mutex.h> #include <linux/spinlock.h>
drivers/iommu/omap-iovmm.c +45 -1
60 lines not on this page · raw message
drivers/media/platform/omap3isp/isp.c +1 -0
@@ -66,6 +66,7 @@#include <linux/slab.h> #include <linux/sched.h> #include <linux/vmalloc.h> +#include <linux/omap-iommu.h> #include <media/v4l2-common.h> #include <media/v4l2-device.h>
drivers/media/platform/omap3isp/isp.h +0 -2
@@ -34,8 +34,6 @@#include <linux/platform_device.h> #include <linux/wait.h> #include <linux/iommu.h> -#include <plat/iommu.h> -#include <plat/iovmm.h> #include "ispstat.h" #include "ispccdc.h"
drivers/media/platform/omap3isp/ispccdc.c +1 -0
@@ -32,6 +32,7 @@#include <linux/mm.h> #include <linux/sched.h> #include <linux/slab.h> +#include <linux/omap-iommu.h> #include <media/v4l2-event.h> #include "isp.h"
drivers/media/platform/omap3isp/ispstat.c +1 -0
@@ -28,6 +28,7 @@#include <linux/dma-mapping.h> #include <linux/slab.h> #include <linux/uaccess.h> +#include <linux/omap-iommu.h> #include "isp.h"
drivers/media/platform/omap3isp/ispvideo.c +1 -1
@@ -32,10 +32,10 @@#include <linux/sched.h> #include <linux/slab.h> #include <linux/vmalloc.h> +#include <linux/omap-iommu.h> #include <media/v4l2-dev.h> #include <media/v4l2-ioctl.h> #include <plat/iommu.h> -#include <plat/iovmm.h> #include <plat/omap-pm.h> #include "ispvideo.h"
include/linux/omap-iommu.h new file +47 -0
47 lines not on this page · raw message
PATCH 3/6 ARM: OMAP2+: Move plat/iovmm.h to include/linux/omap-iommu.h
Tony,
Em Thu, 18 Oct 2012 13:28:42 -0700
Tony Lindgren <[email protected]> escreveu:
Quoted 19 lines
Looks like the iommu framework does not have generic functions exported for all the needs yet. The hardware specific functions are defined in files like
intel-iommu.handamd-iommu.h. Follow the same standard foromap-iommu.h.This is needed because we are removing plat and mach includes for ARM common zImage support. Further work should continue in the iommu framework context as only pure platform data will be communicated from
arch/arm/*omap*/*code to the iommu framework.Cc Joerg Roedel <[email protected]>Cc Ohad Ben-Cohen <[email protected]>Cc Ido Yariv <[email protected]>Cc Laurent Pinchart <[email protected]>Cc Mauro Carvalho Chehab <[email protected]>Cc Omar Ramirez Luna <[email protected]>Cc linux-media at vger.kernel.orgSigned-off-by Tony Lindgren <[email protected]>
Quoted 12 lines
--- arch/arm/mach-omap2/iommu2.c | 1 arch/arm/plat-omap/include/plat/iommu.h | 10 +-- arch/arm/plat-omap/include/plat/iovmm.h | 89 ---------------------------- drivers/iommu/omap-iommu-debug.c | 2 - drivers/iommu/omap-iommu.c | 1 drivers/iommu/omap-iovmm.c | 46 ++++++++++++++ drivers/media/platform/omap3isp/isp.c | 1 drivers/media/platform/omap3isp/isp.h | 2 - drivers/media/platform/omap3isp/ispccdc.c | 1 drivers/media/platform/omap3isp/ispstat.c | 1 drivers/media/platform/omap3isp/ispvideo.c | 2 -
It is better if you send this entire series through the ARM tree, keeping this hole series altogether (and avoiding the risk of breaking bisectability if it goes through separate trees). So, you can add my ack for those header moves for drivers/media/platform/*.
Regards,
Mauro
Signature · 2 lines
Cheers, Mauro
Tony Lindgren
maintainerPATCH v3 3/6 ARM: OMAP2+: Move plat/iovmm.h to include/linux/omap-iommu.h
Quoted 37 lines · Mauro Carvalho Chehab
Tony,
Em Thu, 18 Oct 2012 13:28:42 -0700
Tony Lindgren <[email protected]> escreveu:Quoted 19 lines
Looks like the iommu framework does not have generic functions exported for all the needs yet. The hardware specific functions are defined in files like
intel-iommu.handamd-iommu.h. Follow the same standard foromap-iommu.h.This is needed because we are removing plat and mach includes for ARM common zImage support. Further work should continue in the iommu framework context as only pure platform data will be communicated from
arch/arm/*omap*/*code to the iommu framework.Cc Joerg Roedel <[email protected]>Cc Ohad Ben-Cohen <[email protected]>Cc Ido Yariv <[email protected]>Cc Laurent Pinchart <[email protected]>Cc Mauro Carvalho Chehab <[email protected]>Cc Omar Ramirez Luna <[email protected]>Cc linux-media at vger.kernel.orgSigned-off-by Tony Lindgren <[email protected]>Quoted 12 lines
--- arch/arm/mach-omap2/iommu2.c | 1 arch/arm/plat-omap/include/plat/iommu.h | 10 +-- arch/arm/plat-omap/include/plat/iovmm.h | 89 ---------------------------- drivers/iommu/omap-iommu-debug.c | 2 - drivers/iommu/omap-iommu.c | 1 drivers/iommu/omap-iovmm.c | 46 ++++++++++++++ drivers/media/platform/omap3isp/isp.c | 1 drivers/media/platform/omap3isp/isp.h | 2 - drivers/media/platform/omap3isp/ispccdc.c | 1 drivers/media/platform/omap3isp/ispstat.c | 1 drivers/media/platform/omap3isp/ispvideo.c | 2 -
Quoted 6 lines
It is better if you send this entire series through the ARM tree, keeping this hole series altogether (and avoiding the risk of breaking bisectability if it goes through separate trees). So, you can add my ack for those header moves for
drivers/media/platform/*.
Yes thanks. Once people are happy with these, I will push just these patches on v3.7-rc1 alone into omap-for-v3.8/cleanup-headers-iommu so both media and iommu tree can merge them in too as needed.
Regards,
Tony
PATCH 3/6 ARM: OMAP2+: Move plat/iovmm.h to include/linux/omap-iommu.h
In reply to Tony LindgrenHi Tony,
Thanks for the patch.
Quoted 41 lines · On Thursday 18 October 2012 13:28:42 Tony Lindgren wrote:
Looks like the iommu framework does not have generic functions exported for all the needs yet. The hardware specific functions are defined in files like
intel-iommu.handamd-iommu.h. Follow the same standard foromap-iommu.h.This is needed because we are removing plat and mach includes for ARM common zImage support. Further work should continue in the iommu framework context as only pure platform data will be communicated from
arch/arm/*omap*/*code to the iommu framework.Cc Joerg Roedel <[email protected]>Cc Ohad Ben-Cohen <[email protected]>Cc Ido Yariv <[email protected]>Cc Laurent Pinchart <[email protected]>Cc Mauro Carvalho Chehab <[email protected]>Cc Omar Ramirez Luna <[email protected]>Signed-off-by Tony Lindgren <[email protected]>--- arch/arm/mach-omap2/iommu2.c | 1 arch/arm/plat-omap/include/plat/iommu.h | 10 +-- arch/arm/plat-omap/include/plat/iovmm.h | 89 ------------------------- drivers/iommu/omap-iommu-debug.c | 2 - drivers/iommu/omap-iommu.c | 1 drivers/iommu/omap-iovmm.c | 46 ++++++++++++++ drivers/media/platform/omap3isp/isp.c | 1 drivers/media/platform/omap3isp/isp.h | 2 - drivers/media/platform/omap3isp/ispccdc.c | 1 drivers/media/platform/omap3isp/ispstat.c | 1 drivers/media/platform/omap3isp/ispvideo.c | 2 - include/linux/omap-iommu.h | 47 +++++++++++++++ 12 files changed, 101 insertions(+), 102 deletions(-) delete mode 100644 arch/arm/plat-omap/include/plat/iovmm.h create mode 100644 include/linux/omap-iommu.harch/arm/mach-omap2/iommu2.c +0
-0
arch/arm/mach-omap2/iommu2.c line 20
Quoted 4 lines
arch/arm/mach-omap2/iommu2.c +1
-0@@ -17,6 +17,7 @@#include <linux/module.h> #include <linux/slab.h> #include <linux/stringify.h> +#include <linux/omap-iommu.h>
Nitpicking, please keep the headers sorted alphabetically, here and in all locations below (especially the OMAP3 ISP driver).
(OK, there's already one misplaced #include, but let's not make it worse :-))
Quoted 12 lines
arch/arm/mach-omap2/iommu2.c +0
-0#include <plat/iommu.h> (quoted diff) +0
-0
b/arch/arm/plat-omap/include/plat/iommu.hindex 7e8c7b6..a4b71b1 100644arch/arm/plat-omap/include/plat/iommu.h +1
-1@@ -216,13 +216,10 @@ static inline struct omap_iommu *dev_to_omap_iommu(struct device *dev) #define MMU_RAM_PADDR_SHIFT 12#define MMU_RAM_PADDR_MASK \ ((~0UL >> MMU_RAM_PADDR_SHIFT) << MMU_RAM_PADDR_SHIFT) -#define MMU_RAM_ENDIAN_SHIFT 9 +
arch/arm/plat-omap/include/plat/iommu.h static inline struct omap_iommu · line 225
Quoted 10 lines
arch/arm/plat-omap/include/plat/iommu.h +1
-4#define MMU_RAM_ENDIAN_MASK (1 << MMU_RAM_ENDIAN_SHIFT) -#define MMU_RAM_ENDIAN_BIG (1 << MMU_RAM_ENDIAN_SHIFT) -#define MMU_RAM_ENDIAN_LITTLE (0 << MMU_RAM_ENDIAN_SHIFT) -#define MMU_RAM_ELSZ_SHIFT 7#define MMU_RAM_ELSZ_MASK (3 << MMU_RAM_ELSZ_SHIFT) -#define MMU_RAM_ELSZ_8 (0 << MMU_RAM_ELSZ_SHIFT) +#define MMU_RAM_ELSZ_16 (1 << MMU_RAM_ELSZ_SHIFT)#define MMU_RAM_ELSZ_32 (2 << MMU_RAM_ELSZ_SHIFT)#define MMU_RAM_ELSZ_NONE (3 << MMU_RAM_ELSZ_SHIFT)
I plan to push cleanup patches for the staging tidspbridge driver that get rid of the local register definitions and use plat/iommu.h instead. That's obviously an interim solution as in the long run the driver should use the IOMMU API, but in the meantime it's a step in the right direction. Would it then make sense to move all those definitions to include/linux/omap-iommu.h, not just the ones used by the OMAP3 ISP driver ?
Quoted 269 lines
arch/arm/plat-omap/include/plat/iommu.h +0
-3@@ -269,9 +266,6 @@ extern int omap_iommu_set_isr(const char *name, void *priv), void *isr_priv); -extern void omap_iommu_save_ctx (struct device *dev); -extern void omap_iommu_restore_ctx (struct device *dev); -extern int omap_install_iommu_arch (const struct iommu_functions *ops);extern void omap_uninstall_iommu_arch (const struct iommu_functions *ops);(quoted diff) +0
-0
b/arch/arm/plat-omap/include/plat/iovmm.hdeleted file mode 100644 index 498e57c..0000000arch/arm/plat-omap/include/plat/iovmm.h deleted +0
-89@@ -1,89 +0,0 @@ -/* -* omap iommu: simple virtual address space management -* -* Copyright (C) 2008-2009 Nokia Corporation -* -* Written by Hiroshi DOYU <[email protected]> -* -* This program is free software; you can redistribute it and/or modify -* it under the terms of the GNU General Public License version 2 as -* published by the Free Software Foundation. -*/ - -#ifndef __IOMMU_MMAP_H -#define __IOMMU_MMAP_H - -#include <linux/iommu.h> - -struct iovm_struct { -struct omap_iommu *iommu;/* iommu object which this belongs to */ -u32 da_start;/* area definition */ -u32 da_end; -u32 flags;/* IOVMF_: see below */ -struct list_head list;/* linked in ascending order */ -const struct sg_table *sgt;/* keep 'page' <-> 'da' mapping */ -void *va;/* mpu side mapped address */ -}; - -/* -* IOVMF_FLAGS: attribute for iommu virtual memory area(iovma) -* -* lower 16 bit is used for h/w and upper 16 bit is for s/w. -*/ -#define IOVMF_SW_SHIFT 16 - -/* -* iovma: h/w flags derived from cam and ram attribute -*/ -#define IOVMF_CAM_MASK (~((1 << 10) - 1)) -#define IOVMF_RAM_MASK (~IOVMF_CAM_MASK) - -#define IOVMF_PGSZ_MASK (3 << 0) -#define IOVMF_PGSZ_1M MMU_CAM_PGSZ_1M -#define IOVMF_PGSZ_64K MMU_CAM_PGSZ_64K -#define IOVMF_PGSZ_4K MMU_CAM_PGSZ_4K -#define IOVMF_PGSZ_16M MMU_CAM_PGSZ_16M - -#define IOVMF_ENDIAN_MASK (1 << 9) -#define IOVMF_ENDIAN_BIG MMU_RAM_ENDIAN_BIG -#define IOVMF_ENDIAN_LITTLE MMU_RAM_ENDIAN_LITTLE - -#define IOVMF_ELSZ_MASK (3 << 7) -#define IOVMF_ELSZ_8 MMU_RAM_ELSZ_8 -#define IOVMF_ELSZ_16 MMU_RAM_ELSZ_16 -#define IOVMF_ELSZ_32 MMU_RAM_ELSZ_32 -#define IOVMF_ELSZ_NONE MMU_RAM_ELSZ_NONE - -#define IOVMF_MIXED_MASK (1 << 6) -#define IOVMF_MIXED MMU_RAM_MIXED - -/* -* iovma: s/w flags, used for mapping and umapping internally. -*/ -#define IOVMF_MMIO (1 << IOVMF_SW_SHIFT) -#define IOVMF_ALLOC (2 << IOVMF_SW_SHIFT) -#define IOVMF_ALLOC_MASK (3 << IOVMF_SW_SHIFT) - -/* "superpages" is supported just with physically linear pages */ -#define IOVMF_DISCONT (1 << (2 + IOVMF_SW_SHIFT)) -#define IOVMF_LINEAR (2 << (2 + IOVMF_SW_SHIFT)) -#define IOVMF_LINEAR_MASK (3 << (2 + IOVMF_SW_SHIFT)) - -#define IOVMF_DA_FIXED (1 << (4 + IOVMF_SW_SHIFT)) - - -extern struct iovm_struct *omap_find_iovm_area (struct device *dev,u32 da); -extern u32 -omap_iommu_vmap (struct iommu_domain *domain,struct device *dev,u32 da, -const struct sg_table *sgt,u32 flags); -extern struct sg_table *omap_iommu_vunmap (struct iommu_domain *domain, -struct device *dev,u32 da); -extern u32 -omap_iommu_vmalloc (struct iommu_domain *domain,struct device *dev, -u32 da,size_t bytes,u32 flags); -extern void -omap_iommu_vfree (struct iommu_domain *domain,struct device *dev, -const u32 da); -extern void *omap_da_to_va (struct device *dev,u32 da); - -#endif /* __IOMMU_MMAP_H */ (quoted diff) +0
-0
b/drivers/iommu/omap-iommu-debug.cindex 0cac372..cf4a0b5 100644drivers/iommu/omap-iommu-debug.c +1
-1@@ -18,9 +18,9 @@#include <linux/uaccess.h> #include <linux/platform_device.h> #include <linux/debugfs.h> +#include <linux/omap-iommu.h> #include <plat/iommu.h> -#include <plat/iovmm.h> #include "omap-iopgtable.h" drivers/iommu/omap-iommu.c +1
-0@@ -19,6 +19,7 @@#include <linux/clk.h> #include <linux/platform_device.h> #include <linux/iommu.h> +#include <linux/omap-iommu.h> #include <linux/mutex.h> #include <linux/spinlock.h> drivers/iommu/omap-iovmm.c +45
-1@@ -17,15 +17,59 @@#include <linux/device.h> #include <linux/scatterlist.h> #include <linux/iommu.h> +#include <linux/omap-iommu.h> #include <asm/cacheflush.h> #include <asm/mach/map.h> #include <plat/iommu.h> -#include <plat/iovmm.h> #include "omap-iopgtable.h" +/* +* IOVMF_FLAGS: attribute for iommu virtual memory area(iovma) +* +* lower 16 bit is used for h/w and upper 16 bit is for s/w. +*/ +#define IOVMF_SW_SHIFT 16 + +/* +* iovma: h/w flags derived from cam and ram attribute +*/ +#define IOVMF_CAM_MASK (~((1 << 10) - 1)) +#define IOVMF_RAM_MASK (~IOVMF_CAM_MASK) + +#define IOVMF_PGSZ_MASK (3 << 0) +#define IOVMF_PGSZ_1M MMU_CAM_PGSZ_1M +#define IOVMF_PGSZ_64K MMU_CAM_PGSZ_64K +#define IOVMF_PGSZ_4K MMU_CAM_PGSZ_4K +#define IOVMF_PGSZ_16M MMU_CAM_PGSZ_16M + +#define IOVMF_ENDIAN_MASK (1 << 9) +#define IOVMF_ENDIAN_BIG MMU_RAM_ENDIAN_BIG + +#define IOVMF_ELSZ_MASK (3 << 7) +#define IOVMF_ELSZ_16 MMU_RAM_ELSZ_16 +#define IOVMF_ELSZ_32 MMU_RAM_ELSZ_32 +#define IOVMF_ELSZ_NONE MMU_RAM_ELSZ_NONE + +#define IOVMF_MIXED_MASK (1 << 6) +#define IOVMF_MIXED MMU_RAM_MIXED + +/* +* iovma: s/w flags, used for mapping and umapping internally. +*/ +#define IOVMF_MMIO (1 << IOVMF_SW_SHIFT) +#define IOVMF_ALLOC (2 << IOVMF_SW_SHIFT) +#define IOVMF_ALLOC_MASK (3 << IOVMF_SW_SHIFT) + +/* "superpages" is supported just with physically linear pages */ +#define IOVMF_DISCONT (1 << (2 + IOVMF_SW_SHIFT)) +#define IOVMF_LINEAR (2 << (2 + IOVMF_SW_SHIFT)) +#define IOVMF_LINEAR_MASK (3 << (2 + IOVMF_SW_SHIFT)) + +#define IOVMF_DA_FIXED (1 << (4 + IOVMF_SW_SHIFT)) +static struct kmem_cache *iovm_area_cachep;/* return the offset of the first scatterlist entry in a sg table */ (quoted diff) +0
-0
b/drivers/media/platform/omap3isp/isp.cindex 99640d8..d72bd38 100644drivers/media/platform/omap3isp/isp.c +1
-0@@ -66,6 +66,7 @@#include <linux/slab.h> #include <linux/sched.h> #include <linux/vmalloc.h> +#include <linux/omap-iommu.h> #include <media/v4l2-common.h> #include <media/v4l2-device.h> (quoted diff) +0
-0
b/drivers/media/platform/omap3isp/isp.hindex 8be7487..50be8c2 100644drivers/media/platform/omap3isp/isp.h +0
-2@@ -34,8 +34,6 @@#include <linux/platform_device.h> #include <linux/wait.h> #include <linux/iommu.h> -#include <plat/iommu.h> -#include <plat/iovmm.h> #include "ispstat.h" #include "ispccdc.h" (quoted diff) +0
-0
b/drivers/media/platform/omap3isp/ispccdc.cindex 60181ab..b2d4976 100644drivers/media/platform/omap3isp/ispccdc.c +1
-0@@ -32,6 +32,7 @@#include <linux/mm.h> #include <linux/sched.h> #include <linux/slab.h> +#include <linux/omap-iommu.h> #include <media/v4l2-event.h> #include "isp.h" (quoted diff) +0
-0
b/drivers/media/platform/omap3isp/ispstat.cindex d7ac76b..e135774 100644drivers/media/platform/omap3isp/ispstat.c +1
-0@@ -28,6 +28,7 @@#include <linux/dma-mapping.h> #include <linux/slab.h> #include <linux/uaccess.h> +#include <linux/omap-iommu.h> #include "isp.h" (quoted diff) +0
-0
b/drivers/media/platform/omap3isp/ispvideo.cindex a0b737fe..2853bef 100644drivers/media/platform/omap3isp/ispvideo.c +1
-1@@ -32,10 +32,10 @@#include <linux/sched.h> #include <linux/slab.h> #include <linux/vmalloc.h> +#include <linux/omap-iommu.h> #include <media/v4l2-dev.h> #include <media/v4l2-ioctl.h> #include <plat/iommu.h> -#include <plat/iovmm.h> #include <plat/omap-pm.h> #include "ispvideo.h" include/linux/omap-iommu.h new file +1
-0@@ -0,0 +1,47 @@ +/*
include/linux/omap-iommu.h line 11
Quoted 10 lines
include/linux/omap-iommu.h new file +10
-0+* omap iommu: simple virtual address space management +* +* Copyright (C) 2008-2009 Nokia Corporation +* +* Written by Hiroshi DOYU <[email protected]> +* +* This program is free software; you can redistribute it and/or modify +* it under the terms of the GNU General Public License version 2 as +* published by the Free Software Foundation. +*/
Missing #ifndef #define ... #endif
Quoted 7 lines
include/linux/omap-iommu.h new file +7
-0+ +struct iovm_struct { +struct omap_iommu *iommu;/* iommu object which this belongs to */ +u32 da_start;/* area definition */ +u32 da_end; +u32 flags;/* IOVMF_: see below */ +struct list_head list;/* linked in ascending order */
include/linux/omap-iommu.h line 28
Quoted 10 lines
include/linux/omap-iommu.h new file +10
-0+const struct sg_table *sgt;/* keep 'page' <-> 'da' mapping */ +void *va;/* mpu side mapped address */ +}; + +#define MMU_RAM_ENDIAN_SHIFT 9 +#define MMU_RAM_ENDIAN_LITTLE (0 << MMU_RAM_ENDIAN_SHIFT) +#define MMU_RAM_ELSZ_8 (0 << MMU_RAM_ELSZ_SHIFT) +#define IOVMF_ENDIAN_LITTLE MMU_RAM_ENDIAN_LITTLE +#define MMU_RAM_ELSZ_SHIFT 7 +#define IOVMF_ELSZ_8 MMU_RAM_ELSZ_8
Shouldn't this header be split in include/linux/omap-iommu.h and include/linux/omap-iovmm.h ? I would also move all the hardware IOVMF flags to include/linux/omap-iovmm.h, not just the two currently used by the OMAP3 ISP driver. The software flags can be kept in drivers/iommu/omap-iovmm.c.
Quoted 8 lines
include/linux/omap-iommu.h new file +8
-0+struct iommu_domain ; + +extern struct iovm_struct *omap_find_iovm_area (struct device *dev,u32 da); +extern u32 +omap_iommu_vmap (struct iommu_domain *domain,struct device *dev,u32 da, +const struct sg_table *sgt,u32 flags); +extern struct sg_table *omap_iommu_vunmap (struct iommu_domain *domain, +struct device *dev,u32 da);
include/linux/omap-iommu.h line 47
Quoted 10 lines
include/linux/omap-iommu.h new file +10
-0+extern u32 +omap_iommu_vmalloc (struct iommu_domain *domain,struct device *dev, +u32 da,size_t bytes,u32 flags); +extern void +omap_iommu_vfree (struct iommu_domain *domain,struct device *dev, +const u32 da); +extern void *omap_da_to_va (struct device *dev,u32 da); + +extern void omap_iommu_save_ctx (struct device *dev); +extern void omap_iommu_restore_ctx (struct device *dev);
Do we really need to prefix functions with 'extern' ?
Signature · 3 lines
Regards, Laurent Pinchart
Tony Lindgren
maintainerPATCH v3 3/6 ARM: OMAP2+: Move plat/iovmm.h to include/linux/omap-iommu.h
Quoted 5 lines · Laurent Pinchart
Nitpicking, please keep the headers sorted alphabetically, here and in all locations below (especially the OMAP3 ISP driver).
(OK, there's already one misplaced #include, but let's not make it worse :-))
Sure I'll check that.
Quoted 6 lines
I plan to push cleanup patches for the staging tidspbridge driver that get rid of the local register definitions and use
plat/iommu.hinstead. That's obviously an interim solution as in the long run the driver should use the IOMMU API, but in the meantime it's a step in the right direction. Would it then make sense to move all those definitions toinclude/linux/omap-iommu.h, not just the ones used by the OMAP3 ISP driver ?
Well these patches are just intended to fix the platform data interface between core ARM code and iommu. At this point I really don't want to get involved in the iommu framework.
What you are asking should be coordinated with Joerg and Ohad. Ideally the iommu framework would provide the API to the drivers to use, and there would not be any need to have include/linux/omap-iommu.h.
If you ask me, I would just rip out the code that's not following the iommu API immediately and have it resubmitted in a sane way :)
Quoted 4 lines
Shouldn't this header be split in
include/linux/omap-iommu.handinclude/linux/omap-iovmm.h? I would also move all the hardware IOVMF flags toinclude/linux/omap-iovmm.h, not just the two currently used by the OMAP3 ISP driver. The software flags can be kept indrivers/iommu/omap-iovmm.c.
I just fixed up things to follow what's being done with the iommu framework currently. Probably keeping only omap-iommu.h available is the best way to go until the iommu framework provides the interfaces, but again that's up to Joerg and Ohad.
Quoted 4 lines
include/linux/omap-iommu.h line 47
Quoted 2 lines
include/linux/omap-iommu.h new file +2
-0+extern void omap_iommu_save_ctx (struct device *dev); +extern void omap_iommu_restore_ctx (struct device *dev);Do we really need to prefix functions with 'extern' ?
Yes since they are exported, I just moved them. Again, this is something that should be handled eventually via the iommu framework using runtime PM and not be exported at all. Again, I would just rip out that code if you ask me and replace it with comments until fixed.
Regards,
Tony
Tony Lindgren
maintainerPATCH v3 3/6 ARM: OMAP2+: Move plat/iovmm.h to include/linux/omap-iommu.h
In reply to Laurent PinchartQuoted 12 lines · Laurent Pinchart
arch/arm/mach-omap2/iommu2.c line 20
Quoted 7 lines · On Thursday 18 October 2012 13:28:42 Tony Lindgren wrote:
arch/arm/mach-omap2/iommu2.c +1
-0@@ -17,6 +17,7 @@#include <linux/module.h> #include <linux/slab.h> #include <linux/stringify.h> +#include <linux/omap-iommu.h> Nitpicking, please keep the headers sorted alphabetically, here and in all locations below (especially the OMAP3 ISP driver).
Quoted 1 line
(OK, there's already one misplaced #include, but let's not make it worse :-))
This is fixed now.
Quoted 8 lines
Quoted 8 lines
include/linux/omap-iommu.h new file +5
-0@@ -0,0 +1,47 @@ +/* +* omap iommu: simple virtual address space management +* +* Copyright (C) 2008-2009 Nokia Corporation +*
Quoted 8 lines
include/linux/omap-iommu.h line 11
Quoted 6 lines
include/linux/omap-iommu.h new file +6
-0+* Written by Hiroshi DOYU <[email protected]> +* +* This program is free software; you can redistribute it and/or modify +* it under the terms of the GNU General Public License version 2 as +* published by the Free Software Foundation. +*/ Missing #ifndef #define ... #endif
I've added it as _OMAP_IOMMU_H_, looks like both intel-iommu.h and amd-iommu.h have it.
Hopefully that's OK for you as a base to do further iommu patches on, updated patch below.
BTW, doing a test compile on v3.7-rc2, I'm seeing the following warnings for omap3isp for isp_video_ioctl_ops:
drivers/media/platform/omap3isp/ispvideo.c:1213: warning: initialization from incompatible pointer type drivers/media/platform/omap3isp/ispccdc.c:2303: warning: initialization from incompatible pointer type drivers/media/platform/omap3isp/ispccdc.c:2304: warning: initialization from incompatible pointer type drivers/media/platform/omap3isp/isph3a_aewb.c:282: warning: initialization from incompatible pointer type drivers/media/platform/omap3isp/isph3a_aewb.c:283: warning: initialization from incompatible pointer type drivers/media/platform/omap3isp/isph3a_af.c:347: warning: initialization from incompatible pointer type drivers/media/platform/omap3isp/isph3a_af.c:348: warning: initialization from incompatible pointer type drivers/media/platform/omap3isp/isphist.c:453: warning: initialization from incompatible pointer type drivers/media/platform/omap3isp/isphist.c:454: warning: initialization from incompatible pointer type
Regards,
Tony
From: Tony Lindgren <[email protected]>
Date: Thu, 18 Oct 2012 11:03:16 -0700
Subject: [PATCH] ARM: OMAP2+: Move plat/iovmm.h to include/linux/omap-iommu.h
Looks like the iommu framework does not have generic functions exported for all the needs yet. The hardware specific functions are defined in files like intel-iommu.h and amd-iommu.h. Follow the same standard for omap-iommu.h.
This is needed because we are removing plat and mach includes for ARM common zImage support. Further work should continue in the iommu framework context as only pure platform data will be communicated from arch/arm/*omap*/* code to the iommu framework.
arch/arm/mach-omap2/iommu2.c +1 -0
@@ -15,6 +15,7 @@#include <linux/device.h> #include <linux/jiffies.h> #include <linux/module.h> +#include <linux/omap-iommu.h> #include <linux/slab.h> #include <linux/stringify.h>
arch/arm/plat-omap/include/plat/iommu.h +2 -8
@@ -216,13 +216,10 @@ static inline struct omap_iommu *dev_to_omap_iommu(struct device *dev)#define MMU_RAM_PADDR_SHIFT 12#define MMU_RAM_PADDR_MASK \ ((~0UL >> MMU_RAM_PADDR_SHIFT) << MMU_RAM_PADDR_SHIFT) -#define MMU_RAM_ENDIAN_SHIFT 9 +#define MMU_RAM_ENDIAN_MASK (1 << MMU_RAM_ENDIAN_SHIFT) -#define MMU_RAM_ENDIAN_BIG (1 << MMU_RAM_ENDIAN_SHIFT) -#define MMU_RAM_ENDIAN_LITTLE (0 << MMU_RAM_ENDIAN_SHIFT) -#define MMU_RAM_ELSZ_SHIFT 7#define MMU_RAM_ELSZ_MASK (3 << MMU_RAM_ELSZ_SHIFT) -#define MMU_RAM_ELSZ_8 (0 << MMU_RAM_ELSZ_SHIFT) +#define MMU_RAM_ELSZ_16 (1 << MMU_RAM_ELSZ_SHIFT)#define MMU_RAM_ELSZ_32 (2 << MMU_RAM_ELSZ_SHIFT)#define MMU_RAM_ELSZ_NONE (3 << MMU_RAM_ELSZ_SHIFT)
@@ -269,9 +266,6 @@ extern int omap_iommu_set_isr(const char *name, void *priv), void *isr_priv); -extern void omap_iommu_save_ctx (struct device *dev); -extern void omap_iommu_restore_ctx (struct device *dev); -extern int omap_install_iommu_arch (const struct iommu_functions *ops);extern void omap_uninstall_iommu_arch (const struct iommu_functions *ops);
arch/arm/plat-omap/include/plat/iovmm.h deleted +0 -88
88 lines not on this page · raw message
drivers/iommu/omap-iommu-debug.c +1 -1
@@ -18,9 +18,9 @@#include <linux/uaccess.h> #include <linux/platform_device.h> #include <linux/debugfs.h> +#include <linux/omap-iommu.h> #include <plat/iommu.h> -#include <plat/iovmm.h> #include "omap-iopgtable.h"
drivers/iommu/omap-iommu.c +1 -0
@@ -19,6 +19,7 @@#include <linux/clk.h> #include <linux/platform_device.h> #include <linux/iommu.h> +#include <linux/omap-iommu.h> #include <linux/mutex.h> #include <linux/spinlock.h>
drivers/iommu/omap-iovmm.c +45 -1
60 lines not on this page · raw message
drivers/media/platform/omap3isp/isp.c +1 -0
@@ -61,6 +61,7 @@#include <linux/i2c.h> #include <linux/interrupt.h> #include <linux/module.h> +#include <linux/omap-iommu.h> #include <linux/platform_device.h> #include <linux/regulator/consumer.h> #include <linux/slab.h>
drivers/media/platform/omap3isp/isp.h +1 -3
@@ -31,11 +31,9 @@#include <media/v4l2-device.h> #include <linux/device.h> #include <linux/io.h> +#include <linux/iommu.h> #include <linux/platform_device.h> #include <linux/wait.h> -#include <linux/iommu.h> -#include <plat/iommu.h> -#include <plat/iovmm.h> #include "ispstat.h" #include "ispccdc.h"
drivers/media/platform/omap3isp/ispccdc.c +1 -0
@@ -30,6 +30,7 @@#include <linux/device.h> #include <linux/dma-mapping.h> #include <linux/mm.h> +#include <linux/omap-iommu.h> #include <linux/sched.h> #include <linux/slab.h> #include <media/v4l2-event.h>
drivers/media/platform/omap3isp/ispstat.c +1 -0
@@ -27,6 +27,7 @@#include <linux/dma-mapping.h> #include <linux/slab.h> +#include <linux/omap-iommu.h> #include <linux/uaccess.h> #include "isp.h"
drivers/media/platform/omap3isp/ispvideo.c +1 -1
@@ -27,6 +27,7 @@#include <linux/clk.h> #include <linux/mm.h> #include <linux/module.h> +#include <linux/omap-iommu.h> #include <linux/pagemap.h> #include <linux/scatterlist.h> #include <linux/sched.h>
@@ -35,7 +36,6 @@#include <media/v4l2-dev.h> #include <media/v4l2-ioctl.h> #include <plat/iommu.h> -#include <plat/iovmm.h> #include <plat/omap-pm.h> #include "ispvideo.h"
include/linux/omap-iommu.h new file +52 -0
52 lines not on this page · raw message
PATCH 3/6 ARM: OMAP2+: Move plat/iovmm.h to include/linux/omap-iommu.h
Hi Tony,
Quoted 56 lines · On Wednesday 24 October 2012 15:34:12 Tony Lindgren wrote:
Quoted 9 lines · Laurent Pinchart
Quoted 8 lines · On Thursday 18 October 2012 13:28:42 Tony Lindgren wrote:
arch/arm/mach-omap2/iommu2.c +0
-0@@ -17,6 +17,7 @@#include <linux/module.h> #include <linux/slab.h> #include <linux/stringify.h> Quoted 7 lines
arch/arm/mach-omap2/iommu2.c line 22
Quoted 1 line
arch/arm/mach-omap2/iommu2.c +1
-0+#include <linux/omap-iommu.h> Nitpicking, please keep the headers sorted alphabetically, here and in all locations below (especially the OMAP3 ISP driver).
(OK, there's already one misplaced #include, but let's not make it worse :-))
This is fixed now.
Quoted 8 lines
Quoted 8 lines
include/linux/omap-iommu.h new file +5
-0@@ -0,0 +1,47 @@ +/* +* omap iommu: simple virtual address space management +* +* Copyright (C) 2008-2009 Nokia Corporation +* Quoted 8 lines
include/linux/omap-iommu.h line 11
Quoted 6 lines
include/linux/omap-iommu.h new file +6
-0+* Written by Hiroshi DOYU <[email protected]> +* +* This program is free software; you can redistribute it and/or modify +* it under the terms of the GNU General Public License version 2 as +* published by the Free Software Foundation. +*/ Missing #ifndef #define ... #endif
I've added it as _OMAP_IOMMU_H_, looks like both
intel-iommu.handamd-iommu.hhave it.Hopefully that's OK for you as a base to do further iommu patches on, updated patch below.
BTW, doing a test compile on v3.7-rc2, I'm seeing the following warnings for omap3isp for
isp_video_ioctl_ops:
drivers/media/platform/omap3isp/ispvideo.c:1213: warning: initialization from incompatible pointer typedrivers/media/platform/omap3isp/ispccdc.c:2303: warning: initialization from incompatible pointer typedrivers/media/platform/omap3isp/ispccdc.c:2304: warning: initialization from incompatible pointer typedrivers/media/platform/omap3isp/isph3a_aewb.c:282: warning: initialization from incompatible pointer typedrivers/media/platform/omap3isp/isph3a_aewb.c:283: warning: initialization from incompatible pointer type
Quoted 8 lines
drivers/media/platform/omap3isp/isph3a_af.c:347: warning: initialization from incompatible pointer typedrivers/media/platform/omap3isp/isph3a_af.c:348: warning: initialization from incompatible pointer typedrivers/media/platform/omap3isp/isphist.c:453: warning: initialization from incompatible pointer typedrivers/media/platform/omap3isp/isphist.c:454: warning: initialization from incompatible pointer type
I've just sent a pull request to linux-media for v3.7 with fixes for those.
Signature · 3 lines
Regards, Laurent Pinchart
Tony Lindgren
maintainerPATCH v3 3/6 ARM: OMAP2+: Move plat/iovmm.h to include/linux/omap-iommu.h
Quoted 24 lines · Laurent Pinchart
Quoted 14 lines · On Wednesday 24 October 2012 15:34:12 Tony Lindgren wrote:
BTW, doing a test compile on v3.7-rc2, I'm seeing the following warnings for omap3isp for
isp_video_ioctl_ops:
drivers/media/platform/omap3isp/ispvideo.c:1213: warning: initialization from incompatible pointer typedrivers/media/platform/omap3isp/ispccdc.c:2303: warning: initialization from incompatible pointer typedrivers/media/platform/omap3isp/ispccdc.c:2304: warning: initialization from incompatible pointer typedrivers/media/platform/omap3isp/isph3a_aewb.c:282: warning: initialization from incompatible pointer typedrivers/media/platform/omap3isp/isph3a_aewb.c:283: warning: initialization from incompatible pointer typeQuoted 8 lines
drivers/media/platform/omap3isp/isph3a_af.c:347: warning: initialization from incompatible pointer typedrivers/media/platform/omap3isp/isph3a_af.c:348: warning: initialization from incompatible pointer typedrivers/media/platform/omap3isp/isphist.c:453: warning: initialization from incompatible pointer typedrivers/media/platform/omap3isp/isphist.c:454: warning: initialization from incompatible pointer type
Quoted 1 line
I've just sent a pull request to linux-media for v3.7 with fixes for those.
OK thanks!
Tony
Tony Lindgren
maintainerPATCH v3 4/6 ARM: OMAP2+: Move iommu2 to drivers/iommu/omap-iommu2.c
In reply to Tony LindgrenThis file should not be in arch/arm. Move it to drivers/iommu to allow making most of the header local to drivers/iommu.
This is needed as we are removing plat and mach includes from drivers for ARM common zImage support.
--- arch/arm/mach-omap2/Makefile | 2 arch/arm/plat-omap/include/plat/iommu.h | 272 ++----------------------------- drivers/iommu/Makefile | 1 drivers/iommu/omap-iommu-debug.c | 1 drivers/iommu/omap-iommu.c | 19 ++ drivers/iommu/omap-iommu.h | 255 +++++++++++++++++++++++++++++ drivers/iommu/omap-iommu2.c | 2 drivers/iommu/omap-iopgtable.h | 22 --- drivers/iommu/omap-iovmm.c | 1 9 files changed, 293 insertions(+), 282 deletions(-) create mode 100644 drivers/iommu/omap-iommu.h rename arch/arm/mach-omap2/iommu2.c => drivers/iommu/omap-iommu2.c (99%)
arch/arm/mach-omap2/Makefile +0 -2
@@ -184,8 +184,6 @@ obj-$(CONFIG_HW_PERF_EVENTS) += pmu.o obj-$(CONFIG_OMAP_MBOX_FWK) += mailbox_mach.o mailbox_mach-objs := mailbox.o -obj-$(CONFIG_OMAP_IOMMU) += iommu2.o - iommu-$(CONFIG_OMAP_IOMMU) := omap-iommu.o obj-y += $(iommu-m) $(iommu-y)
arch/arm/plat-omap/include/plat/iommu.h +14 -258
282 lines not on this page · raw message
drivers/iommu/Makefile +1 -0
@@ -7,6 +7,7 @@ obj-$(CONFIG_DMAR_TABLE) += dmar.o obj-$(CONFIG_INTEL_IOMMU) += iova.o intel-iommu.o obj-$(CONFIG_IRQ_REMAP) += intel_irq_remapping.o irq_remapping.o obj-$(CONFIG_OMAP_IOMMU) += omap-iommu.o +obj-$(CONFIG_OMAP_IOMMU) += omap-iommu2.o obj-$(CONFIG_OMAP_IOVMM) += omap-iovmm.o obj-$(CONFIG_OMAP_IOMMU_DEBUG) += omap-iommu-debug.o obj-$(CONFIG_TEGRA_IOMMU_GART) += tegra-gart.o
drivers/iommu/omap-iommu-debug.c +1 -0
@@ -23,6 +23,7 @@#include <plat/iommu.h> #include "omap-iopgtable.h" +#include "omap-iommu.h" #define MAXCOLUMN 100/* for short messages */
drivers/iommu/omap-iommu.c +19 -0
@@ -22,12 +22,14 @@#include <linux/omap-iommu.h> #include <linux/mutex.h> #include <linux/spinlock.h> +#include <linux/io.h> #include <asm/cacheflush.h> #include <plat/iommu.h> #include "omap-iopgtable.h" +#include "omap-iommu.h" #define for_each_iotlb_cr (obj, n, __i, cr) \ for (__i = 0; \
@@ -1016,6 +1018,23 @@ static void iopte_cachep_ctor(void *iopte)clean_dcache_area (iopte,IOPTE_TABLE_SIZE ); } +static u32 iotlb_init_entry (struct iotlb_entry *e,u32 da,u32 pa, +u32 flags) +{ +memset (e,0 ,sizeof (*e)); + + e->da = da; + e->pa = pa; + e->valid =1 ; +/* FIXME: add OMAP1 support */ + e->pgsz = flags &MMU_CAM_PGSZ_MASK ; + e->endian = flags &MMU_RAM_ENDIAN_MASK ; + e->elsz = flags &MMU_RAM_ELSZ_MASK ; + e->mixed = flags &MMU_RAM_MIXED_MASK ; + +return iopgsz_to_bytes (e->pgsz); +} +static int omap_iommu_map (struct iommu_domain *domain,unsigned long da,phys_addr_t pa,size_t bytes,int prot) {
drivers/iommu/omap-iommu.h new file +255 -0
255 lines not on this page · raw message
drivers/iommu/omap-iommu2.c renamed from arch/arm/mach-omap2/iommu2.c +2 -0
@@ -17,9 +17,11 @@#include <linux/module.h> #include <linux/slab.h> #include <linux/stringify.h> +#include <linux/io.h> #include <linux/omap-iommu.h> #include <plat/iommu.h> +#include "omap-iommu.h" /* * omap2 architecture specific register bit definitions
drivers/iommu/omap-iopgtable.h +0 -22
@@ -10,9 +10,6 @@* published by the Free Software Foundation. */ -#ifndef __PLAT_OMAP_IOMMU_H -#define __PLAT_OMAP_IOMMU_H -/* * "L2 table" address mask and size definitions. */
@@ -97,24 +94,5 @@ static inline phys_addr_t omap_iommu_translate(u32 d, u32 va, u32 mask)#define iopte_index (da) (((da) >> IOPTE_SHIFT) & (PTRS_PER_IOPTE - 1))#define iopte_offset (iopgd, da) (iopgd_page_vaddr(iopgd) + iopte_index(da)) -static inline u32 iotlb_init_entry (struct iotlb_entry *e,u32 da,u32 pa, -u32 flags) -{ -memset (e,0 ,sizeof (*e)); - - e->da = da; - e->pa = pa; - e->valid =1 ; -/* FIXME: add OMAP1 support */ - e->pgsz = flags &MMU_CAM_PGSZ_MASK ; - e->endian = flags &MMU_RAM_ENDIAN_MASK ; - e->elsz = flags &MMU_RAM_ELSZ_MASK ; - e->mixed = flags &MMU_RAM_MIXED_MASK ; - -return iopgsz_to_bytes (e->pgsz); -} -#define to_iommu (dev) \ (struct omap_iommu *)platform_get_drvdata(to_platform_device(dev)) - -#endif /* __PLAT_OMAP_IOMMU_H */
drivers/iommu/omap-iovmm.c +1 -0
@@ -25,6 +25,7 @@#include <plat/iommu.h> #include "omap-iopgtable.h" +#include "omap-iommu.h" /* * IOVMF_FLAGS: attribute for iommu virtual memory area(iovma)
Tony Lindgren
maintainerPATCH v3 5/6 ARM: OMAP2+: Make some definitions local
In reply to Tony LindgrenFrom: Ido Yariv <[email protected]>
Move some of the definitions in omap-iommu.h that can be made local to either drivers/iommu.
--- drivers/iommu/omap-iommu.c | 15 +++++++++++++++ drivers/iommu/omap-iommu.h | 33 +++------------------------------ drivers/iommu/omap-iommu2.c | 6 ++++++ 3 files changed, 24 insertions(+), 30 deletions(-)
drivers/iommu/omap-iommu.c +15 -0
@@ -54,6 +54,21 @@ struct omap_iommu_domain {spinlock_t lock; }; +#define MMU_LOCK_BASE_SHIFT 10 +#define MMU_LOCK_BASE_MASK (0x1f << MMU_LOCK_BASE_SHIFT) +#define MMU_LOCK_BASE (x) \ + ((x & MMU_LOCK_BASE_MASK) >> MMU_LOCK_BASE_SHIFT) + +#define MMU_LOCK_VICT_SHIFT 4 +#define MMU_LOCK_VICT_MASK (0x1f << MMU_LOCK_VICT_SHIFT) +#define MMU_LOCK_VICT (x) \ + ((x & MMU_LOCK_VICT_MASK) >> MMU_LOCK_VICT_SHIFT) + +struct iotlb_lock { +short base; +short vict; +}; +/* accommodate the difference between omap1 and omap2/3 */ static const struct iommu_functions *arch_iommu;
drivers/iommu/omap-iommu.h +3 -30
@@ -72,11 +72,6 @@ struct cr_regs { }; }; -struct iotlb_lock { -short base; -short vict; -}; -/* architecture specific functions */ struct iommu_functions {unsigned long version;
@@ -117,13 +112,6 @@ static inline struct omap_iommu *dev_to_omap_iommu(struct device *dev) }#endif -/* IOMMU errors */ -#define OMAP_IOMMU_ERR_TLB_MISS (1 << 0) -#define OMAP_IOMMU_ERR_TRANS_FAULT (1 << 1) -#define OMAP_IOMMU_ERR_EMU_MISS (1 << 2) -#define OMAP_IOMMU_ERR_TBLWALK_FAULT (1 << 3) -#define OMAP_IOMMU_ERR_MULTIHIT_FAULT (1 << 4) -/* * MMU Register offsets */
@@ -151,16 +139,6 @@ static inline struct omap_iommu *dev_to_omap_iommu(struct device *dev)/* * MMU Register bit definitions */ -#define MMU_LOCK_BASE_SHIFT 10 -#define MMU_LOCK_BASE_MASK (0x1f << MMU_LOCK_BASE_SHIFT) -#define MMU_LOCK_BASE (x) \ - ((x & MMU_LOCK_BASE_MASK) >> MMU_LOCK_BASE_SHIFT) - -#define MMU_LOCK_VICT_SHIFT 4 -#define MMU_LOCK_VICT_MASK (0x1f << MMU_LOCK_VICT_SHIFT) -#define MMU_LOCK_VICT (x) \ - ((x & MMU_LOCK_VICT_MASK) >> MMU_LOCK_VICT_SHIFT) -#define MMU_CAM_VATAG_SHIFT 12#define MMU_CAM_VATAG_MASK \ ((~0UL >> MMU_CAM_VATAG_SHIFT) << MMU_CAM_VATAG_SHIFT)
@@ -222,20 +200,15 @@ extern void omap_iotlb_cr_to_e(struct cr_regs *cr, struct iotlb_entry *e);extern int omap_iopgtable_store_entry (struct omap_iommu *obj,struct iotlb_entry *e); -extern int omap_iommu_set_isr (const char *name, -int (*isr)(struct omap_iommu *obj,u32 da,u32 iommu_errs, -void *priv), -void *isr_priv); -extern void omap_iommu_save_ctx (struct device *dev);extern void omap_iommu_restore_ctx (struct device *dev); -extern int omap_install_iommu_arch (const struct iommu_functions *ops); -extern void omap_uninstall_iommu_arch (const struct iommu_functions *ops); -extern int omap_foreach_iommu_device (void *data,int (*fn)(struct device *,void *)); +extern int omap_install_iommu_arch (const struct iommu_functions *ops); +extern void omap_uninstall_iommu_arch (const struct iommu_functions *ops); +extern ssize_t omap_iommu_dump_ctx (struct omap_iommu *obj,char *buf,ssize_t len); extern size_t
drivers/iommu/omap-iommu2.c +6 -0
@@ -68,6 +68,12 @@ ((pgsz) == MMU_CAM_PGSZ_64K) ? 0xffff0000 : \ ((pgsz) == MMU_CAM_PGSZ_4K) ? 0xfffff000 : 0) +/* IOMMU errors */ +#define OMAP_IOMMU_ERR_TLB_MISS (1 << 0) +#define OMAP_IOMMU_ERR_TRANS_FAULT (1 << 1) +#define OMAP_IOMMU_ERR_EMU_MISS (1 << 2) +#define OMAP_IOMMU_ERR_TBLWALK_FAULT (1 << 3) +#define OMAP_IOMMU_ERR_MULTIHIT_FAULT (1 << 4)static void __iommu_set_twl (struct omap_iommu *obj,bool on) {
PATCH 5/6 ARM: OMAP2+: Make some definitions local
Hi Tony,
Quoted 62 lines · On Thursday 18 October 2012 13:28:48 Tony Lindgren wrote:
From: Ido Yariv <[email protected]>
Move some of the definitions in
omap-iommu.hthat can be made local to eitherdrivers/iommu.Cc Joerg Roedel <[email protected]>Cc Ohad Ben-Cohen <[email protected]>Cc Laurent Pinchart <[email protected]>Cc Mauro Carvalho Chehab <[email protected]>Cc Omar Ramirez Luna <[email protected]>Signed-off-by Ido Yariv <[email protected]>[[email protected]: updated for header changes in the series]Signed-off-by Tony Lindgren <[email protected]>--- drivers/iommu/omap-iommu.c | 15 +++++++++++++++ drivers/iommu/omap-iommu.h | 33 +++------------------------------ drivers/iommu/omap-iommu2.c | 6 ++++++ 3 files changed, 24 insertions(+), 30 deletions(-)drivers/iommu/omap-iommu.c +15
-0@@ -54,6 +54,21 @@ struct omap_iommu_domain {spinlock_t lock; }; +#define MMU_LOCK_BASE_SHIFT 10 +#define MMU_LOCK_BASE_MASK (0x1f << MMU_LOCK_BASE_SHIFT) +#define MMU_LOCK_BASE (x) \ + ((x & MMU_LOCK_BASE_MASK) >> MMU_LOCK_BASE_SHIFT) + +#define MMU_LOCK_VICT_SHIFT 4 +#define MMU_LOCK_VICT_MASK (0x1f << MMU_LOCK_VICT_SHIFT) +#define MMU_LOCK_VICT (x) \ + ((x & MMU_LOCK_VICT_MASK) >> MMU_LOCK_VICT_SHIFT) + +struct iotlb_lock { +short base; +short vict; +}; +/* accommodate the difference between omap1 and omap2/3 */ static const struct iommu_functions *arch_iommu;drivers/iommu/omap-iommu.h +0
-5@@ -72,11 +72,6 @@ struct cr_regs { }; }; -struct iotlb_lock { -short base; -short vict; -}; -/* architecture specific functions */ struct iommu_functions {unsigned long version;
drivers/iommu/omap-iommu.h static inline struct omap_iommu · line 126
Quoted 10 lines
drivers/iommu/omap-iommu.h +0
-7@@ -117,13 +112,6 @@ static inline struct omap_iommu *dev_to_omap_iommu(struct device *dev) }#endif -/* IOMMU errors */ -#define OMAP_IOMMU_ERR_TLB_MISS (1 << 0) -#define OMAP_IOMMU_ERR_TRANS_FAULT (1 << 1) -#define OMAP_IOMMU_ERR_EMU_MISS (1 << 2) -#define OMAP_IOMMU_ERR_TBLWALK_FAULT (1 << 3) -#define OMAP_IOMMU_ERR_MULTIHIT_FAULT (1 << 4) -
I'll use those in the tidspbridge driver, in patches that I plan to push soon.
I will apply this patch set on top of mine, see what breaks. Would you like me to propose a modified version of this set, or add additional patches in my set ?
Quoted 61 lines
drivers/iommu/omap-iommu.h +0
-10/* * MMU Register offsets */ @@ -151,16 +139,6 @@ static inline struct omap_iommu *dev_to_omap_iommu(struct device *dev) /** MMU Register bit definitions */ -#define MMU_LOCK_BASE_SHIFT 10 -#define MMU_LOCK_BASE_MASK (0x1f << MMU_LOCK_BASE_SHIFT) -#define MMU_LOCK_BASE (x) \ - ((x & MMU_LOCK_BASE_MASK) >> MMU_LOCK_BASE_SHIFT) - -#define MMU_LOCK_VICT_SHIFT 4 -#define MMU_LOCK_VICT_MASK (0x1f << MMU_LOCK_VICT_SHIFT) -#define MMU_LOCK_VICT (x) \ - ((x & MMU_LOCK_VICT_MASK) >> MMU_LOCK_VICT_SHIFT) -#define MMU_CAM_VATAG_SHIFT 12#define MMU_CAM_VATAG_MASK \ ((~0UL >> MMU_CAM_VATAG_SHIFT) << MMU_CAM_VATAG_SHIFT)@@ -222,20 +200,15 @@ extern void omap_iotlb_cr_to_e(struct cr_regs *cr,struct
iotlb_entry*e); extern int
omap_iopgtable_store_entry(struct omap_iommu *obj, struct iotlb_entry *e);drivers/iommu/omap-iommu.h +3
-8-extern int omap_iommu_set_isr (const char *name, -int (*isr)(struct omap_iommu *obj,u32 da,u32 iommu_errs, -void *priv), -void *isr_priv); -extern void omap_iommu_save_ctx (struct device *dev);extern void omap_iommu_restore_ctx (struct device *dev); -extern int omap_install_iommu_arch (const struct iommu_functions *ops); -extern void omap_uninstall_iommu_arch (const struct iommu_functions *ops); -extern int omap_foreach_iommu_device (void *data,int (*fn)(struct device *,void *)); +extern int omap_install_iommu_arch (const struct iommu_functions *ops); +extern void omap_uninstall_iommu_arch (const struct iommu_functions *ops); +extern ssize_t omap_iommu_dump_ctx (struct omap_iommu *obj,char *buf,ssize_t len); extern size_tdrivers/iommu/omap-iommu2.c +6
-0@@ -68,6 +68,12 @@ ((pgsz) == MMU_CAM_PGSZ_64K) ? 0xffff0000 : \ ((pgsz) == MMU_CAM_PGSZ_4K) ? 0xfffff000 : 0) +/* IOMMU errors */ +#define OMAP_IOMMU_ERR_TLB_MISS (1 << 0) +#define OMAP_IOMMU_ERR_TRANS_FAULT (1 << 1) +#define OMAP_IOMMU_ERR_EMU_MISS (1 << 2) +#define OMAP_IOMMU_ERR_TBLWALK_FAULT (1 << 3) +#define OMAP_IOMMU_ERR_MULTIHIT_FAULT (1 << 4)static void __iommu_set_twl (struct omap_iommu *obj,bool on) {
Signature · 3 lines
Regards, Laurent Pinchart
Tony Lindgren
maintainerPATCH v3 5/6 ARM: OMAP2+: Make some definitions local
Quoted 15 lines · Laurent Pinchart
drivers/iommu/omap-iommu.h static inline struct omap_iommu · line 126
Quoted 11 lines · On Thursday 18 October 2012 13:28:48 Tony Lindgren wrote:
drivers/iommu/omap-iommu.h +0
-7@@ -117,13 +112,6 @@ static inline struct omap_iommu *dev_to_omap_iommu(struct device *dev) }#endif -/* IOMMU errors */ -#define OMAP_IOMMU_ERR_TLB_MISS (1 << 0) -#define OMAP_IOMMU_ERR_TRANS_FAULT (1 << 1) -#define OMAP_IOMMU_ERR_EMU_MISS (1 << 2) -#define OMAP_IOMMU_ERR_TBLWALK_FAULT (1 << 3) -#define OMAP_IOMMU_ERR_MULTIHIT_FAULT (1 << 4) -I'll use those in the tidspbridge driver, in patches that I plan to push soon.
Quoted 3 lines
I will apply this patch set on top of mine, see what breaks. Would you like me to propose a modified version of this set, or add additional patches in my set ?
Sure, let's try to expose only the minimal amount of omap iommu things with this patch set so we don't break things. Then the iommu development can continue on it's own independent of the core omap code except for the platform data.
But again, if there are nasty layering violations using this code, I would just remove those features. Those things tend to just get worse unless they are fixed properly to start with.
Regards,
Tony
PATCH 5/6 ARM: OMAP2+: Make some definitions local
Ho Tony,
Quoted 18 lines · On Friday 19 October 2012 09:17:43 Tony Lindgren wrote:
Quoted 17 lines · Laurent Pinchart
drivers/iommu/omap-iommu.h static inline struct omap_iommu · line 127
Quoted 12 lines · On Thursday 18 October 2012 13:28:48 Tony Lindgren wrote:
drivers/iommu/omap-iommu.h +0
-7@@ -117,13 +112,6 @@ static inline struct omap_iommu *dev_to_omap_iommu(struct device *dev) }#endif -/* IOMMU errors */ -#define OMAP_IOMMU_ERR_TLB_MISS (1 << 0) -#define OMAP_IOMMU_ERR_TRANS_FAULT (1 << 1) -#define OMAP_IOMMU_ERR_EMU_MISS (1 << 2) -#define OMAP_IOMMU_ERR_TBLWALK_FAULT (1 << 3) -#define OMAP_IOMMU_ERR_MULTIHIT_FAULT (1 << 4) -I'll use those in the tidspbridge driver, in patches that I plan to push soon.
Quoted 8 lines
Quoted 3 lines
I will apply this patch set on top of mine, see what breaks. Would you like me to propose a modified version of this set, or add additional patches in my set ?
Sure, let's try to expose only the minimal amount of omap iommu things with this patch set so we don't break things. Then the iommu development can continue on it's own independent of the core omap code except for the platform data.
I'll rebase my DSP patches on top of this patch set then, it will be easier.
Quoted 3 lines
But again, if there are nasty layering violations using this code, I would just remove those features. Those things tend to just get worse unless they are fixed properly to start with.
The long-term goal is to move the tidspbridge driver to the IOMMU API, but we'll need a step by step approach.
Signature · 3 lines
Regards, Laurent Pinchart
Tony Lindgren
maintainerPATCH v3 5/6 ARM: OMAP2+: Make some definitions local
Quoted 25 lines · Laurent Pinchart
Ho Tony,
Quoted 22 lines · On Friday 19 October 2012 09:17:43 Tony Lindgren wrote:
Quoted 20 lines · Laurent Pinchart
drivers/iommu/omap-iommu.h static inline struct omap_iommu · line 127
Quoted 12 lines · On Thursday 18 October 2012 13:28:48 Tony Lindgren wrote:
drivers/iommu/omap-iommu.h +0
-7@@ -117,13 +112,6 @@ static inline struct omap_iommu *dev_to_omap_iommu(struct device *dev) }#endif -/* IOMMU errors */ -#define OMAP_IOMMU_ERR_TLB_MISS (1 << 0) -#define OMAP_IOMMU_ERR_TRANS_FAULT (1 << 1) -#define OMAP_IOMMU_ERR_EMU_MISS (1 << 2) -#define OMAP_IOMMU_ERR_TBLWALK_FAULT (1 << 3) -#define OMAP_IOMMU_ERR_MULTIHIT_FAULT (1 << 4) -I'll use those in the tidspbridge driver, in patches that I plan to push soon.
I will apply this patch set on top of mine, see what breaks. Would you like me to propose a modified version of this set, or add additional patches in my set ?
Quoted 6 lines
Quoted 4 lines
Sure, let's try to expose only the minimal amount of omap iommu things with this patch set so we don't break things. Then the iommu development can continue on it's own independent of the core omap code except for the platform data.
I'll rebase my DSP patches on top of this patch set then, it will be easier.
OK sounds good to me.
Once we have the minimal changes acked by you and Joerg, I'll push it into an immutable branch that we all can merge in as needed.
BTW, after updating patch 3/6 I noticed patches 4 - 6 had trivial merge conflicts with the includes, so let me know if you want met to repost the whole set.
Quoted 6 lines
Quoted 3 lines
But again, if there are nasty layering violations using this code, I would just remove those features. Those things tend to just get worse unless they are fixed properly to start with.
The long-term goal is to move the tidspbridge driver to the IOMMU API, but we'll need a step by step approach.
Yes agreed.
Regards,
Tony
PATCH 5/6 ARM: OMAP2+: Make some definitions local
Hi Tony,
Quoted 32 lines · On Wednesday 24 October 2012 16:33:18 Tony Lindgren wrote:
Quoted 23 lines · Laurent Pinchart
Quoted 22 lines · On Friday 19 October 2012 09:17:43 Tony Lindgren wrote:
Quoted 20 lines · Laurent Pinchart
drivers/iommu/omap-iommu.h static inline struct omap_iommu · line 127
Quoted 12 lines · On Thursday 18 October 2012 13:28:48 Tony Lindgren wrote:
drivers/iommu/omap-iommu.h +0
-7@@ -117,13 +112,6 @@ static inline struct omap_iommu *dev_to_omap_iommu(struct device *dev) }#endif -/* IOMMU errors */ -#define OMAP_IOMMU_ERR_TLB_MISS (1 << 0) -#define OMAP_IOMMU_ERR_TRANS_FAULT (1 << 1) -#define OMAP_IOMMU_ERR_EMU_MISS (1 << 2) -#define OMAP_IOMMU_ERR_TBLWALK_FAULT (1 << 3) -#define OMAP_IOMMU_ERR_MULTIHIT_FAULT (1 << 4) -I'll use those in the tidspbridge driver, in patches that I plan to push soon.
I will apply this patch set on top of mine, see what breaks. Would you like me to propose a modified version of this set, or add additional patches in my set ?
Quoted 7 lines
Quoted 4 lines
Sure, let's try to expose only the minimal amount of omap iommu things with this patch set so we don't break things. Then the iommu development can continue on it's own independent of the core omap code except for the platform data.
I'll rebase my DSP patches on top of this patch set then, it will be easier.
Quoted 8 lines
OK sounds good to me.
Once we have the minimal changes acked by you and Joerg, I'll push it into an immutable branch that we all can merge in as needed.
BTW, after updating patch 3/6 I noticed patches 4 - 6 had trivial merge conflicts with the includes, so let me know if you want met to repost the whole set.
Please do. I'll then ack it (provided I have no more comments to make of course :-)).
Quoted 8 lines
Quoted 6 lines
Quoted 3 lines
But again, if there are nasty layering violations using this code, I would just remove those features. Those things tend to just get worse unless they are fixed properly to start with.
The long-term goal is to move the tidspbridge driver to the IOMMU API, but we'll need a step by step approach.
Yes agreed.
Signature · 3 lines
Regards, Laurent Pinchart
Tony Lindgren
maintainerPATCH v3 5/6 ARM: OMAP2+: Make some definitions local
Quoted 8 lines · Laurent Pinchart
Quoted 4 lines · On Wednesday 24 October 2012 16:33:18 Tony Lindgren wrote:
BTW, after updating patch 3/6 I noticed patches 4 - 6 had trivial merge conflicts with the includes, so let me know if you want met to repost the whole set.
Please do. I'll then ack it (provided I have no more comments to make of course :-)).
Posted now as "[PATCH v4 0/6] omap iommu changes to remove plat includes". Also noticed one more sorting issue in the isp files that's fixed now.
Regards,
Tony
Tony Lindgren
maintainerPATCH v3 6/6 ARM: OMAP2+: Move iommu/iovmm headers to platform_data
In reply to Tony LindgrenMove iommu/iovmm headers from plat/ to platform_data/ as part of the single zImage work.
Partially based on an earlier version by Ido Yariv <[email protected]>.
--- arch/arm/mach-omap2/devices.c | 2 +- arch/arm/mach-omap2/omap-iommu.c | 2 +- arch/arm/mach-omap2/omap_hwmod_3xxx_data.c | 2 +- arch/arm/mach-omap2/omap_hwmod_44xx_data.c | 2 +- drivers/iommu/omap-iommu-debug.c | 3 +-- drivers/iommu/omap-iommu.c | 2 +- drivers/iommu/omap-iommu2.c | 2 +- drivers/iommu/omap-iovmm.c | 3 +-- drivers/media/platform/omap3isp/ispvideo.c | 1 - include/linux/platform_data/iommu-omap.h | 0 10 files changed, 8 insertions(+), 11 deletions(-) rename arch/arm/plat-omap/include/plat/iommu.h => include/linux/platform_data/iommu-omap.h (100%)
arch/arm/mach-omap2/devices.c +1 -1
@@ -126,7 +126,7 @@ static struct platform_device omap2cam_device = { #if defined(CONFIG_IOMMU_API) -#include <plat/iommu.h> +#include <linux/platform_data/iommu-omap.h> static struct resource omap3isp_resources[] = { {
arch/arm/mach-omap2/omap-iommu.c +1 -1
@@ -13,7 +13,7 @@#include <linux/module.h> #include <linux/platform_device.h> -#include <plat/iommu.h> +#include <linux/platform_data/iommu-omap.h> #include "soc.h" #include "common.h"
arch/arm/mach-omap2/omap_hwmod_3xxx_data.c +1 -1
@@ -26,8 +26,8 @@#include <plat/mmc.h> #include <linux/platform_data/asoc-ti-mcbsp.h> #include <linux/platform_data/spi-omap2-mcspi.h> +#include <linux/platform_data/iommu-omap.h> #include <plat/dmtimer.h> -#include <plat/iommu.h> #include "am35xx.h"
arch/arm/mach-omap2/omap_hwmod_44xx_data.c +1 -1
@@ -27,10 +27,10 @@#include <plat/dma.h> #include <linux/platform_data/spi-omap2-mcspi.h> #include <linux/platform_data/asoc-ti-mcbsp.h> +#include <linux/platform_data/iommu-omap.h> #include <plat/mmc.h> #include <plat/dmtimer.h> #include <plat/common.h> -#include <plat/iommu.h> #include "omap_hwmod_common_data.h" #include "cm1_44xx.h"
drivers/iommu/omap-iommu-debug.c +1 -2
@@ -19,8 +19,7 @@#include <linux/platform_device.h> #include <linux/debugfs.h> #include <linux/omap-iommu.h> - -#include <plat/iommu.h> +#include <linux/platform_data/iommu-omap.h> #include "omap-iopgtable.h" #include "omap-iommu.h"
drivers/iommu/omap-iommu.c +1 -1
@@ -26,7 +26,7 @@#include <asm/cacheflush.h> -#include <plat/iommu.h> +#include <linux/platform_data/iommu-omap.h> #include "omap-iopgtable.h" #include "omap-iommu.h"
drivers/iommu/omap-iommu2.c +1 -1
@@ -19,8 +19,8 @@#include <linux/stringify.h> #include <linux/io.h> #include <linux/omap-iommu.h> +#include <linux/platform_data/iommu-omap.h> -#include <plat/iommu.h> #include "omap-iommu.h" /*
drivers/iommu/omap-iovmm.c +1 -2
@@ -18,12 +18,11 @@#include <linux/scatterlist.h> #include <linux/iommu.h> #include <linux/omap-iommu.h> +#include <linux/platform_data/iommu-omap.h> #include <asm/cacheflush.h> #include <asm/mach/map.h> -#include <plat/iommu.h> -#include "omap-iopgtable.h" #include "omap-iommu.h"
drivers/media/platform/omap3isp/ispvideo.c +0 -1
@@ -35,7 +35,6 @@#include <linux/omap-iommu.h> #include <media/v4l2-dev.h> #include <media/v4l2-ioctl.h> -#include <plat/iommu.h> #include <plat/omap-pm.h> #include "ispvideo.h"