Lines Matching refs:iova
60 #define for_each_gart_pte(gart, iova) \
61 for (iova = gart->iovmm_base; \
62 iova < gart->iovmm_end; \
63 iova += GART_PAGE_SIZE)
66 unsigned long iova, unsigned long pte)
68 writel_relaxed(iova, gart->regs + GART_ENTRY_ADDR);
73 unsigned long iova)
77 writel_relaxed(iova, gart->regs + GART_ENTRY_ADDR);
85 unsigned long iova;
87 for_each_gart_pte(gart, iova)
88 gart_set_pte(gart, iova, data ? *(data++) : 0);
95 unsigned long iova, size_t bytes)
97 return unlikely(iova < gart->iovmm_base || bytes != GART_PAGE_SIZE ||
98 iova + bytes > gart->iovmm_end);
101 static inline bool gart_pte_valid(struct gart_device *gart, unsigned long iova)
103 return !!(gart_read_pte(gart, iova) & GART_ENTRY_PHYS_ADDR_VALID);
167 static inline int __gart_iommu_map(struct gart_device *gart, unsigned long iova,
170 if (unlikely(gart_debug && gart_pte_valid(gart, iova))) {
175 gart_set_pte(gart, iova, GART_ENTRY_PHYS_ADDR_VALID | pa);
180 static int gart_iommu_map(struct iommu_domain *domain, unsigned long iova,
186 if (gart_iova_range_invalid(gart, iova, bytes))
190 ret = __gart_iommu_map(gart, iova, (unsigned long)pa);
197 unsigned long iova)
199 if (unlikely(gart_debug && !gart_pte_valid(gart, iova))) {
204 gart_set_pte(gart, iova, 0);
209 static size_t gart_iommu_unmap(struct iommu_domain *domain, unsigned long iova,
215 if (gart_iova_range_invalid(gart, iova, bytes))
219 err = __gart_iommu_unmap(gart, iova);
226 dma_addr_t iova)
231 if (gart_iova_range_invalid(gart, iova, GART_PAGE_SIZE))
235 pte = gart_read_pte(gart, iova);
296 unsigned long iova;
306 for_each_gart_pte(gart, iova)
307 *(data++) = gart_read_pte(gart, iova);