Lines Matching defs:da

231 static u32 iommu_report_fault(struct omap_iommu *obj, u32 *da)
238 *da = 0;
243 *da = fault_addr;
308 if (e->da & ~(get_cam_va_mask(e->pgsz))) {
310 e->da);
318 cr->cam = (e->da & MMU_CAM_VATAG_MASK) | e->prsvd | e->pgsz | e->valid;
403 * @da: iommu device virtual address
405 * Clear an iommu tlb entry which includes 'da' address.
407 static void flush_iotlb_page(struct omap_iommu *obj, u32 da)
424 if ((start <= da) && (da < start + bytes)) {
426 __func__, start, da, bytes);
435 dev_dbg(obj->dev, "%s: no page for %08x\n", __func__, da);
485 dma_addr_t *pt_dma, u32 da)
488 unsigned long offset = iopgd_index(da) * sizeof(da);
535 iopte = iopte_offset(iopgd, da);
538 "%s: da:%08x pgd:%p *pgd:%08x pte:%p *pte:%08x\n",
539 __func__, da, iopgd, *iopgd, iopte, *iopte);
544 static int iopgd_alloc_section(struct omap_iommu *obj, u32 da, u32 pa, u32 prot)
546 u32 *iopgd = iopgd_offset(obj, da);
547 unsigned long offset = iopgd_index(da) * sizeof(da);
549 if ((da | pa) & ~IOSECTION_MASK) {
551 __func__, da, pa, IOSECTION_SIZE);
560 static int iopgd_alloc_super(struct omap_iommu *obj, u32 da, u32 pa, u32 prot)
562 u32 *iopgd = iopgd_offset(obj, da);
563 unsigned long offset = iopgd_index(da) * sizeof(da);
566 if ((da | pa) & ~IOSUPER_MASK) {
568 __func__, da, pa, IOSUPER_SIZE);
578 static int iopte_alloc_page(struct omap_iommu *obj, u32 da, u32 pa, u32 prot)
580 u32 *iopgd = iopgd_offset(obj, da);
582 u32 *iopte = iopte_alloc(obj, iopgd, &pt_dma, da);
583 unsigned long offset = iopte_index(da) * sizeof(da);
591 dev_vdbg(obj->dev, "%s: da:%08x pa:%08x pte:%p *pte:%08x\n",
592 __func__, da, pa, iopte, *iopte);
597 static int iopte_alloc_large(struct omap_iommu *obj, u32 da, u32 pa, u32 prot)
599 u32 *iopgd = iopgd_offset(obj, da);
601 u32 *iopte = iopte_alloc(obj, iopgd, &pt_dma, da);
602 unsigned long offset = iopte_index(da) * sizeof(da);
605 if ((da | pa) & ~IOLARGE_MASK) {
607 __func__, da, pa, IOLARGE_SIZE);
654 err = fn(obj, e->da, e->pa, prot);
670 flush_iotlb_page(obj, e->da);
680 * @da: iommu device virtual address
685 iopgtable_lookup_entry(struct omap_iommu *obj, u32 da, u32 **ppgd, u32 **ppte)
689 iopgd = iopgd_offset(obj, da);
694 iopte = iopte_offset(iopgd, da);
700 static size_t iopgtable_clear_entry_core(struct omap_iommu *obj, u32 da)
703 u32 *iopgd = iopgd_offset(obj, da);
706 unsigned long pd_offset = iopgd_index(da) * sizeof(da);
707 unsigned long pt_offset = iopte_index(da) * sizeof(da);
714 u32 *iopte = iopte_offset(iopgd, da);
720 iopte = iopte_offset(iopgd, (da & IOLARGE_MASK));
742 iopgd = iopgd_offset(obj, (da & IOSUPER_MASK));
755 * @da: iommu device virtual address
757 static size_t iopgtable_clear_entry(struct omap_iommu *obj, u32 da)
763 bytes = iopgtable_clear_entry_core(obj, da);
764 flush_iotlb_page(obj, da);
779 u32 da;
782 da = i << IOPGD_SHIFT;
783 iopgd = iopgd_offset(obj, da);
784 offset = iopgd_index(da) * sizeof(da);
806 u32 da, errs;
815 errs = iommu_report_fault(obj, &da);
820 if (!report_iommu_fault(domain, obj->dev, da, 0))
825 iopgd = iopgd_offset(obj, da);
828 dev_err(obj->dev, "%s: errs:0x%08x da:0x%08x pgd:0x%p *pgd:px%08x\n",
829 obj->name, errs, da, iopgd, *iopgd);
833 iopte = iopte_offset(iopgd, da);
835 dev_err(obj->dev, "%s: errs:0x%08x da:0x%08x pgd:0x%p *pgd:0x%08x pte:0x%p *pte:0x%08x\n",
836 obj->name, errs, da, iopgd, *iopgd, iopte, *iopte);
1282 static u32 iotlb_init_entry(struct iotlb_entry *e, u32 da, u32 pa, int pgsz)
1286 e->da = da;
1297 static int omap_iommu_map(struct iommu_domain *domain, unsigned long da,
1316 dev_dbg(dev, "mapping da 0x%lx to pa %pa size 0x%zx\n", da, &pa, bytes);
1318 iotlb_init_entry(&e, da, pa, omap_pgsz);
1335 iopgtable_clear_entry(oiommu, da);
1344 static size_t omap_iommu_unmap(struct iommu_domain *domain, unsigned long da,
1355 dev_dbg(dev, "unmapping da 0x%lx size %zu\n", da, size);
1360 bytes = iopgtable_clear_entry(oiommu, da);
1597 dma_addr_t da)
1610 iopgtable_lookup_entry(oiommu, da, &pgd, &pte);
1614 ret = omap_iommu_translate(*pte, da, IOPTE_MASK);
1616 ret = omap_iommu_translate(*pte, da, IOLARGE_MASK);
1618 dev_err(dev, "bogus pte 0x%x, da 0x%llx", *pte,
1619 (unsigned long long)da);
1622 ret = omap_iommu_translate(*pgd, da, IOSECTION_MASK);
1624 ret = omap_iommu_translate(*pgd, da, IOSUPER_MASK);
1626 dev_err(dev, "bogus pgd 0x%x, da 0x%llx", *pgd,
1627 (unsigned long long)da);