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 15:58:19 +1000
commitc7e1d072cc18088a5ba12779f5f11b97bb886723 (patch)
treec8998f5994d86702ba72d663290b9d6e50c276e8 /hw/fsp
parentb0e07980fb3454c68f196e943c65f4f1d8954450 (diff)
downloadskiboot-c7e1d072cc18088a5ba12779f5f11b97bb886723.zip
skiboot-c7e1d072cc18088a5ba12779f5f11b97bb886723.tar.gz
skiboot-c7e1d072cc18088a5ba12779f5f11b97bb886723.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> (cherry picked from commit 4cef4d8d6000936b1a4e1065bf69ee2edd3fcc1f) 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);