|
@@ -228,8 +228,13 @@ static inline u32 _mpic_irq_read(struct mpic *mpic, unsigned int src_no, unsigne
|
|
|
unsigned int isu = src_no >> mpic->isu_shift;
|
|
|
unsigned int idx = src_no & mpic->isu_mask;
|
|
|
|
|
|
- return _mpic_read(mpic->reg_type, &mpic->isus[isu],
|
|
|
- reg + (idx * MPIC_INFO(IRQ_STRIDE)));
|
|
|
+#ifdef CONFIG_MPIC_BROKEN_REGREAD
|
|
|
+ if (reg == 0)
|
|
|
+ return mpic->isu_reg0_shadow[idx];
|
|
|
+ else
|
|
|
+#endif
|
|
|
+ return _mpic_read(mpic->reg_type, &mpic->isus[isu],
|
|
|
+ reg + (idx * MPIC_INFO(IRQ_STRIDE)));
|
|
|
}
|
|
|
|
|
|
static inline void _mpic_irq_write(struct mpic *mpic, unsigned int src_no,
|
|
@@ -240,6 +245,11 @@ static inline void _mpic_irq_write(struct mpic *mpic, unsigned int src_no,
|
|
|
|
|
|
_mpic_write(mpic->reg_type, &mpic->isus[isu],
|
|
|
reg + (idx * MPIC_INFO(IRQ_STRIDE)), value);
|
|
|
+
|
|
|
+#ifdef CONFIG_MPIC_BROKEN_REGREAD
|
|
|
+ if (reg == 0)
|
|
|
+ mpic->isu_reg0_shadow[idx] = value;
|
|
|
+#endif
|
|
|
}
|
|
|
|
|
|
#define mpic_read(b,r) _mpic_read(mpic->reg_type,&(b),(r))
|