summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--board/cr50/tpm2/virtual_nvmem.c19
-rw-r--r--board/cr50/tpm2/virtual_nvmem.h5
-rw-r--r--chip/g/factory_config.c2
-rw-r--r--chip/g/factory_config.h7
4 files changed, 31 insertions, 2 deletions
diff --git a/board/cr50/tpm2/virtual_nvmem.c b/board/cr50/tpm2/virtual_nvmem.c
index 1eb00e5daa..e2a0b963c7 100644
--- a/board/cr50/tpm2/virtual_nvmem.c
+++ b/board/cr50/tpm2/virtual_nvmem.c
@@ -10,6 +10,7 @@
#include "board_id.h"
#include "console.h"
#include "dcrypto.h"
+#include "factory_config.h"
#include "link_defs.h"
#include "rma_auth.h"
#include "sn_bits.h"
@@ -320,6 +321,18 @@ static void GetRSUDevID(BYTE *to, size_t offset, size_t size)
}
BUILD_ASSERT(VIRTUAL_NV_INDEX_RSU_DEV_ID_SIZE == SHA256_DIGEST_SIZE);
+static void GetFactoryCfg(BYTE *to, size_t offset, size_t size)
+{
+ uint64_t fc;
+
+ if (read_factory_config(&fc) != EC_SUCCESS) {
+ memset(to, 0, size);
+ return;
+ }
+ memcpy(to, ((BYTE *)&fc) + offset, size);
+}
+BUILD_ASSERT(VIRTUAL_NV_INDEX_FACTORY_CONFIG_SIZE == INFO_FACTORY_CFG_SIZE);
+
/*
* Registration of current virtual indexes.
*
@@ -344,6 +357,12 @@ static const struct virtual_nv_index_cfg index_config[] = {
REGISTER_CONFIG(VIRTUAL_NV_INDEX_RSU_DEV_ID,
VIRTUAL_NV_INDEX_RSU_DEV_ID_SIZE,
GetRSUDevID)
+ /* TODO(b/278118981): implement get RMA BYTES and WV UDS */
+ REGISTER_DEPRECATED_CONFIG(VIRTUAL_NV_INDEX_RMA_BYTES_UNIMPLEMENTED)
+ REGISTER_DEPRECATED_CONFIG(VIRTUAL_NV_INDEX_WV_UDS_BYTES_UNIMPLEMENTED)
+ REGISTER_CONFIG(VIRTUAL_NV_INDEX_FACTORY_CONFIG,
+ VIRTUAL_NV_INDEX_FACTORY_CONFIG_SIZE,
+ GetFactoryCfg)
};
/* Check validity check of above config. */
diff --git a/board/cr50/tpm2/virtual_nvmem.h b/board/cr50/tpm2/virtual_nvmem.h
index 75fc24db06..f8b9f46169 100644
--- a/board/cr50/tpm2/virtual_nvmem.h
+++ b/board/cr50/tpm2/virtual_nvmem.h
@@ -27,7 +27,9 @@ enum virtual_nv_index {
VIRTUAL_NV_INDEX_RSU_DEV_ID,
/* Reserved for generic TPM2.0 stand-alone counter. */
/* TODO(b/191163997): support reading RMA bytes via this index. */
- /* VIRTUAL_NV_INDEX_RMA_BYTES = 0x013fff04, */
+ VIRTUAL_NV_INDEX_RMA_BYTES_UNIMPLEMENTED,
+ VIRTUAL_NV_INDEX_WV_UDS_BYTES_UNIMPLEMENTED,
+ VIRTUAL_NV_INDEX_FACTORY_CONFIG,
VIRTUAL_NV_INDEX_END,
};
/* Reserved space for future virtual indexes; this is the last valid index. */
@@ -40,5 +42,6 @@ enum virtual_nv_index {
#define VIRTUAL_NV_INDEX_SN_DATA_SIZE 16
#define VIRTUAL_NV_INDEX_G2F_CERT_SIZE 315
#define VIRTUAL_NV_INDEX_RSU_DEV_ID_SIZE 32
+#define VIRTUAL_NV_INDEX_FACTORY_CONFIG_SIZE INFO_FACTORY_CFG_SIZE
#endif /* __EC_BOARD_CR50_TPM2_VIRTUAL_NVMEM_H */
diff --git a/chip/g/factory_config.c b/chip/g/factory_config.c
index 4e30b79e8c..8ead8dae67 100644
--- a/chip/g/factory_config.c
+++ b/chip/g/factory_config.c
@@ -25,7 +25,7 @@ static int factory_config_is_blank(uint64_t fc)
* @return EC_SUCCESS or an error code in cases of various failures to read the
* flash space.
*/
-static int read_factory_config(uint64_t *fc)
+int read_factory_config(uint64_t *fc)
{
uint32_t *fc_p;
int i;
diff --git a/chip/g/factory_config.h b/chip/g/factory_config.h
index 26345c1eb9..4f0de5fc3a 100644
--- a/chip/g/factory_config.h
+++ b/chip/g/factory_config.h
@@ -13,4 +13,11 @@
*/
void print_factory_config(void);
+/**
+ * Read the INFO1 factory config value into fc.
+ *
+ * @return EC_SUCCESS or an error code in cases of various failures to read the
+ * flash space.
+ */
+int read_factory_config(uint64_t *fc);
#endif /* ! __EC_CHIP_G_FACTORY_CONFIG_H */