Hi Fernando, > +int mmu_fault_isr(struct iommu *mmu) > > -/* > - * ======== mmu_check_if_fault ======= > - * Check to see if MMU Fault is valid TLB miss from DSP > - * Note: This function is called from an ISR > - */ > -static bool mmu_check_if_fault(struct bridge_dev_context *dev_context) > { > + struct deh_mgr *dm; > + u32 da; > + > + dev_get_deh_mgr(dev_get_first(), &dm); > + > + if (!dm) > + return -EPERM; > + > + da = iommu_read_reg(mmu, MMU_FAULT_AD); > + iommu_write_reg(mmu, 0, MMU_IRQENABLE); -- Isn't the MMU already enabled at this point when the function callback is called by iommu ? > + dm->err_info.dw_val1 = da; > + tasklet_schedule(&dm->dpc_tasklet); -- The iommu fault isr disables the IOMMU at the end of the fault handler, so by the time your tasklet is scheduled you might have the MMU in a disabled state. Looks to me either this requires change in iommu to remove the disable part or enable the MMU in the tasklet instead of doing it early in mmu_fault_isr. Thank you, Best regards, Hari -- To unsubscribe from this list: send the line "unsubscribe linux-omap" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html