xref: /rk3399_ARM-atf/services/std_svc/drtm/drtm_remediation.c (revision 9cc776f10724eb2d0e24c544d4fac36538154830)
11436e37dSManish V Badarkhe /*
2*30bbc4faSBoyan Karatotev  * Copyright (c) 2022-2025 Arm Limited. All rights reserved.
31436e37dSManish V Badarkhe  *
41436e37dSManish V Badarkhe  * SPDX-License-Identifier:    BSD-3-Clause
51436e37dSManish V Badarkhe  *
61436e37dSManish V Badarkhe  * DRTM support for DRTM error remediation.
71436e37dSManish V Badarkhe  *
81436e37dSManish V Badarkhe  */
91436e37dSManish V Badarkhe #include <inttypes.h>
101436e37dSManish V Badarkhe #include <stdint.h>
111436e37dSManish V Badarkhe 
121436e37dSManish V Badarkhe #include <common/debug.h>
131436e37dSManish V Badarkhe #include <common/runtime_svc.h>
141436e37dSManish V Badarkhe #include "drtm_main.h"
151436e37dSManish V Badarkhe #include <plat/common/platform.h>
161436e37dSManish V Badarkhe 
drtm_set_error(uint64_t x1,void * ctx)171436e37dSManish V Badarkhe uint64_t drtm_set_error(uint64_t x1, void *ctx)
181436e37dSManish V Badarkhe {
191436e37dSManish V Badarkhe 	int rc;
201436e37dSManish V Badarkhe 
211436e37dSManish V Badarkhe 	rc = plat_set_drtm_error(x1);
221436e37dSManish V Badarkhe 
231436e37dSManish V Badarkhe 	if (rc != 0) {
245e1fa574SManish V Badarkhe 		SMC_RET1(ctx, NOT_FOUND);
251436e37dSManish V Badarkhe 	}
261436e37dSManish V Badarkhe 
271436e37dSManish V Badarkhe 	SMC_RET1(ctx, SUCCESS);
281436e37dSManish V Badarkhe }
291436e37dSManish V Badarkhe 
drtm_get_error(void * ctx)301436e37dSManish V Badarkhe uint64_t drtm_get_error(void *ctx)
311436e37dSManish V Badarkhe {
321436e37dSManish V Badarkhe 	uint64_t error_code;
331436e37dSManish V Badarkhe 	int rc;
341436e37dSManish V Badarkhe 
351436e37dSManish V Badarkhe 	rc = plat_get_drtm_error(&error_code);
361436e37dSManish V Badarkhe 
371436e37dSManish V Badarkhe 	if (rc != 0) {
385e1fa574SManish V Badarkhe 		SMC_RET1(ctx, NOT_FOUND);
391436e37dSManish V Badarkhe 	}
401436e37dSManish V Badarkhe 
411436e37dSManish V Badarkhe 	SMC_RET2(ctx, SUCCESS, error_code);
421436e37dSManish V Badarkhe }
431436e37dSManish V Badarkhe 
drtm_enter_remediation(uint64_t err_code,const char * err_str)441436e37dSManish V Badarkhe void drtm_enter_remediation(uint64_t err_code, const char *err_str)
451436e37dSManish V Badarkhe {
461436e37dSManish V Badarkhe 	int rc = plat_set_drtm_error(err_code);
471436e37dSManish V Badarkhe 
481436e37dSManish V Badarkhe 	if (rc != 0) {
491436e37dSManish V Badarkhe 		ERROR("%s(): drtm_error_set() failed unexpectedly rc=%d\n",
501436e37dSManish V Badarkhe 		      __func__, rc);
511436e37dSManish V Badarkhe 		panic();
521436e37dSManish V Badarkhe 	}
531436e37dSManish V Badarkhe 
541436e37dSManish V Badarkhe 	ERROR("DRTM: entering remediation of error:\n%" PRIu64 "\t\'%s\'\n",
551436e37dSManish V Badarkhe 	       err_code, err_str);
561436e37dSManish V Badarkhe 
571436e37dSManish V Badarkhe 	ERROR("%s(): system reset is not yet supported\n", __func__);
58*30bbc4faSBoyan Karatotev 	panic();
591436e37dSManish V Badarkhe }
60