1fe7de035SAntonio Nino Diaz /* 21af540efSRoberto Vargas * Copyright (c) 2016-2018, ARM Limited and Contributors. All rights reserved. 3fe7de035SAntonio Nino Diaz * 482cb2c1aSdp-arm * SPDX-License-Identifier: BSD-3-Clause 5fe7de035SAntonio Nino Diaz */ 6fe7de035SAntonio Nino Diaz 7fe7de035SAntonio Nino Diaz #include <assert.h> 8fe7de035SAntonio Nino Diaz #include <stdint.h> 9fe7de035SAntonio Nino Diaz #include <string.h> 10*09d40e0eSAntonio Nino Diaz 11*09d40e0eSAntonio Nino Diaz #include <plat/common/platform.h> 12*09d40e0eSAntonio Nino Diaz #include <tools_share/tbbr_oid.h> 13232c6b34SMasahiro Yamada 14fe7de035SAntonio Nino Diaz #include "fvp_def.h" 15fe7de035SAntonio Nino Diaz 16fe7de035SAntonio Nino Diaz /* 17fe7de035SAntonio Nino Diaz * Store a new non-volatile counter value. On some FVP versions, the 18fe7de035SAntonio Nino Diaz * non-volatile counters are RO. On these versions we expect the values in the 19fe7de035SAntonio Nino Diaz * certificates to always match the RO values so that this function is never 20fe7de035SAntonio Nino Diaz * called. 21fe7de035SAntonio Nino Diaz * 22fe7de035SAntonio Nino Diaz * Return: 0 = success, Otherwise = error 23fe7de035SAntonio Nino Diaz */ 24fe7de035SAntonio Nino Diaz int plat_set_nv_ctr(void *cookie, unsigned int nv_ctr) 25fe7de035SAntonio Nino Diaz { 26fe7de035SAntonio Nino Diaz const char *oid; 27fe7de035SAntonio Nino Diaz uint32_t *nv_ctr_addr; 28fe7de035SAntonio Nino Diaz 29fe7de035SAntonio Nino Diaz assert(cookie != NULL); 30fe7de035SAntonio Nino Diaz 31fe7de035SAntonio Nino Diaz oid = (const char *)cookie; 32fe7de035SAntonio Nino Diaz if (strcmp(oid, TRUSTED_FW_NVCOUNTER_OID) == 0) { 33fe7de035SAntonio Nino Diaz nv_ctr_addr = (uint32_t *)TFW_NVCTR_BASE; 34fe7de035SAntonio Nino Diaz } else if (strcmp(oid, NON_TRUSTED_FW_NVCOUNTER_OID) == 0) { 35fe7de035SAntonio Nino Diaz nv_ctr_addr = (uint32_t *)NTFW_CTR_BASE; 36fe7de035SAntonio Nino Diaz } else { 37fe7de035SAntonio Nino Diaz return 1; 38fe7de035SAntonio Nino Diaz } 39fe7de035SAntonio Nino Diaz 40fe7de035SAntonio Nino Diaz *(unsigned int *)nv_ctr_addr = nv_ctr; 41fe7de035SAntonio Nino Diaz 42fe7de035SAntonio Nino Diaz /* Verify that the current value is the one we just wrote. */ 43fe7de035SAntonio Nino Diaz if (nv_ctr != (unsigned int)(*nv_ctr_addr)) 44fe7de035SAntonio Nino Diaz return 1; 45fe7de035SAntonio Nino Diaz 46fe7de035SAntonio Nino Diaz return 0; 47fe7de035SAntonio Nino Diaz } 48