aboutsummaryrefslogtreecommitdiff
path: root/hw/fsp
diff options
context:
space:
mode:
authorVasant Hegde <hegdevasant@linux.vnet.ibm.com>2017-06-12 18:59:16 +0530
committerStewart Smith <stewart@linux.vnet.ibm.com>2017-06-14 14:30:31 +1000
commit4cef4d8d6000936b1a4e1065bf69ee2edd3fcc1f (patch)
treea0981bc1b19326469d9029447d6d8b0bc952f646 /hw/fsp
parent807a3acc8fd66af1e1c6e7154aa5029c9b91bb3b (diff)
downloadskiboot-4cef4d8d6000936b1a4e1065bf69ee2edd3fcc1f.zip
skiboot-4cef4d8d6000936b1a4e1065bf69ee2edd3fcc1f.tar.gz
skiboot-4cef4d8d6000936b1a4e1065bf69ee2edd3fcc1f.tar.bz2
FSP: Set status field in response message for timed out message
For timed out FSP messages, we set message status as "fsp_msg_timeout". But most FSP driver users (like surviellance) are ignoring this field. They always look for FSP returned status value in callback function (second byte in word1). So we endup treating timed out message as success response from FSP. Sample output: [69902.432509048,7] SURV: Sending the heartbeat command to FSP [70023.226860117,4] FSP: Response from FSP timed out, word0 = d66a00d7, word1 = 0 state: 3 .... [70023.226901445,7] SURV: Received heartbeat acknowledge from FSP [70023.226903251,3] FSP: fsp_trigger_reset() entry Here SURV code thought it got valid response from FSP. But actually we didn't receive response from FSP. This patch fixes above issue by updating status field in response structure. CC: Ananth N Mavinakayanahalli <ananth@linux.vnet.ibm.com> Signed-off-by: Vasant Hegde <hegdevasant@linux.vnet.ibm.com> Acked-by: Ananth N Mavinakayanahalli <ananth@linux.vnet.ibm.com> Signed-off-by: Stewart Smith <stewart@linux.vnet.ibm.com>
Diffstat (limited to 'hw/fsp')
-rw-r--r--hw/fsp/fsp.c5
1 files changed, 4 insertions, 1 deletions
diff --git a/hw/fsp/fsp.c b/hw/fsp/fsp.c
index 4a8eaee..2598706 100644
--- a/hw/fsp/fsp.c
+++ b/hw/fsp/fsp.c
@@ -2173,8 +2173,11 @@ static void fsp_timeout_poll(void *data __unused)
fsp_reg_dump();
fsp_cmdclass_resp_bitmask &= ~(1ull << index);
cmdclass->timesent = 0;
- if (req->resp)
+ if (req->resp) {
req->resp->state = fsp_msg_timeout;
+ req->resp->word1 = (FSP_STATUS_BUSY << 8) |
+ (req->resp->word1 & 0xff);
+ }
fsp_complete_msg(req);
__fsp_trigger_reset();
unlock(&fsp_lock);