@ -36,35 +36,52 @@ int plat_get_rotpk_info(void *cookie, void **key_ptr, unsigned int *key_len,
}
/*
* Store a new non - volatile counter value .
*
* On some FVP versions , the non - volatile counters are read - only so this
* function will always fail .
* Return the non - volatile counter address stored in the platform . The cookie
* will contain the OID of the counter in the certificate .
*
* Return : 0 = success , Otherwise = error
*/
int plat_set_nv_ct r( void * cookie , unsigned int nv_ct r)
static int plat_get_nv_ctr_add r( void * cookie , uintptr_t * nv_ctr_add r)
{
const char * oid ;
uintptr_t nv_ctr_addr ;
assert ( cookie ! = NULL ) ;
const char * oid = ( const char * ) cookie ;
oid = ( const char * ) cookie ;
if ( strcmp ( oid , TRUSTED_FW_NVCOUNTER_OID ) = = 0 ) {
nv_ctr_addr = FCONF_GET_PROPERTY ( cot , nv_cntr_addr ,
* nv_ctr_addr = FCONF_GET_PROPERTY ( cot , nv_cntr_addr ,
TRUSTED_NV_CTR_ID ) ;
} else if ( strcmp ( oid , NON_TRUSTED_FW_NVCOUNTER_OID ) = = 0 ) {
nv_ctr_addr = FCONF_GET_PROPERTY ( cot , nv_cntr_addr ,
* nv_ctr_addr = FCONF_GET_PROPERTY ( cot , nv_cntr_addr ,
NON_TRUSTED_NV_CTR_ID ) ;
} else if ( strcmp ( oid , CCA_FW_NVCOUNTER_OID ) = = 0 ) {
/* FVP does not support the CCA NV Counter so use the Trusted NV */
nv_ctr_addr = FCONF_GET_PROPERTY ( cot , nv_cntr_addr ,
* nv_ctr_addr = FCONF_GET_PROPERTY ( cot , nv_cntr_addr ,
TRUSTED_NV_CTR_ID ) ;
} else {
return 1 ;
}
return 0 ;
}
/*
* Store a new non - volatile counter value .
*
* On some FVP versions , the non - volatile counters are read - only so this
* function will always fail .
*
* Return : 0 = success , Otherwise = error
*/
int plat_set_nv_ctr ( void * cookie , unsigned int nv_ctr )
{
uintptr_t nv_ctr_addr ;
int rc ;
assert ( cookie ! = NULL ) ;
rc = plat_get_nv_ctr_addr ( cookie , & nv_ctr_addr ) ;
if ( rc ! = 0 ) {
return rc ;
}
mmio_write_32 ( nv_ctr_addr , nv_ctr ) ;
/*
@ -82,28 +99,18 @@ int plat_set_nv_ctr(void *cookie, unsigned int nv_ctr)
*/
int plat_get_nv_ctr ( void * cookie , unsigned int * nv_ctr )
{
const char * oid ;
uint32_t * nv_ctr_addr ;
uintptr_t nv_ctr_addr ;
int rc ;
assert ( cookie ! = NULL ) ;
assert ( nv_ctr ! = NULL ) ;
oid = ( const char * ) cookie ;
if ( strcmp ( oid , TRUSTED_FW_NVCOUNTER_OID ) = = 0 ) {
nv_ctr_addr = ( uint32_t * ) FCONF_GET_PROPERTY ( cot , nv_cntr_addr ,
TRUSTED_NV_CTR_ID ) ;
} else if ( strcmp ( oid , NON_TRUSTED_FW_NVCOUNTER_OID ) = = 0 ) {
nv_ctr_addr = ( uint32_t * ) FCONF_GET_PROPERTY ( cot , nv_cntr_addr ,
NON_TRUSTED_NV_CTR_ID ) ;
} else if ( strcmp ( oid , CCA_FW_NVCOUNTER_OID ) = = 0 ) {
/* FVP does not support the CCA NV Counter so use the Trusted NV */
nv_ctr_addr = ( uint32_t * ) FCONF_GET_PROPERTY ( cot , nv_cntr_addr ,
TRUSTED_NV_CTR_ID ) ;
} else {
return 1 ;
rc = plat_get_nv_ctr_addr ( cookie , & nv_ctr_addr ) ;
if ( rc ! = 0 ) {
return rc ;
}
* nv_ctr = ( unsigned int ) ( * nv_ctr_addr ) ;
* nv_ctr = * ( ( unsigned int * ) nv_ctr_addr ) ;
return 0 ;
}