123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105 |
- /*
- * Copyright 2018-2021 NXP
- *
- * SPDX-License-Identifier: BSD-3-Clause
- *
- */
- #include <assert.h>
- #include <stdint.h>
- #include <string.h>
- #include <common/debug.h>
- #include <lib/cassert.h>
- #include <sfp.h>
- #include <tools_share/tbbr_oid.h>
- #include <plat/common/platform.h>
- #include "plat_common.h"
- extern char nxp_rotpk_hash[], nxp_rotpk_hash_end[];
- int plat_get_rotpk_info(void *cookie, void **key_ptr, unsigned int *key_len,
- unsigned int *flags)
- {
- *key_ptr = nxp_rotpk_hash;
- *key_len = nxp_rotpk_hash_end - nxp_rotpk_hash;
- *flags = ROTPK_IS_HASH;
- return 0;
- }
- int plat_get_nv_ctr(void *cookie, unsigned int *nv_ctr)
- {
- const char *oid;
- uint32_t uid_num;
- uint32_t val = 0U;
- assert(cookie != NULL);
- assert(nv_ctr != NULL);
- oid = (const char *)cookie;
- if (strcmp(oid, TRUSTED_FW_NVCOUNTER_OID) == 0) {
- uid_num = 3U;
- } else if (strcmp(oid, NON_TRUSTED_FW_NVCOUNTER_OID) == 0) {
- uid_num = 4U;
- } else {
- return 1;
- }
- val = sfp_read_oem_uid(uid_num);
- INFO("SFP Value read is %x from UID %d\n", val, uid_num);
- if (val == 0U) {
- *nv_ctr = 0U;
- } else {
- *nv_ctr = (32U - __builtin_clz(val));
- }
- INFO("NV Counter value for UID %d is %d\n", uid_num, *nv_ctr);
- return 0;
- }
- int plat_set_nv_ctr(void *cookie, unsigned int nv_ctr)
- {
- const char *oid;
- uint32_t uid_num, sfp_val;
- assert(cookie != NULL);
- /* Counter values upto 32 are supported */
- if (nv_ctr > 32U) {
- return 1;
- }
- oid = (const char *)cookie;
- if (strcmp(oid, TRUSTED_FW_NVCOUNTER_OID) == 0) {
- uid_num = 3U;
- } else if (strcmp(oid, NON_TRUSTED_FW_NVCOUNTER_OID) == 0) {
- uid_num = 4U;
- } else {
- return 1;
- }
- sfp_val = (1U << (nv_ctr - 1));
- if (sfp_write_oem_uid(uid_num, sfp_val) == 1) {
- /* Enable POVDD on board */
- if (board_enable_povdd()) {
- sfp_program_fuses();
- }
- /* Disable POVDD on board */
- board_disable_povdd();
- } else {
- ERROR("Invalid OEM UID sent.\n");
- return 1;
- }
- return 0;
- }
- int plat_get_mbedtls_heap(void **heap_addr, size_t *heap_size)
- {
- return get_mbedtls_heap_helper(heap_addr, heap_size);
- }
|