aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorAlexander Usyskin <alexander.usyskin@intel.com>2016-10-18 18:34:48 -0400
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>2016-10-24 13:38:39 -0400
commit43605e293eb13c07acb546c14f407a271837af17 (patch)
treef23ab78455e2267bdaadb30fe9b29dc14ed06e89
parent4afb604e2d14d429ac9e1fd84b952602853b2df5 (diff)
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: stable@vger.kernel.org Signed-off-by: Alexander Usyskin <alexander.usyskin@intel.com> Signed-off-by: Tomas Winkler <tomas.winkler@intel.com> Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
-rw-r--r--drivers/misc/mei/hw-txe.c6
1 files changed, 4 insertions, 2 deletions
diff --git a/drivers/misc/mei/hw-txe.c b/drivers/misc/mei/hw-txe.c
index e6e5e55a12ed..60415a2bfcbd 100644
--- a/drivers/misc/mei/hw-txe.c
+++ b/drivers/misc/mei/hw-txe.c
@@ -981,11 +981,13 @@ static bool mei_txe_check_and_ack_intrs(struct mei_device *dev, bool do_ack)
981 hisr = mei_txe_br_reg_read(hw, HISR_REG); 981 hisr = mei_txe_br_reg_read(hw, HISR_REG);
982 982
983 aliveness = mei_txe_aliveness_get(dev); 983 aliveness = mei_txe_aliveness_get(dev);
984 if (hhisr & IPC_HHIER_SEC && aliveness) 984 if (hhisr & IPC_HHIER_SEC && aliveness) {
985 ipc_isr = mei_txe_sec_reg_read_silent(hw, 985 ipc_isr = mei_txe_sec_reg_read_silent(hw,
986 SEC_IPC_HOST_INT_STATUS_REG); 986 SEC_IPC_HOST_INT_STATUS_REG);
987 else 987 } else {
988 ipc_isr = 0; 988 ipc_isr = 0;
989 hhisr &= ~IPC_HHIER_SEC;
990 }
989 991
990 generated = generated || 992 generated = generated ||
991 (hisr & HISR_INT_STS_MSK) || 993 (hisr & HISR_INT_STS_MSK) ||