aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorVipin K Parashar <vipin@linux.vnet.ibm.com>2016-07-12 02:04:57 +0530
committerStewart Smith <stewart@linux.vnet.ibm.com>2016-07-12 13:58:40 +1000
commit11420af4cf3354382f96e408aade53fc776c544e (patch)
tree11a980b3060827922aef34e8c9dad1d9651dbb17
parente6386869af922ef9ca4321ca588fd26b584538ab (diff)
downloadskiboot-11420af4cf3354382f96e408aade53fc776c544e.zip
skiboot-11420af4cf3354382f96e408aade53fc776c544e.tar.gz
skiboot-11420af4cf3354382f96e408aade53fc776c544e.tar.bz2
hw/xscom: Reset XSCOM engine after querying sleeping core FIR
XSCOM engine blocks subsequently after querying FIR of any sleeping core. This causes subsequent XSCOM opertions to hang forever due to XSCOM engine being continuously busy. Reset XSCOM engine after querying FIR of any sleeping core. Signed-off-by: Vipin K Parashar <vipin@linux.vnet.ibm.com> Signed-off-by: Vaidyanathan Srinivasan <svaidy@linux.vnet.ibm.com> Signed-off-by: Stewart Smith <stewart@linux.vnet.ibm.com>
-rw-r--r--hw/xscom.c3
1 files changed, 2 insertions, 1 deletions
diff --git a/hw/xscom.c b/hw/xscom.c
index c6dc93b..b8402ab 100644
--- a/hw/xscom.c
+++ b/hw/xscom.c
@@ -166,8 +166,9 @@ static int64_t xscom_handle_error(uint64_t hmer, uint32_t gcid, uint32_t pcb_add
gcid, pcb_addr, stat);
return OPAL_BUSY;
- /* CPU is asleep, don't retry */
+ /* CPU is asleep, reset XSCOM engine and return */
case 2:
+ xscom_reset(gcid);
return OPAL_WRONG_STATE;
}