rk3368: iommu: add page fault call back for master
authorSimon <xxm@rock-chips.com>
Fri, 17 Apr 2015 03:40:28 +0000 (11:40 +0800)
committerSimon <xxm@rock-chips.com>
Fri, 15 May 2015 07:26:53 +0000 (15:26 +0800)
Signed-off-by: Simon <xxm@rock-chips.com>
drivers/iommu/rockchip-iommu.c
drivers/iommu/rockchip-iommu.h
drivers/iommu/rockchip-iovmm.c

index da9492073f70b1c913f9cd32cb08c51c11dd1ff4..3903fd6a30233f0375bef6178d7a1dbbc199c383 100644 (file)
@@ -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);
index d206b555f4d6061ae57e308a350ab7fe2e8f6730..46b2e8ee4f23ad73772e6b905aff244924b326bd 100644 (file)
@@ -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
index dffeab341311efea46702c3f0adf9a8e16b97657..c83573edaa419c4a7c901bb235925be9812e1d07 100755 (executable)
@@ -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)