# IBM_PROLOG_BEGIN_TAG # This is an automatically generated prolog. # # $Source: src/usr/diag/prdf/common/plat/p9/p9_common_actions.rule $ # # OpenPOWER HostBoot Project # # Contributors Listed Below - COPYRIGHT 2016,2018 # [+] 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 ################################################################################ # This file is intended to create a common set of actionclasses for all rule # files. # # NOTE: THESE ACTIONCLASSES WILL BE CREATED FOR ALL RULE FILES, REGARDLESS IF # THEY ARE ACTUALLY USED. PLEASE LIMIT THIS FILE TO RELATIVELY COMMON # ACTIONS. OTHERWISE, IT WILL CAUSE UNWANTED CODE BLOAT AND MEMORY USAGE. # # Simply add the following line at the top the actionclass section of each rule # file: # # .include "p9_common_actions.rule" # # Note that no indentation can be used for the .include keyword. ################################################################################ ################################################################################ # Thresholds # ################################################################################ # Threshold syntax: # threshold( field() [, mfg()|mfg_file()] ); # # Timebase syntax: # [/ [timbase_count] ] # # Note that can be found in prdfMfgThresholds.lst # # Examples: # threshold( field( 1 ) ); # threshold( field(32 / day) ); # threshold( field( 5 / 2 min) ); # threshold( field(32 / 1 day), mfg(2 / hour) ); # threshold( field( 2 / min), mfg(1 ) ); # threshold( field(32 / day), mfg_file(P8CHIP_OFFNODE_BUS_CES) ); /** Threshold of 1 */ actionclass threshold1 { threshold( field(1) ); }; /** PLL Threshold of 2 per 5 mins */ actionclass thresholdPll { threshold( field(2 / 5 min) ); }; /** Threshold of 32 per day */ actionclass threshold32pday { threshold( field(32 / day) ); }; /** Threshold of 5 per hour */ actionclass threshold5phour { threshold( field(5 / hour) ); }; /** Threshold of 5 per day */ actionclass threshold5pday { threshold( field(5 / day) ); }; ################################################################################ # Threshold and Mask policy ################################################################################ /** * Threshold 32/day (field) and 1 (mnfg). Do not predictively callout on * threshold in the field, instead just mask. */ actionclass threshold_and_mask { threshold32pday; funccall("ClearServiceCallFlag"); }; actionclass threshold_and_mask_self { calloutSelfMed; threshold_and_mask; }; actionclass threshold_and_mask_level2 { callout2ndLvlMed; threshold_and_mask; }; ################################################################################ # Special Flags # ################################################################################ /** SUE source */ actionclass SueSource { flag(UERE); }; /** SUE originated from somewhere else */ actionclass SueSeen { flag(SUE); }; ################################################################################ # Simple Callouts # ################################################################################ # Callout self actionclass calloutSelfHigh { callout(MRU_HIGH); }; actionclass calloutSelfMed { callout(MRU_MED); }; actionclass calloutSelfMedA { callout(MRU_MEDA); }; actionclass calloutSelfLow { callout(MRU_LOW); }; # 2nd Level Support actionclass callout2ndLvlMed { callout(procedure(LEVEL2_SUPPORT), MRU_MED); }; actionclass callout2ndLvlLow { callout(procedure(LEVEL2_SUPPORT), MRU_LOW); }; /** Callout self with medium priority but don't gard it */ actionclass calloutSelfMedNoGard { callout(MRU_MED, NO_GARD); }; /** Callout self with low priority but don't gard it */ actionclass calloutSelfLowNoGard { callout(MRU_LOW, NO_GARD); }; ################################################################################ # Callouts with thresholds # ################################################################################ actionclass self_th_1 { calloutSelfMed; threshold1; }; actionclass self_H_th_1 { calloutSelfHigh; threshold1; }; actionclass self_th_5perHour { calloutSelfMed; threshold5phour; }; actionclass self_th_32perDay { calloutSelfMed; threshold32pday; }; actionclass level2_th_1 { callout2ndLvlMed; threshold1; }; actionclass level2_dump_SW { level2_th_1; dumpSW; }; actionclass level2_M_self_L_th_1 { callout2ndLvlMed; calloutSelfLowNoGard; threshold1; }; actionclass self_M_level2_L_th_1 { calloutSelfMed; callout2ndLvlLow; threshold1; }; actionclass self_M_level2_L_th_32perDay { calloutSelfMed; callout2ndLvlLow; threshold32pday; }; actionclass parent_proc_th_1 { callout(connected(TYPE_PROC), MRU_MED); threshold1; }; actionclass level2_M_proc_L_th_1 { callout2ndLvlMed; callout(connected(TYPE_PROC), MRU_LOW); threshold1; }; ################################################################################ # Callouts with flags # ################################################################################ actionclass level2_th_1_SUE { level2_th_1; SueSeen; }; actionclass level2_th_1_UERE { level2_th_1; SueSource; }; actionclass self_th_1_SUE { self_th_1; SueSeen; }; actionclass self_th_1_UERE { self_th_1; SueSource; }; ################################################################################ # Dump Types # ################################################################################ /** Dump SW */ actionclass dumpSW { dump(DUMP_CONTENT_SW); }; ################################################################################ # Default callouts # ################################################################################ /** Default action for an unexpected unmasked bit */ actionclass defaultMaskedError { callout2ndLvlMed; threshold1; }; /** An attention that should be handled by an external source like the * hypervisor. The attention should not be masked, however, the attention * should not be routed to PRD either. If it does, there is a bug in the * initialization of the action registers. */ actionclass externalAttention { callout2ndLvlMed; threshold1; }; /** Default TBD action */ actionclass TBDDefaultCallout { callout2ndLvlMed; threshold( field(32 / day), mfg(32 / day) ); }; ################################################################################ # Default callouts # ################################################################################ actionclass chip_to_chip { # The description for this is vague and I can't seem to get any reliable # information. For now we will just callout the chip on first occurrence. calloutSelfMed; threshold1; };