tpm, tpm_tis: Move interrupt mask checks into own function
authorLino Sanfilippo <l.sanfilippo@kunbus.com>
Thu, 24 Nov 2022 13:55:31 +0000 (14:55 +0100)
committerJarkko Sakkinen <jarkko@kernel.org>
Mon, 24 Apr 2023 13:15:53 +0000 (16:15 +0300)
Clean up wait_for_tpm_stat() by moving multiple similar interrupt mask
checks into an own function.

Signed-off-by: Lino Sanfilippo <l.sanfilippo@kunbus.com>
Suggested-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 e4ba4d5..8981433 100644 (file)
@@ -44,6 +44,20 @@ static bool wait_for_tpm_stat_cond(struct tpm_chip *chip, u8 mask,
        return false;
 }
 
+static u8 tpm_tis_filter_sts_mask(u8 int_mask, u8 sts_mask)
+{
+       if (!(int_mask & TPM_INTF_STS_VALID_INT))
+               sts_mask &= ~TPM_STS_VALID;
+
+       if (!(int_mask & TPM_INTF_DATA_AVAIL_INT))
+               sts_mask &= ~TPM_STS_DATA_AVAIL;
+
+       if (!(int_mask & TPM_INTF_CMD_READY_INT))
+               sts_mask &= ~TPM_STS_COMMAND_READY;
+
+       return sts_mask;
+}
+
 static int wait_for_tpm_stat(struct tpm_chip *chip, u8 mask,
                unsigned long timeout, wait_queue_head_t *queue,
                bool check_cancel)
@@ -53,7 +67,7 @@ static int wait_for_tpm_stat(struct tpm_chip *chip, u8 mask,
        long rc;
        u8 status;
        bool canceled = false;
-       u8 sts_mask = 0;
+       u8 sts_mask;
        int ret = 0;
 
        /* check current status */
@@ -61,17 +75,10 @@ static int wait_for_tpm_stat(struct tpm_chip *chip, u8 mask,
        if ((status & mask) == mask)
                return 0;
 
+       sts_mask = mask & (TPM_STS_VALID | TPM_STS_DATA_AVAIL |
+                          TPM_STS_COMMAND_READY);
        /* check what status changes can be handled by irqs */
-       if (priv->int_mask & TPM_INTF_STS_VALID_INT)
-               sts_mask |= TPM_STS_VALID;
-
-       if (priv->int_mask & TPM_INTF_DATA_AVAIL_INT)
-               sts_mask |= TPM_STS_DATA_AVAIL;
-
-       if (priv->int_mask & TPM_INTF_CMD_READY_INT)
-               sts_mask |= TPM_STS_COMMAND_READY;
-
-       sts_mask &= mask;
+       sts_mask = tpm_tis_filter_sts_mask(priv->int_mask, sts_mask);
 
        stop = jiffies + timeout;
        /* process status changes with irq support */