1*** Settings *** 2Documentation This module is for OS checkstop opertions. 3Resource ../../lib/rest_client.robot 4Resource ../../lib/utils.robot 5Variables ../../lib/ras/variables.py 6Library ../../lib/bmc_ssh_utils.py 7Library OperatingSystem 8Library ../../lib/gen_print.py 9Library ../../lib/gen_robot_print.py 10 11*** Keywords *** 12 13Getscom Operations On OS 14 [Documentation] Executes getscom command on OS with the given 15 ... input command. 16 [Arguments] ${input_cmd} 17 # Description of arguments: 18 # input_cmd -l|--list-chips 19 # -c|--chip <chip-id> <addr> 20 21 ${output} ${stderr} ${rc}= OS Execute Command getscom ${input_cmd} 22 [Return] ${output} 23 24Gard Operations On OS 25 [Documentation] Executes opal-gard command on OS with the given 26 ... input command. 27 [Arguments] ${input_cmd} 28 # Description of arguments: 29 # input_cmd list/clear all/show <gard_record_id> 30 31 ${output} ${stderr} ${rc}= OS Execute Command opal-gard ${input_cmd} 32 [Return] ${output} 33 34Putscom Operations On OS 35 [Documentation] Executes putscom command on OS with the given 36 ... input arguments. 37 [Arguments] ${proc_chip_id} ${fru} ${address} 38 # Description of arguments: 39 # proc_chip_id Processor ID (e.g '0', '8'). 40 # fru FRU value (e.g. 2011400). 41 # address Chip address (e.g 4000000000000000). 42 43 ${cmd}= Catenate putscom -c 0x${proc_chip_id} 0x${fru} 0x${address} 44 Start Command ${cmd} 45 46Get ProcChipId From OS 47 [Documentation] Get processor chip ID values based on the input. 48 [Arguments] ${chip_type} ${master_proc_chip} 49 # Description of arguments: 50 # chip_type The chip type (Processor/Centaur). 51 # master_proc_chip Processor chip type ('True' or 'False'). 52 53 ${cmd}= Catenate -l | grep -i ${chip_type} | cut -c1-8 54 ${proc_chip_id}= Getscom Operations On OS ${cmd} 55 # Example output: 56 # getscom -l | grep processor | cut -c1-8 57 # 00000008 - False 58 # 00000000 - True 59 60 ${proc_ids}= Split String ${proc_chip_id} 61 ${proc_id}= Run Keyword If '${master_proc_chip}' == 'True' 62 \ ... Get From List ${proc_ids} 1 63 \ ... ELSE Get From List ${proc_ids} 0 64 65 # Example output: 66 # 00000008 67 [Return] ${proc_id} 68 69Get Core IDs From OS 70 [Documentation] Get Core IDs corresponding to the input processor chip ID. 71 [Arguments] ${proc_chip_id} 72 # Description of argument(s): 73 # proc_chip_id Processor ID (e.g '0', '8'). 74 75 ${cmd}= Catenate set -o pipefail ; ${probe_cpu_file_path} 76 ... | grep -i 'CHIP ID: ${proc_chip_id}' | cut -c21-22 77 ${output} ${stderr} ${rc}= OS Execute Command ${cmd} 78 ${core_ids}= Split String ${output} 79 # Example output: 80 # ['2', '3', '4', '5', '6'] 81 [Return] ${core_ids} 82 83FIR Address Translation Through HOST 84 [Documentation] Do FIR address translation through host for given FIR, 85 ... core value & target type. 86 [Arguments] ${fir} ${core_id} ${target_type} 87 # Description of argument(s): 88 # fir FIR (Fault isolation register) value (e.g. 2011400). 89 # core_id Core ID (e.g. 9). 90 # target_type Target type (e.g. 'EQ', 'EX', 'C'). 91 92 ${cmd}= Catenate set -o pipefail ; ${addr_translation_file_path} ${fir} 93 ... ${core_id} | grep -i ${target_type} 94 ${output} ${stderr} ${rc}= OS Execute Command ${cmd} 95 ${translated_addr}= Split String ${output} :${SPACE}0x 96 # Example output: 97 # 0x10010c00 98 [Return] ${translated_addr[1]} 99 100Inject Error Through HOST 101 [Documentation] Inject checkstop on processor through HOST. 102 ... Test sequence: 103 ... 1. Boot To HOST 104 ... 2. Clear any existing gard records 105 ... 3. Inject Error on processor/centaur 106 [Arguments] ${fir} ${chip_address} ${threshold_limit} 107 ... ${master_proc_chip}=True 108 # Description of argument(s): 109 # fir FIR (Fault isolation register) value (e.g. 2011400). 110 # chip_address chip address (e.g 2000000000000000). 111 # threshold_limit Threshold limit (e.g 1, 5, 32). 112 # master_proc_chip Processor chip type (True' or 'False'). 113 114 Delete Error Logs 115 Login To OS Host 116 Gard Operations On OS clear all 117 118 # Fetch processor chip IDs. 119 ${proc_chip_id}= Get ProcChipId From OS Processor ${master_proc_chip} 120 121 ${threshold_limit}= Convert To Integer ${threshold_limit} 122 :FOR ${i} IN RANGE ${threshold_limit} 123 \ Run Keyword Putscom Operations On OS ${proc_chip_id} ${fir} 124 ... ${chip_address} 125 # Adding delay after each error injection. 126 \ Sleep 10s 127 # Adding delay to get error log after error injection. 128 Sleep 120s 129 130Code Update Unrecoverable Error Inject 131 [Documentation] Inject UE MCACALFIR checkstop on processor through 132 ... host during PNOR code update. 133 134 Inject Error Through HOST 05010800 4000000000000000 1 135 136Disable CPU States Through HOST 137 [Documentation] Disable CPU states through host. 138 139 # Fetch number of states present for cpu0. 140 ${cmd}= Catenate ls /sys/devices/system/cpu/cpu0/cpuidle|grep state|wc -l 141 ${output} ${stderr} ${rc}= OS Execute Command ${cmd} 142 ${no_of_states}= Convert To Integer ${output} 143 144 # Disable state for all cpus. 145 :FOR ${i} IN RANGE ${no_of_states} 146 \ ${cmd}= Catenate SEPARATOR= for file_path in /sys/devices/system/cpu/ 147 ... cpu*/cpuidle/state${i}/disable; do echo 1 > $file_path; done 148 \ ${output} ${stderr} ${rc}= Run Keyword OS Execute Command ${cmd} 149 150Is Opal-PRD Service Enabled 151 [Documentation] Check if Opal-PRD service is running & return either 152 ... 'enabled' or 'disabled'. 153 154 ${cmd}= Catenate systemctl list-unit-files | grep opal-prd 155 ${output} ${stderr} ${rc}= OS Execute Command ${cmd} 156 ${opal_prd_state}= Split String ${output} 157 158 # Example output from prior command: 159 # opal-prd.service enabled 160 [Return] ${opal_prd_state[1]} 161 162Enable Opal-PRD Service On HOST 163 [Documentation] Enable Opal-PRD service on host. 164 165 OS Execute Command service opal-prd start 166 ${opal_prd_state}= Is Opal-PRD Service Enabled 167 Should Contain ${opal_prd_state} enabled 168 169BMC Putscom 170 [Documentation] Executes putscom command through BMC. 171 172 [Arguments] ${proc_chip_id} ${fru} ${chip_address} 173 174 # Description of argument(s): 175 # proc_chip_id Processor ID (e.g '0', '8'). 176 # fru FRU (field replaceable unit) (e.g. '2011400'). 177 # chip_address Chip address (e.g. '4000000000000000'). 178 179 ${cmd}= Catenate pdbg -d p9w -${proc_chip_id} putscom 0x${fru} 0x${address} 180 181 BMC Execute Command ${cmd} 182