Hi Heinrich, On Tue, 16 Nov 2021 at 04:08, Ilias Apalodimas <ilias.apalodi...@linaro.org> wrote: > > On Mon, Nov 15, 2021 at 08:30:06PM +0100, Heinrich Schuchardt wrote: > > Before we can start measuring the TPM must be cleared. Do this in the > > post_probe() method of the uclass. > > > > Signed-off-by: Heinrich Schuchardt <heinrich.schucha...@canonical.com> > > --- > > v2: > > tpm_startup2() is not available on all boards. > > tpm_startup() takes care of translating the call. > > --- > > drivers/tpm/tpm-uclass.c | 13 +++++++++++++ > > 1 file changed, 13 insertions(+) > > > > diff --git a/drivers/tpm/tpm-uclass.c b/drivers/tpm/tpm-uclass.c > > index f67fe1019b..abd9ce35e8 100644 > > --- a/drivers/tpm/tpm-uclass.c > > +++ b/drivers/tpm/tpm-uclass.c > > @@ -11,6 +11,7 @@ > > #include <log.h> > > #include <linux/delay.h> > > #include <linux/unaligned/be_byteshift.h> > > +#include <tpm_api.h> > > #include <tpm-v1.h> > > #include <tpm-v2.h> > > #include "tpm_internal.h" > > @@ -136,6 +137,17 @@ int tpm_xfer(struct udevice *dev, const uint8_t > > *sendbuf, size_t send_size, > > return 0; > > } > > > > +static int dm_tpm_post_probe(struct udevice *dev)
Please drop the dm_ > > +{ > > + /* > > + * Clearing the TPM state is only possible once after a hard reset. > > + * As we do not know if the TPM has been cleared by a prior boot stage > > + * ignore the return value here. > > + */ > > + tpm_startup(dev, TPM_ST_CLEAR); blank line before final return > > + return 0; > > +} This should only happen once and if the TPM is set up in SPL then this seems to cause a failure if done again. Is there another way we can deal with this? Could the TPM user decide whether it needs to be set? For the approach you have here, I think the best option might be to add a property to the devicetree. That way the prior stage can control it. > > + > > UCLASS_DRIVER(tpm) = { > > .id = UCLASS_TPM, > > .name = "tpm", > > @@ -143,5 +155,6 @@ UCLASS_DRIVER(tpm) = { > > #if CONFIG_IS_ENABLED(OF_REAL) > > .post_bind = dm_scan_fdt_dev, > > #endif > > + .post_probe = dm_tpm_post_probe, > > .per_device_auto = sizeof(struct tpm_chip_priv), > > }; > > -- > > 2.32.0 > > > > Reviewed-by: Ilias Apalodimas <ilias.apalodi...@linaro.org> Regards, Simon