diff options
author | Zane Shelley <zshelle@us.ibm.com> | 2015-04-10 10:24:24 -0500 |
---|---|---|
committer | A. Patrick Williams III <iawillia@us.ibm.com> | 2015-04-21 15:04:25 -0500 |
commit | 031a5eee4ef9e83028944bc6605f99a5b6d0dd0f (patch) | |
tree | 8f551306abe6d9b3610505f165f2a65354cdcb1e /src/usr/diag | |
parent | bfb336838ef7e4db895e7d27a8c021cd2a136693 (diff) | |
download | blackbird-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.C | 2 | ||||
-rwxr-xr-x | src/usr/diag/prdf/framework/register/prdfFileRegisterAccess.C | 8 | ||||
-rw-r--r-- | src/usr/diag/prdf/occ_firdata/homerData_common.h | 9 | ||||
-rw-r--r-- | src/usr/diag/prdf/occ_firdata/pnorData_common.h | 12 | ||||
-rw-r--r-- | src/usr/diag/prdf/occ_firdata/prdfWriteHomerFirData.C | 7 |
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 |