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 [email protected]
More majordomo info at  http://vger.kernel.org/majordomo-info.html

Reply via email to