diff options
author | Linus Torvalds <torvalds@linux-foundation.org> | 2012-01-10 14:08:21 -0500 |
---|---|---|
committer | Linus Torvalds <torvalds@linux-foundation.org> | 2012-01-10 14:08:21 -0500 |
commit | 1c8106528aa6bf16b3f457de80df1cf7462a49a4 (patch) | |
tree | 4aed009c4a36195fd14c9f8d70fe2723a49583da /arch/arm | |
parent | 1a464cbb3d483f2f195b614cffa4aa1b910a0440 (diff) | |
parent | f93ea733878733f3e98475bc3e2ccf789bebcfb8 (diff) |
Merge branch 'next' of git://git.kernel.org/pub/scm/linux/kernel/git/joro/iommu
* 'next' of git://git.kernel.org/pub/scm/linux/kernel/git/joro/iommu: (53 commits)
iommu/amd: Set IOTLB invalidation timeout
iommu/amd: Init stats for iommu=pt
iommu/amd: Remove unnecessary cache flushes in amd_iommu_resume
iommu/amd: Add invalidate-context call-back
iommu/amd: Add amd_iommu_device_info() function
iommu/amd: Adapt IOMMU driver to PCI register name changes
iommu/amd: Add invalid_ppr callback
iommu/amd: Implement notifiers for IOMMUv2
iommu/amd: Implement IO page-fault handler
iommu/amd: Add routines to bind/unbind a pasid
iommu/amd: Implement device aquisition code for IOMMUv2
iommu/amd: Add driver stub for AMD IOMMUv2 support
iommu/amd: Add stat counter for IOMMUv2 events
iommu/amd: Add device errata handling
iommu/amd: Add function to get IOMMUv2 domain for pdev
iommu/amd: Implement function to send PPR completions
iommu/amd: Implement functions to manage GCR3 table
iommu/amd: Implement IOMMUv2 TLB flushing routines
iommu/amd: Add support for IOMMUv2 domain mode
iommu/amd: Add amd_iommu_domain_direct_map function
...
Diffstat (limited to 'arch/arm')
-rw-r--r-- | arch/arm/mach-omap2/devices.c | 7 | ||||
-rw-r--r-- | arch/arm/plat-omap/include/plat/iommu.h | 31 | ||||
-rw-r--r-- | arch/arm/plat-omap/include/plat/iovmm.h | 12 |
3 files changed, 41 insertions, 9 deletions
diff --git a/arch/arm/mach-omap2/devices.c b/arch/arm/mach-omap2/devices.c index 35d5dffab7e1..46dfd1ae8f71 100644 --- a/arch/arm/mach-omap2/devices.c +++ b/arch/arm/mach-omap2/devices.c | |||
@@ -28,6 +28,7 @@ | |||
28 | #include <plat/board.h> | 28 | #include <plat/board.h> |
29 | #include <plat/mcbsp.h> | 29 | #include <plat/mcbsp.h> |
30 | #include <plat/mmc.h> | 30 | #include <plat/mmc.h> |
31 | #include <plat/iommu.h> | ||
31 | #include <plat/dma.h> | 32 | #include <plat/dma.h> |
32 | #include <plat/omap_hwmod.h> | 33 | #include <plat/omap_hwmod.h> |
33 | #include <plat/omap_device.h> | 34 | #include <plat/omap_device.h> |
@@ -211,9 +212,15 @@ static struct platform_device omap3isp_device = { | |||
211 | .resource = omap3isp_resources, | 212 | .resource = omap3isp_resources, |
212 | }; | 213 | }; |
213 | 214 | ||
215 | static struct omap_iommu_arch_data omap3_isp_iommu = { | ||
216 | .name = "isp", | ||
217 | }; | ||
218 | |||
214 | int omap3_init_camera(struct isp_platform_data *pdata) | 219 | int omap3_init_camera(struct isp_platform_data *pdata) |
215 | { | 220 | { |
216 | omap3isp_device.dev.platform_data = pdata; | 221 | omap3isp_device.dev.platform_data = pdata; |
222 | omap3isp_device.dev.archdata.iommu = &omap3_isp_iommu; | ||
223 | |||
217 | return platform_device_register(&omap3isp_device); | 224 | return platform_device_register(&omap3isp_device); |
218 | } | 225 | } |
219 | 226 | ||
diff --git a/arch/arm/plat-omap/include/plat/iommu.h b/arch/arm/plat-omap/include/plat/iommu.h index a1d79ee19250..88be3e628b33 100644 --- a/arch/arm/plat-omap/include/plat/iommu.h +++ b/arch/arm/plat-omap/include/plat/iommu.h | |||
@@ -111,6 +111,32 @@ struct iommu_platform_data { | |||
111 | u32 da_end; | 111 | u32 da_end; |
112 | }; | 112 | }; |
113 | 113 | ||
114 | /** | ||
115 | * struct iommu_arch_data - omap iommu private data | ||
116 | * @name: name of the iommu device | ||
117 | * @iommu_dev: handle of the iommu device | ||
118 | * | ||
119 | * This is an omap iommu private data object, which binds an iommu user | ||
120 | * to its iommu device. This object should be placed at the iommu user's | ||
121 | * dev_archdata so generic IOMMU API can be used without having to | ||
122 | * utilize omap-specific plumbing anymore. | ||
123 | */ | ||
124 | struct omap_iommu_arch_data { | ||
125 | const char *name; | ||
126 | struct omap_iommu *iommu_dev; | ||
127 | }; | ||
128 | |||
129 | /** | ||
130 | * dev_to_omap_iommu() - retrieves an omap iommu object from a user device | ||
131 | * @dev: iommu client device | ||
132 | */ | ||
133 | static inline struct omap_iommu *dev_to_omap_iommu(struct device *dev) | ||
134 | { | ||
135 | struct omap_iommu_arch_data *arch_data = dev->archdata.iommu; | ||
136 | |||
137 | return arch_data->iommu_dev; | ||
138 | } | ||
139 | |||
114 | /* IOMMU errors */ | 140 | /* IOMMU errors */ |
115 | #define OMAP_IOMMU_ERR_TLB_MISS (1 << 0) | 141 | #define OMAP_IOMMU_ERR_TLB_MISS (1 << 0) |
116 | #define OMAP_IOMMU_ERR_TRANS_FAULT (1 << 1) | 142 | #define OMAP_IOMMU_ERR_TRANS_FAULT (1 << 1) |
@@ -163,8 +189,8 @@ extern int omap_iommu_set_isr(const char *name, | |||
163 | void *priv), | 189 | void *priv), |
164 | void *isr_priv); | 190 | void *isr_priv); |
165 | 191 | ||
166 | extern void omap_iommu_save_ctx(struct omap_iommu *obj); | 192 | extern void omap_iommu_save_ctx(struct device *dev); |
167 | extern void omap_iommu_restore_ctx(struct omap_iommu *obj); | 193 | extern void omap_iommu_restore_ctx(struct device *dev); |
168 | 194 | ||
169 | extern int omap_install_iommu_arch(const struct iommu_functions *ops); | 195 | extern int omap_install_iommu_arch(const struct iommu_functions *ops); |
170 | extern void omap_uninstall_iommu_arch(const struct iommu_functions *ops); | 196 | extern void omap_uninstall_iommu_arch(const struct iommu_functions *ops); |
@@ -176,6 +202,5 @@ extern ssize_t | |||
176 | omap_iommu_dump_ctx(struct omap_iommu *obj, char *buf, ssize_t len); | 202 | omap_iommu_dump_ctx(struct omap_iommu *obj, char *buf, ssize_t len); |
177 | extern size_t | 203 | extern size_t |
178 | omap_dump_tlb_entries(struct omap_iommu *obj, char *buf, ssize_t len); | 204 | omap_dump_tlb_entries(struct omap_iommu *obj, char *buf, ssize_t len); |
179 | struct device *omap_find_iommu_device(const char *name); | ||
180 | 205 | ||
181 | #endif /* __MACH_IOMMU_H */ | 206 | #endif /* __MACH_IOMMU_H */ |
diff --git a/arch/arm/plat-omap/include/plat/iovmm.h b/arch/arm/plat-omap/include/plat/iovmm.h index 6af1a91c0f36..498e57cda6cd 100644 --- a/arch/arm/plat-omap/include/plat/iovmm.h +++ b/arch/arm/plat-omap/include/plat/iovmm.h | |||
@@ -72,18 +72,18 @@ struct iovm_struct { | |||
72 | #define IOVMF_DA_FIXED (1 << (4 + IOVMF_SW_SHIFT)) | 72 | #define IOVMF_DA_FIXED (1 << (4 + IOVMF_SW_SHIFT)) |
73 | 73 | ||
74 | 74 | ||
75 | extern struct iovm_struct *omap_find_iovm_area(struct omap_iommu *obj, u32 da); | 75 | extern struct iovm_struct *omap_find_iovm_area(struct device *dev, u32 da); |
76 | extern u32 | 76 | extern u32 |
77 | omap_iommu_vmap(struct iommu_domain *domain, struct omap_iommu *obj, u32 da, | 77 | omap_iommu_vmap(struct iommu_domain *domain, struct device *dev, u32 da, |
78 | const struct sg_table *sgt, u32 flags); | 78 | const struct sg_table *sgt, u32 flags); |
79 | extern struct sg_table *omap_iommu_vunmap(struct iommu_domain *domain, | 79 | extern struct sg_table *omap_iommu_vunmap(struct iommu_domain *domain, |
80 | struct omap_iommu *obj, u32 da); | 80 | struct device *dev, u32 da); |
81 | extern u32 | 81 | extern u32 |
82 | omap_iommu_vmalloc(struct iommu_domain *domain, struct omap_iommu *obj, | 82 | omap_iommu_vmalloc(struct iommu_domain *domain, struct device *dev, |
83 | u32 da, size_t bytes, u32 flags); | 83 | u32 da, size_t bytes, u32 flags); |
84 | extern void | 84 | extern void |
85 | omap_iommu_vfree(struct iommu_domain *domain, struct omap_iommu *obj, | 85 | omap_iommu_vfree(struct iommu_domain *domain, struct device *dev, |
86 | const u32 da); | 86 | const u32 da); |
87 | extern void *omap_da_to_va(struct omap_iommu *obj, u32 da); | 87 | extern void *omap_da_to_va(struct device *dev, u32 da); |
88 | 88 | ||
89 | #endif /* __IOMMU_MMAP_H */ | 89 | #endif /* __IOMMU_MMAP_H */ |