summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMary Ruthven <mruthven@chromium.org>2023-04-13 15:21:41 -0500
committerChromeos LUCI <chromeos-scoped@luci-project-accounts.iam.gserviceaccount.com>2023-04-14 21:10:56 +0000
commitc65ffbb853be7999cc24220c66da79e3ade4e857 (patch)
tree4166872a98264f9ac3ec79e6855dee41d8c610b9
parent37fa38296266e62adfe10226b7b1a22ac9335537 (diff)
downloadchrome-ec-c65ffbb853be7999cc24220c66da79e3ade4e857.tar.gz
virtual_nvmem: add virtual nvmem factory_config support
Add support for reading the factory config from virtual nvmem. This change uses the same index as ti50 --index=0x3fff06. There are two indices that are reserved, but not implemented for cr50. This change registers a REGISTER_DEPRECATED_CONFIG for VIRTUAL_NV_INDEX_RMA_BYTES and VIRTUAL_NV_INDEX_WV_UDS_BYTES. BUG=b:278118981,b:214065944 TEST=manual Set the factory config to 0xface Read the config from virtual nvmem tpm_manager_client read_space --index=0x3fff06 --file=/tmp/contents INFO tpm_manager_client: [main.cc(595)] ... result: NVRAM_RESULT_SUCCESS data: CEFA000000000000 } RMA_BYTES and the WV_UDS_BYTES index still return nothing tpm_manager_client read_space --index=0x3fff04 --file=/tmp/contents INFO tpm_manager_client: [main.cc(595)] ... result: NVRAM_RESULT_SUCCESS data: } tpm_manager_client read_space --index=0x3fff05 --file=/tmp/contents INFO tpm_manager_client: [main.cc(595)] ... result: NVRAM_RESULT_SUCCESS data: } Change-Id: I651f00851b1e60fe0f898fd75111be27b2bf497e Signed-off-by: Mary Ruthven <mruthven@chromium.org> Reviewed-on: https://chromium-review.googlesource.com/c/chromiumos/platform/ec/+/4424877 Reviewed-by: Vadim Bendebury <vbendeb@chromium.org>
-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 */