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