summaryrefslogtreecommitdiff
path: root/board/cr50/tpm_nvmem_ops.c
diff options
context:
space:
mode:
Diffstat (limited to 'board/cr50/tpm_nvmem_ops.c')
-rw-r--r--board/cr50/tpm_nvmem_ops.c39
1 files changed, 39 insertions, 0 deletions
diff --git a/board/cr50/tpm_nvmem_ops.c b/board/cr50/tpm_nvmem_ops.c
index 34e0c76879..90bddfb313 100644
--- a/board/cr50/tpm_nvmem_ops.c
+++ b/board/cr50/tpm_nvmem_ops.c
@@ -53,3 +53,42 @@ enum tpm_read_rv read_tpm_nvmem(uint16_t obj_index,
return tpm_read_success;
}
+
+enum tpm_read_rv read_tpm_nvmem_hidden(uint16_t object_index,
+ uint16_t object_size,
+ void *obj_value)
+{
+ if (NvGetHiddenObject(HR_HIDDEN | object_index,
+ object_size,
+ obj_value) == TPM_RC_SUCCESS) {
+ return tpm_read_success;
+ } else {
+ return tpm_read_not_found;
+ }
+}
+
+enum tpm_write_rv write_tpm_nvmem_hidden(uint16_t object_index,
+ uint16_t object_size,
+ void *obj_value,
+ int commit)
+{
+ enum tpm_write_rv ret = tpm_write_fail;
+
+ uint32_t handle = object_index | HR_HIDDEN;
+
+ if (!NvIsDefinedHiddenObject(handle) &&
+ NvAddHiddenObject(handle,
+ object_size,
+ obj_value) == TPM_RC_SUCCESS) {
+ ret = tpm_write_created;
+ } else if (NvWriteHiddenObject(handle,
+ object_size,
+ obj_value) == TPM_RC_SUCCESS) {
+ ret = tpm_write_updated;
+ }
+
+ if (commit && !NvCommit())
+ ret = tpm_write_fail;
+
+ return ret;
+}