rk_domain 592 drivers/iommu/rockchip-iommu.c struct rk_iommu_domain *rk_domain = to_rk_domain(domain); rk_domain 598 drivers/iommu/rockchip-iommu.c spin_lock_irqsave(&rk_domain->dt_lock, flags); rk_domain 600 drivers/iommu/rockchip-iommu.c dte = rk_domain->dt[rk_iova_dte_index(iova)]; rk_domain 612 drivers/iommu/rockchip-iommu.c spin_unlock_irqrestore(&rk_domain->dt_lock, flags); rk_domain 617 drivers/iommu/rockchip-iommu.c static void rk_iommu_zap_iova(struct rk_iommu_domain *rk_domain, rk_domain 624 drivers/iommu/rockchip-iommu.c spin_lock_irqsave(&rk_domain->iommus_lock, flags); rk_domain 625 drivers/iommu/rockchip-iommu.c list_for_each(pos, &rk_domain->iommus) { rk_domain 643 drivers/iommu/rockchip-iommu.c spin_unlock_irqrestore(&rk_domain->iommus_lock, flags); rk_domain 646 drivers/iommu/rockchip-iommu.c static void rk_iommu_zap_iova_first_last(struct rk_iommu_domain *rk_domain, rk_domain 649 drivers/iommu/rockchip-iommu.c rk_iommu_zap_iova(rk_domain, iova, SPAGE_SIZE); rk_domain 651 drivers/iommu/rockchip-iommu.c rk_iommu_zap_iova(rk_domain, iova + size - SPAGE_SIZE, rk_domain 655 drivers/iommu/rockchip-iommu.c static u32 *rk_dte_get_page_table(struct rk_iommu_domain *rk_domain, rk_domain 663 drivers/iommu/rockchip-iommu.c assert_spin_locked(&rk_domain->dt_lock); rk_domain 666 drivers/iommu/rockchip-iommu.c dte_addr = &rk_domain->dt[dte_index]; rk_domain 685 drivers/iommu/rockchip-iommu.c rk_table_flush(rk_domain, pt_dma, NUM_PT_ENTRIES); rk_domain 686 drivers/iommu/rockchip-iommu.c rk_table_flush(rk_domain, rk_domain 687 drivers/iommu/rockchip-iommu.c rk_domain->dt_dma + dte_index * sizeof(u32), 1); rk_domain 693 drivers/iommu/rockchip-iommu.c static size_t rk_iommu_unmap_iova(struct rk_iommu_domain *rk_domain, rk_domain 700 drivers/iommu/rockchip-iommu.c assert_spin_locked(&rk_domain->dt_lock); rk_domain 710 drivers/iommu/rockchip-iommu.c rk_table_flush(rk_domain, pte_dma, pte_count); rk_domain 715 drivers/iommu/rockchip-iommu.c static int rk_iommu_map_iova(struct rk_iommu_domain *rk_domain, u32 *pte_addr, rk_domain 723 drivers/iommu/rockchip-iommu.c assert_spin_locked(&rk_domain->dt_lock); rk_domain 736 drivers/iommu/rockchip-iommu.c rk_table_flush(rk_domain, pte_dma, pte_total); rk_domain 744 drivers/iommu/rockchip-iommu.c rk_iommu_zap_iova_first_last(rk_domain, iova, size); rk_domain 749 drivers/iommu/rockchip-iommu.c rk_iommu_unmap_iova(rk_domain, pte_addr, pte_dma, rk_domain 763 drivers/iommu/rockchip-iommu.c struct rk_iommu_domain *rk_domain = to_rk_domain(domain); rk_domain 770 drivers/iommu/rockchip-iommu.c spin_lock_irqsave(&rk_domain->dt_lock, flags); rk_domain 779 drivers/iommu/rockchip-iommu.c page_table = rk_dte_get_page_table(rk_domain, iova); rk_domain 781 drivers/iommu/rockchip-iommu.c spin_unlock_irqrestore(&rk_domain->dt_lock, flags); rk_domain 785 drivers/iommu/rockchip-iommu.c dte_index = rk_domain->dt[rk_iova_dte_index(iova)]; rk_domain 789 drivers/iommu/rockchip-iommu.c ret = rk_iommu_map_iova(rk_domain, pte_addr, pte_dma, iova, rk_domain 792 drivers/iommu/rockchip-iommu.c spin_unlock_irqrestore(&rk_domain->dt_lock, flags); rk_domain 800 drivers/iommu/rockchip-iommu.c struct rk_iommu_domain *rk_domain = to_rk_domain(domain); rk_domain 808 drivers/iommu/rockchip-iommu.c spin_lock_irqsave(&rk_domain->dt_lock, flags); rk_domain 817 drivers/iommu/rockchip-iommu.c dte = rk_domain->dt[rk_iova_dte_index(iova)]; rk_domain 820 drivers/iommu/rockchip-iommu.c spin_unlock_irqrestore(&rk_domain->dt_lock, flags); rk_domain 827 drivers/iommu/rockchip-iommu.c unmap_size = rk_iommu_unmap_iova(rk_domain, pte_addr, pte_dma, size); rk_domain 829 drivers/iommu/rockchip-iommu.c spin_unlock_irqrestore(&rk_domain->dt_lock, flags); rk_domain 832 drivers/iommu/rockchip-iommu.c rk_iommu_zap_iova(rk_domain, iova, unmap_size); rk_domain 865 drivers/iommu/rockchip-iommu.c struct rk_iommu_domain *rk_domain = to_rk_domain(domain); rk_domain 882 drivers/iommu/rockchip-iommu.c rk_domain->dt_dma); rk_domain 900 drivers/iommu/rockchip-iommu.c struct rk_iommu_domain *rk_domain = to_rk_domain(domain); rk_domain 917 drivers/iommu/rockchip-iommu.c spin_lock_irqsave(&rk_domain->iommus_lock, flags); rk_domain 919 drivers/iommu/rockchip-iommu.c spin_unlock_irqrestore(&rk_domain->iommus_lock, flags); rk_domain 933 drivers/iommu/rockchip-iommu.c struct rk_iommu_domain *rk_domain = to_rk_domain(domain); rk_domain 956 drivers/iommu/rockchip-iommu.c spin_lock_irqsave(&rk_domain->iommus_lock, flags); rk_domain 957 drivers/iommu/rockchip-iommu.c list_add_tail(&iommu->node, &rk_domain->iommus); rk_domain 958 drivers/iommu/rockchip-iommu.c spin_unlock_irqrestore(&rk_domain->iommus_lock, flags); rk_domain 975 drivers/iommu/rockchip-iommu.c struct rk_iommu_domain *rk_domain; rk_domain 983 drivers/iommu/rockchip-iommu.c rk_domain = kzalloc(sizeof(*rk_domain), GFP_KERNEL); rk_domain 984 drivers/iommu/rockchip-iommu.c if (!rk_domain) rk_domain 988 drivers/iommu/rockchip-iommu.c iommu_get_dma_cookie(&rk_domain->domain)) rk_domain 996 drivers/iommu/rockchip-iommu.c rk_domain->dt = (u32 *)get_zeroed_page(GFP_KERNEL | GFP_DMA32); rk_domain 997 drivers/iommu/rockchip-iommu.c if (!rk_domain->dt) rk_domain 1000 drivers/iommu/rockchip-iommu.c rk_domain->dt_dma = dma_map_single(dma_dev, rk_domain->dt, rk_domain 1002 drivers/iommu/rockchip-iommu.c if (dma_mapping_error(dma_dev, rk_domain->dt_dma)) { rk_domain 1007 drivers/iommu/rockchip-iommu.c rk_table_flush(rk_domain, rk_domain->dt_dma, NUM_DT_ENTRIES); rk_domain 1009 drivers/iommu/rockchip-iommu.c spin_lock_init(&rk_domain->iommus_lock); rk_domain 1010 drivers/iommu/rockchip-iommu.c spin_lock_init(&rk_domain->dt_lock); rk_domain 1011 drivers/iommu/rockchip-iommu.c INIT_LIST_HEAD(&rk_domain->iommus); rk_domain 1013 drivers/iommu/rockchip-iommu.c rk_domain->domain.geometry.aperture_start = 0; rk_domain 1014 drivers/iommu/rockchip-iommu.c rk_domain->domain.geometry.aperture_end = DMA_BIT_MASK(32); rk_domain 1015 drivers/iommu/rockchip-iommu.c rk_domain->domain.geometry.force_aperture = true; rk_domain 1017 drivers/iommu/rockchip-iommu.c return &rk_domain->domain; rk_domain 1020 drivers/iommu/rockchip-iommu.c free_page((unsigned long)rk_domain->dt); rk_domain 1023 drivers/iommu/rockchip-iommu.c iommu_put_dma_cookie(&rk_domain->domain); rk_domain 1025 drivers/iommu/rockchip-iommu.c kfree(rk_domain); rk_domain 1032 drivers/iommu/rockchip-iommu.c struct rk_iommu_domain *rk_domain = to_rk_domain(domain); rk_domain 1035 drivers/iommu/rockchip-iommu.c WARN_ON(!list_empty(&rk_domain->iommus)); rk_domain 1038 drivers/iommu/rockchip-iommu.c u32 dte = rk_domain->dt[i]; rk_domain 1048 drivers/iommu/rockchip-iommu.c dma_unmap_single(dma_dev, rk_domain->dt_dma, rk_domain 1050 drivers/iommu/rockchip-iommu.c free_page((unsigned long)rk_domain->dt); rk_domain 1053 drivers/iommu/rockchip-iommu.c iommu_put_dma_cookie(&rk_domain->domain); rk_domain 1054 drivers/iommu/rockchip-iommu.c kfree(rk_domain);