Home
last modified time | relevance | path

Searched refs:iova (Results 1 – 25 of 123) sorted by relevance

12345

/linux/drivers/fpga/
H A Ddfl-afu-dma-region.c125 u64 iova, u64 size) in dma_region_check_iova() argument
127 if (!size && region->iova != iova) in dma_region_check_iova()
130 return (region->iova <= iova) && in dma_region_check_iova()
131 (region->length + region->iova >= iova + size); in dma_region_check_iova()
150 (unsigned long long)region->iova); in afu_dma_region_add()
161 if (dma_region_check_iova(this, region->iova, region->length)) in afu_dma_region_add()
164 if (region->iova < this->iova) in afu_dma_region_add()
166 else if (region->iova > this->iova) in afu_dma_region_add()
191 (unsigned long long)region->iova); in afu_dma_region_remove()
213 (unsigned long long)region->iova); in afu_dma_region_destroy()
[all …]
/linux/drivers/iommu/iommufd/
H A Diova_bitmap.c36 unsigned long iova; member
115 unsigned long iova; member
131 unsigned long iova) in iova_bitmap_offset_to_index()
133 return (iova >> bitmap->mapped.pgshift) / in iova_bitmap_offset_to_index()
155 return bitmap->iova + iova_bitmap_index_to_offset(bitmap, skip); in iova_bitmap_mapped_iova()
202 mapped->iova = iova_bitmap_mapped_iova(bitmap); in iova_bitmap_get()
243 struct iova_bitmap *iova_bitmap_alloc(unsigned long iova, size_t length, in iova_bitmap_alloc() argument
259 bitmap->iova = iova; in iova_bitmap_alloc()
261 mapped->iova = iova; in iova_bitmap_alloc()
320 unsigned long max_iova = bitmap->iova + bitmap->length - 1; in iova_bitmap_mapped_length()
[all …]
/linux/include/trace/events/
H A Diommu.h81 TP_PROTO(unsigned long iova, phys_addr_t paddr, size_t size),
83 TP_ARGS(iova, paddr, size),
86 __field(u64, iova)
92 __entry->iova = iova;
97 TP_printk("IOMMU: iova=0x%016llx - 0x%016llx paddr=0x%016llx size=%zu",
98 __entry->iova, __entry->iova + __entry->size, __entry->paddr,
105 TP_PROTO(unsigned long iova, size_t size, size_t unmapped_size),
107 TP_ARGS(iova, siz
[all...]
/linux/drivers/iommu/
H A Dio-pgtable-arm-selftests.c26 static void dummy_tlb_flush(unsigned long iova, size_t size, in dummy_tlb_flush() argument
34 unsigned long iova, size_t granule, in dummy_tlb_add_page() argument
37 dummy_tlb_flush(iova, granule, granule, cookie); in dummy_tlb_add_page()
59 unsigned long iova; in arm_lpae_run_tests() local
87 iova = 0; in arm_lpae_run_tests()
91 if (ops->map_pages(ops, iova, iova, size, 1, in arm_lpae_run_tests()
98 if (!ops->map_pages(ops, iova, iova + size, size, 1, in arm_lpae_run_tests()
103 if (ops->iova_to_phys(ops, iova + 42) != (iova + 42)) in arm_lpae_run_tests()
106 iova += SZ_1G; in arm_lpae_run_tests()
110 iova = 0; in arm_lpae_run_tests()
[all …]
H A Dio-pgtable-arm-v7s.c395 unsigned long iova, phys_addr_t paddr, int prot, in arm_v7s_init_pte() argument
411 tblp = ptep - ARM_V7S_LVL_IDX(iova, lvl, cfg); in arm_v7s_init_pte()
412 if (WARN_ON(__arm_v7s_unmap(data, NULL, iova + i * sz, in arm_v7s_init_pte()
460 static int __arm_v7s_map(struct arm_v7s_io_pgtable *data, unsigned long iova, in __arm_v7s_map() argument
469 ptep += ARM_V7S_LVL_IDX(iova, lvl, cfg); in __arm_v7s_map()
473 return arm_v7s_init_pte(data, iova, paddr, prot, in __arm_v7s_map()
504 return __arm_v7s_map(data, iova, paddr, size, prot, lvl + 1, cptep, gfp); in __arm_v7s_map()
507 static int arm_v7s_map_pages(struct io_pgtable_ops *ops, unsigned long iova, in arm_v7s_map_pages() argument
514 if (WARN_ON(iova >= (1ULL << data->iop.cfg.ias) || in arm_v7s_map_pages()
522 ret = __arm_v7s_map(data, iova, paddr, pgsize, prot, 1, data->pgd, in arm_v7s_map_pages()
[all …]
H A Dsun50i-iommu.c166 static u32 sun50i_iova_get_dte_index(dma_addr_t iova) in sun50i_iova_get_dte_index() argument
168 return FIELD_GET(SUN50I_IOVA_DTE_MASK, iova); in sun50i_iova_get_dte_index()
171 static u32 sun50i_iova_get_pte_index(dma_addr_t iova) in sun50i_iova_get_pte_index() argument
173 return FIELD_GET(SUN50I_IOVA_PTE_MASK, iova); in sun50i_iova_get_pte_index()
176 static u32 sun50i_iova_get_page_offset(dma_addr_t iova) in sun50i_iova_get_page_offset() argument
178 return FIELD_GET(SUN50I_IOVA_PAGE_MASK, iova); in sun50i_iova_get_page_offset()
302 unsigned long iova) in sun50i_iommu_zap_iova() argument
307 iommu_write(iommu, IOMMU_TLB_IVLD_ADDR_REG, iova); in sun50i_iommu_zap_iova()
319 unsigned long iova) in sun50i_iommu_zap_ptw_cache() argument
324 iommu_write(iommu, IOMMU_PC_IVLD_ADDR_REG, iova); in sun50i_iommu_zap_ptw_cache()
[all …]
H A Dio-pgtable-dart.c113 unsigned long iova, phys_addr_t paddr, in dart_init_pte() argument
161 static int dart_get_index(struct dart_io_pgtable *data, unsigned long iova, int level) in dart_get_index() argument
163 return (iova >> (level * data->bits_per_level + ilog2(sizeof(dart_iopte)))) & in dart_get_index()
167 static int dart_get_last_index(struct dart_io_pgtable *data, unsigned long iova) in dart_get_last_index() argument
170 return (iova >> (data->bits_per_level + ilog2(sizeof(dart_iopte)))) & in dart_get_last_index()
174 static dart_iopte *dart_get_last(struct dart_io_pgtable *data, unsigned long iova) in dart_get_last() argument
178 int tbl = dart_get_index(data, iova, level); in dart_get_last()
188 ptep += dart_get_index(data, iova, level); in dart_get_last()
226 static int dart_map_pages(struct io_pgtable_ops *ops, unsigned long iova, in dart_map_pages() argument
247 tbl = dart_get_index(data, iova, level); in dart_map_pages()
[all …]
H A Dexynos-iommu.c101 #define section_offs(iova) (iova & (SECT_SIZE - 1)) argument
103 #define lpage_offs(iova) (iova & (LPAGE_SIZE - 1)) argument
105 #define spage_offs(iova) (iova & (SPAGE_SIZE - 1)) argument
110 static u32 lv1ent_offset(sysmmu_iova_t iova) in lv1ent_offset() argument
112 return iova >> SECT_ORDER; in lv1ent_offset()
115 static u32 lv2ent_offset(sysmmu_iova_t iova) in lv2ent_offset() argument
117 return (iova >> SPAGE_ORDER) & (NUM_LV2ENTRIES - 1); in lv2ent_offset()
181 static sysmmu_pte_t *section_entry(sysmmu_pte_t *pgtable, sysmmu_iova_t iova) in section_entry() argument
183 return pgtable + lv1ent_offset(iova); in section_entry()
186 static sysmmu_pte_t *page_entry(sysmmu_pte_t *sent, sysmmu_iova_t iova) in page_entry() argument
[all …]
H A Dvirtio-iommu.c59 struct interval_tree_node iova; member
330 static int viommu_add_mapping(struct viommu_domain *vdomain, u64 iova, u64 end, in viommu_add_mapping() argument
341 mapping->iova.start = iova; in viommu_add_mapping()
342 mapping->iova.last = end; in viommu_add_mapping()
346 interval_tree_insert(&mapping->iova, &vdomain->mappings); in viommu_add_mapping()
362 u64 iova, u64 end) in viommu_del_mappings() argument
370 next = interval_tree_iter_first(&vdomain->mappings, iova, end); in viommu_del_mappings()
373 mapping = container_of(node, struct viommu_mapping, iova); in viommu_del_mappings()
374 next = interval_tree_iter_next(node, iova, end); in viommu_del_mappings()
377 if (mapping->iova.start < iova) in viommu_del_mappings()
[all …]
H A Dtegra-smmu.c169 static unsigned int iova_pd_index(unsigned long iova) in iova_pd_index() argument
171 return (iova >> SMMU_PDE_SHIFT) & (SMMU_NUM_PDE - 1); in iova_pd_index()
174 static unsigned int iova_pt_index(unsigned long iova) in iova_pt_index() argument
176 return (iova >> SMMU_PTE_SHIFT) & (SMMU_NUM_PTE - 1); in iova_pt_index()
236 unsigned long iova) in smmu_flush_tlb_section() argument
245 value |= SMMU_TLB_FLUSH_ASID_MATCH | SMMU_TLB_FLUSH_VA_SECTION(iova); in smmu_flush_tlb_section()
251 unsigned long iova) in smmu_flush_tlb_group() argument
260 value |= SMMU_TLB_FLUSH_ASID_MATCH | SMMU_TLB_FLUSH_VA_GROUP(iova); in smmu_flush_tlb_group()
559 static void tegra_smmu_set_pde(struct tegra_smmu_as *as, unsigned long iova, in tegra_smmu_set_pde() argument
562 unsigned int pd_index = iova_pd_index(iova); in tegra_smmu_set_pde()
[all …]
/linux/drivers/staging/media/ipu3/
H A Dipu3-dmamap.c102 struct iova *iova; in imgu_dmamap_alloc() local
107 iova = alloc_iova(&imgu->iova_domain, size >> shift, in imgu_dmamap_alloc()
109 if (!iova) in imgu_dmamap_alloc()
117 iovaddr = iova_dma_addr(&imgu->iova_domain, iova); in imgu_dmamap_alloc()
133 map->daddr = iova_dma_addr(&imgu->iova_domain, iova); in imgu_dmamap_alloc()
142 imgu_mmu_unmap(imgu->mmu, iova_dma_addr(&imgu->iova_domain, iova), in imgu_dmamap_alloc()
146 __free_iova(&imgu->iova_domain, iova); in imgu_dmamap_alloc()
153 struct iova *iova; in imgu_dmamap_unmap() local
155 iova = find_iova(&imgu->iova_domain, in imgu_dmamap_unmap()
157 if (WARN_ON(!iova)) in imgu_dmamap_unmap()
[all …]
H A Dipu3-mmu.c154 static inline void address_to_pte_idx(unsigned long iova, u32 *l1pt_idx, in address_to_pte_idx() argument
157 iova >>= IPU3_PAGE_SHIFT; in address_to_pte_idx()
160 *l2pt_idx = iova & IPU3_L2PT_MASK; in address_to_pte_idx()
162 iova >>= IPU3_L2PT_SHIFT; in address_to_pte_idx()
165 *l1pt_idx = iova & IPU3_L1PT_MASK; in address_to_pte_idx()
210 static int __imgu_mmu_map(struct imgu_mmu *mmu, unsigned long iova, in __imgu_mmu_map() argument
220 address_to_pte_idx(iova, &l1pt_idx, &l2pt_idx); in __imgu_mmu_map()
251 int imgu_mmu_map(struct imgu_mmu_info *info, unsigned long iova, in imgu_mmu_map() argument
262 if (!IS_ALIGNED(iova | paddr | size, IPU3_PAGE_SIZE)) { in imgu_mmu_map()
264 iova, &paddr, size); in imgu_mmu_map()
[all …]
/linux/drivers/staging/media/ipu7/
H A Dipu7-dma.c29 static struct vm_info *get_vm_info(struct ipu7_mmu *mmu, dma_addr_t iova) in get_vm_info() argument
34 if (iova >= info->ipu7_iova && in get_vm_info()
35 iova < (info->ipu7_iova + info->size)) in get_vm_info()
163 struct iova *iova; in ipu7_dma_alloc() local
174 iova = alloc_iova(&mmu->dmap->iovad, count, in ipu7_dma_alloc()
176 if (!iova) in ipu7_dma_alloc()
184 size, iova->pfn_lo, iova->pfn_hi); in ipu7_dma_alloc()
185 for (i = 0; iova->pfn_lo + i <= iova->pfn_hi; i++) { in ipu7_dma_alloc()
197 PFN_PHYS(iova->pfn_lo + i), pci_dma_addr, in ipu7_dma_alloc()
213 *dma_handle = PFN_PHYS(iova->pfn_lo); in ipu7_dma_alloc()
[all …]
H A Dipu7-mmu.c240 static void l2_unmap(struct ipu7_mmu_info *mmu_info, unsigned long iova, in l2_unmap() argument
250 for (l1_idx = iova >> ISP_L1PT_SHIFT; in l2_unmap()
254 l1_idx, iova); in l2_unmap()
259 iova, l1_idx); in l2_unmap()
265 for (l2_idx = (iova & ISP_L2PT_MASK) >> ISP_L2PT_SHIFT; in l2_unmap()
274 iova += ISP_PAGE_SIZE; in l2_unmap()
289 static int l2_map(struct ipu7_mmu_info *mmu_info, unsigned long iova, in l2_map() argument
306 for (l1_idx = iova >> ISP_L1PT_SHIFT; in l2_map()
310 l1_idx, (u32)iova); in l2_map()
345 for (l2_idx = (iova & ISP_L2PT_MASK) >> ISP_L2PT_SHIFT; in l2_map()
[all …]
/linux/drivers/media/pci/intel/ipu6/
H A Dipu6-dma.c29 static struct vm_info *get_vm_info(struct ipu6_mmu *mmu, dma_addr_t iova) in get_vm_info() argument
34 if (iova >= info->ipu6_iova && in get_vm_info()
35 iova < (info->ipu6_iova + info->size)) in get_vm_info()
163 struct iova *iova; in ipu6_dma_alloc() local
174 iova = alloc_iova(&mmu->dmap->iovad, count, in ipu6_dma_alloc()
176 if (!iova) in ipu6_dma_alloc()
184 size, iova->pfn_lo, iova->pfn_hi); in ipu6_dma_alloc()
185 for (i = 0; iova->pfn_lo + i <= iova->pfn_hi; i++) { in ipu6_dma_alloc()
197 PFN_PHYS(iova->pfn_lo + i), pci_dma_addr, in ipu6_dma_alloc()
213 *dma_handle = PFN_PHYS(iova->pfn_lo); in ipu6_dma_alloc()
[all …]
H A Dipu6-mmu.c99 u32 iova = (phys_addr_t)l1_idx << ISP_L1PT_SHIFT; in page_table_dump() local
108 l1_idx, iova, iova + ISP_PAGE_SIZE, &l2_phys); in page_table_dump()
112 u32 iova2 = iova + (l2_idx << ISP_L2PT_SHIFT); in page_table_dump()
257 static void l2_unmap(struct ipu6_mmu_info *mmu_info, unsigned long iova, in l2_unmap() argument
267 for (l1_idx = iova >> ISP_L1PT_SHIFT; in l2_unmap()
271 l1_idx, iova); in l2_unmap()
276 iova, l1_idx); in l2_unmap()
282 for (l2_idx = (iova & ISP_L2PT_MASK) >> ISP_L2PT_SHIFT; in l2_unmap()
291 iova += ISP_PAGE_SIZE; in l2_unmap()
306 static int l2_map(struct ipu6_mmu_info *mmu_info, unsigned long iova, in l2_map() argument
[all …]
/linux/drivers/accel/amdxdna/
H A Damdxdna_iommu.c18 static struct iova *amdxdna_iommu_alloc_iova(struct amdxdna_dev *xdna, in amdxdna_iommu_alloc_iova()
24 struct iova *iova; in amdxdna_iommu_alloc_iova() local
30 iova = alloc_iova(&xdna->iovad, size >> shift, end >> shift, size_aligned); in amdxdna_iommu_alloc_iova()
31 if (!iova) in amdxdna_iommu_alloc_iova()
34 *dma_addr = iova_dma_addr(&xdna->iovad, iova); in amdxdna_iommu_alloc_iova()
36 return iova; in amdxdna_iommu_alloc_iova()
44 struct iova *iova; in amdxdna_dma_map_bo() local
67 iova = amdxdna_iommu_alloc_iova(xdna, abo->mem.size, &dma_addr, in amdxdna_dma_map_bo()
69 if (IS_ERR(iova)) { in amdxdna_dma_map_bo()
70 XDNA_ERR(xdna, "Alloc iova failed, ret %ld", PTR_ERR(iova)); in amdxdna_dma_map_bo()
[all …]
/linux/drivers/vdpa/vdpa_user/
H A Diova_domain.c110 u64 iova, u64 size, u64 paddr) in vduse_domain_map_bounce_page() argument
114 u64 last = iova + size - 1; in vduse_domain_map_bounce_page()
116 while (iova <= last) { in vduse_domain_map_bounce_page()
129 map = &domain->bounce_maps[iova >> BOUNCE_MAP_SHIFT]; in vduse_domain_map_bounce_page()
131 head_map = &domain->bounce_maps[(iova & PAGE_MASK) >> BOUNCE_MAP_SHIFT]; in vduse_domain_map_bounce_page()
143 iova += BOUNCE_MAP_SIZE; in vduse_domain_map_bounce_page()
149 u64 iova, u64 size) in vduse_domain_unmap_bounce_page() argument
152 u64 last = iova + size - 1; in vduse_domain_unmap_bounce_page()
154 while (iova <= last) { in vduse_domain_unmap_bounce_page()
155 map = &domain->bounce_maps[iova >> BOUNCE_MAP_SHIFT]; in vduse_domain_unmap_bounce_page()
[all …]
/linux/drivers/media/platform/nvidia/tegra-vde/
H A Ddmabuf-cache.c28 struct iova *iova; member
39 tegra_vde_iommu_unmap(entry->vde, entry->iova); in tegra_vde_release_entry()
73 struct iova *iova; in tegra_vde_dmabuf_cache_map() local
91 *addrp = iova_dma_addr(&vde->iova, entry->iova); in tegra_vde_dmabuf_cache_map()
125 err = tegra_vde_iommu_map(vde, sgt, &iova, dmabuf->size); in tegra_vde_dmabuf_cache_map()
129 *addrp = iova_dma_addr(&vde->iova, iova); in tegra_vde_dmabuf_cache_map()
132 iova = NULL; in tegra_vde_dmabuf_cache_map()
139 entry->iova = iova; in tegra_vde_dmabuf_cache_map()
/linux/tools/testing/selftests/iommu/
H A Diommufd_fail_nth.c243 __u64 iova; in TEST_FAIL_NTH() local
279 if (_test_ioctl_ioas_map(self->fd, ioas_id, buffer, BUFFER_SIZE, &iova, in TEST_FAIL_NTH()
291 .src_iova = iova, in TEST_FAIL_NTH()
299 if (_test_ioctl_ioas_unmap(self->fd, ioas_id, iova, BUFFER_SIZE, in TEST_FAIL_NTH()
303 _test_ioctl_ioas_unmap(self->fd, ioas_id, iova, BUFFER_SIZE, NULL); in TEST_FAIL_NTH()
313 __u64 iova; in TEST_FAIL_NTH() local
330 if (_test_ioctl_ioas_map(self->fd, ioas_id, buffer, 262144, &iova, in TEST_FAIL_NTH()
349 __u64 iova; in TEST_FAIL_NTH() local
366 if (_test_ioctl_ioas_map_file(self->fd, ioas_id, mfd, 0, 262144, &iova, in TEST_FAIL_NTH()
386 __u64 iova; in TEST_FAIL_NTH() local
431 __u64 iova; TEST_FAIL_NTH() local
510 __u64 iova; TEST_FAIL_NTH() local
566 __u64 iova; TEST_FAIL_NTH() local
639 __u64 iova; TEST_FAIL_NTH() local
[all...]
/linux/drivers/gpu/drm/etnaviv/
H A Detnaviv_mmu.c19 unsigned long iova, size_t size) in etnaviv_context_unmap() argument
25 unmapped_page = context->global->ops->unmap(context, iova, in etnaviv_context_unmap()
30 iova += unmapped_page; in etnaviv_context_unmap()
36 unsigned long iova, phys_addr_t paddr, in etnaviv_context_map() argument
39 unsigned long orig_iova = iova; in etnaviv_context_map()
45 ret = context->global->ops->map(context, iova, paddr, pgsize, in etnaviv_context_map()
50 iova += pgsize; in etnaviv_context_map()
63 u32 iova, unsigned int va_len, in etnaviv_iommu_map() argument
67 unsigned int da = iova; in etnaviv_iommu_map()
81 if (!IS_ALIGNED(iova | pa | bytes, SZ_4K)) { in etnaviv_iommu_map()
[all …]
/linux/include/linux/
H A Dio-pgtable.h41 void (*tlb_flush_walk)(unsigned long iova, size_t size, size_t granule,
44 unsigned long iova, size_t granule, void *cookie);
215 int (*map_pages)(struct io_pgtable_ops *ops, unsigned long iova,
218 size_t (*unmap_pages)(struct io_pgtable_ops *ops, unsigned long iova,
222 unsigned long iova);
223 int (*pgtable_walk)(struct io_pgtable_ops *ops, unsigned long iova, void *wd);
225 unsigned long iova, size_t size,
285 io_pgtable_tlb_flush_walk(struct io_pgtable *iop, unsigned long iova, in io_pgtable_tlb_flush_walk() argument
289 iop->cfg.tlb->tlb_flush_walk(iova, size, granule, iop->cookie); in io_pgtable_tlb_flush_walk()
294 struct iommu_iotlb_gather * gather, unsigned long iova, in io_pgtable_tlb_add_page() argument
[all …]
/linux/tools/testing/selftests/vfio/lib/
H A Diommu.c69 int __iommu_hva2iova(struct iommu *iommu, void *vaddr, iova_t *iova) in __iommu_hva2iova() argument
80 if (iova) in __iommu_hva2iova()
81 *iova = region->iova + (vaddr - region->vaddr); in __iommu_hva2iova()
91 iova_t iova; in iommu_hva2iova() local
94 ret = __iommu_hva2iova(iommu, vaddr, &iova); in iommu_hva2iova()
97 return iova; in iommu_hva2iova()
106 .iova = region->iova, in vfio_iommu_map()
124 .iova = region->iova, in iommufd_map()
152 static int __vfio_iommu_unmap(int fd, u64 iova, u64 size, u32 flags, u64 *unmapped) in __vfio_iommu_unmap() argument
156 .iova = iova, in __vfio_iommu_unmap()
[all …]
H A Diova_allocator.c57 iova_t iova, last; in iova_allocator_alloc() local
63 iova = range->start + allocator->range_offset; in iova_allocator_alloc()
66 if (check_add_overflow(iova, size - 1, &last) || in iova_allocator_alloc()
71 iova = last & ~(size - 1); in iova_allocator_alloc()
74 if (check_add_overflow(iova, size - 1, &last) || in iova_allocator_alloc()
85 return iova; in iova_allocator_alloc()
/linux/tools/testing/selftests/vfio/
H A Dvfio_dma_mapping_test.c38 static int intel_iommu_mapping_get(const char *bdf, u64 iova, in intel_iommu_mapping_get() argument
51 printf("Searching for IOVA 0x%lx in %s\n", iova, iommu_mapping_path); in intel_iommu_mapping_get()
60 if (line_iova != (iova / getpagesize())) in intel_iommu_mapping_get()
86 static int iommu_mapping_get(const char *bdf, u64 iova, in iommu_mapping_get() argument
90 return intel_iommu_mapping_get(bdf, iova, mapping); in iommu_mapping_get()
152 region.iova = iova_allocator_alloc(self->iova_allocator, size); in TEST_F()
156 printf("Mapped HVA %p (size 0x%lx) at IOVA 0x%lx\n", region.vaddr, size, region.iova); in TEST_F()
158 ASSERT_EQ(region.iova, to_iova(self->device, region.vaddr)); in TEST_F()
160 rc = iommu_mapping_get(device_bdf, region.iova, &mapping); in TEST_F()
168 printf("Found IOMMU mappings for IOVA 0x%lx:\n", region.iova); in TEST_F()
[all...]

12345