From: Simon Date: Fri, 17 Apr 2015 03:40:28 +0000 (+0800) Subject: rk3368: iommu: add page fault call back for master X-Git-Tag: firefly_0821_release~4158^2~74 X-Git-Url: http://plrg.eecs.uci.edu/git/?a=commitdiff_plain;h=41e5a72d1b2f3316b28728d2f4834ab88af221b8;p=firefly-linux-kernel-4.4.55.git rk3368: iommu: add page fault call back for master Signed-off-by: Simon --- diff --git a/drivers/iommu/rockchip-iommu.c b/drivers/iommu/rockchip-iommu.c index da9492073f70..3903fd6a3023 100644 --- a/drivers/iommu/rockchip-iommu.c +++ b/drivers/iommu/rockchip-iommu.c @@ -593,6 +593,8 @@ static irqreturn_t rockchip_iommu_irq(int irq, void *dev_id) if (data->domain) report_iommu_fault(data->domain, data->iommu, fault_address, flags); + if (data->fault_handler) + data->fault_handler(data->iommu, IOMMU_PAGEFAULT, dte, fault_address, 1); rockchip_iommu_page_fault_done(data->res_bases[i], data->dbgname); diff --git a/drivers/iommu/rockchip-iommu.h b/drivers/iommu/rockchip-iommu.h index d206b555f4d6..46b2e8ee4f23 100644 --- a/drivers/iommu/rockchip-iommu.h +++ b/drivers/iommu/rockchip-iommu.h @@ -38,6 +38,7 @@ struct iommu_drvdata { struct iommu_domain *domain; /* domain given to iommu_attach_device() */ unsigned int pgtable; struct rk_iovmm vmm; + rockchip_iommu_fault_handler_t fault_handler; }; #ifdef CONFIG_ROCKCHIP_IOVMM diff --git a/drivers/iommu/rockchip-iovmm.c b/drivers/iommu/rockchip-iovmm.c index dffeab341311..c83573edaa41 100755 --- a/drivers/iommu/rockchip-iovmm.c +++ b/drivers/iommu/rockchip-iovmm.c @@ -40,7 +40,9 @@ int rockchip_iovmm_invalidate_tlb(struct device *dev) void rockchip_iovmm_set_fault_handler(struct device *dev, rockchip_iommu_fault_handler_t handler) { - return; + struct iommu_drvdata *data = dev_get_drvdata(dev->archdata.iommu); + + data->fault_handler = handler; } int rockchip_iovmm_activate(struct device *dev)