1 /* 2 * Copyright (c) 2023-2025, 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 <plat/common/platform.h> 11 #include "rse_platform_api.h" 12 13 #include <platform_def.h> 14 #include <tc_rse_comms.h> 15 16 int nv_counter_test(void) 17 { 18 psa_status_t status; 19 uint32_t old_val; 20 uint32_t new_val; 21 uint32_t id; 22 23 status = plat_rse_comms_init(); 24 if (status != PSA_SUCCESS) { 25 printf("Failed to initialize RSE communication channel - psa_status = %d\n", status); 26 return -1; 27 } 28 29 for (id = 0; id < 3; id++) { 30 status = rse_platform_nv_counter_read(id, sizeof(old_val), (uint8_t *)&old_val); 31 if (status != PSA_SUCCESS) { 32 printf("Failed during first id=(%d) rse_platform_nv_counter_read - psa_status = %d\n", 33 id, status); 34 return -1; 35 } 36 37 status = rse_platform_nv_counter_increment(id); 38 if (status != PSA_SUCCESS) { 39 printf("Failed during id=(%d) rse_platform_nv_counter_increment - psa_status = %d\n", 40 id, status); 41 return -1; 42 } 43 44 status = rse_platform_nv_counter_read(id, sizeof(new_val), (uint8_t *)&new_val); 45 if (status != PSA_SUCCESS) { 46 printf("Failed during second id=(%d) rse_platform_nv_counter_read - psa_status = %d\n", 47 id, status); 48 return -1; 49 } 50 51 if (old_val + 1 != new_val) { 52 printf("Failed nv_counter_test: old_val (%d) + 1 != new_val (%d)\n", 53 old_val, new_val); 54 return -1; 55 } 56 } 57 printf("Passed nv_counter_test\n"); 58 59 return 0; 60 } 61