# IBM_PROLOG_BEGIN_TAG # This is an automatically generated prolog. # # $Source: src/usr/diag/prdf/common/plat/p9/p9_common_obus_actions.rule $ # # OpenPOWER HostBoot Project # # Contributors Listed Below - COPYRIGHT 2018,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 actionclass smpCallout0 { funccall("obus_callout_L0"); }; actionclass smpCallout1 { funccall("obus_callout_L1"); }; actionclass smpCableFail0 { funccall("obus_fail_L0"); }; actionclass smpCableFail1 { funccall("obus_fail_L1"); }; /** OBUS targets for IOOLFIR handling **/ actionclass obusSmpCallout_th32_L0 { capture(smpCableFFDC); smpCallout0; threshold32pday; }; actionclass obusSmpCallout_th32_L1 { capture(smpCableFFDC); smpCallout1; threshold32pday; }; actionclass obusSmpCallout_L0 { capture(smpCableFFDC); smpCallout0; threshold1; }; actionclass obusSmpCallout_L1 { capture(smpCableFFDC); smpCallout1; threshold1; }; actionclass obusSmpFailure_L0 { capture(smpCableFFDC); smpCallout0; smpCableFail0; threshold1; }; actionclass obusSmpFailure_L1 { capture(smpCableFFDC); smpCallout1; smpCableFail1; 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 ############################################################################### actionclass analyzeOB_LFIR { analyze(gOB_LFIR); }; actionclass analyzeIOOLFIR { analyze(gIOOLFIR); }; actionclass analyzeIOOBFIR { analyze(gIOOBFIR); }; actionclass analyzeOBPPEFIR { analyze(gOBPPEFIR); };