mirror of
https://github.com/BobTheBlinker/android_kernel_motorola_sm6375.git
synced 2026-10-30 03:27:44 -04:00
mei: txe: don't clean an unprocessed interrupt cause.
SEC registers are not accessible when the TXE device is in low power state, hence the SEC interrupt cannot be processed if device is not awake. In some rare cases entrance to low power state (aliveness off) and input ready bits can be signaled at the same time, resulting in communication stall as input ready won't be signaled again after waking up. To resolve this IPC_HHIER_SEC bit in HHISR_REG should not be cleaned if the interrupt is not processed. Cc: [email protected] Signed-off-by: Alexander Usyskin <[email protected]> Signed-off-by: Tomas Winkler <[email protected]> Signed-off-by: Greg Kroah-Hartman <[email protected]>
This commit is contained in:
parent
4afb604e2d
commit
43605e293e
1 changed files with 4 additions and 2 deletions
|
|
@ -981,11 +981,13 @@ static bool mei_txe_check_and_ack_intrs(struct mei_device *dev, bool do_ack)
|
|||
hisr = mei_txe_br_reg_read(hw, HISR_REG);
|
||||
|
||||
aliveness = mei_txe_aliveness_get(dev);
|
||||
if (hhisr & IPC_HHIER_SEC && aliveness)
|
||||
if (hhisr & IPC_HHIER_SEC && aliveness) {
|
||||
ipc_isr = mei_txe_sec_reg_read_silent(hw,
|
||||
SEC_IPC_HOST_INT_STATUS_REG);
|
||||
else
|
||||
} else {
|
||||
ipc_isr = 0;
|
||||
hhisr &= ~IPC_HHIER_SEC;
|
||||
}
|
||||
|
||||
generated = generated ||
|
||||
(hisr & HISR_INT_STS_MSK) ||
|
||||
|
|
|
|||
Loading…
Reference in a new issue