Signed-off-by: Simon <xxm@rock-chips.com>
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);
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
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)