drivers: ecia: microchip: Prevent lost eSPI interrupts
Clearing virtual wire interrupt after calling callback may cause interrupt miss if the same virtual wire changes due to action in handler. e.g. HOST_RST_WRN pulse within 50 us Signed-off-by: Jose Alberto Meza <jose.a.meza.arellano@intel.com>
This commit is contained in:
parent
9ce374b24a
commit
f3d591815f
1 changed files with 4 additions and 4 deletions
|
@ -476,6 +476,10 @@ static void xec_girq_isr(const struct device *dev_girq)
|
||||||
for (int i = 0; result && i < 32; i++) {
|
for (int i = 0; result && i < 32; i++) {
|
||||||
uint8_t bitpos = 31 - (__builtin_clz(result) & 0x1f);
|
uint8_t bitpos = 31 - (__builtin_clz(result) & 0x1f);
|
||||||
|
|
||||||
|
/* clear GIRQ latched status */
|
||||||
|
girq->SRC = BIT(bitpos);
|
||||||
|
result &= ~BIT(bitpos);
|
||||||
|
|
||||||
/* is it an implemented source? */
|
/* is it an implemented source? */
|
||||||
if (cfg->sources[bitpos] & BIT(7)) {
|
if (cfg->sources[bitpos] & BIT(7)) {
|
||||||
/* yes, get the index by removing bit[7] flag */
|
/* yes, get the index by removing bit[7] flag */
|
||||||
|
@ -489,10 +493,6 @@ static void xec_girq_isr(const struct device *dev_girq)
|
||||||
} else { /* paranoia, we should not get here... */
|
} else { /* paranoia, we should not get here... */
|
||||||
girq->EN_CLR = BIT(bitpos);
|
girq->EN_CLR = BIT(bitpos);
|
||||||
}
|
}
|
||||||
|
|
||||||
/* clear GIRQ latched status */
|
|
||||||
girq->SRC = BIT(bitpos);
|
|
||||||
result &= ~BIT(bitpos);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue