summaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorShakeeb <shakeebbk@in.ibm.com>2016-09-01 23:50:52 -0500
committerAMIT J. TENDOLKAR <amit.tendolkar@in.ibm.com>2016-09-14 07:06:23 -0400
commit5681b4d8dd3f1dd49d967a74434151b35f97f64d (patch)
tree98f77e0093c21e55069dd1ec0797d845f52598b5 /src
parent55725bff75c15a0da730b4a6a81e64959bd82602 (diff)
downloadtalos-sbe-5681b4d8dd3f1dd49d967a74434151b35f97f64d.tar.gz
talos-sbe-5681b4d8dd3f1dd49d967a74434151b35f97f64d.zip
Changing FFDC package structure
Change-Id: I150b6e094660e8b639296ee313994c0bd41cf6ee RTC: 160155 Reviewed-on: http://ralgit01.raleigh.ibm.com/gerrit1/29236 Tested-by: Jenkins Server <pfd-jenkins+hostboot@us.ibm.com> Tested-by: FSP CI Jenkins <fsp-CI-jenkins+hostboot@us.ibm.com> Reviewed-by: Sachin Gupta <sgupta2m@in.ibm.com> Reviewed-by: AMIT J. TENDOLKAR <amit.tendolkar@in.ibm.com>
Diffstat (limited to 'src')
-rw-r--r--src/sbefw/sbeFFDC.C29
-rw-r--r--src/sbefw/sbeFFDC.H31
-rw-r--r--src/sbefw/sbeFifoMsgUtils.C6
-rw-r--r--src/sbefw/sbeSpMsg.H28
-rw-r--r--src/sbefw/sbe_sp_intf.H2
-rw-r--r--src/sbefw/sbecmdgeneric.C8
-rw-r--r--src/test/testcases/testSbeDump.py6
-rw-r--r--src/test/testcases/testUtil.py13
8 files changed, 80 insertions, 43 deletions
diff --git a/src/sbefw/sbeFFDC.C b/src/sbefw/sbeFFDC.C
index 3a8e24e7..de8bd43f 100644
--- a/src/sbefw/sbeFFDC.C
+++ b/src/sbefw/sbeFFDC.C
@@ -30,22 +30,20 @@
#include "sbeFFDC.H"
/*
- * @brief sendOverFIFO - method to pack and send SBE internal FFDC
- * only if isSendInternalFFDCSet() is true
- * over FIFO interface
- * @param[in] i_primStatus - Primary status of Chip op
- * @param[in] i_secStatus - Secondary status of Chip op
- * @param[in] i_fieldsConfig - bitmap indicating the field
- * to be sent in FFDC
- * @param[out] o_bytesSent -number of bytes sent
- *
+ * @brief sendOverFIFO - method to pack and send SBE internal FFDC
+ * only if isSendInternalFFDCSet() is true
+ * over FIFO interface
+ * @param[in] i_hdr - Fifo response header
+ * @param[in] i_fieldsConfig - bitmap indicating the field
+ * to be sent in FFDC
+ * @param[out] o_bytesSent - number of bytes sent
* @param[in] i_skipffdcBitCheck - Boolean to indicate whether
* ffdc bit should be checked or not.
* By default it is false.
- * @return - SBE secondary RC
+ *
+ * @return - SBE secondary RC
*/
-uint32_t SbeFFDCPackage::sendOverFIFO(uint32_t i_primStatus,
- uint32_t i_secStatus,
+uint32_t SbeFFDCPackage::sendOverFIFO(const sbeRespGenHdr_t &i_hdr,
uint32_t i_fieldsConfig,
uint32_t &o_bytesSent,
bool i_skipffdcBitCheck)
@@ -72,8 +70,11 @@ uint32_t SbeFFDCPackage::sendOverFIFO(uint32_t i_primStatus,
}
// update the primary and secondary status
- iv_sbeFFDCDataHeader.primaryStatus = i_primStatus;
- iv_sbeFFDCDataHeader.secondaryStatus = i_secStatus;
+ iv_sbeFFDCDataHeader.primaryStatus = i_hdr.primaryStatus;
+ iv_sbeFFDCDataHeader.secondaryStatus = i_hdr.secondaryStatus;
+ // Set failed command information
+ // Sequence Id is 0 by default for Fifo interface
+ iv_sbeFFDCHeader.setCmdInfo(0, i_hdr.cmdClass, i_hdr.command);
//Update the user data header with dump fields configuration
iv_sbeFFDCDataHeader.dumpFields.set(i_fieldsConfig);
iv_sbeFFDCHeader.lenInWords = (sizeof(sbeResponseFfdc_t) +
diff --git a/src/sbefw/sbeFFDC.H b/src/sbefw/sbeFFDC.H
index 995840a8..e77c54b6 100644
--- a/src/sbefw/sbeFFDC.H
+++ b/src/sbefw/sbeFFDC.H
@@ -75,7 +75,6 @@ public:
static_assert((sizeof(PkTraceBuffer) % 4) == 0,
"g_pk_trace_buf not 4byte aligned");
- iv_sbeFFDCHeader.magicBytes = 0xFFDC;
iv_sbeFFDCHeader.fapiRc = fapi2::FAPI2_RC_PLAT_ERR_SEE_DATA;
iv_sbeFFDCDataHeader.primaryStatus = SBE_PRI_OPERATION_SUCCESSFUL;
@@ -85,29 +84,25 @@ public:
//to be sent in send APIs
iv_sbeFFDCDataHeader.dumpFields = {0};
}
+
/*
- * @brief sendOverFIFO - method to pack and send SBE internal FFDC
- * only if isSendInternalFFDCSet() is true
- * over FIFO interface
- * @param[in] i_primStatus - Primary status of Chip op
- * @param[in] i_secStatus - Secondary status of Chip op
- * @param[in] i_fieldsConfig - bitmap indicating the field
- * to be sent in FFDC
- *
- * @param[out] o_bytesSent -number of bytes sent
+ * @brief sendOverFIFO - method to pack and send SBE internal FFDC
+ * only if isSendInternalFFDCSet() is true
+ * over FIFO interface
+ * @param[in] i_hdr - Fifo response header
+ * @param[in] i_fieldsConfig - bitmap indicating the field
+ * to be sent in FFDC
+ * @param[out] o_bytesSent - number of bytes sent
+ * @param[in] i_skipffdcBitCheck - Boolean to indicate whether
+ * ffdc bit should be checked or not.
+ * By default it is false.
*
- * @param[in] i_skipffdciBitCheck
- * - boolean to indicate whether
- * ffdc bit should be checked or not.
- * By Default it is false.
- * @return - SBE secondary RC
+ * @return - SBE secondary RC
*/
- uint32_t sendOverFIFO(uint32_t i_primStatus,
- uint32_t i_secStatus,
+ uint32_t sendOverFIFO(const sbeRespGenHdr_t &i_hdr,
uint32_t i_fieldsConfig,
uint32_t &o_bytesSent,
bool i_skipffdcBitCheck = false);
-
/* TODO via RTC:150786
* @brief sendOverHOST - method to pack and send SBE internal FFDC
* only if isSendInternalFFDCSet() is true
diff --git a/src/sbefw/sbeFifoMsgUtils.C b/src/sbefw/sbeFifoMsgUtils.C
index 4525d20f..1f35bf6d 100644
--- a/src/sbefw/sbeFifoMsgUtils.C
+++ b/src/sbefw/sbeFifoMsgUtils.C
@@ -344,6 +344,9 @@ uint32_t sbeDsSendRespHdr(const sbeRespGenHdr_t &i_hdr,
assert((g_FfdcData.ffdcLength % sizeof(uint32_t)) == 0);
uint32_t ffdcDataLenInWords = g_FfdcData.ffdcLength
/ sizeof(uint32_t);
+ // Set failed command information
+ // Sequence Id is 0 by default for Fifo interface
+ i_ffdc->setCmdInfo(0, i_hdr.cmdClass, i_hdr.command);
// Add HWP specific ffdc data length
i_ffdc->lenInWords += ffdcDataLenInWords;
len = sizeof(sbeResponseFfdc_t)/sizeof(uint32_t);
@@ -371,8 +374,7 @@ uint32_t sbeDsSendRespHdr(const sbeRespGenHdr_t &i_hdr,
//Add FFDC data as well.
//Generate all the fields of FFDC package
SbeFFDCPackage sbeFfdc;
- rc = sbeFfdc.sendOverFIFO(i_hdr.primaryStatus,
- i_hdr.secondaryStatus,
+ rc = sbeFfdc.sendOverFIFO(i_hdr,
SBE_FFDC_ALL_DUMP,
len);
if (rc)
diff --git a/src/sbefw/sbeSpMsg.H b/src/sbefw/sbeSpMsg.H
index c1b972bf..38251632 100644
--- a/src/sbefw/sbeSpMsg.H
+++ b/src/sbefw/sbeSpMsg.H
@@ -6,6 +6,7 @@
/* OpenPOWER sbe Project */
/* */
/* Contributors Listed Below - COPYRIGHT 2015,2016 */
+/* [+] International Business Machines Corp. */
/* */
/* */
/* Licensed under the Apache License, Version 2.0 (the "License"); */
@@ -147,9 +148,30 @@ typedef struct sbeResponseFfdc
{
uint32_t magicBytes:16;
uint32_t lenInWords:16; // length in word( 4 byte )
+ uint32_t seqId:16;
+ uint32_t cmdClass:8;
+ uint32_t cmd:8;
uint32_t fapiRc;
/**
+ * @brief set failed command information
+ *
+ * @param[in] i_seqId sequence Id of command
+ * @param[in] i_cmdClass command class
+ * @param[in] i_cmd command
+ *
+ * @return
+ */
+ void inline setCmdInfo(const uint16_t i_seqId,
+ const uint8_t i_cmdClass,
+ const uint8_t i_cmd)
+ {
+ seqId = i_seqId;
+ cmdClass = i_cmdClass;
+ cmd = i_cmd;
+ }
+
+ /**
* @brief set rc
*
* @param[in] i_rc FAPI RC
@@ -181,9 +203,11 @@ typedef struct sbeResponseFfdc
sbeResponseFfdc()
{
magicBytes = 0xFFDC;
- //TODO via 129076.
- //Need to change value for length once FFDC design is final.
+ seqId = 0;
+ cmdClass = SBE_CMD_CLASS_UNKNOWN;
+ cmd = SBE_CMD_UNKNOWN;
lenInWords = ( sizeof(uint32_t ) // For magicBytes + lenInWords
+ + sizeof(uint32_t) // For SeqId + CmdClass + Cmd
+ sizeof(fapiRc))
/ sizeof(uint32_t);
fapiRc = 0;
diff --git a/src/sbefw/sbe_sp_intf.H b/src/sbefw/sbe_sp_intf.H
index f210adb7..93a05148 100644
--- a/src/sbefw/sbe_sp_intf.H
+++ b/src/sbefw/sbe_sp_intf.H
@@ -63,6 +63,8 @@ enum sbeCommandClass
SBE_CMD_CLASS_MPIPL_COMMANDS = 0xA9,
};
+static const uint8_t SBE_CMD_UNKNOWN = 0x00;
+
/**
* @brief enums for SBE Istep Control command class
*
diff --git a/src/sbefw/sbecmdgeneric.C b/src/sbefw/sbecmdgeneric.C
index 31165e50..c45a70a6 100644
--- a/src/sbefw/sbecmdgeneric.C
+++ b/src/sbefw/sbecmdgeneric.C
@@ -150,10 +150,10 @@ uint32_t sbeGetFfdc (uint8_t *i_pArg)
// @TODO via RTC : 149074
// primary and secondary status should be picked
// from the globals.
- rc = sbeFfdcPack.sendOverFIFO(respHdr.primaryStatus,
- respHdr.secondaryStatus,
- SBE_FFDC_ALL_DUMP,len,
- true);
+ rc = sbeFfdcPack.sendOverFIFO(respHdr,
+ SBE_FFDC_ALL_DUMP,
+ len,
+ true);
if (rc)
{
break;
diff --git a/src/test/testcases/testSbeDump.py b/src/test/testcases/testSbeDump.py
index 184a70e8..3b273cdf 100644
--- a/src/test/testcases/testSbeDump.py
+++ b/src/test/testcases/testSbeDump.py
@@ -50,6 +50,12 @@ def main():
raise Exception('data mistmach')
packLen = ((data[2] << 8) | data[3])
print ("\nFFDC package length = " + str(packLen))
+ # extract Sequence ID, Command class and command
+ data = testUtil.readDsEntryReturnVal()
+ seqId = ((data[0] << 24) | (data[1] << 16))
+ cmdClass = data[2]
+ cmd = data[3]
+ print ("\n SeqId ["+str(seqId)+"] CmdClass ["+str(cmdClass)+"] Cmd ["+str(cmd)+"]")
data = testUtil.readDsEntryReturnVal()
fapiRc = ((data[0] << 24) | (data[1] << 16) | (data[2] << 8) | data[3])
diff --git a/src/test/testcases/testUtil.py b/src/test/testcases/testUtil.py
index b92fda60..133efcc5 100644
--- a/src/test/testcases/testUtil.py
+++ b/src/test/testcases/testUtil.py
@@ -6,6 +6,7 @@
# OpenPOWER sbe Project
#
# Contributors Listed Below - COPYRIGHT 2015,2016
+# [+] International Business Machines Corp.
#
#
# Licensed under the Apache License, Version 2.0 (the "License");
@@ -157,15 +158,21 @@ def extractHWPFFDC(dumpToFile = False):
raise Exception('data mistmach')
packLen = ((data[2] << 8) | data[3])
print ("\nFFDC package length = " + str(packLen))
+ # extract Sequence ID, Command class and command
+ data = readDsEntryReturnVal()
+ seqId = ((data[0] << 24) | (data[1] << 16))
+ cmdClass = data[2]
+ cmd = data[3]
+ print ("\n SeqId ["+str(seqId)+"] CmdClass ["+str(cmdClass)+"] Cmd ["+str(cmd)+"]")
data = readDsEntryReturnVal()
fapiRc = ((data[0] << 24) | (data[1] << 16) | (data[2] << 8) | data[3])
print ("\nFAPI rc = " + str(hex(fapiRc)))
if(dumpToFile):
- myBin = open('trace.bin', 'wb')
- print ("\nwriting "+'trace.bin')
- for i in range(0, packLen-2):
+ myBin = open('hwp_ffdc.bin', 'wb')
+ print ("\nwriting "+'hwp_ffdc.bin')
+ for i in range(0, packLen-3):
data = readDsEntryReturnVal()
if(dumpToFile):
myBin.write(bytearray(data))
OpenPOWER on IntegriCloud