On Mon Jun 5, 2023 at 8:59 PM EEST, Alexander Steffen wrote: > The CRC functionality is initialized before tpm_tis_core, so it can be used > on all code paths within the module. Therefore, move the CRC check to the > generic send routine, that also contains all other checks for successful > command transmission, so that all those checks are in one place. > > Also, this ensures that tpm_tis_ready is called when a CRC failure is > detected, to clear the invalid data from the TPM, which did not happen > previously. > > Signed-off-by: Alexander Steffen <Alexander.Steffen@xxxxxxxxxxxx> > --- > drivers/char/tpm/tpm_tis_core.c | 12 ++++++------ > 1 file changed, 6 insertions(+), 6 deletions(-) > > diff --git a/drivers/char/tpm/tpm_tis_core.c b/drivers/char/tpm/tpm_tis_core.c > index aaaa136044ae..5ddaf24518be 100644 > --- a/drivers/char/tpm/tpm_tis_core.c > +++ b/drivers/char/tpm/tpm_tis_core.c > @@ -466,6 +466,12 @@ static int tpm_tis_send_data(struct tpm_chip *chip, const u8 *buf, size_t len) > goto out_err; > } > > + rc = tpm_tis_verify_crc(priv, len, buf); > + if (rc < 0) { > + dev_err(&chip->dev, "CRC mismatch for command.\n"); > + goto out_err; > + } > + > return 0; > > out_err: > @@ -510,12 +516,6 @@ static int tpm_tis_send_main(struct tpm_chip *chip, const u8 *buf, size_t len) > if (rc < 0) > return rc; > > - rc = tpm_tis_verify_crc(priv, len, buf); > - if (rc < 0) { > - dev_err(&chip->dev, "CRC mismatch for command.\n"); > - return rc; > - } > - > /* go and do it */ > rc = tpm_tis_write8(priv, TPM_STS(priv->locality), TPM_STS_GO); > if (rc < 0) > -- > 2.34.1 Reviewed-by: Jarkko Sakkinen <jarkko@xxxxxxxxxx> BR, Jarkko