Lines Matching refs:da

232 static u32 iommu_report_fault(struct omap_iommu *obj, u32 *da)
239 *da = 0;
244 *da = fault_addr;
309 if (e->da & ~(get_cam_va_mask(e->pgsz))) {
311 e->da);
319 cr->cam = (e->da & MMU_CAM_VATAG_MASK) | e->prsvd | e->pgsz | e->valid;
404 * @da: iommu device virtual address
406 * Clear an iommu tlb entry which includes 'da' address.
408 static void flush_iotlb_page(struct omap_iommu *obj, u32 da)
425 if ((start <= da) && (da < start + bytes)) {
427 __func__, start, da, bytes);
436 dev_dbg(obj->dev, "%s: no page for %08x\n", __func__, da);
486 dma_addr_t *pt_dma, u32 da)
489 unsigned long offset = iopgd_index(da) * sizeof(da);
536 iopte = iopte_offset(iopgd, da);
539 "%s: da:%08x pgd:%p *pgd:%08x pte:%p *pte:%08x\n",
540 __func__, da, iopgd, *iopgd, iopte, *iopte);
545 static int iopgd_alloc_section(struct omap_iommu *obj, u32 da, u32 pa, u32 prot)
547 u32 *iopgd = iopgd_offset(obj, da);
548 unsigned long offset = iopgd_index(da) * sizeof(da);
550 if ((da | pa) & ~IOSECTION_MASK) {
552 __func__, da, pa, IOSECTION_SIZE);
561 static int iopgd_alloc_super(struct omap_iommu *obj, u32 da, u32 pa, u32 prot)
563 u32 *iopgd = iopgd_offset(obj, da);
564 unsigned long offset = iopgd_index(da) * sizeof(da);
567 if ((da | pa) & ~IOSUPER_MASK) {
569 __func__, da, pa, IOSUPER_SIZE);
579 static int iopte_alloc_page(struct omap_iommu *obj, u32 da, u32 pa, u32 prot)
581 u32 *iopgd = iopgd_offset(obj, da);
583 u32 *iopte = iopte_alloc(obj, iopgd, &pt_dma, da);
584 unsigned long offset = iopte_index(da) * sizeof(da);
592 dev_vdbg(obj->dev, "%s: da:%08x pa:%08x pte:%p *pte:%08x\n",
593 __func__, da, pa, iopte, *iopte);
598 static int iopte_alloc_large(struct omap_iommu *obj, u32 da, u32 pa, u32 prot)
600 u32 *iopgd = iopgd_offset(obj, da);
602 u32 *iopte = iopte_alloc(obj, iopgd, &pt_dma, da);
603 unsigned long offset = iopte_index(da) * sizeof(da);
606 if ((da | pa) & ~IOLARGE_MASK) {
608 __func__, da, pa, IOLARGE_SIZE);
655 err = fn(obj, e->da, e->pa, prot);
671 flush_iotlb_page(obj, e->da);
681 * @da: iommu device virtual address
686 iopgtable_lookup_entry(struct omap_iommu *obj, u32 da, u32 **ppgd, u32 **ppte)
690 iopgd = iopgd_offset(obj, da);
695 iopte = iopte_offset(iopgd, da);
701 static size_t iopgtable_clear_entry_core(struct omap_iommu *obj, u32 da)
704 u32 *iopgd = iopgd_offset(obj, da);
707 unsigned long pd_offset = iopgd_index(da) * sizeof(da);
708 unsigned long pt_offset = iopte_index(da) * sizeof(da);
715 u32 *iopte = iopte_offset(iopgd, da);
721 iopte = iopte_offset(iopgd, (da & IOLARGE_MASK));
743 iopgd = iopgd_offset(obj, (da & IOSUPER_MASK));
756 * @da: iommu device virtual address
758 static size_t iopgtable_clear_entry(struct omap_iommu *obj, u32 da)
764 bytes = iopgtable_clear_entry_core(obj, da);
765 flush_iotlb_page(obj, da);
780 u32 da;
783 da = i << IOPGD_SHIFT;
784 iopgd = iopgd_offset(obj, da);
785 offset = iopgd_index(da) * sizeof(da);
807 u32 da, errs;
816 errs = iommu_report_fault(obj, &da);
821 if (!report_iommu_fault(domain, obj->dev, da, 0))
826 iopgd = iopgd_offset(obj, da);
829 dev_err(obj->dev, "%s: errs:0x%08x da:0x%08x pgd:0x%p *pgd:px%08x\n",
830 obj->name, errs, da, iopgd, *iopgd);
834 iopte = iopte_offset(iopgd, da);
836 dev_err(obj->dev, "%s: errs:0x%08x da:0x%08x pgd:0x%p *pgd:0x%08x pte:0x%p *pte:0x%08x\n",
837 obj->name, errs, da, iopgd, *iopgd, iopte, *iopte);
1310 static u32 iotlb_init_entry(struct iotlb_entry *e, u32 da, u32 pa, int pgsz)
1314 e->da = da;
1325 static int omap_iommu_map(struct iommu_domain *domain, unsigned long da,
1343 dev_dbg(dev, "mapping da 0x%lx to pa %pa size 0x%zx\n", da, &pa, bytes);
1345 iotlb_init_entry(&e, da, pa, omap_pgsz);
1362 iopgtable_clear_entry(oiommu, da);
1369 static size_t omap_iommu_unmap(struct iommu_domain *domain, unsigned long da,
1380 dev_dbg(dev, "unmapping da 0x%lx size %zu\n", da, size);
1385 bytes = iopgtable_clear_entry(oiommu, da);
1608 dma_addr_t da)
1621 iopgtable_lookup_entry(oiommu, da, &pgd, &pte);
1625 ret = omap_iommu_translate(*pte, da, IOPTE_MASK);
1627 ret = omap_iommu_translate(*pte, da, IOLARGE_MASK);
1629 dev_err(dev, "bogus pte 0x%x, da 0x%llx", *pte,
1630 (unsigned long long)da);
1633 ret = omap_iommu_translate(*pgd, da, IOSECTION_MASK);
1635 ret = omap_iommu_translate(*pgd, da, IOSUPER_MASK);
1637 dev_err(dev, "bogus pgd 0x%x, da 0x%llx", *pgd,
1638 (unsigned long long)da);