Hi Raymond, On Fri, 17 Jan 2025 at 09:36, Raymond Mao <[email protected]> wrote: > > Get tpm event log from bloblist instead of FDT when bloblist is > enabled and valid from previous boot stage. > > Signed-off-by: Raymond Mao <[email protected]> > --- > Changes in v2 > - Remove patch dependency. > - Remove the fallback to FDT when BLOBLIST is selected. > Changes in v3 > - Malloc an 8KB buffer when user eventlog buffer does not exist. > Changes in v4 > - Replace the default eventlog size with TPM2_EVENT_LOG_SIZE. > Changes in v5 > - Replace TPM2_EVENT_LOG_SIZE with CONFIG_TPM2_EVENT_LOG_SIZE. > - Add an inline TODO comment. > Changes in v6 > - Remove the malloc and keep the buffer pointed by "sml" for the fallback > as it is the right place for linux to discover the eventlog. > > lib/tpm_tcg2.c | 58 +++++++++++++++++++++++++++++++++----------------- > 1 file changed, 38 insertions(+), 20 deletions(-)
Reviewed-by: Simon Glass <[email protected]> with nit below > > diff --git a/lib/tpm_tcg2.c b/lib/tpm_tcg2.c > index 4134d93a35..6425bf143a 100644 > --- a/lib/tpm_tcg2.c > +++ b/lib/tpm_tcg2.c > @@ -5,6 +5,7 @@ > > #include <dm.h> > #include <dm/of_access.h> > +#include <malloc.h> > #include <tpm_api.h> > #include <tpm-common.h> > #include <tpm-v2.h> > @@ -19,6 +20,7 @@ > #include <linux/unaligned/generic.h> > #include <linux/unaligned/le_byteshift.h> > #include "tpm-utils.h" > +#include <bloblist.h> > > int tcg2_get_pcr_info(struct udevice *dev, u32 *supported_bank, u32 > *active_bank, > u32 *bank_num) > @@ -672,21 +674,40 @@ void tcg2_measurement_term(struct udevice *dev, struct > tcg2_event_log *elog, > > __weak int tcg2_platform_get_log(struct udevice *dev, void **addr, u32 *size) > { > - const __be32 *addr_prop; > - const __be32 *size_prop; > + const __be32 *addr_prop = NULL; > + const __be32 *size_prop = NULL; > int asize; > int ssize; > + struct ofnode_phandle_args args; > + phys_addr_t a; > + fdt_size_t s; > > *addr = NULL; > *size = 0; > > - addr_prop = dev_read_prop(dev, "tpm_event_log_addr", &asize); > - if (!addr_prop) > - addr_prop = dev_read_prop(dev, "linux,sml-base", &asize); > + *addr = bloblist_get_blob(BLOBLISTT_TPM_EVLOG, size); > + if (*addr && *size) > + return 0; > > - size_prop = dev_read_prop(dev, "tpm_event_log_size", &ssize); > - if (!size_prop) > + /* > + * TODO: > + * Replace BLOBLIST with a new kconfig for handoff all components > + * (fdt, tpm event log, etc...) from previous boot stage via bloblist > + * mandatorily following Firmware Handoff spec. Just to mention, this patch is fine with me, but I don't agree with having a new Kconfig for this. That would need a separate discussion. > + */ > + if (!CONFIG_IS_ENABLED(BLOBLIST)) { > + addr_prop = dev_read_prop(dev, "tpm_event_log_addr", &asize); > + size_prop = dev_read_prop(dev, "tpm_event_log_size", &ssize); > + } > + > + /* > + * If no eventlog was observed, a sml buffer is required for the > kernel > + * to discover the eventlog. > + */ > + if (!addr_prop || !size_prop) { > + addr_prop = dev_read_prop(dev, "linux,sml-base", &asize); > size_prop = dev_read_prop(dev, "linux,sml-size", &ssize); > + } > > if (addr_prop && size_prop) { > u64 a = of_read_number(addr_prop, asize / sizeof(__be32)); > @@ -694,22 +715,19 @@ __weak int tcg2_platform_get_log(struct udevice *dev, > void **addr, u32 *size) > > *addr = map_physmem(a, s, MAP_NOCACHE); > *size = (u32)s; > - } else { > - struct ofnode_phandle_args args; > - phys_addr_t a; > - fdt_size_t s; > > - if (dev_read_phandle_with_args(dev, "memory-region", NULL, 0, > - 0, &args)) > - return -ENODEV; > + return 0; > + } > + > + if (dev_read_phandle_with_args(dev, "memory-region", NULL, 0, 0, > &args)) > + return -ENODEV; > > - a = ofnode_get_addr_size(args.node, "reg", &s); > - if (a == FDT_ADDR_T_NONE) > - return -ENOMEM; > + a = ofnode_get_addr_size(args.node, "reg", &s); > + if (a == FDT_ADDR_T_NONE) > + return -ENOMEM; > > - *addr = map_physmem(a, s, MAP_NOCACHE); > - *size = (u32)s; > - } > + *addr = map_physmem(a, s, MAP_NOCACHE); > + *size = (u32)s; > > return 0; > } > -- > 2.25.1 > Regards, Simon

