Lines Matching refs:da

231 static u32 iommu_report_fault(struct omap_iommu *obj, u32 *da)  in iommu_report_fault()  argument
238 *da = 0; in iommu_report_fault()
243 *da = fault_addr; in iommu_report_fault()
308 if (e->da & ~(get_cam_va_mask(e->pgsz))) { in iotlb_alloc_cr()
310 e->da); in iotlb_alloc_cr()
318 cr->cam = (e->da & MMU_CAM_VATAG_MASK) | e->prsvd | e->pgsz | e->valid; in iotlb_alloc_cr()
407 static void flush_iotlb_page(struct omap_iommu *obj, u32 da) in flush_iotlb_page() argument
424 if ((start <= da) && (da < start + bytes)) { in flush_iotlb_page()
426 __func__, start, da, bytes); in flush_iotlb_page()
435 dev_dbg(obj->dev, "%s: no page for %08x\n", __func__, da); in flush_iotlb_page()
485 dma_addr_t *pt_dma, u32 da) in iopte_alloc() argument
488 unsigned long offset = iopgd_index(da) * sizeof(da); in iopte_alloc()
535 iopte = iopte_offset(iopgd, da); in iopte_alloc()
539 __func__, da, iopgd, *iopgd, iopte, *iopte); in iopte_alloc()
544 static int iopgd_alloc_section(struct omap_iommu *obj, u32 da, u32 pa, u32 prot) in iopgd_alloc_section() argument
546 u32 *iopgd = iopgd_offset(obj, da); in iopgd_alloc_section()
547 unsigned long offset = iopgd_index(da) * sizeof(da); in iopgd_alloc_section()
549 if ((da | pa) & ~IOSECTION_MASK) { in iopgd_alloc_section()
551 __func__, da, pa, IOSECTION_SIZE); in iopgd_alloc_section()
560 static int iopgd_alloc_super(struct omap_iommu *obj, u32 da, u32 pa, u32 prot) in iopgd_alloc_super() argument
562 u32 *iopgd = iopgd_offset(obj, da); in iopgd_alloc_super()
563 unsigned long offset = iopgd_index(da) * sizeof(da); in iopgd_alloc_super()
566 if ((da | pa) & ~IOSUPER_MASK) { in iopgd_alloc_super()
568 __func__, da, pa, IOSUPER_SIZE); in iopgd_alloc_super()
578 static int iopte_alloc_page(struct omap_iommu *obj, u32 da, u32 pa, u32 prot) in iopte_alloc_page() argument
580 u32 *iopgd = iopgd_offset(obj, da); in iopte_alloc_page()
582 u32 *iopte = iopte_alloc(obj, iopgd, &pt_dma, da); in iopte_alloc_page()
583 unsigned long offset = iopte_index(da) * sizeof(da); in iopte_alloc_page()
592 __func__, da, pa, iopte, *iopte); in iopte_alloc_page()
597 static int iopte_alloc_large(struct omap_iommu *obj, u32 da, u32 pa, u32 prot) in iopte_alloc_large() argument
599 u32 *iopgd = iopgd_offset(obj, da); in iopte_alloc_large()
601 u32 *iopte = iopte_alloc(obj, iopgd, &pt_dma, da); in iopte_alloc_large()
602 unsigned long offset = iopte_index(da) * sizeof(da); in iopte_alloc_large()
605 if ((da | pa) & ~IOLARGE_MASK) { in iopte_alloc_large()
607 __func__, da, pa, IOLARGE_SIZE); in iopte_alloc_large()
654 err = fn(obj, e->da, e->pa, prot); in iopgtable_store_entry_core()
670 flush_iotlb_page(obj, e->da); in omap_iopgtable_store_entry()
685 iopgtable_lookup_entry(struct omap_iommu *obj, u32 da, u32 **ppgd, u32 **ppte) in iopgtable_lookup_entry() argument
689 iopgd = iopgd_offset(obj, da); in iopgtable_lookup_entry()
694 iopte = iopte_offset(iopgd, da); in iopgtable_lookup_entry()
700 static size_t iopgtable_clear_entry_core(struct omap_iommu *obj, u32 da) in iopgtable_clear_entry_core() argument
703 u32 *iopgd = iopgd_offset(obj, da); in iopgtable_clear_entry_core()
706 unsigned long pd_offset = iopgd_index(da) * sizeof(da); in iopgtable_clear_entry_core()
707 unsigned long pt_offset = iopte_index(da) * sizeof(da); in iopgtable_clear_entry_core()
714 u32 *iopte = iopte_offset(iopgd, da); in iopgtable_clear_entry_core()
720 iopte = iopte_offset(iopgd, (da & IOLARGE_MASK)); in iopgtable_clear_entry_core()
742 iopgd = iopgd_offset(obj, (da & IOSUPER_MASK)); in iopgtable_clear_entry_core()
757 static size_t iopgtable_clear_entry(struct omap_iommu *obj, u32 da) in iopgtable_clear_entry() argument
763 bytes = iopgtable_clear_entry_core(obj, da); in iopgtable_clear_entry()
764 flush_iotlb_page(obj, da); in iopgtable_clear_entry()
779 u32 da; in iopgtable_clear_entry_all() local
782 da = i << IOPGD_SHIFT; in iopgtable_clear_entry_all()
783 iopgd = iopgd_offset(obj, da); in iopgtable_clear_entry_all()
784 offset = iopgd_index(da) * sizeof(da); in iopgtable_clear_entry_all()
806 u32 da, errs; in iommu_fault_handler() local
815 errs = iommu_report_fault(obj, &da); in iommu_fault_handler()
820 if (!report_iommu_fault(domain, obj->dev, da, 0)) in iommu_fault_handler()
825 iopgd = iopgd_offset(obj, da); in iommu_fault_handler()
829 obj->name, errs, da, iopgd, *iopgd); in iommu_fault_handler()
833 iopte = iopte_offset(iopgd, da); in iommu_fault_handler()
836 obj->name, errs, da, iopgd, *iopgd, iopte, *iopte); in iommu_fault_handler()
1305 static u32 iotlb_init_entry(struct iotlb_entry *e, u32 da, u32 pa, int pgsz) in iotlb_init_entry() argument
1309 e->da = da; in iotlb_init_entry()
1320 static int omap_iommu_map(struct iommu_domain *domain, unsigned long da, in omap_iommu_map() argument
1338 dev_dbg(dev, "mapping da 0x%lx to pa %pa size 0x%zx\n", da, &pa, bytes); in omap_iommu_map()
1340 iotlb_init_entry(&e, da, pa, omap_pgsz); in omap_iommu_map()
1357 iopgtable_clear_entry(oiommu, da); in omap_iommu_map()
1364 static size_t omap_iommu_unmap(struct iommu_domain *domain, unsigned long da, in omap_iommu_unmap() argument
1375 dev_dbg(dev, "unmapping da 0x%lx size %zu\n", da, size); in omap_iommu_unmap()
1380 bytes = iopgtable_clear_entry(oiommu, da); in omap_iommu_unmap()
1603 dma_addr_t da) in omap_iommu_iova_to_phys() argument
1616 iopgtable_lookup_entry(oiommu, da, &pgd, &pte); in omap_iommu_iova_to_phys()
1620 ret = omap_iommu_translate(*pte, da, IOPTE_MASK); in omap_iommu_iova_to_phys()
1622 ret = omap_iommu_translate(*pte, da, IOLARGE_MASK); in omap_iommu_iova_to_phys()
1625 (unsigned long long)da); in omap_iommu_iova_to_phys()
1628 ret = omap_iommu_translate(*pgd, da, IOSECTION_MASK); in omap_iommu_iova_to_phys()
1630 ret = omap_iommu_translate(*pgd, da, IOSUPER_MASK); in omap_iommu_iova_to_phys()
1633 (unsigned long long)da); in omap_iommu_iova_to_phys()