Skip to contentSkip to conversation

omap iommu changes to remove plat includes

PATCH Superseded Tony Lindgren 3 participants 20 messages Oct 18, 2012 – Oct 25, 2012

Subsystems (6)

v3 of 5 Superseded Latest is v5 →

lore
Share & tools
lore

Tony Lindgren

author maintainer
#0 lore raw

v3 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
author maintainer
#1 lore raw

PATCH 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.

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]>
---
 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
index 68b5f03..7e8c7b6 100644
@@ -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

author maintainer
#2 lore raw

PATCH v3 2/6 ARM: OMAP2+: Move iopgtable header to drivers/iommu/

In reply to Tony Lindgren

From: 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.

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]>
[tony at atomide.com: updated to be earlier in the series]
---
 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
index f55fc5d..0cac372 100644
@@ -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
index d0b1234..f2bbfb0 100644
@@ -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
similarity index 100%
rename from arch/arm/plat-omap/include/plat/iopgtable.h
rename to drivers/iommu/omap-iopgtable.h
drivers/iommu/omap-iovmm.c +1 -1
index 2e10c3e..b332392 100644
@@ -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;
 
author maintainer
#3 lore raw

PATCH v3 3/6 ARM: OMAP2+: Move plat/iovmm.h to include/linux/omap-iommu.h

In reply to Tony Lindgren

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.

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.org
---
 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
index eefc379..77cbf2f 100644
@@ -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
index 7e8c7b6..a4b71b1 100644
@@ -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
index 0cac372..cf4a0b5 100644
@@ -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
index f2bbfb0..eadcfde 100644
@@ -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
index 99640d8..d72bd38 100644
@@ -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
index 8be7487..50be8c2 100644
@@ -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
index 60181ab..b2d4976 100644
@@ -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
index d7ac76b..e135774 100644
@@ -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
index a0b737fe..2853bef 100644
@@ -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

#4 lore raw

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.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.

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.org
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
author maintainer
#5 lore raw

PATCH 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.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.

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.org
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

#6 lore raw

PATCH 3/6 ARM: OMAP2+: Move plat/iovmm.h to include/linux/omap-iommu.h

In reply to Tony Lindgren

Hi 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.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.

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]>
---
 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 +0 -0
index eefc379..77cbf2f 100644

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.h index 7e8c7b6..a4b71b1 100644

arch/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.h deleted file mode 100644 index 498e57c..0000000

arch/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.c index 0cac372..cf4a0b5 100644

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
index f2bbfb0..eadcfde 100644
@@ -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
index b332392..9852101 100644
@@ -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.c index 99640d8..d72bd38 100644

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>
(quoted diff) +0 -0

b/drivers/media/platform/omap3isp/isp.h index 8be7487..50be8c2 100644

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"
(quoted diff) +0 -0

b/drivers/media/platform/omap3isp/ispccdc.c index 60181ab..b2d4976 100644

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"
(quoted diff) +0 -0

b/drivers/media/platform/omap3isp/ispstat.c index d7ac76b..e135774 100644

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"
 
(quoted diff) +0 -0

b/drivers/media/platform/omap3isp/ispvideo.c index a0b737fe..2853bef 100644

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 +1 -0
new file mode 100644
index 0000000..bd12665
@@ -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
author maintainer
#7 lore raw

PATCH 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.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 ?

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.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.

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

author maintainer
#8 lore raw

PATCH v3 3/6 ARM: OMAP2+: Move plat/iovmm.h to include/linux/omap-iommu.h

In reply to Laurent Pinchart
Quoted 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.

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.org
arch/arm/mach-omap2/iommu2.c +1 -0
index eefc379..e8116cf 100644
@@ -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
index 7e8c7b6..a4b71b1 100644
@@ -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
index 0cac372..cf4a0b5 100644
@@ -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
index f2bbfb0..eadcfde 100644
@@ -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
index 99640d8..7f182f0 100644
@@ -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
index 8be7487..8d68669 100644
@@ -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
index 60181ab..6ae1ffb2 100644
@@ -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
index d7ac76b..0408a32 100644
@@ -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
index a0b737fe..a4b8290 100644
@@ -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

#9 lore raw

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.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

Quoted 8 lines

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

I've just sent a pull request to linux-media for v3.7 with fixes for those.

Signature · 3 lines
Regards,

Laurent Pinchart
author maintainer
#10 lore raw

PATCH 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 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

Quoted 8 lines

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

Quoted 1 line

I've just sent a pull request to linux-media for v3.7 with fixes for those.

OK thanks!

Tony

author maintainer
#11 lore raw

PATCH v3 4/6 ARM: OMAP2+: Move iommu2 to drivers/iommu/omap-iommu2.c

In reply to Tony Lindgren

This 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.

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.org
---
 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
index fe40d9e..d6721a7 100644
@@ -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
index 14a4d5f..f66b816 100644
@@ -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
index cf4a0b5..d0427bd 100644
@@ -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
index eadcfde..4db86e1 100644
@@ -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
similarity index 99%
rename from arch/arm/mach-omap2/iommu2.c
rename to drivers/iommu/omap-iommu2.c
index 77cbf2f..066e6b2 100644
@@ -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
index 66a8139..cd4ae9e 100644
@@ -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
index 9852101..3e3b242 100644
@@ -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)
author maintainer
#12 lore raw

PATCH v3 5/6 ARM: OMAP2+: Make some definitions local

In reply to Tony Lindgren

From: Ido Yariv <[email protected]>

Move some of the definitions in omap-iommu.h that can be made local to either drivers/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]>
[tony at atomide.com: updated for header changes in the series]
---
 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
index 4db86e1..df84087 100644
@@ -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
index 8c3378d..2b5f3c0 100644
@@ -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
index 066e6b2..4d8d91d 100644
@@ -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)
 {
#13 lore raw

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.h that can be made local to either drivers/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]>
[[email protected]: updated for header changes in the series]
---
 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
index 4db86e1..df84087 100644
@@ -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
index 8c3378d..2b5f3c0 100644
@@ -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_t
drivers/iommu/omap-iommu2.c +6 -0
index 066e6b2..4d8d91d 100644
@@ -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
author maintainer
#14 lore raw

PATCH 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

#15 lore raw

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
author maintainer
#16 lore raw

PATCH 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

#17 lore raw

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
author maintainer
#18 lore raw

PATCH 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

author maintainer
#19 lore raw

PATCH v3 6/6 ARM: OMAP2+: Move iommu/iovmm headers to platform_data

In reply to Tony Lindgren

Move 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]>.

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]>
---
 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
index c8c2117..6cd0c2a 100644
@@ -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
index df298d4..a6a4ff8 100644
@@ -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
index f67b7ee..621bc71 100644
@@ -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
index 652d028..5850b3e 100644
@@ -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
index d0427bd..d97fbe4 100644
@@ -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
index df84087..badc17c 100644
@@ -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
index 4d8d91d..3642cf2 100644
@@ -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
index 3e3b242..46d87569 100644
@@ -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
index 2853bef..3bfa245 100644
@@ -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"
include/linux/platform_data/iommu-omap.h renamed from arch/arm/plat-omap/include/plat/iommu.h +0 -0
similarity index 100%
rename from arch/arm/plat-omap/include/plat/iommu.h
rename to include/linux/platform_data/iommu-omap.h