Received: by 2002:ac0:a5a6:0:0:0:0:0 with SMTP id m35-v6csp709148imm; Fri, 21 Sep 2018 07:05:02 -0700 (PDT) X-Google-Smtp-Source: ANB0VdZaKRYwAdCV3TZ0oKOTHlnOJFtb148G4peruyhxLgEfqsINVWq4AkTnTy7O/NQx57hy3kQg X-Received: by 2002:a62:8186:: with SMTP id t128-v6mr46074415pfd.192.1537538702399; Fri, 21 Sep 2018 07:05:02 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1537538702; cv=none; d=google.com; s=arc-20160816; b=B02Jt0PTqZHAKdGuHl1oeWQkZOJRxgbS+Lan9qnBilgdEoO8FRis1HXEm0oEsx7t4G w3I65G5ai6hRwhnFstvxnROFkVqDPLGQEO7aztYUQYqUBLErPqIm/EVw453DTdP4FVRp s6PQbt0kSbUiJbepllu5tygqW9U+Z5ESSd97zk8W8n9EZUA1WJii6YzZvSbwslNoawVp IXCEmRtg+SkZJc0VwSePD200RW57RxgWmWGrgu5+CttpTjdvhxcMO5awH+pK0WDZKefV K8OrSOWOducbw0/mgNo0e6DvVwbbzy2f6xCY8RJlugTK4D3QwfpGhSUJOXjZJU4i/Fd+ 4AKA== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:sender:references:in-reply-to:message-id:date :subject:cc:to:from; bh=TiBgYPrhS2YmojvDfelStVR/kidsWggOVsVefhZbR9I=; b=uHN7LXa+iRVBy2TPi4aGX4Oh3FPu30phyWWOQSbg1TCO7RY90H1xki0qMMS3Y259HH Q67O1dTMVCTY05AMh/zqKPoSrmgKpHUuxSn8zQO+2PIOPYLwglc5L8NEeRg76Oa36XDX gA+f8x3TGr3TawqmbQAHWgloWCDtL+maEagnITUrb849hKPTKqwZdp7Obaw83uxqdmSl vP0bI7ToBgx3C63BHUkVQlV4CaOmiKxMO82iKk6nXJhkUIoD4A9A/T1EXuPor4nZdCt4 +yfdhv8HvRaO2DcJrfZ8L/HcXftLXTqDODLRD9FdW7DevfP9mKIJM6IdELUDhW6P0WvT EEHA== ARC-Authentication-Results: i=1; mx.google.com; spf=pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=fail (p=NONE sp=NONE dis=NONE) header.from=intel.com Return-Path: Received: from vger.kernel.org (vger.kernel.org. [209.132.180.67]) by mx.google.com with ESMTP id o20-v6si28809772pgn.66.2018.09.21.07.04.46; Fri, 21 Sep 2018 07:05:02 -0700 (PDT) Received-SPF: pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) client-ip=209.132.180.67; Authentication-Results: mx.google.com; spf=pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=fail (p=NONE sp=NONE dis=NONE) header.from=intel.com Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S2390305AbeIUTvQ (ORCPT + 99 others); Fri, 21 Sep 2018 15:51:16 -0400 Received: from mga18.intel.com ([134.134.136.126]:4635 "EHLO mga18.intel.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S2389657AbeIUTvN (ORCPT ); Fri, 21 Sep 2018 15:51:13 -0400 X-Amp-Result: SKIPPED(no attachment in message) X-Amp-File-Uploaded: False Received: from fmsmga007.fm.intel.com ([10.253.24.52]) by orsmga106.jf.intel.com with ESMTP/TLS/DHE-RSA-AES256-GCM-SHA384; 21 Sep 2018 07:02:00 -0700 X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="5.54,285,1534834800"; d="scan'208";a="71839039" Received: from twinkler-lnx.jer.intel.com ([10.12.91.48]) by fmsmga007.fm.intel.com with ESMTP; 21 Sep 2018 07:01:57 -0700 From: Tomas Winkler To: Jarkko Sakkinen , Jason Gunthorpe Cc: Alexander Usyskin , Tadeusz Struk , linux-integrity@vger.kernel.org, linux-security-module@vger.kernel.org, linux-kernel@vger.kernel.org, Tomas Winkler Subject: [PATCH v4 04/21] tpm: add tpm_calc_ordinal_duration() wrapper Date: Fri, 21 Sep 2018 16:58:03 +0300 Message-Id: <20180921135820.20549-5-tomas.winkler@intel.com> X-Mailer: git-send-email 2.14.4 In-Reply-To: <20180921135820.20549-1-tomas.winkler@intel.com> References: <20180921135820.20549-1-tomas.winkler@intel.com> Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Add convenient wrapper for ordinal duration computation to remove boiler plate if else statement over TPM2. if (chip->flags & TPM_CHIP_FLAG_TPM2) tpm2_calc_ordinal_duration(chip, ordinal); else tpm1_calc_ordinal_duration(chip, ordinal); Signed-off-by: Tomas Winkler Reviewed-by: Jarkko Sakkinen Tested-by: Jarkko Sakkinen --- V2-V3: Rebase V4: Add Kdoc drivers/char/tpm/st33zp24/st33zp24.c | 2 +- drivers/char/tpm/tpm-interface.c | 24 ++++++++++++++++++++---- drivers/char/tpm/tpm.h | 1 + drivers/char/tpm/tpm1-cmd.c | 1 - drivers/char/tpm/tpm2-cmd.c | 1 - drivers/char/tpm/tpm_i2c_nuvoton.c | 2 +- drivers/char/tpm/tpm_tis_core.c | 6 +----- drivers/char/tpm/xen-tpmfront.c | 2 +- 8 files changed, 25 insertions(+), 14 deletions(-) diff --git a/drivers/char/tpm/st33zp24/st33zp24.c b/drivers/char/tpm/st33zp24/st33zp24.c index 16be974955ea..abd675bec88c 100644 --- a/drivers/char/tpm/st33zp24/st33zp24.c +++ b/drivers/char/tpm/st33zp24/st33zp24.c @@ -430,7 +430,7 @@ static int st33zp24_send(struct tpm_chip *chip, unsigned char *buf, ordinal = be32_to_cpu(*((__be32 *) (buf + 6))); ret = wait_for_stat(chip, TPM_STS_DATA_AVAIL | TPM_STS_VALID, - tpm1_calc_ordinal_duration(chip, ordinal), + tpm_calc_ordinal_duration(chip, ordinal), &tpm_dev->read_queue, false); if (ret < 0) goto out_err; diff --git a/drivers/char/tpm/tpm-interface.c b/drivers/char/tpm/tpm-interface.c index bb3eed907c72..a7529844c60e 100644 --- a/drivers/char/tpm/tpm-interface.c +++ b/drivers/char/tpm/tpm-interface.c @@ -47,6 +47,25 @@ module_param_named(suspend_pcr, tpm_suspend_pcr, uint, 0644); MODULE_PARM_DESC(suspend_pcr, "PCR to use for dummy writes to facilitate flush on suspend."); +/** + * tpm_calc_ordinal_duration() - returns the maximum amount of time + * the chip could take to return the result for a particular ordinal + * in jiffies. + * + * @chip: TPM chip to use. + * @ordinal: TPM command ordinal. + * + * Return: A maxiaml duration time for an ordinal in jiffies. + */ +unsigned long tpm_calc_ordinal_duration(struct tpm_chip *chip, u32 ordinal) +{ + if (chip->flags & TPM_CHIP_FLAG_TPM2) + return tpm2_calc_ordinal_duration(chip, ordinal); + else + return tpm1_calc_ordinal_duration(chip, ordinal); +} +EXPORT_SYMBOL_GPL(tpm_calc_ordinal_duration); + static int tpm_validate_command(struct tpm_chip *chip, struct tpm_space *space, const u8 *cmd, @@ -220,10 +239,7 @@ static ssize_t tpm_try_transmit(struct tpm_chip *chip, if (chip->flags & TPM_CHIP_FLAG_IRQ) goto out_recv; - if (chip->flags & TPM_CHIP_FLAG_TPM2) - stop = jiffies + tpm2_calc_ordinal_duration(chip, ordinal); - else - stop = jiffies + tpm1_calc_ordinal_duration(chip, ordinal); + stop = jiffies + tpm_calc_ordinal_duration(chip, ordinal); do { u8 status = chip->ops->status(chip); if ((status & chip->ops->req_complete_mask) == diff --git a/drivers/char/tpm/tpm.h b/drivers/char/tpm/tpm.h index c59d2c20c339..73511cd89bef 100644 --- a/drivers/char/tpm/tpm.h +++ b/drivers/char/tpm/tpm.h @@ -547,6 +547,7 @@ int tpm_get_timeouts(struct tpm_chip *); int tpm1_auto_startup(struct tpm_chip *chip); int tpm_do_selftest(struct tpm_chip *chip); unsigned long tpm1_calc_ordinal_duration(struct tpm_chip *chip, u32 ordinal); +unsigned long tpm_calc_ordinal_duration(struct tpm_chip *chip, u32 ordinal); int tpm_pm_suspend(struct device *dev); int tpm_pm_resume(struct device *dev); diff --git a/drivers/char/tpm/tpm1-cmd.c b/drivers/char/tpm/tpm1-cmd.c index 7d14196de6eb..f8d85fda3b9b 100644 --- a/drivers/char/tpm/tpm1-cmd.c +++ b/drivers/char/tpm/tpm1-cmd.c @@ -307,4 +307,3 @@ unsigned long tpm1_calc_ordinal_duration(struct tpm_chip *chip, u32 ordinal) else return duration; } -EXPORT_SYMBOL_GPL(tpm1_calc_ordinal_duration); diff --git a/drivers/char/tpm/tpm2-cmd.c b/drivers/char/tpm/tpm2-cmd.c index be0a9ebcd7d7..238755b8fb01 100644 --- a/drivers/char/tpm/tpm2-cmd.c +++ b/drivers/char/tpm/tpm2-cmd.c @@ -127,7 +127,6 @@ unsigned long tpm2_calc_ordinal_duration(struct tpm_chip *chip, u32 ordinal) else return msecs_to_jiffies(TPM2_DURATION_DEFAULT); } -EXPORT_SYMBOL_GPL(tpm2_calc_ordinal_duration); struct tpm2_pcr_read_out { diff --git a/drivers/char/tpm/tpm_i2c_nuvoton.c b/drivers/char/tpm/tpm_i2c_nuvoton.c index 5d20e98b844f..4146f822fba9 100644 --- a/drivers/char/tpm/tpm_i2c_nuvoton.c +++ b/drivers/char/tpm/tpm_i2c_nuvoton.c @@ -456,7 +456,7 @@ static int i2c_nuvoton_send(struct tpm_chip *chip, u8 *buf, size_t len) return rc; } ordinal = be32_to_cpu(*((__be32 *) (buf + 6))); - duration = tpm1_calc_ordinal_duration(chip, ordinal); + duration = tpm_calc_ordinal_duration(chip, ordinal); rc = i2c_nuvoton_wait_for_data_avail(chip, duration, &priv->read_queue); if (rc) { dev_err(dev, "%s() timeout command duration %ld\n", diff --git a/drivers/char/tpm/tpm_tis_core.c b/drivers/char/tpm/tpm_tis_core.c index 14c332104de4..f9e73d0f9386 100644 --- a/drivers/char/tpm/tpm_tis_core.c +++ b/drivers/char/tpm/tpm_tis_core.c @@ -473,11 +473,7 @@ static int tpm_tis_send_main(struct tpm_chip *chip, const u8 *buf, size_t len) if (chip->flags & TPM_CHIP_FLAG_IRQ) { ordinal = be32_to_cpu(*((__be32 *) (buf + 6))); - if (chip->flags & TPM_CHIP_FLAG_TPM2) - dur = tpm2_calc_ordinal_duration(chip, ordinal); - else - dur = tpm1_calc_ordinal_duration(chip, ordinal); - + dur = tpm_calc_ordinal_duration(chip, ordinal); if (wait_for_tpm_stat (chip, TPM_STS_DATA_AVAIL | TPM_STS_VALID, dur, &priv->read_queue, false) < 0) { diff --git a/drivers/char/tpm/xen-tpmfront.c b/drivers/char/tpm/xen-tpmfront.c index 77097229bf49..b150f87f38f5 100644 --- a/drivers/char/tpm/xen-tpmfront.c +++ b/drivers/char/tpm/xen-tpmfront.c @@ -164,7 +164,7 @@ static int vtpm_send(struct tpm_chip *chip, u8 *buf, size_t count) notify_remote_via_evtchn(priv->evtchn); ordinal = be32_to_cpu(((struct tpm_input_header*)buf)->ordinal); - duration = tpm1_calc_ordinal_duration(chip, ordinal); + duration = tpm_calc_ordinal_duration(chip, ordinal); if (wait_for_tpm_stat(chip, VTPM_STATUS_IDLE, duration, &priv->read_queue, true) < 0) { -- 2.14.4