From 41e5a72d1b2f3316b28728d2f4834ab88af221b8 Mon Sep 17 00:00:00 2001 From: Simon Date: Fri, 17 Apr 2015 11:40:28 +0800 Subject: [PATCH] rk3368: iommu: add page fault call back for master Signed-off-by: Simon --- drivers/iommu/rockchip-iommu.c | 2 ++ drivers/iommu/rockchip-iommu.h | 1 + drivers/iommu/rockchip-iovmm.c | 4 +++- 3 files changed, 6 insertions(+), 1 deletion(-) 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) -- 2.34.1