blob: f92e0482033f44131075afec95b313d195092f32 [file] [log] [blame]
Manish Pandeye62b67b2023-02-27 15:21:26 +00001/*
2 * Copyright (c) 2023, Arm Limited. All rights reserved.
3 *
4 * SPDX-License-Identifier: BSD-3-Clause
5 */
6
7
8#include <arch_helpers.h>
9#include <serror.h>
10#include <tftf_lib.h>
11
12#ifdef __aarch64__
13static volatile uint64_t serror_triggered;
14extern void inject_unrecoverable_ras_error(void);
15
Manish V Badarkhe46d02282024-11-18 16:58:37 +000016static bool serror_handler(bool *incr_elr_elx)
Manish Pandeye62b67b2023-02-27 15:21:26 +000017{
18 serror_triggered = 1;
Manish V Badarkhe46d02282024-11-18 16:58:37 +000019 *incr_elr_elx = false;
Manish Pandeye62b67b2023-02-27 15:21:26 +000020 return true;
21}
22
23/*
24 * Test Kernel First handling paradigm of RAS errors.
25 *
26 * Register a custom serror handler in tftf, inject a RAS error and wait
27 * for finite time to ensure that SError triggered and handled.
28 */
29test_result_t test_ras_kfh(void)
30{
31 register_custom_serror_handler(serror_handler);
32 inject_unrecoverable_ras_error();
33
34 /* Give reasonable time for SError to be triggered/handled */
35 waitms(500);
36
37 unregister_custom_serror_handler();
38
39 if (serror_triggered == false) {
40 tftf_testcase_printf("SError is not triggered\n");
41 return TEST_RESULT_FAIL;
42 }
43
44 return TEST_RESULT_SUCCESS;
45}
46#else
47test_result_t test_ras_kfh(void)
48{
49 tftf_testcase_printf("Not supported on AArch32.\n");
50 return TEST_RESULT_SKIPPED;
51}
52
53#endif