xref: /rk3399_ARM-atf/plat/arm/board/tc/nv_counter_test.c (revision 2801427972c4b0d4c0165edb509f21186103f21f)
1 /*
2  * Copyright (c) 2023-2026, Arm Limited and Contributors. All rights reserved.
3  *
4  * SPDX-License-Identifier: BSD-3-Clause
5  */
6 
7 #include <stdint.h>
8 #include <stdio.h>
9 
10 #include <drivers/arm/sfcp.h>
11 #include <plat/common/platform.h>
12 #include "rse_platform_api.h"
13 
14 #include <platform_def.h>
15 
nv_counter_test(void)16 int nv_counter_test(void)
17 {
18 	enum sfcp_error_t sfcp_err;
19 	psa_status_t status;
20 	uint32_t old_val;
21 	uint32_t new_val;
22 	uint32_t id;
23 
24 	sfcp_err = sfcp_init();
25 	if (sfcp_err != SFCP_ERROR_SUCCESS) {
26 		printf("Failed to initialize RSE communication channel - sfcp_error = %d\n",
27 		       sfcp_err);
28 		return -1;
29 	}
30 
31 	for (id = 0; id < 3; id++) {
32 		status = rse_platform_nv_counter_read(id, sizeof(old_val), (uint8_t *)&old_val);
33 		if (status != PSA_SUCCESS) {
34 			printf("Failed during first id=(%d) rse_platform_nv_counter_read - psa_status = %d\n",
35 				       id, status);
36 			return -1;
37 		}
38 
39 		status = rse_platform_nv_counter_increment(id);
40 		if (status != PSA_SUCCESS) {
41 			printf("Failed during id=(%d) rse_platform_nv_counter_increment - psa_status = %d\n",
42 					id, status);
43 			return -1;
44 		}
45 
46 		status = rse_platform_nv_counter_read(id, sizeof(new_val), (uint8_t *)&new_val);
47 		if (status != PSA_SUCCESS) {
48 			printf("Failed during second id=(%d) rse_platform_nv_counter_read - psa_status = %d\n",
49 					id, status);
50 			return -1;
51 		}
52 
53 		if (old_val + 1 != new_val) {
54 			printf("Failed nv_counter_test: old_val (%d) + 1 != new_val (%d)\n",
55 					old_val, new_val);
56 			return -1;
57 		}
58 	}
59 	printf("Passed nv_counter_test\n");
60 
61 	return 0;
62 }
63