Skip to content

Commit 420d168

Browse files
ausyskingregkh
authored andcommitted
mei: txe: don't clean an unprocessed interrupt cause.
commit 43605e2 upstream. 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. Signed-off-by: Alexander Usyskin <[email protected]> Signed-off-by: Tomas Winkler <[email protected]> Signed-off-by: Greg Kroah-Hartman <[email protected]>
1 parent 5d30e8f commit 420d168

File tree

1 file changed

+4
-2
lines changed

1 file changed

+4
-2
lines changed

drivers/misc/mei/hw-txe.c

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -978,11 +978,13 @@ static bool mei_txe_check_and_ack_intrs(struct mei_device *dev, bool do_ack)
978978
hisr = mei_txe_br_reg_read(hw, HISR_REG);
979979

980980
aliveness = mei_txe_aliveness_get(dev);
981-
if (hhisr & IPC_HHIER_SEC && aliveness)
981+
if (hhisr & IPC_HHIER_SEC && aliveness) {
982982
ipc_isr = mei_txe_sec_reg_read_silent(hw,
983983
SEC_IPC_HOST_INT_STATUS_REG);
984-
else
984+
} else {
985985
ipc_isr = 0;
986+
hhisr &= ~IPC_HHIER_SEC;
987+
}
986988

987989
generated = generated ||
988990
(hisr & HISR_INT_STS_MSK) ||

0 commit comments

Comments
 (0)