[PATCH v2 1/1] tpm: clear state post probing

Simon Glass sjg at chromium.org
Wed Nov 17 03:48:43 CET 2021


Hi Heinrich,

On Tue, 16 Nov 2021 at 04:08, Ilias Apalodimas
<ilias.apalodimas at 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.schuchardt at 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.apalodimas at linaro.org>

Regards,
Simon


More information about the U-Boot mailing list