1fe7de035SAntonio Nino Diaz /* 2*232c6b34SMasahiro Yamada * Copyright (c) 2016-2017, 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*232c6b34SMasahiro Yamada #include <tbbr_oid.h> 11*232c6b34SMasahiro Yamada 12fe7de035SAntonio Nino Diaz #include "fvp_def.h" 13fe7de035SAntonio Nino Diaz 14fe7de035SAntonio Nino Diaz /* 15fe7de035SAntonio Nino Diaz * Store a new non-volatile counter value. On some FVP versions, the 16fe7de035SAntonio Nino Diaz * non-volatile counters are RO. On these versions we expect the values in the 17fe7de035SAntonio Nino Diaz * certificates to always match the RO values so that this function is never 18fe7de035SAntonio Nino Diaz * called. 19fe7de035SAntonio Nino Diaz * 20fe7de035SAntonio Nino Diaz * Return: 0 = success, Otherwise = error 21fe7de035SAntonio Nino Diaz */ 22fe7de035SAntonio Nino Diaz int plat_set_nv_ctr(void *cookie, unsigned int nv_ctr) 23fe7de035SAntonio Nino Diaz { 24fe7de035SAntonio Nino Diaz const char *oid; 25fe7de035SAntonio Nino Diaz uint32_t *nv_ctr_addr; 26fe7de035SAntonio Nino Diaz 27fe7de035SAntonio Nino Diaz assert(cookie != NULL); 28fe7de035SAntonio Nino Diaz 29fe7de035SAntonio Nino Diaz oid = (const char *)cookie; 30fe7de035SAntonio Nino Diaz if (strcmp(oid, TRUSTED_FW_NVCOUNTER_OID) == 0) { 31fe7de035SAntonio Nino Diaz nv_ctr_addr = (uint32_t *)TFW_NVCTR_BASE; 32fe7de035SAntonio Nino Diaz } else if (strcmp(oid, NON_TRUSTED_FW_NVCOUNTER_OID) == 0) { 33fe7de035SAntonio Nino Diaz nv_ctr_addr = (uint32_t *)NTFW_CTR_BASE; 34fe7de035SAntonio Nino Diaz } else { 35fe7de035SAntonio Nino Diaz return 1; 36fe7de035SAntonio Nino Diaz } 37fe7de035SAntonio Nino Diaz 38fe7de035SAntonio Nino Diaz *(unsigned int *)nv_ctr_addr = nv_ctr; 39fe7de035SAntonio Nino Diaz 40fe7de035SAntonio Nino Diaz /* Verify that the current value is the one we just wrote. */ 41fe7de035SAntonio Nino Diaz if (nv_ctr != (unsigned int)(*nv_ctr_addr)) 42fe7de035SAntonio Nino Diaz return 1; 43fe7de035SAntonio Nino Diaz 44fe7de035SAntonio Nino Diaz return 0; 45fe7de035SAntonio Nino Diaz } 46