1 /*
2 * Copyright (c) 2022 Arm Limited. All rights reserved.
3 *
4 * SPDX-License-Identifier: BSD-3-Clause
5 *
6 * DRTM support for DRTM error remediation.
7 *
8 */
9 #include <inttypes.h>
10 #include <stdint.h>
11
12 #include <common/debug.h>
13 #include <common/runtime_svc.h>
14 #include "drtm_main.h"
15 #include <plat/common/platform.h>
16
drtm_set_error(uint64_t x1,void * ctx)17 uint64_t drtm_set_error(uint64_t x1, void *ctx)
18 {
19 int rc;
20
21 rc = plat_set_drtm_error(x1);
22
23 if (rc != 0) {
24 SMC_RET1(ctx, INTERNAL_ERROR);
25 }
26
27 SMC_RET1(ctx, SUCCESS);
28 }
29
drtm_get_error(void * ctx)30 uint64_t drtm_get_error(void *ctx)
31 {
32 uint64_t error_code;
33 int rc;
34
35 rc = plat_get_drtm_error(&error_code);
36
37 if (rc != 0) {
38 SMC_RET1(ctx, INTERNAL_ERROR);
39 }
40
41 SMC_RET2(ctx, SUCCESS, error_code);
42 }
43
drtm_enter_remediation(uint64_t err_code,const char * err_str)44 void drtm_enter_remediation(uint64_t err_code, const char *err_str)
45 {
46 int rc = plat_set_drtm_error(err_code);
47
48 if (rc != 0) {
49 ERROR("%s(): drtm_error_set() failed unexpectedly rc=%d\n",
50 __func__, rc);
51 panic();
52 }
53
54 ERROR("DRTM: entering remediation of error:\n%" PRIu64 "\t\'%s\'\n",
55 err_code, err_str);
56
57 ERROR("%s(): system reset is not yet supported\n", __func__);
58 plat_system_reset();
59 }
60