# IBM_PROLOG_BEGIN_TAG # This is an automatically generated prolog. # # $Source: src/usr/diag/prdf/common/plat/nimbus/nimbus_mca_actions.rule $ # # OpenPOWER HostBoot Project # # Contributors Listed Below - COPYRIGHT 2016,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 /** Verify Chip Mark */ actionclass verify_chip_mark_0 { funccall("AnalyzeFetchMpe_0"); }; actionclass verify_chip_mark_1 { funccall("AnalyzeFetchMpe_1"); }; actionclass verify_chip_mark_2 { funccall("AnalyzeFetchMpe_2"); }; actionclass verify_chip_mark_3 { funccall("AnalyzeFetchMpe_3"); }; actionclass verify_chip_mark_4 { funccall("AnalyzeFetchMpe_4"); }; actionclass verify_chip_mark_5 { funccall("AnalyzeFetchMpe_5"); }; actionclass verify_chip_mark_6 { funccall("AnalyzeFetchMpe_6"); }; actionclass verify_chip_mark_7 { funccall("AnalyzeFetchMpe_7"); }; /** Analyze NVDIMM Health Registers */ actionclass analyzeNvdimms { threshold32pday; funccall("AnalyzeNvdimmHealthStatRegs"); }; /** Mainline NCE/TCE handling */ actionclass mainline_nce_tce_handling { funccall("AnalyzeFetchNceTce"); }; /** Mainline UE handling */ actionclass mainline_ue_handling_UERE { SueSource; threshold( field(33 / 30 min ) ); # To prevent flooding. Will be unmasked # when background scrubbing resumes after # targeted diagnostics is complete. funccall("AnalyzeFetchUe"); }; /** Memory Port Failure */ actionclass mem_port_failure_UERE { SueSource; funccall("CalloutAttachedDimmsHigh"); # All attached DIMMs HIGH calloutSelfLowNoGard; # Self LOW threshold1; # Threshold 1 funccall("MemPortFailure"); # Mask off the entire port }; /** Handle RCD parity error. */ actionclass rcd_parity_error { funccall("CalloutAttachedDimmsHigh"); # All attached DIMMs HIGH calloutSelfLowNoGard; # Self LOW # Thresholding done in plugin funccall("RcdParityError"); # Run TPS on TH for all MCA ranks funccall("ClearNvdimmGardState"); # Clear gard for NVDIMMs }; /** Handle Mainline IUEs */ actionclass mainline_iue_handling { # An IUE itself is not a SUE source, however, a threshold of IUEs will # trigger a port failure, which will generate SUEs. The port failure could # also crash the machine so we want to make sure this bit is flagged as an # SUE just in case it is needed in the checkstop analysis. SueSource; # Thresholding done in the plugin funccall("AnalyzeMainlineIue"); }; /** Handle Maintenance IUEs */ actionclass maintenance_iue_handling { # An IUE itself is not a SUE source, however, a threshold of IUEs will # trigger a port failure, which will generate SUEs. The port failure could # also crash the machine so we want to make sure this bit is flagged as an # SUE just in case it is needed in the checkstop analysis. SueSource; # Thresholding done in the plugin funccall("AnalyzeMaintIue"); }; actionclass memory_impe_handling { funccall("AnalyzeImpe"); }; /** Handle Mainline AUEs/IAUEs */ actionclass mainline_aue_iaue_handling { funccall("AnalyzeFetchAueIaue"); calloutSelfLowNoGard; threshold1; }; /** Handle Maintenance AUEs */ actionclass maintenance_aue_handling { funccall("AnalyzeMaintAue"); calloutSelfLowNoGard; threshold1; }; /** Handle Maintenance IAUEs */ actionclass maintenance_iaue_handling { funccall("CalloutAttachedDimmsHigh"); calloutSelfLowNoGard; threshold1; }; /** MCA/UE algroithm, threshold 5 per day */ actionclass mca_ue_algorithm_th_5perDay { try( funccall("CheckForNvdimms"), calloutSelfMed ); threshold5pday; funccall("mcaUeAlgorithm"); # must be called last }; /** MCA/UE algroithm, threshold 1 */ actionclass mca_ue_algorithm_th_1 { try( funccall("CheckForNvdimms"), calloutSelfMed ); threshold1; funccall("mcaUeAlgorithm"); # must be called last }; ################################################################################ # NVDIMM callouts # ################################################################################ # Simple callouts that will avoid gard for NVDIMMs at IPL actionclass nvdimm_self_th_1 { try( funccall("CheckForNvdimms"), calloutSelfMed ); threshold1; }; actionclass nvdimm_self_th_32perDay { try( funccall("CheckForNvdimms"), calloutSelfMed ); threshold32pday; }; ################################################################################ # Analyze groups ################################################################################ actionclass analyzeDDRPHYFIR { analyze(gDDRPHYFIR); }; actionclass analyzeMCACALFIR { analyze(gMCACALFIR); }; actionclass analyzeMCAECCFIR { analyze(gMCAECCFIR); };