Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1753253AbcJKKVS convert rfc822-to-8bit (ORCPT ); Tue, 11 Oct 2016 06:21:18 -0400 Received: from mga09.intel.com ([134.134.136.24]:17535 "EHLO mga09.intel.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1752684AbcJKKVQ (ORCPT ); Tue, 11 Oct 2016 06:21:16 -0400 X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="5.31,476,1473145200"; d="scan'208";a="1063230922" From: "Winkler, Tomas" To: Jarkko Sakkinen , Peter Huewe CC: "moderated list:TPM DEVICE DRIVER" , open list Subject: RE: [tpmdd-devel] [PATCH 2/3] tpm_crb: encapsulate crb_wait_for_reg_32 Thread-Topic: [tpmdd-devel] [PATCH 2/3] tpm_crb: encapsulate crb_wait_for_reg_32 Thread-Index: AQHSI6EqHtk9OrA6GUSi7DjYelReeKCjB1og Date: Tue, 11 Oct 2016 10:21:03 +0000 Message-ID: <5B8DA87D05A7694D9FA63FD143655C1B542F7FD8@hasmsx108.ger.corp.intel.com> References: <1476177787-15003-1-git-send-email-jarkko.sakkinen@linux.intel.com> <1476177787-15003-4-git-send-email-jarkko.sakkinen@linux.intel.com> In-Reply-To: <1476177787-15003-4-git-send-email-jarkko.sakkinen@linux.intel.com> Accept-Language: en-US Content-Language: en-US X-MS-Has-Attach: X-MS-TNEF-Correlator: x-ctpclassification: CTP_IC x-titus-metadata-40: eyJDYXRlZ29yeUxhYmVscyI6IiIsIk1ldGFkYXRhIjp7Im5zIjoiaHR0cDpcL1wvd3d3LnRpdHVzLmNvbVwvbnNcL0ludGVsMyIsImlkIjoiMGQ3NDlmNjQtZDRjZC00NDdhLTg4N2YtMzYwNDJiOTk2ZmQwIiwicHJvcHMiOlt7Im4iOiJDVFBDbGFzc2lmaWNhdGlvbiIsInZhbHMiOlt7InZhbHVlIjoiQ1RQX0lDIn1dfV19LCJTdWJqZWN0TGFiZWxzIjpbXSwiVE1DVmVyc2lvbiI6IjE1LjkuNi42IiwiVHJ1c3RlZExhYmVsSGFzaCI6IjB3dWlrcWhxZ1wvcDBqS0RzU2FLYUt6VUZTUzhrTHZ6ejRmSDBJM01tQXpNPSJ9 x-originating-ip: [10.184.70.10] Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: 8BIT MIME-Version: 1.0 Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Content-Length: 2992 Lines: 89 > Encapsulated crb_wait_for_reg32() so that state changes in other CRB registers > than TPM_CRB_CTRL_REQ_x can be waited. > > Signed-off-by: Jarkko Sakkinen > --- > drivers/char/tpm/tpm_crb.c | 40 +++++++++++++++++++++++----------------- > 1 file changed, 23 insertions(+), 17 deletions(-) > > diff --git a/drivers/char/tpm/tpm_crb.c b/drivers/char/tpm/tpm_crb.c index > c34318b..45f53c2 100644 > --- a/drivers/char/tpm/tpm_crb.c > +++ b/drivers/char/tpm/tpm_crb.c > @@ -121,6 +121,25 @@ static int __maybe_unused crb_go_idle(struct device > *dev, struct crb_priv *priv) > return 0; > } > > +static bool crb_wait_for_reg_32(u32 __iomem *reg, u32 mask, u32 value, > + unsigned long timeout) This is a boiler plate register polling function I would call it _poll_ rather the _wait_ > +{ > + ktime_t start; > + ktime_t stop; > + > + start = ktime_get(); > + stop = ktime_add(start, ms_to_ktime(timeout)); > + > + do { > + if ((ioread32(reg) & mask) == value) I prefer the register value is synced to variable, this inlining is harder to add adhoc debug prints. Also you removed the debug print out that I know when this settled which is important for catching bugs. > + return true; > + > + usleep_range(50, 100); How do you know this is correct sleep time, I've tuned that for power gating I'm not sure you this fits also for locality. > + } while (ktime_before(ktime_get(), stop)); > + > + return false; > +} > + > /** > * crb_cmd_ready - request tpm crb device to enter ready state > * > @@ -138,27 +157,14 @@ static int __maybe_unused crb_go_idle(struct device > *dev, struct crb_priv *priv) static int __maybe_unused crb_cmd_ready(struct > device *dev, > struct crb_priv *priv) > { > - ktime_t stop, start; > - u32 req; > - > if (priv->flags & CRB_FL_ACPI_START) > return 0; > > iowrite32(CRB_CTRL_REQ_CMD_READY, &priv->regs_t->ctrl_req); > - > - start = ktime_get(); > - stop = ktime_add(start, ms_to_ktime(TPM2_TIMEOUT_C)); > - do { > - req = ioread32(&priv->regs_t->ctrl_req); > - if (!(req & CRB_CTRL_REQ_CMD_READY)) { > - dev_dbg(dev, "cmdReady in %lld usecs\n", > - ktime_to_us(ktime_sub(ktime_get(), start))); > - return 0; > - } > - usleep_range(50, 100); > - } while (ktime_before(ktime_get(), stop)); > - > - if (ioread32(&priv->regs_t->ctrl_req) & CRB_CTRL_REQ_CMD_READY) { > + if (!crb_wait_for_reg_32(&priv->regs_t->ctrl_req, > + CRB_CTRL_REQ_CMD_READY /* mask */, > + 0, /* value */ > + TPM2_TIMEOUT_C)) { > dev_warn(dev, "cmdReady timed out\n"); > return -ETIME; > } > -- > 2.7.4 > > > ------------------------------------------------------------------------------ > Check out the vibrant tech community on one of the world's most > engaging tech sites, SlashDot.org! http://sdm.link/slashdot > _______________________________________________ > tpmdd-devel mailing list > tpmdd-devel@lists.sourceforge.net > https://lists.sourceforge.net/lists/listinfo/tpmdd-devel