diff options
author | Alexei Fedorov <Alexei.Fedorov@arm.com> | 2020-07-13 14:10:00 +0100 |
---|---|---|
committer | Alexei Fedorov <Alexei.Fedorov@arm.com> | 2020-07-21 20:33:26 +0000 |
commit | c3825c9bb77d55d218210fd26f250f9102c3b461 (patch) | |
tree | 57411aa384bf15014ebfe85fa671cead9a70457e | |
parent | 3f498b0dc282f6229b0a894ba61dc1948c4fb384 (diff) | |
download | arm-trusted-firmware-c3825c9bb77d55d218210fd26f250f9102c3b461.tar.gz |
TF-A: Add support for Measured Boot driver to FCONF
This patch adds support for Measured Boot driver functionality
to FCONF library code.
Change-Id: I81cdb06f1950f7e6e58f938a1b9c2f74f7cfdf88
Signed-off-by: Alexei Fedorov <Alexei.Fedorov@arm.com>
-rw-r--r-- | lib/fconf/fconf_dyn_cfg_getter.c | 2 | ||||
-rw-r--r-- | lib/fconf/fconf_tbbr_getter.c | 48 |
2 files changed, 35 insertions, 15 deletions
diff --git a/lib/fconf/fconf_dyn_cfg_getter.c b/lib/fconf/fconf_dyn_cfg_getter.c index 902c07d95..16bbe42c8 100644 --- a/lib/fconf/fconf_dyn_cfg_getter.c +++ b/lib/fconf/fconf_dyn_cfg_getter.c @@ -12,7 +12,7 @@ #include <lib/object_pool.h> #include <libfdt.h> -/* We currently use FW, TB_FW, SOC_FW, TOS_FW, NS_fw and HW configs */ +/* We currently use FW, TB_FW, SOC_FW, TOS_FW, NT_FW and HW configs */ #define MAX_DTB_INFO U(6) static struct dyn_cfg_dtb_info_t dtb_infos[MAX_DTB_INFO]; diff --git a/lib/fconf/fconf_tbbr_getter.c b/lib/fconf/fconf_tbbr_getter.c index 21278019e..9a20ced4e 100644 --- a/lib/fconf/fconf_tbbr_getter.c +++ b/lib/fconf/fconf_tbbr_getter.c @@ -27,20 +27,25 @@ int fconf_populate_tbbr_dyn_config(uintptr_t config) const char *compatible_str = "arm,tb_fw"; node = fdt_node_offset_by_compatible(dtb, -1, compatible_str); if (node < 0) { - ERROR("FCONF: Can't find %s compatible in dtb\n", compatible_str); + ERROR("FCONF: Can't find `%s` compatible in dtb\n", + compatible_str); return node; } /* Locate the disable_auth cell and read the value */ - err = fdt_read_uint32(dtb, node, "disable_auth", &tbbr_dyn_config.disable_auth); + err = fdt_read_uint32(dtb, node, "disable_auth", + &tbbr_dyn_config.disable_auth); if (err < 0) { - WARN("FCONF: Read cell failed for `disable_auth`\n"); + WARN("FCONF: Read %s failed for `%s`\n", + "cell", "disable_auth"); return err; } /* Check if the value is boolean */ - if ((tbbr_dyn_config.disable_auth != 0U) && (tbbr_dyn_config.disable_auth != 1U)) { - WARN("Invalid value for `disable_auth` cell %d\n", tbbr_dyn_config.disable_auth); + if ((tbbr_dyn_config.disable_auth != 0U) && + (tbbr_dyn_config.disable_auth != 1U)) { + WARN("Invalid value for `%s` cell %d\n", + "disable_auth", tbbr_dyn_config.disable_auth); return -1; } @@ -52,25 +57,40 @@ int fconf_populate_tbbr_dyn_config(uintptr_t config) /* Retrieve the Mbed TLS heap details from the DTB */ err = fdt_read_uint64(dtb, node, "mbedtls_heap_addr", &val64); if (err < 0) { - ERROR("FCONF: Read cell failed for mbedtls_heap\n"); + ERROR("FCONF: Read %s failed for `%s`\n", + "cell", "mbedtls_heap_addr"); return err; } tbbr_dyn_config.mbedtls_heap_addr = (void *)(uintptr_t)val64; err = fdt_read_uint32(dtb, node, "mbedtls_heap_size", &val32); if (err < 0) { - ERROR("FCONF: Read cell failed for mbedtls_heap\n"); + ERROR("FCONF: Read %s failed for `%s`\n", + "cell", "mbedtls_heap_size"); return err; } tbbr_dyn_config.mbedtls_heap_size = val32; - VERBOSE("FCONF:tbbr.disable_auth cell found with value = %d\n", - tbbr_dyn_config.disable_auth); - VERBOSE("FCONF:tbbr.mbedtls_heap_addr cell found with value = %p\n", - tbbr_dyn_config.mbedtls_heap_addr); - VERBOSE("FCONF:tbbr.mbedtls_heap_size cell found with value = %zu\n", - tbbr_dyn_config.mbedtls_heap_size); - +#if MEASURED_BOOT + /* Retrieve BL2 hash data details from the DTB */ + err = fdtw_read_bytes(dtb, node, "bl2_hash_data", TCG_DIGEST_SIZE, + &tbbr_dyn_config.bl2_hash_data); + if (err < 0) { + ERROR("FCONF: Read %s failed for '%s'\n", + "bytes", "bl2_hash_data"); + return err; + } +#endif + VERBOSE("%s%s%s %d\n", "FCONF: `tbbr.", "disable_auth", + "` cell found with value =", tbbr_dyn_config.disable_auth); + VERBOSE("%s%s%s %p\n", "FCONF: `tbbr.", "mbedtls_heap_addr", + "` cell found with value =", tbbr_dyn_config.mbedtls_heap_addr); + VERBOSE("%s%s%s %zu\n", "FCONF: `tbbr.", "mbedtls_heap_size", + "` cell found with value =", tbbr_dyn_config.mbedtls_heap_size); +#if MEASURED_BOOT + VERBOSE("%s%s%s %p\n", "FCONF: `tbbr.", "bl2_hash_data", + "` array found at address =", tbbr_dyn_config.bl2_hash_data); +#endif return 0; } |