diff options
author | Michael Anderson <andmike@linux.ibm.com> | 2019-10-29 07:31:57 -0700 |
---|---|---|
committer | Ram Pai <linuxram@us.ibm.com> | 2020-11-03 12:52:37 -0500 |
commit | d85f89355e0bbcb5875dc2ccdcdb7fe3ccf5f701 (patch) | |
tree | 54e25595032d51de914fafdd1b66f9f6c2899079 | |
parent | b982d6cbcda9cd6286d0d9593918cc72da534b14 (diff) | |
download | skiboot-d85f89355e0bbcb5875dc2ccdcdb7fe3ccf5f701.zip skiboot-d85f89355e0bbcb5875dc2ccdcdb7fe3ccf5f701.tar.gz skiboot-d85f89355e0bbcb5875dc2ccdcdb7fe3ccf5f701.tar.bz2 |
ultravisor: Pickup wrapkey data from mambo.
- For testing wrapkey support pickup data from mambo.
Signed-off-by: Michael Anderson <andmike@linux.ibm.com>
-rw-r--r-- | hw/ultravisor.c | 58 |
1 files changed, 56 insertions, 2 deletions
diff --git a/hw/ultravisor.c b/hw/ultravisor.c index 510f56a..ac49782 100644 --- a/hw/ultravisor.c +++ b/hw/ultravisor.c @@ -34,6 +34,14 @@ struct memcons uv_memcons __section(".data.memcons") = { .ibuf_size = INMEM_UV_CON_IN_LEN, }; +const char * wrap_key_prop_str[] = { + "wrapping-key-passwd", + "wrapping-key-publicname", + "wrapping-key-policy-a", + "wrapping-key-policy-b", + NULL +}; + static struct dt_node *add_uv_dt_node(void) { struct dt_node *dev, *uv; @@ -53,6 +61,19 @@ static struct dt_node *add_uv_dt_node(void) return dev; } +static struct dt_node *find_tpm_sim_node(void) +{ + struct dt_node *tpm_sim_node; + + tpm_sim_node = dt_find_compatible_node(dt_root, NULL, "uv,tpm_sim"); + if (!tpm_sim_node) { + prlog(PR_INFO, "uv,tpm_sim compatible node not found\n"); + return NULL; + } + + return tpm_sim_node; +} + static struct dt_node *find_uv_node(void) { struct dt_node *uv_node, *dt; @@ -112,6 +133,33 @@ static uint64_t find_uv_fw_base_addr(struct dt_node *uv_node) return base_addr; } +static int add_wrapping_key_mambo(void *fdt) +{ + struct dt_node *tpm_sim_node; + const struct dt_property *property = NULL; + + if ((tpm_sim_node = find_tpm_sim_node())) { + int i; + + fdt_begin_node(fdt, "ibm,uv-tpm"); + fdt_property_string(fdt, "compatible", "ibm,uv-tpm"); + + for (i = 0; wrap_key_prop_str[i] != NULL; i++) { + property = dt_find_property(tpm_sim_node, + wrap_key_prop_str[i]); + if (property) { + fdt_property(fdt, wrap_key_prop_str[i], + property->prop, + property->len); + } + } + + fdt_end_node(fdt); + } + + return 0; +} + static int create_dtb_uv(void *uv_fdt) { if (fdt_create(uv_fdt, UV_FDT_MAX_SIZE)) { @@ -124,8 +172,14 @@ static int create_dtb_uv(void *uv_fdt) fdt_property_string(uv_fdt, "description", "Ultravisor fdt"); fdt_begin_node(uv_fdt, "ibm,uv-fdt"); fdt_property_string(uv_fdt, "compatible", "ibm,uv-fdt"); - if (fdt_add_wrapping_key(uv_fdt)) - prlog(PR_ERR, "Failed to add the wrapping key to dt\n"); + if (proc_chip_quirks & QUIRK_MAMBO_CALLOUTS) { + if (add_wrapping_key_mambo(uv_fdt)) + prlog(PR_ERR, "Failed to add the mambo wrapping key" + " to dt\n"); + } else + if (fdt_add_wrapping_key(uv_fdt)) + prlog(PR_ERR, "Failed to add the wrapping key" + " to dt\n"); fdt_end_node(uv_fdt); fdt_end_node(uv_fdt); fdt_finish(uv_fdt); |