summaryrefslogtreecommitdiffstats
path: root/src/usr/diag/prdf
diff options
context:
space:
mode:
authorZane Shelley <zshelle@us.ibm.com>2019-08-23 15:51:15 -0500
committerZane C Shelley <zshelle@us.ibm.com>2019-08-27 10:11:39 -0500
commit1db43a814d2df9d6d0e5a6f4967937287d06b7a9 (patch)
treefa2500108cc9a23362d5290251c2c2d07d6d0527 /src/usr/diag/prdf
parente32c176c55bb1a7fd9b05a63f903b9bb33c6ff75 (diff)
downloadtalos-hostboot-1db43a814d2df9d6d0e5a6f4967937287d06b7a9.tar.gz
talos-hostboot-1db43a814d2df9d6d0e5a6f4967937287d06b7a9.zip
PRD: updates to IOOLFIR based on recent OpenCAPI FIR review
Change-Id: I0f721760eebfd805cfd6b939d75d42ec2d46cdc2 CQ: SW469988 Backport: release-op920 Backport: release-op930 Backport: release-op940 Reviewed-on: http://rchgit01.rchland.ibm.com/gerrit1/82785 Reviewed-by: Caleb N Palmer <cnpalmer@us.ibm.com> Tested-by: Jenkins Server <pfd-jenkins+hostboot@us.ibm.com> Reviewed-by: Zane C Shelley <zshelle@us.ibm.com> Reviewed-on: http://rchgit01.rchland.ibm.com/gerrit1/82881 Tested-by: Jenkins OP Build CI <op-jenkins+hostboot@us.ibm.com> Tested-by: FSP CI Jenkins <fsp-CI-jenkins+hostboot@us.ibm.com> Tested-by: Jenkins OP HW <op-hw-jenkins+hostboot@us.ibm.com>
Diffstat (limited to 'src/usr/diag/prdf')
-rw-r--r--src/usr/diag/prdf/common/plat/axone/axone_obus.rule108
-rw-r--r--src/usr/diag/prdf/common/plat/cumulus/cumulus_obus.rule108
-rw-r--r--src/usr/diag/prdf/common/plat/nimbus/nimbus_obus.rule108
-rw-r--r--src/usr/diag/prdf/common/plat/p9/p9_common_obus_actions.rule146
-rw-r--r--src/usr/diag/prdf/common/plat/p9/p9_common_obus_regs.rule9
-rw-r--r--src/usr/diag/prdf/common/plat/p9/prdfLaneRepair.C96
-rw-r--r--src/usr/diag/prdf/common/plat/p9/prdfP9Obus.C193
-rw-r--r--src/usr/diag/prdf/common/plat/p9/prdf_plat_p9.mk3
8 files changed, 444 insertions, 327 deletions
diff --git a/src/usr/diag/prdf/common/plat/axone/axone_obus.rule b/src/usr/diag/prdf/common/plat/axone/axone_obus.rule
index 1fa9ed61e..1a346c417 100644
--- a/src/usr/diag/prdf/common/plat/axone/axone_obus.rule
+++ b/src/usr/diag/prdf/common/plat/axone/axone_obus.rule
@@ -459,26 +459,22 @@ group gIOOLFIR
/** IOOLFIR[6]
* link0 crc error
*/
- # DL0 - orx_otx_crc_error
(rIOOLFIR, bit(6)) ? threshold_and_mask_self;
/** IOOLFIR[7]
* link1 crc error
*/
- # DL1 - orx_otx_crc_error
(rIOOLFIR, bit(7)) ? threshold_and_mask_self;
/** IOOLFIR[8]
* link0 nak received
*/
- # DL0 - orx_otx_nack
- (rIOOLFIR, bit(8)) ? defaultMaskedError;
+ (rIOOLFIR, bit(8)) ? threshold_and_mask_self_non_smp_only;
/** IOOLFIR[9]
* link1 nak received
*/
- # DL1 - orx_otx_nack
- (rIOOLFIR, bit(9)) ? defaultMaskedError;
+ (rIOOLFIR, bit(9)) ? threshold_and_mask_self_non_smp_only;
/** IOOLFIR[10]
* link0 replay buffer full
@@ -503,22 +499,22 @@ group gIOOLFIR
/** IOOLFIR[14]
* link0 sl ecc correctable
*/
- (rIOOLFIR, bit(14)) ? threshold_and_mask_self;
+ (rIOOLFIR, bit(14)) ? threshold_and_mask_self_smp_only;
/** IOOLFIR[15]
* link1 sl ecc correctable
*/
- (rIOOLFIR, bit(15)) ? threshold_and_mask_self;
+ (rIOOLFIR, bit(15)) ? threshold_and_mask_self_smp_only;
/** IOOLFIR[16]
* link0 sl ecc ue
*/
- (rIOOLFIR, bit(16)) ? threshold_and_mask_self;
+ (rIOOLFIR, bit(16)) ? threshold_and_mask_self_smp_only;
/** IOOLFIR[17]
* link1 sl ecc ue
*/
- (rIOOLFIR, bit(17)) ? threshold_and_mask_self;
+ (rIOOLFIR, bit(17)) ? threshold_and_mask_self_smp_only;
/** IOOLFIR[18]
* link0 retrain threshold
@@ -533,25 +529,21 @@ group gIOOLFIR
/** IOOLFIR[20]
* link0 loss block align
*/
- # DL0 - lost_block_lock
(rIOOLFIR, bit(20)) ? defaultMaskedError;
/** IOOLFIR[21]
* link1 loss block align
*/
- # DL1 - lost_block_lock
(rIOOLFIR, bit(21)) ? defaultMaskedError;
/** IOOLFIR[22]
* link0 invalid block
*/
- # DL0 - lost_data_sh
(rIOOLFIR, bit(22)) ? defaultMaskedError;
/** IOOLFIR[23]
* link1 invalid block
*/
- # DL1 - lost_data_sh
(rIOOLFIR, bit(23)) ? defaultMaskedError;
/** IOOLFIR[24]
@@ -567,25 +559,21 @@ group gIOOLFIR
/** IOOLFIR[26]
* link0 deskew overflow
*/
- # DL0 - deskew_overflow
(rIOOLFIR, bit(26)) ? defaultMaskedError;
/** IOOLFIR[27]
* link1 deskew overflow
*/
- # DL1 - deskew_overflow
(rIOOLFIR, bit(27)) ? defaultMaskedError;
/** IOOLFIR[28]
* link0 sw retrain
*/
- # DL0 - software_retrain
(rIOOLFIR, bit(28)) ? defaultMaskedError;
/** IOOLFIR[29]
* link1 sw retrain
*/
- # DL1 - software_retrain
(rIOOLFIR, bit(29)) ? defaultMaskedError;
/** IOOLFIR[30]
@@ -609,38 +597,34 @@ group gIOOLFIR
(rIOOLFIR, bit(33)) ? defaultMaskedError;
/** IOOLFIR[34]
- * link0 num replay
+ * link0 num replay or no forward progress
*/
- # DL0 - no_fwd_progress
(rIOOLFIR, bit(34)) ? defaultMaskedError;
/** IOOLFIR[35]
- * link1 num replay
+ * link1 num replay or no forward progress
*/
- # DL1 - no_fwd_progress
(rIOOLFIR, bit(35)) ? defaultMaskedError;
/** IOOLFIR[36]
* link0 training set received
*/
- # DL0 - training_sh
(rIOOLFIR, bit(36)) ? defaultMaskedError;
/** IOOLFIR[37]
* link1 training set received
*/
- # DL1 - training_sh
(rIOOLFIR, bit(37)) ? defaultMaskedError;
/** IOOLFIR[38]
* link0 prbs select error
*/
- (rIOOLFIR, bit(38)) ? threshold_and_mask_self;
+ (rIOOLFIR, bit(38)) ? threshold_and_mask_self_smp_only;
/** IOOLFIR[39]
* link1 prbs select error
*/
- (rIOOLFIR, bit(39)) ? threshold_and_mask_self;
+ (rIOOLFIR, bit(39)) ? threshold_and_mask_self_smp_only;
/** IOOLFIR[40]
* link0 tcomplete bad
@@ -655,130 +639,102 @@ group gIOOLFIR
/** IOOLFIR[42]
* link0 no spare lane available
*/
- (rIOOLFIR, bit(42)) ? obusSmpCallout_L0;
+ (rIOOLFIR, bit(42)) ? obusSmpCallout_L0_smp_only;
/** IOOLFIR[43]
* link1 no spare lane available
*/
- (rIOOLFIR, bit(43)) ? obusSmpCallout_L1;
+ (rIOOLFIR, bit(43)) ? obusSmpCallout_L1_smp_only;
/** IOOLFIR[44]
- * link0 spare done
+ * link0 spare done or degraded mode
*/
- # DL0 - degraded_mode
- (rIOOLFIR, bit(44)) ? obusSmpCallout_th32_L0;
+ (rIOOLFIR, bit(44)) ? spare_lane_degraded_mode_L0;
/** IOOLFIR[45]
- * link1 spare done
+ * link1 spare done or degraded mode
*/
- # DL1 - degraded_mode
- (rIOOLFIR, bit(45)) ? obusSmpCallout_th32_L1;
+ (rIOOLFIR, bit(45)) ? spare_lane_degraded_mode_L1;
/** IOOLFIR[46]
* link0 too many crc errors
*/
- (rIOOLFIR, bit(46)) ? obusSmpCallout_L0;
+ (rIOOLFIR, bit(46)) ? obusSmpCallout_L0_smp_only;
/** IOOLFIR[47]
* link1 too many crc errors
*/
- (rIOOLFIR, bit(47)) ? obusSmpCallout_L1;
+ (rIOOLFIR, bit(47)) ? obusSmpCallout_L1_smp_only;
/** IOOLFIR[48]
- * link0 npu error
+ * link0 npu error or orx otx dlx errors
*/
- # DL0 - orx_otx_dlx_errors
(rIOOLFIR, bit(48)) ? threshold_and_mask_self;
/** IOOLFIR[49]
- * link1 npu error
+ * link1 npu error or orx otx dlx errors
*/
- # DL1 - orx_otx_dlx_errors
(rIOOLFIR, bit(49)) ? threshold_and_mask_self;
/** IOOLFIR[50]
* linkx npu error
*/
- (rIOOLFIR, bit(50)) ? threshold_and_mask_self;
+ (rIOOLFIR, bit(50)) ? threshold_and_mask_self_smp_only;
/** IOOLFIR[51]
* osc switch
*/
- (rIOOLFIR, bit(51)) ? threshold_and_mask_self;
+ (rIOOLFIR, bit(51)) ? threshold_and_mask_self_smp_only;
/** IOOLFIR[52]
* link0 correctable array error
*/
- # DL0 - oflt_octl_frb_df_ue
- # DL0 - oflt_octl_rpb_df_ue
- # DL0 - ebit_10
- # DL0 - ebit_11
- (rIOOLFIR, bit(52)) ? obusSmpCallout_th32_L0;
+ (rIOOLFIR, bit(52)) ? self_th_32perDay;
/** IOOLFIR[53]
* link1 correctable array error
*/
- # DL1 - oflt_octl_frb_df_ue
- # DL1 - oflt_octl_rpb_df_ue
- # DL1 - ebit_10
- # DL1 - ebit_11
- (rIOOLFIR, bit(53)) ? obusSmpCallout_th32_L1;
+ (rIOOLFIR, bit(53)) ? self_th_32perDay;
/** IOOLFIR[54]
* link0 uncorrectable array error
*/
- # DL0 - oflt_octl_frb_cf_ue
- # DL0 - oflt_octl_rpb_cf_ue
- (rIOOLFIR, bit(54)) ? obusSmpFailure_L0;
+ (rIOOLFIR, bit(54)) ? self_th_1;
/** IOOLFIR[55]
* link1 uncorrectable array error
*/
- # DL1 - oflt_octl_frb_cf_ue
- # DL1 - oflt_octl_rpb_cf_ue
- (rIOOLFIR, bit(55)) ? obusSmpFailure_L1;
+ (rIOOLFIR, bit(55)) ? self_th_1;
/** IOOLFIR[56]
* link0 training failed
*/
- # DL0 - slower_rx_clk
- (rIOOLFIR, bit(56)) ? obusSmpFailure_L0;
+ (rIOOLFIR, bit(56)) ? training_failure_L0;
/** IOOLFIR[57]
* link1 training failed
*/
- # DL1 - slower_rx_clk
- (rIOOLFIR, bit(57)) ? obusSmpFailure_L1;
+ (rIOOLFIR, bit(57)) ? training_failure_L1;
/** IOOLFIR[58]
* link0 unrecoverable error
*/
- # DL0 - ACK_ptr_error
- # DL0 - run_length_error
- # DL0 - orx_otx_rx_ill_rl
- (rIOOLFIR, bit(58)) ? obusSmpFailure_L0;
+ (rIOOLFIR, bit(58)) ? unrecoverable_error_L0;
/** IOOLFIR[59]
* link1 unrecoverable error
*/
- # DL1 - ACK_ptr_error
- # DL1 - run_length_error
- # DL1 - orx_otx_rx_ill_rl
- (rIOOLFIR, bit(59)) ? obusSmpFailure_L1;
+ (rIOOLFIR, bit(59)) ? unrecoverable_error_L1;
/** IOOLFIR[60]
* link0 internal error
*/
- # DL0 - oflt_octl_data_pty_error
- # DL0 - ctl_parity_error
- (rIOOLFIR, bit(60)) ? obusSmpFailure_L0;
+ (rIOOLFIR, bit(60)) ? internal_error_L0;
/** IOOLFIR[61]
* link1 internal error
*/
- # DL1 - oflt_octl_data_pty_error
- # DL1 - ctl_parity_error
- (rIOOLFIR, bit(61)) ? obusSmpFailure_L1;
+ (rIOOLFIR, bit(61)) ? internal_error_L1;
/** IOOLFIR[62]
* fir scom err dup
diff --git a/src/usr/diag/prdf/common/plat/cumulus/cumulus_obus.rule b/src/usr/diag/prdf/common/plat/cumulus/cumulus_obus.rule
index 372029e7d..7275e26a3 100644
--- a/src/usr/diag/prdf/common/plat/cumulus/cumulus_obus.rule
+++ b/src/usr/diag/prdf/common/plat/cumulus/cumulus_obus.rule
@@ -459,26 +459,22 @@ group gIOOLFIR
/** IOOLFIR[6]
* link0 crc error
*/
- # DL0 - orx_otx_crc_error
(rIOOLFIR, bit(6)) ? threshold_and_mask_self;
/** IOOLFIR[7]
* link1 crc error
*/
- # DL1 - orx_otx_crc_error
(rIOOLFIR, bit(7)) ? threshold_and_mask_self;
/** IOOLFIR[8]
* link0 nak received
*/
- # DL0 - orx_otx_nack
- (rIOOLFIR, bit(8)) ? defaultMaskedError;
+ (rIOOLFIR, bit(8)) ? threshold_and_mask_self_non_smp_only;
/** IOOLFIR[9]
* link1 nak received
*/
- # DL1 - orx_otx_nack
- (rIOOLFIR, bit(9)) ? defaultMaskedError;
+ (rIOOLFIR, bit(9)) ? threshold_and_mask_self_non_smp_only;
/** IOOLFIR[10]
* link0 replay buffer full
@@ -503,22 +499,22 @@ group gIOOLFIR
/** IOOLFIR[14]
* link0 sl ecc correctable
*/
- (rIOOLFIR, bit(14)) ? threshold_and_mask_self;
+ (rIOOLFIR, bit(14)) ? threshold_and_mask_self_smp_only;
/** IOOLFIR[15]
* link1 sl ecc correctable
*/
- (rIOOLFIR, bit(15)) ? threshold_and_mask_self;
+ (rIOOLFIR, bit(15)) ? threshold_and_mask_self_smp_only;
/** IOOLFIR[16]
* link0 sl ecc ue
*/
- (rIOOLFIR, bit(16)) ? threshold_and_mask_self;
+ (rIOOLFIR, bit(16)) ? threshold_and_mask_self_smp_only;
/** IOOLFIR[17]
* link1 sl ecc ue
*/
- (rIOOLFIR, bit(17)) ? threshold_and_mask_self;
+ (rIOOLFIR, bit(17)) ? threshold_and_mask_self_smp_only;
/** IOOLFIR[18]
* link0 retrain threshold
@@ -533,25 +529,21 @@ group gIOOLFIR
/** IOOLFIR[20]
* link0 loss block align
*/
- # DL0 - lost_block_lock
(rIOOLFIR, bit(20)) ? defaultMaskedError;
/** IOOLFIR[21]
* link1 loss block align
*/
- # DL1 - lost_block_lock
(rIOOLFIR, bit(21)) ? defaultMaskedError;
/** IOOLFIR[22]
* link0 invalid block
*/
- # DL0 - lost_data_sh
(rIOOLFIR, bit(22)) ? defaultMaskedError;
/** IOOLFIR[23]
* link1 invalid block
*/
- # DL1 - lost_data_sh
(rIOOLFIR, bit(23)) ? defaultMaskedError;
/** IOOLFIR[24]
@@ -567,25 +559,21 @@ group gIOOLFIR
/** IOOLFIR[26]
* link0 deskew overflow
*/
- # DL0 - deskew_overflow
(rIOOLFIR, bit(26)) ? defaultMaskedError;
/** IOOLFIR[27]
* link1 deskew overflow
*/
- # DL1 - deskew_overflow
(rIOOLFIR, bit(27)) ? defaultMaskedError;
/** IOOLFIR[28]
* link0 sw retrain
*/
- # DL0 - software_retrain
(rIOOLFIR, bit(28)) ? defaultMaskedError;
/** IOOLFIR[29]
* link1 sw retrain
*/
- # DL1 - software_retrain
(rIOOLFIR, bit(29)) ? defaultMaskedError;
/** IOOLFIR[30]
@@ -609,38 +597,34 @@ group gIOOLFIR
(rIOOLFIR, bit(33)) ? defaultMaskedError;
/** IOOLFIR[34]
- * link0 num replay
+ * link0 num replay or no forward progress
*/
- # DL0 - no_fwd_progress
(rIOOLFIR, bit(34)) ? defaultMaskedError;
/** IOOLFIR[35]
- * link1 num replay
+ * link1 num replay or no forward progress
*/
- # DL1 - no_fwd_progress
(rIOOLFIR, bit(35)) ? defaultMaskedError;
/** IOOLFIR[36]
* link0 training set received
*/
- # DL0 - training_sh
(rIOOLFIR, bit(36)) ? defaultMaskedError;
/** IOOLFIR[37]
* link1 training set received
*/
- # DL1 - training_sh
(rIOOLFIR, bit(37)) ? defaultMaskedError;
/** IOOLFIR[38]
* link0 prbs select error
*/
- (rIOOLFIR, bit(38)) ? threshold_and_mask_self;
+ (rIOOLFIR, bit(38)) ? threshold_and_mask_self_smp_only;
/** IOOLFIR[39]
* link1 prbs select error
*/
- (rIOOLFIR, bit(39)) ? threshold_and_mask_self;
+ (rIOOLFIR, bit(39)) ? threshold_and_mask_self_smp_only;
/** IOOLFIR[40]
* link0 tcomplete bad
@@ -655,130 +639,102 @@ group gIOOLFIR
/** IOOLFIR[42]
* link0 no spare lane available
*/
- (rIOOLFIR, bit(42)) ? obusSmpCallout_L0;
+ (rIOOLFIR, bit(42)) ? obusSmpCallout_L0_smp_only;
/** IOOLFIR[43]
* link1 no spare lane available
*/
- (rIOOLFIR, bit(43)) ? obusSmpCallout_L1;
+ (rIOOLFIR, bit(43)) ? obusSmpCallout_L1_smp_only;
/** IOOLFIR[44]
- * link0 spare done
+ * link0 spare done or degraded mode
*/
- # DL0 - degraded_mode
- (rIOOLFIR, bit(44)) ? obusSmpCallout_th32_L0;
+ (rIOOLFIR, bit(44)) ? spare_lane_degraded_mode_L0;
/** IOOLFIR[45]
- * link1 spare done
+ * link1 spare done or degraded mode
*/
- # DL1 - degraded_mode
- (rIOOLFIR, bit(45)) ? obusSmpCallout_th32_L1;
+ (rIOOLFIR, bit(45)) ? spare_lane_degraded_mode_L1;
/** IOOLFIR[46]
* link0 too many crc errors
*/
- (rIOOLFIR, bit(46)) ? obusSmpCallout_L0;
+ (rIOOLFIR, bit(46)) ? obusSmpCallout_L0_smp_only;
/** IOOLFIR[47]
* link1 too many crc errors
*/
- (rIOOLFIR, bit(47)) ? obusSmpCallout_L1;
+ (rIOOLFIR, bit(47)) ? obusSmpCallout_L1_smp_only;
/** IOOLFIR[48]
- * link0 npu error
+ * link0 npu error or orx otx dlx errors
*/
- # DL0 - orx_otx_dlx_errors
(rIOOLFIR, bit(48)) ? threshold_and_mask_self;
/** IOOLFIR[49]
- * link1 npu error
+ * link1 npu error or orx otx dlx errors
*/
- # DL1 - orx_otx_dlx_errors
(rIOOLFIR, bit(49)) ? threshold_and_mask_self;
/** IOOLFIR[50]
* linkx npu error
*/
- (rIOOLFIR, bit(50)) ? threshold_and_mask_self;
+ (rIOOLFIR, bit(50)) ? threshold_and_mask_self_smp_only;
/** IOOLFIR[51]
* osc switch
*/
- (rIOOLFIR, bit(51)) ? threshold_and_mask_self;
+ (rIOOLFIR, bit(51)) ? threshold_and_mask_self_smp_only;
/** IOOLFIR[52]
* link0 correctable array error
*/
- # DL0 - oflt_octl_frb_df_ue
- # DL0 - oflt_octl_rpb_df_ue
- # DL0 - ebit_10
- # DL0 - ebit_11
- (rIOOLFIR, bit(52)) ? obusSmpCallout_th32_L0;
+ (rIOOLFIR, bit(52)) ? self_th_32perDay;
/** IOOLFIR[53]
* link1 correctable array error
*/
- # DL1 - oflt_octl_frb_df_ue
- # DL1 - oflt_octl_rpb_df_ue
- # DL1 - ebit_10
- # DL1 - ebit_11
- (rIOOLFIR, bit(53)) ? obusSmpCallout_th32_L1;
+ (rIOOLFIR, bit(53)) ? self_th_32perDay;
/** IOOLFIR[54]
* link0 uncorrectable array error
*/
- # DL0 - oflt_octl_frb_cf_ue
- # DL0 - oflt_octl_rpb_cf_ue
- (rIOOLFIR, bit(54)) ? obusSmpFailure_L0;
+ (rIOOLFIR, bit(54)) ? self_th_1;
/** IOOLFIR[55]
* link1 uncorrectable array error
*/
- # DL1 - oflt_octl_frb_cf_ue
- # DL1 - oflt_octl_rpb_cf_ue
- (rIOOLFIR, bit(55)) ? obusSmpFailure_L1;
+ (rIOOLFIR, bit(55)) ? self_th_1;
/** IOOLFIR[56]
* link0 training failed
*/
- # DL0 - slower_rx_clk
- (rIOOLFIR, bit(56)) ? obusSmpFailure_L0;
+ (rIOOLFIR, bit(56)) ? training_failure_L0;
/** IOOLFIR[57]
* link1 training failed
*/
- # DL1 - slower_rx_clk
- (rIOOLFIR, bit(57)) ? obusSmpFailure_L1;
+ (rIOOLFIR, bit(57)) ? training_failure_L1;
/** IOOLFIR[58]
* link0 unrecoverable error
*/
- # DL0 - ACK_ptr_error
- # DL0 - run_length_error
- # DL0 - orx_otx_rx_ill_rl
- (rIOOLFIR, bit(58)) ? obusSmpFailure_L0;
+ (rIOOLFIR, bit(58)) ? unrecoverable_error_L0;
/** IOOLFIR[59]
* link1 unrecoverable error
*/
- # DL1 - ACK_ptr_error
- # DL1 - run_length_error
- # DL1 - orx_otx_rx_ill_rl
- (rIOOLFIR, bit(59)) ? obusSmpFailure_L1;
+ (rIOOLFIR, bit(59)) ? unrecoverable_error_L1;
/** IOOLFIR[60]
* link0 internal error
*/
- # DL0 - oflt_octl_data_pty_error
- # DL0 - ctl_parity_error
- (rIOOLFIR, bit(60)) ? obusSmpFailure_L0;
+ (rIOOLFIR, bit(60)) ? internal_error_L0;
/** IOOLFIR[61]
* link1 internal error
*/
- # DL1 - oflt_octl_data_pty_error
- # DL1 - ctl_parity_error
- (rIOOLFIR, bit(61)) ? obusSmpFailure_L1;
+ (rIOOLFIR, bit(61)) ? internal_error_L1;
/** IOOLFIR[62]
* fir scom err dup
diff --git a/src/usr/diag/prdf/common/plat/nimbus/nimbus_obus.rule b/src/usr/diag/prdf/common/plat/nimbus/nimbus_obus.rule
index f467cf64a..790537acf 100644
--- a/src/usr/diag/prdf/common/plat/nimbus/nimbus_obus.rule
+++ b/src/usr/diag/prdf/common/plat/nimbus/nimbus_obus.rule
@@ -459,26 +459,22 @@ group gIOOLFIR
/** IOOLFIR[6]
* link0 crc error
*/
- # DL0 - orx_otx_crc_error
(rIOOLFIR, bit(6)) ? threshold_and_mask_self;
/** IOOLFIR[7]
* link1 crc error
*/
- # DL1 - orx_otx_crc_error
(rIOOLFIR, bit(7)) ? threshold_and_mask_self;
/** IOOLFIR[8]
* link0 nak received
*/
- # DL0 - orx_otx_nack
- (rIOOLFIR, bit(8)) ? defaultMaskedError;
+ (rIOOLFIR, bit(8)) ? threshold_and_mask_self_non_smp_only;
/** IOOLFIR[9]
* link1 nak received
*/
- # DL1 - orx_otx_nack
- (rIOOLFIR, bit(9)) ? defaultMaskedError;
+ (rIOOLFIR, bit(9)) ? threshold_and_mask_self_non_smp_only;
/** IOOLFIR[10]
* link0 replay buffer full
@@ -503,22 +499,22 @@ group gIOOLFIR
/** IOOLFIR[14]
* link0 sl ecc correctable
*/
- (rIOOLFIR, bit(14)) ? threshold_and_mask_self;
+ (rIOOLFIR, bit(14)) ? threshold_and_mask_self_smp_only;
/** IOOLFIR[15]
* link1 sl ecc correctable
*/
- (rIOOLFIR, bit(15)) ? threshold_and_mask_self;
+ (rIOOLFIR, bit(15)) ? threshold_and_mask_self_smp_only;
/** IOOLFIR[16]
* link0 sl ecc ue
*/
- (rIOOLFIR, bit(16)) ? threshold_and_mask_self;
+ (rIOOLFIR, bit(16)) ? threshold_and_mask_self_smp_only;
/** IOOLFIR[17]
* link1 sl ecc ue
*/
- (rIOOLFIR, bit(17)) ? threshold_and_mask_self;
+ (rIOOLFIR, bit(17)) ? threshold_and_mask_self_smp_only;
/** IOOLFIR[18]
* link0 retrain threshold
@@ -533,25 +529,21 @@ group gIOOLFIR
/** IOOLFIR[20]
* link0 loss block align
*/
- # DL0 - lost_block_lock
(rIOOLFIR, bit(20)) ? defaultMaskedError;
/** IOOLFIR[21]
* link1 loss block align
*/
- # DL1 - lost_block_lock
(rIOOLFIR, bit(21)) ? defaultMaskedError;
/** IOOLFIR[22]
* link0 invalid block
*/
- # DL0 - lost_data_sh
(rIOOLFIR, bit(22)) ? defaultMaskedError;
/** IOOLFIR[23]
* link1 invalid block
*/
- # DL1 - lost_data_sh
(rIOOLFIR, bit(23)) ? defaultMaskedError;
/** IOOLFIR[24]
@@ -567,25 +559,21 @@ group gIOOLFIR
/** IOOLFIR[26]
* link0 deskew overflow
*/
- # DL0 - deskew_overflow
(rIOOLFIR, bit(26)) ? defaultMaskedError;
/** IOOLFIR[27]
* link1 deskew overflow
*/
- # DL1 - deskew_overflow
(rIOOLFIR, bit(27)) ? defaultMaskedError;
/** IOOLFIR[28]
* link0 sw retrain
*/
- # DL0 - software_retrain
(rIOOLFIR, bit(28)) ? defaultMaskedError;
/** IOOLFIR[29]
* link1 sw retrain
*/
- # DL1 - software_retrain
(rIOOLFIR, bit(29)) ? defaultMaskedError;
/** IOOLFIR[30]
@@ -609,38 +597,34 @@ group gIOOLFIR
(rIOOLFIR, bit(33)) ? defaultMaskedError;
/** IOOLFIR[34]
- * link0 num replay
+ * link0 num replay or no forward progress
*/
- # DL0 - no_fwd_progress
(rIOOLFIR, bit(34)) ? defaultMaskedError;
/** IOOLFIR[35]
- * link1 num replay
+ * link1 num replay or no forward progress
*/
- # DL1 - no_fwd_progress
(rIOOLFIR, bit(35)) ? defaultMaskedError;
/** IOOLFIR[36]
* link0 training set received
*/
- # DL0 - training_sh
(rIOOLFIR, bit(36)) ? defaultMaskedError;
/** IOOLFIR[37]
* link1 training set received
*/
- # DL1 - training_sh
(rIOOLFIR, bit(37)) ? defaultMaskedError;
/** IOOLFIR[38]
* link0 prbs select error
*/
- (rIOOLFIR, bit(38)) ? threshold_and_mask_self;
+ (rIOOLFIR, bit(38)) ? threshold_and_mask_self_smp_only;
/** IOOLFIR[39]
* link1 prbs select error
*/
- (rIOOLFIR, bit(39)) ? threshold_and_mask_self;
+ (rIOOLFIR, bit(39)) ? threshold_and_mask_self_smp_only;
/** IOOLFIR[40]
* link0 tcomplete bad
@@ -655,130 +639,102 @@ group gIOOLFIR
/** IOOLFIR[42]
* link0 no spare lane available
*/
- (rIOOLFIR, bit(42)) ? obusSmpCallout_L0;
+ (rIOOLFIR, bit(42)) ? obusSmpCallout_L0_smp_only;
/** IOOLFIR[43]
* link1 no spare lane available
*/
- (rIOOLFIR, bit(43)) ? obusSmpCallout_L1;
+ (rIOOLFIR, bit(43)) ? obusSmpCallout_L1_smp_only;
/** IOOLFIR[44]
- * link0 spare done
+ * link0 spare done or degraded mode
*/
- # DL0 - degraded_mode
- (rIOOLFIR, bit(44)) ? obusSmpCallout_th32_L0;
+ (rIOOLFIR, bit(44)) ? spare_lane_degraded_mode_L0;
/** IOOLFIR[45]
- * link1 spare done
+ * link1 spare done or degraded mode
*/
- # DL1 - degraded_mode
- (rIOOLFIR, bit(45)) ? obusSmpCallout_th32_L1;
+ (rIOOLFIR, bit(45)) ? spare_lane_degraded_mode_L1;
/** IOOLFIR[46]
* link0 too many crc errors
*/
- (rIOOLFIR, bit(46)) ? obusSmpCallout_L0;
+ (rIOOLFIR, bit(46)) ? obusSmpCallout_L0_smp_only;
/** IOOLFIR[47]
* link1 too many crc errors
*/
- (rIOOLFIR, bit(47)) ? obusSmpCallout_L1;
+ (rIOOLFIR, bit(47)) ? obusSmpCallout_L1_smp_only;
/** IOOLFIR[48]
- * link0 npu error
+ * link0 npu error or orx otx dlx errors
*/
- # DL0 - orx_otx_dlx_errors
(rIOOLFIR, bit(48)) ? threshold_and_mask_self;
/** IOOLFIR[49]
- * link1 npu error
+ * link1 npu error or orx otx dlx errors
*/
- # DL1 - orx_otx_dlx_errors
(rIOOLFIR, bit(49)) ? threshold_and_mask_self;
/** IOOLFIR[50]
* linkx npu error
*/
- (rIOOLFIR, bit(50)) ? threshold_and_mask_self;
+ (rIOOLFIR, bit(50)) ? threshold_and_mask_self_smp_only;
/** IOOLFIR[51]
* osc switch
*/
- (rIOOLFIR, bit(51)) ? threshold_and_mask_self;
+ (rIOOLFIR, bit(51)) ? threshold_and_mask_self_smp_only;
/** IOOLFIR[52]
* link0 correctable array error
*/
- # DL0 - oflt_octl_frb_df_ue
- # DL0 - oflt_octl_rpb_df_ue
- # DL0 - ebit_10
- # DL0 - ebit_11
- (rIOOLFIR, bit(52)) ? obusSmpCallout_th32_L0;
+ (rIOOLFIR, bit(52)) ? self_th_32perDay;
/** IOOLFIR[53]
* link1 correctable array error
*/
- # DL1 - oflt_octl_frb_df_ue
- # DL1 - oflt_octl_rpb_df_ue
- # DL1 - ebit_10
- # DL1 - ebit_11
- (rIOOLFIR, bit(53)) ? obusSmpCallout_th32_L1;
+ (rIOOLFIR, bit(53)) ? self_th_32perDay;
/** IOOLFIR[54]
* link0 uncorrectable array error
*/
- # DL0 - oflt_octl_frb_cf_ue
- # DL0 - oflt_octl_rpb_cf_ue
- (rIOOLFIR, bit(54)) ? obusSmpFailure_L0;
+ (rIOOLFIR, bit(54)) ? self_th_1;
/** IOOLFIR[55]
* link1 uncorrectable array error
*/
- # DL1 - oflt_octl_frb_cf_ue
- # DL1 - oflt_octl_rpb_cf_ue
- (rIOOLFIR, bit(55)) ? obusSmpFailure_L1;
+ (rIOOLFIR, bit(55)) ? self_th_1;
/** IOOLFIR[56]
* link0 training failed
*/
- # DL0 - slower_rx_clk
- (rIOOLFIR, bit(56)) ? obusSmpFailure_L0;
+ (rIOOLFIR, bit(56)) ? training_failure_L0;
/** IOOLFIR[57]
* link1 training failed
*/
- # DL1 - slower_rx_clk
- (rIOOLFIR, bit(57)) ? obusSmpFailure_L1;
+ (rIOOLFIR, bit(57)) ? training_failure_L1;
/** IOOLFIR[58]
* link0 unrecoverable error
*/
- # DL0 - ACK_ptr_error
- # DL0 - run_length_error
- # DL0 - orx_otx_rx_ill_rl
- (rIOOLFIR, bit(58)) ? obusSmpFailure_L0;
+ (rIOOLFIR, bit(58)) ? unrecoverable_error_L0;
/** IOOLFIR[59]
* link1 unrecoverable error
*/
- # DL1 - ACK_ptr_error
- # DL1 - run_length_error
- # DL1 - orx_otx_rx_ill_rl
- (rIOOLFIR, bit(59)) ? obusSmpFailure_L1;
+ (rIOOLFIR, bit(59)) ? unrecoverable_error_L1;
/** IOOLFIR[60]
* link0 internal error
*/
- # DL0 - oflt_octl_data_pty_error
- # DL0 - ctl_parity_error
- (rIOOLFIR, bit(60)) ? obusSmpFailure_L0;
+ (rIOOLFIR, bit(60)) ? internal_error_L0;
/** IOOLFIR[61]
* link1 internal error
*/
- # DL1 - oflt_octl_data_pty_error
- # DL1 - ctl_parity_error
- (rIOOLFIR, bit(61)) ? obusSmpFailure_L1;
+ (rIOOLFIR, bit(61)) ? internal_error_L1;
/** IOOLFIR[62]
* fir scom err dup
diff --git a/src/usr/diag/prdf/common/plat/p9/p9_common_obus_actions.rule b/src/usr/diag/prdf/common/plat/p9/p9_common_obus_actions.rule
index 6590bb122..700e87649 100644
--- a/src/usr/diag/prdf/common/plat/p9/p9_common_obus_actions.rule
+++ b/src/usr/diag/prdf/common/plat/p9/p9_common_obus_actions.rule
@@ -5,7 +5,7 @@
#
# OpenPOWER HostBoot Project
#
-# Contributors Listed Below - COPYRIGHT 2018
+# Contributors Listed Below - COPYRIGHT 2018,2019
# [+] International Business Machines Corp.
#
#
@@ -88,6 +88,150 @@ actionclass obusSmpFailure_L1
threshold1;
};
+actionclass smp_masked
+{
+ # If SMP mode, does defaultMaskedError action and returns SUCCESS.
+ # Otherwise, returns PRD_SCAN_COMM_REGISTER_ZERO.
+ funccall( "smp_masked" ); # If SMP mode
+};
+
+actionclass non_smp_masked
+{
+ # If NOT in SMP mode, does defaultMaskedError action and returns SUCCESS.
+ # Otherwise, returns PRD_SCAN_COMM_REGISTER_ZERO.
+ funccall( "non_smp_masked" );
+};
+
+actionclass non_smp_callout_bus_th_1
+{
+ # NOTE: We cannot put the threshold action in this actionclass because it
+ # will affect the SMP action in the try() statement. Therefore, the
+ # plugin must handle the thresholding if in non-SMP mode.
+
+ # If NOT in SMP mode:
+ # - calls out this OBUS
+ # - indicates the probably may be somewhere between this OBUS and whatever
+ # is on the other side (which we know nothing about)
+ # - sets threshold
+ # - sets service call
+ # - returns SUCCESS
+ # Otherwise
+ # - returns PRD_SCAN_COMM_REGISTER_ZERO
+ funccall( "non_smp_callout_bus_th_1" );
+};
+
+actionclass non_smp_callout_lvl2_th_1
+{
+ # NOTE: We cannot put the threshold action in this actionclass because it
+ # will affect the SMP action in the try() statement. Therefore, the
+ # plugin must handle the thresholding if in non-SMP mode.
+
+ # If NOT in SMP mode:
+ # - calls out level 2 support
+ # - sets threshold
+ # - sets service call
+ # - returns SUCCESS
+ # Otherwise
+ # - returns PRD_SCAN_COMM_REGISTER_ZERO
+ funccall( "non_smp_callout_lvl2_th_1" );
+};
+
+actionclass non_smp_callout_self_th_32perDay
+{
+ threshold32pday; # This is ok because it is greater than threshold1.
+
+ # If NOT in SMP mode:
+ # - calls out this OBUS
+ # - returns SUCCESS
+ # Otherwise
+ # - returns PRD_SCAN_COMM_REGISTER_ZERO
+ funccall( "non_smp_callout_self" );
+};
+
+actionclass threshold_and_mask_self_non_smp_only
+{
+ # SMP: masked
+ # Non-SMP: threshold_and_mask_self
+ try ( smp_masked, threshold_and_mask_self );
+};
+
+actionclass threshold_and_mask_self_smp_only
+{
+ # SMP: threshold_and_mask_self
+ # Non-SMP: masked
+ try ( non_smp_masked, threshold_and_mask_self );
+};
+
+actionclass obusSmpCallout_L0_smp_only
+{
+ # SMP: obusSmpCallout_L0
+ # Non-SMP: masked
+ try ( non_smp_masked, obusSmpCallout_L0 );
+};
+
+actionclass obusSmpCallout_L1_smp_only
+{
+ # SMP: obusSmpCallout_L1
+ # Non-SMP: masked
+ try ( non_smp_masked, obusSmpCallout_L1 );
+};
+
+actionclass spare_lane_degraded_mode_L0
+{
+ # SMP: obusSmpCallout_th32_L0 (lane spare)
+ # Non-SMP: non_smp_callout_bus_th_1 (degraded mode)
+ try ( non_smp_callout_bus_th_1, obusSmpCallout_th32_L0 );
+};
+
+actionclass spare_lane_degraded_mode_L1
+{
+ # SMP: obusSmpCallout_th32_L1 (lane spare)
+ # Non-SMP: non_smp_callout_bus_th_1 (degraded mode)
+ try ( non_smp_callout_bus_th_1, obusSmpCallout_th32_L1 );
+};
+
+actionclass training_failure_L0
+{
+ # SMP: obusSmpFailure_L0
+ # Non-SMP: non_smp_callout_lvl2_th_1
+ try ( non_smp_callout_lvl2_th_1, obusSmpFailure_L0 );
+};
+
+actionclass training_failure_L1
+{
+ # SMP: obusSmpFailure_L1
+ # Non-SMP: non_smp_callout_lvl2_th_1
+ try ( non_smp_callout_lvl2_th_1, obusSmpFailure_L1 );
+};
+
+actionclass unrecoverable_error_L0
+{
+ # SMP: obusSmpFailure_L0
+ # Non-SMP: non_smp_callout_bus_th_1
+ try ( non_smp_callout_bus_th_1, obusSmpFailure_L0 );
+};
+
+actionclass unrecoverable_error_L1
+{
+ # SMP: obusSmpFailure_L1
+ # Non-SMP: non_smp_callout_bus_th_1
+ try ( non_smp_callout_bus_th_1, obusSmpFailure_L1 );
+};
+
+actionclass internal_error_L0
+{
+ # SMP: obusSmpFailure_L0
+ # Non-SMP: non_smp_callout_self_th_32perDay
+ try ( non_smp_callout_self_th_32perDay, obusSmpFailure_L0 );
+};
+
+actionclass internal_error_L1
+{
+ # SMP: obusSmpFailure_L1
+ # Non-SMP: non_smp_callout_self_th_32perDay
+ try ( non_smp_callout_self_th_32perDay, obusSmpFailure_L1 );
+};
+
###############################################################################
# Analyze groups
###############################################################################
diff --git a/src/usr/diag/prdf/common/plat/p9/p9_common_obus_regs.rule b/src/usr/diag/prdf/common/plat/p9/p9_common_obus_regs.rule
index 461fbc664..bc25fba5d 100644
--- a/src/usr/diag/prdf/common/plat/p9/p9_common_obus_regs.rule
+++ b/src/usr/diag/prdf/common/plat/p9/p9_common_obus_regs.rule
@@ -5,7 +5,7 @@
#
# OpenPOWER HostBoot Project
#
-# Contributors Listed Below - COPYRIGHT 2016,2018
+# Contributors Listed Below - COPYRIGHT 2016,2019
# [+] International Business Machines Corp.
#
#
@@ -85,6 +85,13 @@
capture group default;
};
+ register MISC_ERROR_STATUS
+ {
+ name "P9 OBUS target Misc Error Status register";
+ scomaddr 0x09010829;
+ capture group default;
+ };
+
############################################################################
# P9 OBUS targets for cable FFDC
# One additional reg (IOOLFIR) is in default group
diff --git a/src/usr/diag/prdf/common/plat/p9/prdfLaneRepair.C b/src/usr/diag/prdf/common/plat/p9/prdfLaneRepair.C
index 88a179bc7..d9cb5e471 100644
--- a/src/usr/diag/prdf/common/plat/p9/prdfLaneRepair.C
+++ b/src/usr/diag/prdf/common/plat/p9/prdfLaneRepair.C
@@ -310,38 +310,6 @@ int32_t __handleLaneRepairEvent( ExtensibleChip * i_chip,
#undef PRDF_FUNC
}
-template<>
-int32_t __handleLaneRepairEvent<TYPE_OBUS, TYPE_OBUS>( ExtensibleChip * i_chip,
- STEP_CODE_DATA_STRUCT & i_sc,
- bool i_spareDeployed )
-{
- TargetHandle_t rxBusTgt = i_chip->getTrgt();
-
- // Make predictive on first occurrence in MFG
- if ( isLaneRepairDisabled<TYPE_OBUS>() )
- {
- i_sc.service_data->setServiceCall();
- }
-
- // RTC 174485
- // Need HWPs for this. Just callout bus interface for now.
- if ( obusInSmpMode(rxBusTgt) )
- {
- calloutBusInterface( i_chip, i_sc, MRU_LOW );
- i_sc.service_data->setServiceCall();
- }
- else
- {
- PRDF_ERR( "__handleLaneRepairEvent: Lane repair only supported "
- "in SMP mode obus: 0x%08x", getHuid(rxBusTgt) );
- i_sc.service_data->SetCallout( LEVEL2_SUPPORT, MRU_MED, NO_GARD );
- i_sc.service_data->SetCallout( SP_CODE, MRU_MED, NO_GARD );
- i_sc.service_data->setServiceCall();
- }
- return SUCCESS;
-}
-
-
int32_t handleLaneRepairEvent( ExtensibleChip * i_chip,
STEP_CODE_DATA_STRUCT & i_sc,
bool i_spareDeployed )
@@ -350,10 +318,6 @@ int32_t handleLaneRepairEvent( ExtensibleChip * i_chip,
TYPE trgtType = getTargetType(i_chip->getTrgt());
switch (trgtType)
{
- case TYPE_OBUS:
- rc = __handleLaneRepairEvent<TYPE_OBUS,TYPE_OBUS>( i_chip, i_sc,
- i_spareDeployed );
- break;
case TYPE_XBUS:
rc = __handleLaneRepairEvent<TYPE_XBUS,TYPE_XBUS>( i_chip, i_sc,
i_spareDeployed );
@@ -572,10 +536,6 @@ int32_t obus_callout_L0( ExtensibleChip * i_chip,
{
int32_t rc = SUCCESS;
- // TODO: Temporary fix to avoid asserts for bits that are reused for
- // OpenCAPI.
- if ( !obusInSmpMode(i_chip->getTrgt()) ) return SUCCESS;
-
// Need the obus target
TargetHandle_t rxTrgt = i_chip->getTrgt();
// Call out LINK0 in SMPGROUP
@@ -593,10 +553,6 @@ int32_t obus_callout_L1( ExtensibleChip * i_chip,
{
int32_t rc = SUCCESS;
- // TODO: Temporary fix to avoid asserts for bits that are reused for
- // OpenCAPI.
- if ( !obusInSmpMode(i_chip->getTrgt()) ) return SUCCESS;
-
// Need the obus target
TargetHandle_t rxTrgt = i_chip->getTrgt();
// Call out LINK1 in SMPGROUP
@@ -811,10 +767,6 @@ int32_t obus_fail_L0( ExtensibleChip * i_chip,
{
int32_t rc = SUCCESS;
- // TODO: Temporary fix to avoid asserts for bits that are reused for
- // OpenCAPI.
- if ( !obusInSmpMode(i_chip->getTrgt()) ) return SUCCESS;
-
TargetHandle_t rxTrgt = i_chip->getTrgt();
TargetHandle_t txTrgt = getTxBusEndPt(rxTrgt);
@@ -848,10 +800,6 @@ int32_t obus_fail_L1( ExtensibleChip * i_chip,
{
int32_t rc = SUCCESS;
- // TODO: Temporary fix to avoid asserts for bits that are reused for
- // OpenCAPI.
- if ( !obusInSmpMode(i_chip->getTrgt()) ) return SUCCESS;
-
TargetHandle_t rxTrgt = i_chip->getTrgt();
TargetHandle_t txTrgt = getTxBusEndPt(rxTrgt);
@@ -1037,14 +985,6 @@ int32_t calloutBusInterface( ExtensibleChip * i_chip,
int32_t spareDeployed( ExtensibleChip * i_chip,
STEP_CODE_DATA_STRUCT & io_sc )
{
- // TODO: Temporary fix to avoid asserts for bits that are reused for
- // OpenCAPI.
- if ( TYPE_OBUS == i_chip->getType() &&
- !obusInSmpMode(i_chip->getTrgt()) )
- {
- return SUCCESS;
- }
-
if ( CHECK_STOP != io_sc.service_data->getPrimaryAttnType() )
return handleLaneRepairEvent(i_chip, io_sc, true);
else
@@ -1053,9 +993,6 @@ int32_t spareDeployed( ExtensibleChip * i_chip,
PRDF_PLUGIN_DEFINE_NS( nimbus_xbus, LaneRepair, spareDeployed );
PRDF_PLUGIN_DEFINE_NS( cumulus_xbus, LaneRepair, spareDeployed );
PRDF_PLUGIN_DEFINE_NS( axone_xbus, LaneRepair, spareDeployed );
-PRDF_PLUGIN_DEFINE_NS( nimbus_obus, LaneRepair, spareDeployed );
-PRDF_PLUGIN_DEFINE_NS( cumulus_obus, LaneRepair, spareDeployed );
-PRDF_PLUGIN_DEFINE_NS( axone_obus, LaneRepair, spareDeployed );
PRDF_PLUGIN_DEFINE_NS( centaur_membuf, LaneRepair, spareDeployed );
/**
@@ -1067,14 +1004,6 @@ PRDF_PLUGIN_DEFINE_NS( centaur_membuf, LaneRepair, spareDeployed );
int32_t maxSparesExceeded( ExtensibleChip * i_chip,
STEP_CODE_DATA_STRUCT & io_sc )
{
- // TODO: Temporary fix to avoid asserts for bits that are reused for
- // OpenCAPI.
- if ( TYPE_OBUS == i_chip->getType() &&
- !obusInSmpMode(i_chip->getTrgt()) )
- {
- return SUCCESS;
- }
-
if ( CHECK_STOP != io_sc.service_data->getPrimaryAttnType() )
return handleLaneRepairEvent(i_chip, io_sc, false);
else
@@ -1083,9 +1012,6 @@ int32_t maxSparesExceeded( ExtensibleChip * i_chip,
PRDF_PLUGIN_DEFINE_NS( nimbus_xbus, LaneRepair, maxSparesExceeded );
PRDF_PLUGIN_DEFINE_NS( cumulus_xbus, LaneRepair, maxSparesExceeded );
PRDF_PLUGIN_DEFINE_NS( axone_xbus, LaneRepair, maxSparesExceeded );
-PRDF_PLUGIN_DEFINE_NS( nimbus_obus, LaneRepair, maxSparesExceeded );
-PRDF_PLUGIN_DEFINE_NS( cumulus_obus, LaneRepair, maxSparesExceeded );
-PRDF_PLUGIN_DEFINE_NS( axone_obus, LaneRepair, maxSparesExceeded );
PRDF_PLUGIN_DEFINE_NS( centaur_membuf, LaneRepair, maxSparesExceeded );
/**
@@ -1097,14 +1023,6 @@ PRDF_PLUGIN_DEFINE_NS( centaur_membuf, LaneRepair, maxSparesExceeded );
int32_t tooManyBusErrors( ExtensibleChip * i_chip,
STEP_CODE_DATA_STRUCT & io_sc )
{
- // TODO: Temporary fix to avoid asserts for bits that are reused for
- // OpenCAPI.
- if ( TYPE_OBUS == i_chip->getType() &&
- !obusInSmpMode(i_chip->getTrgt()) )
- {
- return SUCCESS;
- }
-
if ( CHECK_STOP != io_sc.service_data->getPrimaryAttnType() )
return handleLaneRepairEvent(i_chip, io_sc, false);
else
@@ -1113,9 +1031,6 @@ int32_t tooManyBusErrors( ExtensibleChip * i_chip,
PRDF_PLUGIN_DEFINE_NS( nimbus_xbus, LaneRepair, tooManyBusErrors );
PRDF_PLUGIN_DEFINE_NS( cumulus_xbus, LaneRepair, tooManyBusErrors );
PRDF_PLUGIN_DEFINE_NS( axone_xbus, LaneRepair, tooManyBusErrors );
-PRDF_PLUGIN_DEFINE_NS( nimbus_obus, LaneRepair, tooManyBusErrors );
-PRDF_PLUGIN_DEFINE_NS( cumulus_obus, LaneRepair, tooManyBusErrors );
-PRDF_PLUGIN_DEFINE_NS( axone_obus, LaneRepair, tooManyBusErrors );
PRDF_PLUGIN_DEFINE_NS( centaur_membuf, LaneRepair, tooManyBusErrors );
/**
@@ -1127,23 +1042,12 @@ PRDF_PLUGIN_DEFINE_NS( centaur_membuf, LaneRepair, tooManyBusErrors );
int32_t calloutBusInterfacePlugin( ExtensibleChip * i_chip,
STEP_CODE_DATA_STRUCT & io_sc )
{
- // TODO: Temporary fix to avoid asserts for bits that are reused for
- // OpenCAPI.
- if ( TYPE_OBUS == i_chip->getType() &&
- !obusInSmpMode(i_chip->getTrgt()) )
- {
- return SUCCESS;
- }
-
calloutBusInterface(i_chip, io_sc, MRU_LOW);
return SUCCESS;
}
PRDF_PLUGIN_DEFINE_NS( nimbus_xbus, LaneRepair, calloutBusInterfacePlugin );
PRDF_PLUGIN_DEFINE_NS( cumulus_xbus, LaneRepair, calloutBusInterfacePlugin );
PRDF_PLUGIN_DEFINE_NS( axone_xbus, LaneRepair, calloutBusInterfacePlugin );
-PRDF_PLUGIN_DEFINE_NS( nimbus_obus, LaneRepair, calloutBusInterfacePlugin );
-PRDF_PLUGIN_DEFINE_NS( cumulus_obus, LaneRepair, calloutBusInterfacePlugin );
-PRDF_PLUGIN_DEFINE_NS( axone_obus, LaneRepair, calloutBusInterfacePlugin );
PRDF_PLUGIN_DEFINE_NS( explorer_ocmb, LaneRepair, calloutBusInterfacePlugin );
PRDF_PLUGIN_DEFINE_NS( cumulus_dmi, LaneRepair, calloutBusInterfacePlugin );
PRDF_PLUGIN_DEFINE_NS( centaur_membuf, LaneRepair, calloutBusInterfacePlugin );
diff --git a/src/usr/diag/prdf/common/plat/p9/prdfP9Obus.C b/src/usr/diag/prdf/common/plat/p9/prdfP9Obus.C
new file mode 100644
index 000000000..6117c6edc
--- /dev/null
+++ b/src/usr/diag/prdf/common/plat/p9/prdfP9Obus.C
@@ -0,0 +1,193 @@
+/* IBM_PROLOG_BEGIN_TAG */
+/* This is an automatically generated prolog. */
+/* */
+/* $Source: src/usr/diag/prdf/common/plat/p9/prdfP9Obus.C $ */
+/* */
+/* OpenPOWER HostBoot Project */
+/* */
+/* Contributors Listed Below - COPYRIGHT 2019 */
+/* [+] International Business Machines Corp. */
+/* */
+/* */
+/* Licensed under the Apache License, Version 2.0 (the "License"); */
+/* you may not use this file except in compliance with the License. */
+/* You may obtain a copy of the License at */
+/* */
+/* http://www.apache.org/licenses/LICENSE-2.0 */
+/* */
+/* Unless required by applicable law or agreed to in writing, software */
+/* distributed under the License is distributed on an "AS IS" BASIS, */
+/* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or */
+/* implied. See the License for the specific language governing */
+/* permissions and limitations under the License. */
+/* */
+/* IBM_PROLOG_END_TAG */
+
+
+// Framework includes
+#include <iipServiceDataCollector.h>
+#include <prdfExtensibleChip.H>
+#include <prdfPluginMap.H>
+
+// Platform includes
+#include <prdfPlatServices.H>
+
+using namespace TARGETING;
+
+namespace PRDF
+{
+
+using namespace PlatServices;
+
+namespace obus
+{
+
+//##############################################################################
+//
+// IOOLFIR
+//
+//##############################################################################
+
+/**
+ * @brief If OBUS is in SMP mode, does defaultMaskedError actions and returns
+ * SUCCESS. Otherwise, returns PRD_SCAN_COMM_REGISTER_ZERO.
+ */
+int32_t smp_masked( ExtensibleChip * i_chip, STEP_CODE_DATA_STRUCT & io_sc )
+{
+ if ( obusInSmpMode(i_chip->getTrgt()) )
+ {
+ // SMP mode: This attention should be masked.
+ io_sc.service_data->SetCallout( LEVEL2_SUPPORT, MRU_MED, NO_GARD );
+ io_sc.service_data->setFlag( ServiceDataCollector::AT_THRESHOLD );
+ io_sc.service_data->setFlag( ServiceDataCollector::SERVICE_CALL );
+ return SUCCESS;
+ }
+ else
+ {
+ // Non-SMP mode: Try some other action.
+ return PRD_SCAN_COMM_REGISTER_ZERO;
+ }
+}
+PRDF_PLUGIN_DEFINE_NS( nimbus_obus, obus, smp_masked );
+PRDF_PLUGIN_DEFINE_NS( cumulus_obus, obus, smp_masked );
+PRDF_PLUGIN_DEFINE_NS( axone_obus, obus, smp_masked );
+
+//------------------------------------------------------------------------------
+
+/**
+ * @brief If OBUS is NOT in SMP mode, does defaultMaskedError actions and
+ * returns SUCCESS. Otherwise, returns PRD_SCAN_COMM_REGISTER_ZERO.
+ */
+int32_t non_smp_masked( ExtensibleChip * i_chip, STEP_CODE_DATA_STRUCT & io_sc )
+{
+ if ( obusInSmpMode(i_chip->getTrgt()) )
+ {
+ // SMP mode: Try some other action.
+ return PRD_SCAN_COMM_REGISTER_ZERO;
+ }
+ else
+ {
+ // Non-SMP mode: This attention should be masked.
+ io_sc.service_data->SetCallout( LEVEL2_SUPPORT, MRU_MED, NO_GARD );
+ io_sc.service_data->setFlag( ServiceDataCollector::AT_THRESHOLD );
+ io_sc.service_data->setFlag( ServiceDataCollector::SERVICE_CALL );
+ return SUCCESS;
+ }
+}
+PRDF_PLUGIN_DEFINE_NS( nimbus_obus, obus, non_smp_masked );
+PRDF_PLUGIN_DEFINE_NS( cumulus_obus, obus, non_smp_masked );
+PRDF_PLUGIN_DEFINE_NS( axone_obus, obus, non_smp_masked );
+
+//------------------------------------------------------------------------------
+
+/**
+ * @brief If OBUS is NOT in SMP mode, calls out this bus on first occurrence and
+ * returns SUCCESS. Otherwise, returns PRD_SCAN_COMM_REGISTER_ZERO.
+ */
+int32_t non_smp_callout_bus_th_1( ExtensibleChip * i_chip,
+ STEP_CODE_DATA_STRUCT & io_sc )
+{
+ if ( obusInSmpMode(i_chip->getTrgt()) )
+ {
+ // SMP mode: Try some other action.
+ return PRD_SCAN_COMM_REGISTER_ZERO;
+ }
+ else
+ {
+ // Non-SMP mode: Callout this bus. Note that Hostboot does not know what
+ // is on the other side of this bus and does not have any control over
+ // garding/deconfiguring. Therefore, we cannot gard since we will never
+ // know if the other side of the bus has been replaced. Also, there is
+ // a small probability that the fault could be between the two
+ // endpoints. Usually, we would do a procedure callout or call some HWP
+ // that would take care of the "everything in between" scenario.
+ // However, there is no existing mechanism. For now callout level 2
+ // support at low priority.
+ io_sc.service_data->SetCallout( i_chip->getTrgt(), MRU_MED, NO_GARD );
+ io_sc.service_data->SetCallout( LEVEL2_SUPPORT, MRU_LOW, NO_GARD );
+ io_sc.service_data->setFlag( ServiceDataCollector::AT_THRESHOLD );
+ io_sc.service_data->setFlag( ServiceDataCollector::SERVICE_CALL );
+ return SUCCESS;
+ }
+}
+PRDF_PLUGIN_DEFINE_NS( nimbus_obus, obus, non_smp_callout_bus_th_1 );
+PRDF_PLUGIN_DEFINE_NS( cumulus_obus, obus, non_smp_callout_bus_th_1 );
+PRDF_PLUGIN_DEFINE_NS( axone_obus, obus, non_smp_callout_bus_th_1 );
+
+//------------------------------------------------------------------------------
+
+/**
+ * @brief If OBUS is NOT in SMP mode, calls out level 2 support on first
+ * occurrence and returns SUCCESS. Otherwise, returns
+ * PRD_SCAN_COMM_REGISTER_ZERO.
+ */
+int32_t non_smp_callout_lvl2_th_1( ExtensibleChip * i_chip,
+ STEP_CODE_DATA_STRUCT & io_sc )
+{
+ if ( obusInSmpMode(i_chip->getTrgt()) )
+ {
+ // SMP mode: Try some other action.
+ return PRD_SCAN_COMM_REGISTER_ZERO;
+ }
+ else
+ {
+ // Non-SMP mode: Callout this bus on first occurrence.
+ io_sc.service_data->SetCallout( LEVEL2_SUPPORT, MRU_MED, NO_GARD );
+ io_sc.service_data->setFlag( ServiceDataCollector::AT_THRESHOLD );
+ io_sc.service_data->setFlag( ServiceDataCollector::SERVICE_CALL );
+ return SUCCESS;
+ }
+}
+PRDF_PLUGIN_DEFINE_NS( nimbus_obus, obus, non_smp_callout_lvl2_th_1 );
+PRDF_PLUGIN_DEFINE_NS( cumulus_obus, obus, non_smp_callout_lvl2_th_1 );
+PRDF_PLUGIN_DEFINE_NS( axone_obus, obus, non_smp_callout_lvl2_th_1 );
+
+//------------------------------------------------------------------------------
+
+/**
+ * @brief If OBUS is NOT in SMP mode, calls out this OBUS target and returns
+ * SUCCESS. Otherwise, returns PRD_SCAN_COMM_REGISTER_ZERO.
+ */
+int32_t non_smp_callout_self( ExtensibleChip * i_chip,
+ STEP_CODE_DATA_STRUCT & io_sc )
+{
+ if ( obusInSmpMode(i_chip->getTrgt()) )
+ {
+ // SMP mode: Try some other action.
+ return PRD_SCAN_COMM_REGISTER_ZERO;
+ }
+ else
+ {
+ // Non-SMP mode: Callout this OBUS target.
+ io_sc.service_data->SetCallout( i_chip->getTrgt() );
+ return SUCCESS;
+ }
+}
+PRDF_PLUGIN_DEFINE_NS( nimbus_obus, obus, non_smp_callout_self );
+PRDF_PLUGIN_DEFINE_NS( cumulus_obus, obus, non_smp_callout_self );
+PRDF_PLUGIN_DEFINE_NS( axone_obus, obus, non_smp_callout_self );
+
+} // end namespace obus
+
+} // end namespace PRDF
+
diff --git a/src/usr/diag/prdf/common/plat/p9/prdf_plat_p9.mk b/src/usr/diag/prdf/common/plat/p9/prdf_plat_p9.mk
index cb69cad14..64092650f 100644
--- a/src/usr/diag/prdf/common/plat/p9/prdf_plat_p9.mk
+++ b/src/usr/diag/prdf/common/plat/p9/prdf_plat_p9.mk
@@ -5,7 +5,7 @@
#
# OpenPOWER HostBoot Project
#
-# Contributors Listed Below - COPYRIGHT 2016,2018
+# Contributors Listed Below - COPYRIGHT 2016,2019
# [+] International Business Machines Corp.
#
#
@@ -56,4 +56,5 @@ prd_rule_plugin += prdfP9Eq.o
prd_rule_plugin += prdfP9TodPlugins.o
prd_rule_plugin += prdfP9Dmi_common.o
prd_rule_plugin += prdfP9Mc_common.o
+prd_rule_plugin += prdfP9Obus.o
OpenPOWER on IntegriCloud