summaryrefslogtreecommitdiffstats
path: root/src/usr/diag
diff options
context:
space:
mode:
authorZane Shelley <zshelle@us.ibm.com>2015-04-10 10:24:24 -0500
committerA. Patrick Williams III <iawillia@us.ibm.com>2015-04-21 15:04:25 -0500
commit031a5eee4ef9e83028944bc6605f99a5b6d0dd0f (patch)
tree8f551306abe6d9b3610505f165f2a65354cdcb1e /src/usr/diag
parentbfb336838ef7e4db895e7d27a8c021cd2a136693 (diff)
downloadblackbird-hostboot-031a5eee4ef9e83028944bc6605f99a5b6d0dd0f.tar.gz
blackbird-hostboot-031a5eee4ef9e83028944bc6605f99a5b6d0dd0f.zip
PRD: Bug fixes for HBRT CS analysis
Change-Id: I49139a8affaf3a30ab71148fefcc1929b69fd597 Reviewed-on: http://gfw160.aus.stglabs.ibm.com:8080/gerrit/16991 Tested-by: Jenkins Server Reviewed-by: Daniel M. Crowell <dcrowell@us.ibm.com> Reviewed-by: BENJAMIN J. WEISENBECK <bweisenb@us.ibm.com> Reviewed-by: A. Patrick Williams III <iawillia@us.ibm.com>
Diffstat (limited to 'src/usr/diag')
-rw-r--r--src/usr/diag/attn/ipl/attnsvc.C2
-rwxr-xr-xsrc/usr/diag/prdf/framework/register/prdfFileRegisterAccess.C8
-rw-r--r--src/usr/diag/prdf/occ_firdata/homerData_common.h9
-rw-r--r--src/usr/diag/prdf/occ_firdata/pnorData_common.h12
-rw-r--r--src/usr/diag/prdf/occ_firdata/prdfWriteHomerFirData.C7
5 files changed, 25 insertions, 13 deletions
diff --git a/src/usr/diag/attn/ipl/attnsvc.C b/src/usr/diag/attn/ipl/attnsvc.C
index fb66a5aea..2fe0bb934 100644
--- a/src/usr/diag/attn/ipl/attnsvc.C
+++ b/src/usr/diag/attn/ipl/attnsvc.C
@@ -263,7 +263,7 @@ errlHndl_t Service::processCheckstop()
++tit;
}
- if( NULL != err )
+ if ( NULL == err )
{
if(!attentions.empty())
{
diff --git a/src/usr/diag/prdf/framework/register/prdfFileRegisterAccess.C b/src/usr/diag/prdf/framework/register/prdfFileRegisterAccess.C
index 18037d157..e5357d8db 100755
--- a/src/usr/diag/prdf/framework/register/prdfFileRegisterAccess.C
+++ b/src/usr/diag/prdf/framework/register/prdfFileRegisterAccess.C
@@ -49,12 +49,16 @@ errlHndl_t FileScomAccessor::Access(
switch (operation)
{
case MopRegisterAccess::WRITE:
- data = bs.GetFieldJustify(0, 64);
+ // TODO: RTC 62076 move BitString class to 64-bit
+ data = (((uint64_t)bs.GetFieldJustify( 0, 32)) << 32) |
+ ((uint64_t)bs.GetFieldJustify(32, 32));
firData.putScom( i_target, registerId, data);
break;
case MopRegisterAccess::READ:
firData.getScom( i_target, registerId, data);
- bs.SetFieldJustify( 0, 64, data);
+ // TODO: RTC 62076 move BitString class to 64-bit
+ bs.SetFieldJustify( 0, 32, data >> 32);
+ bs.SetFieldJustify(32, 32, data );
break;
default:
PRDF_ERR(PRDF_FUNC"Wrong Operation:%u", operation);
diff --git a/src/usr/diag/prdf/occ_firdata/homerData_common.h b/src/usr/diag/prdf/occ_firdata/homerData_common.h
index 7be84cebb..13ac20968 100644
--- a/src/usr/diag/prdf/occ_firdata/homerData_common.h
+++ b/src/usr/diag/prdf/occ_firdata/homerData_common.h
@@ -66,12 +66,13 @@
* - MASK (FIR address + 3)
* - ACT0 (FIR address + 6)
* - ACT1 (FIR address + 7)
- * - WOF (FIR address + 8)
* - ID FIR
* - ID MASK (ID FIR address + 0x300000000ll)
* - ID ACT0 (ID FIR address + 0x600000000ll)
* - ID ACT1 (ID FIR address + 0x700000000ll)
- * - ID WOF (ID FIR address + 0x800000000ll)
+ * Note that not all FIRs have a corresponding WOF register. So any WOFs needed
+ * for analysis will need to be explicitly listed in the corresponding
+ * 'Registers' lists.
*/
typedef enum
@@ -81,7 +82,7 @@ typedef enum
} HOMER_Version_t;
/** PNOR information contained within the HOMER data. */
-typedef struct
+typedef struct __attribute__((packed))
{
uint32_t pnorOffset; ///< Physical offset of FIRDATA in PNOR
uint32_t pnorSize; ///< Maximum size of FIRDATA (includes ECC)
@@ -92,7 +93,7 @@ typedef struct
/** HOMER data header information containing hardware configurations and
* register counts. */
-typedef struct
+typedef struct __attribute__((packed))
{
uint32_t header; ///< Magic number to indicate valid data and version
diff --git a/src/usr/diag/prdf/occ_firdata/pnorData_common.h b/src/usr/diag/prdf/occ_firdata/pnorData_common.h
index a49e8de67..ec3677a7c 100644
--- a/src/usr/diag/prdf/occ_firdata/pnorData_common.h
+++ b/src/usr/diag/prdf/occ_firdata/pnorData_common.h
@@ -48,8 +48,8 @@
* - Registers with SCOM errors will not be captured, however, the number
* of SCOM errors detected should be stored in each PNOR_Trgt_t struct.
* - If the value of a FIR (or ID FIR) is zero, do not capture the
- * associated ACT0 and ACT1 registers. Note that the associated MASK and
- * WOF registers are still needed.
+ * associated ACT0 and ACT1 registers. Note that the associated MASK
+ * register is still needed for FFDC.
* - Each target type may have associated global registers. If none exist,
* simply capture all registers for that type. However, if they do exist
* and the values of ALL the global registers are zero, skip capturing
@@ -71,7 +71,7 @@ typedef enum
} PNOR_Version_t;
/** PNOR data header information. */
-typedef struct
+typedef struct __attribute__((packed))
{
uint32_t header; ///< Magic number to indicate valid data and version
@@ -103,7 +103,7 @@ typedef enum
} PNOR_Trgt_RegLimits_t;
/** Information for each target with SCOM data. */
-typedef struct
+typedef struct __attribute__((packed))
{
uint32_t type : 3; ///< Target type. See enum TrgtType_t
uint32_t procPos : 3; ///< The processor position (0-7)
@@ -134,7 +134,7 @@ static inline PNOR_Trgt_t PNOR_getTrgt( uint32_t i_type, uint32_t i_procPos,
};
/** Information for a normal register. */
-typedef struct
+typedef struct __attribute__((packed))
{
uint32_t addr; ///< 32-bit address
uint64_t val; ///< 64-bit value
@@ -142,7 +142,7 @@ typedef struct
} PNOR_Reg_t;
/** Information for an indirect-SCOM register. */
-typedef struct
+typedef struct __attribute__((packed))
{
uint64_t addr; ///< 64-bit address
uint32_t val; ///< 32-bit value
diff --git a/src/usr/diag/prdf/occ_firdata/prdfWriteHomerFirData.C b/src/usr/diag/prdf/occ_firdata/prdfWriteHomerFirData.C
index bdae4cf61..5ac21fdbb 100644
--- a/src/usr/diag/prdf/occ_firdata/prdfWriteHomerFirData.C
+++ b/src/usr/diag/prdf/occ_firdata/prdfWriteHomerFirData.C
@@ -96,6 +96,10 @@ static uint32_t proc_reg[] =
0x570F001A, // GLOBAL_SPA (for FFDC only)
//0x51040001, // GLOBALUNITXSTPFIR (not even accessible during IPL)
+ // For ATTN
+ 0x01020013, // IPOLL reg
+ 0x02000001, // GP1 reg
+
// Chiplet FIRs
0x01040000, // TP_CHIPLET_CS_FIR
0x01040001, // TP_CHIPLET_RE_FIR
@@ -312,6 +316,9 @@ static uint32_t mcs_fir[] =
static uint32_t mcs_reg[] =
{
+ // WOF register explicitly needed for analysis
+ 0x02011848, // MCIFIR_WOF
+
// c_err_rpt and extra FFDC registers
0x0201181E, // MCERPT0
0x0201184E, // MCIERPT0
OpenPOWER on IntegriCloud