1*** Settings ***
2Documentation       This suite tests checkstop operations through HOST.
3Resource            ../../lib/utils.robot
4Resource            ../../lib/openbmc_ffdc.robot
5Resource            ../../lib/ras/host_utils.robot
6Resource            ../../lib/resource.txt
7Resource            ../../lib/state_manager.robot
8Resource            ../../lib/openbmc_ffdc_methods.robot
9Resource            ../../lib/boot_utils.robot
10Variables           ../../lib/ras/variables.py
11Variables           ../../data/variables.py
12Resource            ../../lib/dump_utils.robot
13
14Library             DateTime
15Library             OperatingSystem
16Library             random
17Library             Collections
18
19Suite Setup         RAS Suite Setup
20Test Setup          RAS Test Setup
21Test Teardown       FFDC On Test Case Fail
22Suite Teardown      RAS Suite Cleanup
23
24Force Tags          Host_RAS
25*** Variables ***
26${stack_mode}       normal
27
28*** Test Cases ***
29# Memory channel (MCACALIFIR) related error injection.
30
31Verify Recoverable Callout Handling For MCA With Threshold 1
32    [Documentation]  Verify recoverable callout handling for MCACALIFIR with
33    ...              threshold 1.
34    [Tags]  Verify_Recoverable_Callout_Handling_For_MCA_With_Threshold_1
35
36    ${value}=  Get From Dictionary  ${ERROR_INJECT_DICT}  MCACALIFIR_RECV1
37    ${err_log_path}=  Catenate  ${RAS_LOG_DIR_PATH}mcacalfir_th1
38    Inject Recoverable Error With Threshold Limit Through Host
39    ...  ${value[0]}  ${value[1]}  1  ${value[2]}  ${err_log_path}
40
41
42Verify Recoverable Callout Handling For MCA With Threshold 32
43    [Documentation]  Verify recoverable callout handling for MCACALIFIR with
44    ...              threshold 32.
45    [Tags]  Verify_Recoverable_Callout_Handling_For_MCA_With_Threshold_32
46
47    ${value}=  Get From Dictionary  ${ERROR_INJECT_DICT}  MCACALIFIR_RECV32
48    ${err_log_path}=  Catenate  ${RAS_LOG_DIR_PATH}mcacalfir_th32
49    Inject Recoverable Error With Threshold Limit Through Host
50    ...  ${value[0]}  ${value[1]}  32  ${value[2]}  ${err_log_path}
51
52Verify Unrecoverable Callout Handling For MCA
53    [Documentation]  Verify unrecoverable callout handling for MCACALIFIR.
54    [Tags]  Verify_Unrecoverable_Callout_Handling_For_MCA
55
56    ${value}=  Get From Dictionary  ${ERROR_INJECT_DICT}  MCACALIFIR_UE
57    ${err_log_path}=  Catenate  ${RAS_LOG_DIR_PATH}mcacalfir
58    Inject Unrecoverable Error Through Host
59    ...  ${value[0]}  ${value[1]}  1  ${value[2]}  ${err_log_path}
60
61#  Memory buffer (MCIFIR) related error injection.
62
63Verify Recoverable Callout Handling For MCI With Threshold 1
64    [Documentation]  Verify recoverable callout handling for mci with
65    ...              threshold 1.
66    [Tags]  Verify_Recoverable_Callout_Handling_For_MCI_With_Threshold_1
67
68    ${value}=  Get From Dictionary  ${ERROR_INJECT_DICT}  MCS_RECV1
69    ${err_log_path}=  Catenate  ${RAS_LOG_DIR_PATH}mcifir_th1
70    Inject Recoverable Error With Threshold Limit Through Host
71    ...  ${value[0]}  ${value[1]}  1  ${value[2]}  ${err_log_path}
72
73Verify Unrecoverable Callout Handling For MCI
74    [Documentation]  Verify unrecoverable callout handling for mci.
75    [Tags]  Verify_Unrecoverable_Callout_Handling_For_MCI
76
77    ${value}=  Get From Dictionary  ${ERROR_INJECT_DICT}  MCS_UE
78    ${err_log_path}=  Catenate  ${RAS_LOG_DIR_PATH}mcifir
79    Inject Unrecoverable Error Through Host
80    ...  ${value[0]}  ${value[1]}  1  ${value[2]}  ${err_log_path}
81
82# CAPP accelerator (CXAFIR) related error injection.
83
84Verify Recoverable Callout Handling For CXA With Threshold 5
85    [Documentation]  Verify recoverable callout handling for  CXA with
86    ...              threshold 5.
87    [Tags]  Verify_Recoverable_Callout_Handling_For_CXA_With_Threshold_5
88
89    ${value}=  Get From Dictionary  ${ERROR_INJECT_DICT}  CXA_RECV5
90    ${err_log_path}=  Catenate  ${RAS_LOG_DIR_PATH}cxafir_th5
91    Inject Recoverable Error With Threshold Limit Through Host
92    ...  ${value[0]}  ${value[1]}  5  ${value[2]}  ${err_log_path}
93
94Verify Recoverable Callout Handling For CXA With Threshold 32
95    [Documentation]  Verify recoverable callout handling for  CXA with
96    ...              threshold 32.
97    [Tags]  Verify_Recoverable_Callout_Handling_For_CXA_With_Threshold_32
98
99    ${value}=  Get From Dictionary  ${ERROR_INJECT_DICT}  CXA_RECV32
100    ${err_log_path}=  Catenate  ${RAS_LOG_DIR_PATH}cxafir_th32
101    Inject Recoverable Error With Threshold Limit Through Host
102    ...  ${value[0]}  ${value[1]}  32  ${value[2]}  ${err_log_path}
103
104Verify Unrecoverable Callout Handling For CXA
105    [Documentation]  Verify unrecoverable callout handling for CXAFIR.
106    [Tags]  Verify_Unrecoverable_Callout_Handling_For_CXA
107
108    ${value}=  Get From Dictionary  ${ERROR_INJECT_DICT}  CXA_UE
109    ${err_log_path}=  Catenate  ${RAS_LOG_DIR_PATH}cxafir_ue
110    Inject Unrecoverable Error Through Host
111    ...  ${value[0]}  ${value[1]}  1  ${value[2]}  ${err_log_path}
112
113#  OBUSFIR  related error injection.
114
115Verify Recoverable Callout Handling For OBUS With Threshold 32
116    [Documentation]  Verify recoverable callout handling for  OBUS with
117    ...              threshold 32.
118    [Tags]  Verify_Recoverable_Callout_Handling_For_OBUS_With_Threshold_32
119
120    ${value}=  Get From Dictionary  ${ERROR_INJECT_DICT}  OBUS_RECV32
121    ${err_log_path}=  Catenate  ${RAS_LOG_DIR_PATH}obusfir_th32
122    Inject Recoverable Error With Threshold Limit Through Host
123    ...  ${value[0]}  ${value[1]}  32  ${value[2]}  ${err_log_path}
124
125# Nvidia graphics processing units (NPU0FIR) related error injection.
126
127Verify Recoverable Callout Handling For NPU0 With Threshold 32
128    [Documentation]  Verify recoverable callout handling for  NPU0 with
129    ...              threshold 32.
130    [Tags]  Verify_Recoverable_Callout_Handling_For_NPU0_With_Threshold_32
131
132    ${value}=  Get From Dictionary  ${ERROR_INJECT_DICT}  NPU0_RECV32
133    ${err_log_path}=  Catenate  ${RAS_LOG_DIR_PATH}npu0fir_th32
134    Inject Recoverable Error With Threshold Limit Through Host
135    ...  ${value[0]}  ${value[1]}  32  ${value[2]}  ${err_log_path}
136
137#  Nest accelerator NXDMAENGFIR related error injection.
138
139Verify Recoverable Callout Handling For NXDMAENG With Threshold 1
140    [Documentation]  Verify recoverable callout handling for  NXDMAENG with
141    ...              threshold 1.
142    [Tags]  Verify_Recoverable_Callout_Handling_For_NXDMAENG_With_Threshold_1
143
144    ${value}=  Get From Dictionary  ${ERROR_INJECT_DICT}  NX_RECV1
145    ${err_log_path}=  Catenate  ${RAS_LOG_DIR_PATH}nxfir_th1
146    Inject Recoverable Error With Threshold Limit Through Host
147    ...  ${value[0]}  ${value[1]}  1  ${value[2]}  ${err_log_path}
148
149
150Verify Recoverable Callout Handling For NXDMAENG With Threshold 32
151    [Documentation]  Verify recoverable callout handling for  NXDMAENG with
152    ...              threshold 32.
153    [Tags]  Verify_Recoverable_Callout_Handling_For_NXDMAENG_With_Threshold_32
154
155    ${value}=  Get From Dictionary  ${ERROR_INJECT_DICT}  NX_RECV32
156    ${err_log_path}=  Catenate  ${RAS_LOG_DIR_PATH}nxfir_th32
157    Inject Recoverable Error With Threshold Limit Through Host
158    ...  ${value[0]}  ${value[1]}  32  ${value[2]}  ${err_log_path}
159
160Verify Unrecoverable Callout Handling For NXDMAENG
161    [Documentation]  Verify unrecoverable callout handling for NXDMAENG.
162    [Tags]  Verify_Unrecoverable_Callout_Handling_For_NXDMAENG
163
164    ${value}=  Get From Dictionary  ${ERROR_INJECT_DICT}  NX_UE
165    ${err_log_path}=  Catenate  ${RAS_LOG_DIR_PATH}nxfir_ue
166    Inject Unrecoverable Error Through Host
167    ...  ${value[0]}  ${value[1]}  1  ${value[2]}  ${err_log_path}
168
169
170#  L2FIR related error injection.
171
172Verify Recoverable Callout Handling For L2FIR With Threshold 1
173    [Documentation]  Verify recoverable callout handling for L2FIR with
174    ...              threshold 1.
175    [Tags]  Verify_Recoverable_Callout_Handling_For_L2FIR_With_Threshold_1
176
177    ${value}=  Get From Dictionary  ${ERROR_INJECT_DICT}  L2FIR_RECV1
178    ${translated_fir}=  Fetch FIR Address Translation Value  ${value[0]}  EX
179    ${err_log_path}=  Catenate  ${RAS_LOG_DIR_PATH}l2fir_th1
180    Inject Recoverable Error With Threshold Limit Through Host
181    ...  ${translated_fir}  ${value[1]}  1  ${value[2]}  ${err_log_path}
182
183Verify Recoverable Callout Handling For L2FIR With Threshold 32
184    [Documentation]  Verify recoverable callout handling for L2FIR with
185    ...              threshold 32.
186    [Tags]  Verify_Recoverable_Callout_Handling_For_L2FIR_With_Threshold_32
187
188    ${value}=  Get From Dictionary  ${ERROR_INJECT_DICT}  L2FIR_RECV32
189    ${translated_fir}=  Fetch FIR Address Translation Value  ${value[0]}  EX
190    ${err_log_path}=  Catenate  ${RAS_LOG_DIR_PATH}l2fir_th32
191    Inject Recoverable Error With Threshold Limit Through Host
192    ...  ${translated_fir}  ${value[1]}  32  ${value[2]}  ${err_log_path}
193
194Verify Unrecoverable Callout Handling For L2FIR
195    [Documentation]  Verify unrecoverable callout handling for L2FIR.
196    [Tags]  Verify_Unrecoverable_Callout_Handling_For_L2FIR
197
198    ${value}=  Get From Dictionary  ${ERROR_INJECT_DICT}  L2FIR_UE
199    ${translated_fir}=  Fetch FIR Address Translation Value  ${value[0]}  EX
200    ${err_log_path}=  Catenate  ${RAS_LOG_DIR_PATH}l2fir_ue
201    Inject Unrecoverable Error Through Host
202    ...  ${translated_fir}  ${value[1]}  1  ${value[2]}  ${err_log_path}
203
204#  L3FIR related error injection.
205
206Verify Recoverable Callout Handling For L3FIR With Threshold 1
207    [Documentation]  Verify recoverable callout handling for L3FIR with
208    ...              threshold 1.
209    [Tags]  Verify_Recoverable_Callout_Handling_For_L3FIR_With_Threshold_1
210
211    ${value}=  Get From Dictionary  ${ERROR_INJECT_DICT}  L3FIR_RECV1
212    ${translated_fir}=  Fetch FIR Address Translation Value  ${value[0]}  EX
213    ${err_log_path}=  Catenate  ${RAS_LOG_DIR_PATH}l3fir_th1
214    Inject Recoverable Error With Threshold Limit Through Host
215    ...  ${translated_fir}  ${value[1]}  1  ${value[2]}  ${err_log_path}
216
217Verify Recoverable Callout Handling For L3FIR With Threshold 32
218    [Documentation]  Verify recoverable callout handling for L3FIR with
219    ...              threshold 32.
220    [Tags]  Verify_Recoverable_Callout_Handling_For_L3FIR_With_Threshold_32
221
222    ${value}=  Get From Dictionary  ${ERROR_INJECT_DICT}  L3FIR_RECV32
223    ${translated_fir}=  Fetch FIR Address Translation Value  ${value[0]}  EX
224    ${err_log_path}=  Catenate  ${RAS_LOG_DIR_PATH}l3fir_th32
225    Inject Recoverable Error With Threshold Limit Through Host
226    ...  ${translated_fir}  ${value[1]}  32  ${value[2]}  ${err_log_path}
227
228Verify Unrecoverable Callout Handling For L3FIR
229    [Documentation]  Verify unrecoverable callout handling for L3FIR.
230    [Tags]  Verify_Unrecoverable_Callout_Handling_For_L3FIR
231
232    ${value}=  Get From Dictionary  ${ERROR_INJECT_DICT}  L3FIR_UE
233    ${translated_fir}=  Fetch FIR Address Translation Value  ${value[0]}  EX
234    ${err_log_path}=  Catenate  ${RAS_LOG_DIR_PATH}l3fir_ue
235    Inject Unrecoverable Error Through Host
236    ...  ${translated_fir}  ${value[1]}  1  ${value[2]}  ${err_log_path}
237
238# On chip controller (OCCFIR) related error injection.
239
240Verify Recoverable Callout Handling For OCC With Threshold 1
241    [Documentation]  Verify recoverable callout handling for OCCFIR with
242    ...              threshold 1.
243    [Tags]  Verify_Recoverable_Callout_Handling_For_OCC_With_Threshold_1
244
245    ${value}=  Get From Dictionary  ${ERROR_INJECT_DICT}  OCCFIR_RECV1
246    ${err_log_path}=  Catenate  ${RAS_LOG_DIR_PATH}occfir_th1
247    Inject Recoverable Error With Threshold Limit Through Host
248    ...  ${value[0]}  ${value[1]}  1  ${value[2]}  ${err_log_path}
249
250# Core management engine (CMEFIR) related error injection.
251
252Verify Recoverable Callout Handling For CMEFIR With Threshold 1
253    [Documentation]  Verify recoverable callout handling for CMEFIR with
254    ...              threshold 1.
255    [Tags]  Verify_Recoverable_Callout_Handling_For_CMEFIR_With_Threshold_1
256
257    ${value}=  Get From Dictionary  ${ERROR_INJECT_DICT}  CMEFIR_RECV1
258    ${translated_fir}=  Fetch FIR Address Translation Value  ${value[0]}  EX
259    ${err_log_path}=  Catenate  ${RAS_LOG_DIR_PATH}cmefir_th1
260    Inject Recoverable Error With Threshold Limit Through Host
261    ...  ${translated_fir}  ${value[1]}  1  ${value[2]}  ${err_log_path}
262
263# Nest control vunit (NCUFIR) related error injection.
264
265Verify Recoverable Callout Handling For NCUFIR With Threshold 1
266    [Documentation]  Verify recoverable callout handling for NCUFIR with
267    ...              threshold 1.
268    [Tags]  Verify_Recoverable_Callout_Handling_For_NCUFIR_With_Threshold_1
269
270    ${value}=  Get From Dictionary  ${ERROR_INJECT_DICT}  NCUFIR_RECV1
271    ${translated_fir}=  Fetch FIR Address Translation Value  ${value[0]}  EX
272    ${err_log_path}=  Catenate  ${RAS_LOG_DIR_PATH}ncufir_th1
273    Inject Recoverable Error With Threshold Limit Through Host
274    ...  ${translated_fir}  ${value[1]}  1  ${value[2]}  ${err_log_path}
275
276Verify Unrecoverable Callout Handling For NCUFIR
277    [Documentation]  Verify unrecoverable callout handling for NCUFIR.
278    [Tags]  Verify_Unrecoverable_Callout_Handling_For_NCUFIR
279
280    ${value}=  Get From Dictionary  ${ERROR_INJECT_DICT}  NCUFIR_UE
281    ${translated_fir}=  Fetch FIR Address Translation Value  ${value[0]}  EX
282    ${err_log_path}=  Catenate  ${RAS_LOG_DIR_PATH}ncufir_ue
283    Inject Unrecoverable Error Through Host
284    ...  ${translated_fir}  ${value[1]}  1  ${value[2]}  ${err_log_path}
285
286# Core FIR related error injection.
287
288Verify Recoverable Callout Handling For CoreFIR With Threshold 5
289    [Documentation]  Verify recoverable callout handling for CoreFIR with
290    ...              threshold 5.
291    [Tags]  Verify_Recoverable_Callout_Handling_For_CoreFIR_With_Threshold_5
292
293    ${value}=  Get From Dictionary  ${ERROR_INJECT_DICT}  COREFIR_RECV5
294    ${translated_fir}=  Fetch FIR Address Translation Value  ${value[0]}  EX
295    Disable CPU States Through HOST
296    ${err_log_path}=  Catenate  ${RAS_LOG_DIR_PATH}corefir_th5
297    Inject Recoverable Error With Threshold Limit Through Host
298    ...  ${value[0]}  ${value[1]}  5  ${value[2]}  ${err_log_path}
299
300Verify Recoverable Callout Handling For CoreFIR With Threshold 1
301    [Documentation]  Verify recoverable callout handling for CoreFIR with
302    ...              threshold 1.
303    [Tags]  Verify_Recoverable_Callout_CoreFIR_Handling_For_With_Threshold_1
304
305    ${value}=  Get From Dictionary  ${ERROR_INJECT_DICT}  COREFIR_RECV1
306    ${translated_fir}=  Fetch FIR Address Translation Value  ${value[0]}  EX
307    Disable CPU States Through HOST
308    ${err_log_path}=  Catenate  ${RAS_LOG_DIR_PATH}corefir_th1
309    Inject Recoverable Error With Threshold Limit Through Host
310    ...  ${value[0]}  ${value[1]}  1  ${value[2]}  ${err_log_path}
311
312Verify Unrecoverable Callout Handling For CoreFIR
313    [Documentation]  Verify unrecoverable callout handling for CoreFIR.
314    [Tags]  Verify_Unrecoverable_Callout_Handling_For_CoreFIR
315
316    ${value}=  Get From Dictionary  ${ERROR_INJECT_DICT}  COREFIR_UE
317    ${translated_fir}=  Fetch FIR Address Translation Value  ${value[0]}  EX
318    Disable CPU States Through HOST
319    ${err_log_path}=  Catenate  ${RAS_LOG_DIR_PATH}corefir_ue
320    Inject Unrecoverable Error Through Host
321    ...  ${value[0]}  ${value[1]}  1  ${value[2]}  ${err_log_path}
322
323Verify Recoverable Callout Handling For EQFIR With Threshold 32
324    [Documentation]  Verify recoverable callout handling for L3FIR with
325    ...              threshold 32.
326    [Tags]  Verify_Recoverable_Callout_Handling_For_EQFIR_With_Threshold_32
327
328    ${value}=  Get From Dictionary  ${ERROR_INJECT_DICT}  EQFIR_RECV32
329    ${translated_fir}=  Fetch FIR Address Translation Value  ${value[0]}  EQ
330    ${err_log_path}=  Catenate  ${RAS_LOG_DIR_PATH}eqfir_th32
331    Inject Recoverable Error With Threshold Limit Through Host
332    ...  ${translated_fir}  ${value[1]}  32  ${value[2]}  ${err_log_path}
333
334
335*** Keywords ***
336
337Verify And Clear Gard Records On HOST
338    [Documentation]  Verify And Clear gard records on HOST.
339
340    ${output}=  Gard Operations On OS  list
341    Should Not Contain  ${output}  No GARD
342    Gard Operations On OS  clear all
343
344Verify Error Log Entry
345    [Documentation]  Verify error log entry & signature description.
346    [Arguments]  ${signature_desc}  ${log_prefix}
347    # Description of argument(s):
348    # signature_desc  Error log signature description.
349    # log_prefix      Log path prefix.
350
351    ${resp}=  OpenBMC Get Request  ${BMC_LOGGING_ENTRY}list
352    Should Not Be Equal As Strings  ${resp.status_code}  ${HTTP_NOT_FOUND}
353
354    Collect eSEL Log  ${log_prefix}
355    ${error_log_file_path}=  Catenate  ${log_prefix}esel.txt
356    ${rc}  ${output}=  Run and Return RC and Output
357    ...  grep -i ${signature_desc} ${error_log_file_path}
358    Should Be Equal  ${rc}  ${0}
359    Should Not Be Empty  ${output}
360
361Inject Recoverable Error With Threshold Limit Through Host
362    [Documentation]  Inject and verify recoverable error on processor through
363    ...              host.
364    ...              Test sequence:
365    ...              1. Enable Auto Reboot Setting
366    ...              2. Inject Error on processor/centaur
367    ...              3. Check If HOST is running.
368    ...              4. Verify error log entry & signature description.
369    ...              4. Verify & clear gard records.
370    [Arguments]      ${fir}  ${chip_address}  ${threshold_limit}
371    ...              ${signature_desc}  ${log_prefix}
372    # Description of argument(s):
373    # fir                 FIR (Fault isolation register) value (e.g. 2011400).
374    # chip_address        Chip address (e.g 2000000000000000).
375    # threshold_limit     Threshold limit (e.g 1, 5, 32).
376    # signature_desc      Error log signature description.
377    # log_prefix          Log path prefix.
378
379    Set Auto Reboot  1
380    Inject Error Through HOST  ${fir}  ${chip_address}  ${threshold_limit}
381    ...  ${master_proc_chip}
382
383    Is Host Running
384    ${output}=  Gard Operations On OS  list
385    Should Contain  ${output}  No GARD
386    Verify Error Log Entry  ${signature_desc}  ${log_prefix}
387
388
389Inject Unrecoverable Error Through Host
390    [Documentation]  Inject and verify recoverable error on processor through
391    ...              host.
392    ...              Test sequence:
393    ...              1. Enable Auto Reboot Setting
394    ...              2. Inject Error on processor/centaur
395    ...              3. Check If HOST is rebooted.
396    ...              4. Verify & clear gard records.
397    ...              5. Verify error log entry & signature description.
398    ...              6. Verify & clear dump entry.
399    [Arguments]      ${fir}  ${chip_address}  ${threshold_limit}
400    ...              ${signature_desc}  ${log_prefix}
401    # Description of argument(s):
402    # fir                 FIR (Fault isolation register) value (e.g. 2011400).
403    # chip_address        Chip address (e.g 2000000000000000).
404    # threshold_limit     Threshold limit (e.g 1, 5, 32).
405    # signature_desc      Error Log signature description.
406    #                     (e.g 'mcs(n0p0c0) (MCFIR[0]) mc internal recoverable')
407    # log_prefix          Log path prefix.
408
409    Set Auto Reboot  1
410    Inject Error Through HOST  ${fir}  ${chip_address}  ${threshold_limit}
411    ...  ${master_proc_chip}
412    Wait Until Keyword Succeeds  500 sec  20 sec  Is Host Rebooted
413    Wait for OS
414    Verify And Clear Gard Records On HOST
415    Verify Error Log Entry  ${signature_desc}  ${log_prefix}
416    ${resp}=  OpenBMC Get Request  ${DUMP_ENTRY_URI}list
417    Should Not Be Equal As Strings  ${resp.status_code}  ${HTTP_NOT_FOUND}
418    Delete All BMC Dump
419
420Fetch FIR Address Translation Value
421    [Documentation]  Fetch FIR address translation value through HOST.
422    [Arguments]  ${fir}  ${target_type}
423    # Description of argument(s):
424    # fir                  FIR (Fault isolation register) value (e.g. 2011400).
425    # core_id              Core ID (e.g. 9).
426    # target_type          Target type (e.g. 'EX', 'EQ', 'C').
427
428    Login To OS Host
429    Copy Address Translation Utils To HOST OS
430
431    # Fetch processor chip IDs.
432    ${proc_chip_id}=  Get ProcChipId From OS  Processor  ${master_proc_chip}
433    # Example output:
434    # 00000000
435
436    ${core_ids}=  Get Core IDs From OS  ${proc_chip_id[-1]}
437    # Example output:
438    #./probe_cpus.sh | grep 'CHIP ID: 0' | cut -c21-22
439    # ['14', '15', '16', '17']
440
441    # Ignoring master core ID.
442    ${output}=  Get Slice From List  ${core_ids}  1
443    # Feth random non-master core ID.
444    ${core_ids_sub_list}=   Evaluate  random.sample(${core_ids}, 1)  random
445    ${core_id}=  Get From List  ${core_ids_sub_list}  0
446    ${translated_fir_addr}=  FIR Address Translation Through HOST
447    ...  ${fir}  ${core_id}  ${target_type}
448
449    [Return]  ${translated_fir_addr}
450
451RAS Test SetUp
452    [Documentation]  Validates input parameters.
453
454    Should Not Be Empty
455    ...  ${OS_HOST}  msg=You must provide DNS name/IP of the OS host.
456    Should Not Be Empty
457    ...  ${OS_USERNAME}  msg=You must provide OS host user name.
458    Should Not Be Empty
459    ...  ${OS_PASSWORD}  msg=You must provide OS host user password.
460
461    # Boot to OS.
462    REST Power On  quiet=${1}
463    # Adding delay after host bring up.
464    Sleep  60s
465
466RAS Suite Setup
467    [Documentation]  Create RAS log directory to store all RAS test logs.
468
469    ${RAS_LOG_DIR_PATH}=  Catenate  ${EXECDIR}/RAS_logs/
470    Set Suite Variable  ${RAS_LOG_DIR_PATH}
471    Set Suite Variable  ${master_proc_chip}  False
472
473    Create Directory  ${RAS_LOG_DIR_PATH}
474    OperatingSystem.Directory Should Exist  ${RAS_LOG_DIR_PATH}
475    Empty Directory  ${RAS_LOG_DIR_PATH}
476
477    Should Not Be Empty  ${ESEL_BIN_PATH}
478    Set Environment Variable  PATH  %{PATH}:${ESEL_BIN_PATH}
479
480    # Boot to Os.
481    REST Power On  quiet=${1}
482
483    # Check Opal-PRD service enabled on host.
484    ${opal_prd_state}=  Is Opal-PRD Service Enabled
485    Run Keyword If  '${opal_prd_state}' == 'disabled'
486    ...  Enable Opal-PRD Service On HOST
487
488RAS Suite Cleanup
489    [Documentation]  Perform RAS suite cleanup and verify that host
490    ...              boots after test suite run.
491
492    # Boot to OS.
493    REST Power On  quiet=${1}
494    Delete Error Logs
495    Gard Operations On OS  clear all
496