static u32 omap2_iommu_fault_isr(struct omap_iommu *obj, u32 *ra) { struct omap_hwmod *oh; u32 stat, da; u32 errs = 0; oh = omap_hwmod_lookup(obj->name); if (!oh) return 0; stat = iommu_read_reg(obj, MMU_IRQSTATUS); stat &= MMU_IRQ_MASK; if (!stat) { *ra = 0; return 0; } da = iommu_read_reg(obj, MMU_FAULT_AD); *ra = da; if (stat & MMU_IRQ_TLBMISS) errs |= OMAP_IOMMU_ERR_TLB_MISS; if (stat & MMU_IRQ_TRANSLATIONFAULT) errs |= OMAP_IOMMU_ERR_TRANS_FAULT; if (stat & MMU_IRQ_EMUMISS) errs |= OMAP_IOMMU_ERR_EMU_MISS; if (stat & MMU_IRQ_TABLEWALKFAULT) errs |= OMAP_IOMMU_ERR_TBLWALK_FAULT; if (stat & MMU_IRQ_MULTIHITFAULT) errs |= OMAP_IOMMU_ERR_MULTIHIT_FAULT; iommu_write_reg(obj, stat, MMU_IRQSTATUS); clkdm_deny_idle(oh->clkdm); return errs; }
static int _cpuidle_deny_idle(struct powerdomain *pwrdm, struct clockdomain *clkdm) { clkdm_deny_idle(clkdm); return 0; }