tpm, tpm_tis: Claim locality in interrupt handler
authorLino Sanfilippo <l.sanfilippo@kunbus.com>
Thu, 24 Nov 2022 13:55:35 +0000 (14:55 +0100)
committerJarkko Sakkinen <jarkko@kernel.org>
Mon, 24 Apr 2023 13:15:53 +0000 (16:15 +0300)
Writing the TPM_INT_STATUS register in the interrupt handler to clear the
interrupts only has effect if a locality is held. Since this is not
guaranteed at the time the interrupt is fired, claim the locality
explicitly in the handler.

Signed-off-by: Lino Sanfilippo <l.sanfilippo@kunbus.com>
Tested-by: Michael Niewöhner <linux@mniewoehner.de>
Tested-by: Jarkko Sakkinen <jarkko@kernel.org>
Reviewed-by: Jarkko Sakkinen <jarkko@kernel.org>
Signed-off-by: Jarkko Sakkinen <jarkko@kernel.org>
drivers/char/tpm/tpm_tis_core.c

index bd443cf..fda4ed6 100644 (file)
@@ -776,7 +776,9 @@ static irqreturn_t tis_int_handler(int dummy, void *dev_id)
                wake_up_interruptible(&priv->int_queue);
 
        /* Clear interrupts handled with TPM_EOI */
+       tpm_tis_request_locality(chip, 0);
        rc = tpm_tis_write32(priv, TPM_INT_STATUS(priv->locality), interrupt);
+       tpm_tis_relinquish_locality(chip, 0);
        if (rc < 0)
                return IRQ_NONE;