1*91f16700Schasinglulu /* 2*91f16700Schasinglulu * Copyright (c) 2023, Arm Limited. All rights reserved. 3*91f16700Schasinglulu * 4*91f16700Schasinglulu * SPDX-License-Identifier: BSD-3-Clause 5*91f16700Schasinglulu */ 6*91f16700Schasinglulu 7*91f16700Schasinglulu #include <stdint.h> 8*91f16700Schasinglulu #include <stdio.h> 9*91f16700Schasinglulu 10*91f16700Schasinglulu #include <drivers/arm/rss_comms.h> 11*91f16700Schasinglulu #include <plat/common/platform.h> 12*91f16700Schasinglulu #include "rss_platform_api.h" 13*91f16700Schasinglulu 14*91f16700Schasinglulu #include <platform_def.h> 15*91f16700Schasinglulu 16*91f16700Schasinglulu int nv_counter_test(void) 17*91f16700Schasinglulu { 18*91f16700Schasinglulu psa_status_t status; 19*91f16700Schasinglulu uint32_t old_val; 20*91f16700Schasinglulu uint32_t new_val; 21*91f16700Schasinglulu uint32_t id; 22*91f16700Schasinglulu 23*91f16700Schasinglulu status = rss_comms_init(PLAT_RSS_AP_SND_MHU_BASE, PLAT_RSS_AP_RCV_MHU_BASE); 24*91f16700Schasinglulu if (status != PSA_SUCCESS) { 25*91f16700Schasinglulu printf("Failed to initialize RSS communication channel - psa_status = %d\n", status); 26*91f16700Schasinglulu return -1; 27*91f16700Schasinglulu } 28*91f16700Schasinglulu 29*91f16700Schasinglulu for (id = 0; id < 3; id++) { 30*91f16700Schasinglulu status = rss_platform_nv_counter_read(id, sizeof(old_val), (uint8_t *)&old_val); 31*91f16700Schasinglulu if (status != PSA_SUCCESS) { 32*91f16700Schasinglulu printf("Failed during first id=(%d) rss_platform_nv_counter_read - psa_status = %d\n", 33*91f16700Schasinglulu id, status); 34*91f16700Schasinglulu return -1; 35*91f16700Schasinglulu } 36*91f16700Schasinglulu 37*91f16700Schasinglulu status = rss_platform_nv_counter_increment(id); 38*91f16700Schasinglulu if (status != PSA_SUCCESS) { 39*91f16700Schasinglulu printf("Failed during id=(%d) rss_platform_nv_counter_increment - psa_status = %d\n", 40*91f16700Schasinglulu id, status); 41*91f16700Schasinglulu return -1; 42*91f16700Schasinglulu } 43*91f16700Schasinglulu 44*91f16700Schasinglulu status = rss_platform_nv_counter_read(id, sizeof(new_val), (uint8_t *)&new_val); 45*91f16700Schasinglulu if (status != PSA_SUCCESS) { 46*91f16700Schasinglulu printf("Failed during second id=(%d) rss_platform_nv_counter_read - psa_status = %d\n", 47*91f16700Schasinglulu id, status); 48*91f16700Schasinglulu return -1; 49*91f16700Schasinglulu } 50*91f16700Schasinglulu 51*91f16700Schasinglulu if (old_val + 1 != new_val) { 52*91f16700Schasinglulu printf("Failed nv_counter_test: old_val (%d) + 1 != new_val (%d)\n", 53*91f16700Schasinglulu old_val, new_val); 54*91f16700Schasinglulu return -1; 55*91f16700Schasinglulu } 56*91f16700Schasinglulu } 57*91f16700Schasinglulu printf("Passed nv_counter_test\n"); 58*91f16700Schasinglulu 59*91f16700Schasinglulu return 0; 60*91f16700Schasinglulu } 61