From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-8.2 required=3.0 tests=HEADER_FROM_DIFFERENT_DOMAINS, INCLUDES_PATCH,MAILING_LIST_MULTI,SIGNED_OFF_BY,SPF_HELO_NONE,SPF_PASS, URIBL_BLOCKED,USER_AGENT_SANE_2 autolearn=unavailable autolearn_force=no version=3.4.0 Received: from mail.kernel.org (mail.kernel.org [198.145.29.99]) by smtp.lore.kernel.org (Postfix) with ESMTP id 2CBCAC3524D for ; Mon, 3 Feb 2020 15:11:55 +0000 (UTC) Received: from kanga.kvack.org (kanga.kvack.org [205.233.56.17]) by mail.kernel.org (Postfix) with ESMTP id EE63921741 for ; Mon, 3 Feb 2020 15:11:54 +0000 (UTC) DMARC-Filter: OpenDMARC Filter v1.3.2 mail.kernel.org EE63921741 Authentication-Results: mail.kernel.org; dmarc=none (p=none dis=none) header.from=Huawei.com Authentication-Results: mail.kernel.org; spf=pass smtp.mailfrom=owner-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix) id 90AA66B067A; Mon, 3 Feb 2020 10:11:54 -0500 (EST) Received: by kanga.kvack.org (Postfix, from userid 40) id 8BC226B067B; Mon, 3 Feb 2020 10:11:54 -0500 (EST) X-Delivered-To: int-list-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix, from userid 63042) id 7D1EB6B067C; Mon, 3 Feb 2020 10:11:54 -0500 (EST) X-Delivered-To: linux-mm@kvack.org Received: from forelay.hostedemail.com (smtprelay0068.hostedemail.com [216.40.44.68]) by kanga.kvack.org (Postfix) with ESMTP id 67EAA6B067A for ; Mon, 3 Feb 2020 10:11:54 -0500 (EST) Received: from smtpin03.hostedemail.com (10.5.19.251.rfc1918.com [10.5.19.251]) by forelay05.hostedemail.com (Postfix) with ESMTP id 22309181AEF23 for ; Mon, 3 Feb 2020 15:11:54 +0000 (UTC) X-FDA: 76449155748.03.pest36_67d60bb863d06 X-HE-Tag: pest36_67d60bb863d06 X-Filterd-Recvd-Size: 5415 Received: from huawei.com (lhrrgout.huawei.com [185.176.76.210]) by imf20.hostedemail.com (Postfix) with ESMTP for ; Mon, 3 Feb 2020 15:11:53 +0000 (UTC) Received: from lhreml702-cah.china.huawei.com (unknown [172.18.7.108]) by Forcepoint Email with ESMTP id 3C76168F46C989B83057; Mon, 3 Feb 2020 15:11:50 +0000 (GMT) Received: from lhreml710-chm.china.huawei.com (10.201.108.61) by lhreml702-cah.china.huawei.com (10.201.108.43) with Microsoft SMTP Server (TLS) id 14.3.408.0; Mon, 3 Feb 2020 15:11:50 +0000 Received: from localhost (10.202.226.57) by lhreml710-chm.china.huawei.com (10.201.108.61) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.1.1713.5; Mon, 3 Feb 2020 15:11:49 +0000 Date: Mon, 3 Feb 2020 15:11:48 +0000 From: Jonathan Cameron To: Alastair D'Silva CC: , Benjamin Herrenschmidt , Paul Mackerras , Michael Ellerman , Frederic Barrat , Andrew Donnellan , Arnd Bergmann , Greg Kroah-Hartman , Dan Williams , "Vishal Verma" , Dave Jiang , "Keith Busch" , Ira Weiny , "Andrew Morton" , Mauro Carvalho Chehab , "David S. Miller" , "Rob Herring" , Anton Blanchard , "Krzysztof Kozlowski" , Mahesh Salgaonkar , Madhavan Srinivasan , "=?ISO-8859-1?Q?C=E9dric?= Le Goater" , Anju T Sudhakar , "Hari Bathini" , Thomas Gleixner , "Greg Kurz" , Nicholas Piggin , Masahiro Yamada , Alexey Kardashevskiy , , , , Subject: Re: [PATCH v2 22/27] nvdimm/ocxl: Implement the heartbeat command Message-ID: <20200203151148.00000ae0@Huawei.com> In-Reply-To: <20191203034655.51561-23-alastair@au1.ibm.com> References: <20191203034655.51561-1-alastair@au1.ibm.com> <20191203034655.51561-23-alastair@au1.ibm.com> Organization: Huawei Technologies Research and Development (UK) Ltd. X-Mailer: Claws Mail 3.17.4 (GTK+ 2.24.32; i686-w64-mingw32) MIME-Version: 1.0 Content-Type: text/plain; charset="US-ASCII" Content-Transfer-Encoding: 7bit X-Originating-IP: [10.202.226.57] X-ClientProxiedBy: lhreml745-chm.china.huawei.com (10.201.108.195) To lhreml710-chm.china.huawei.com (10.201.108.61) X-CFilter-Loop: Reflected X-Bogosity: Ham, tests=bogofilter, spamicity=0.000000, version=1.2.4 Sender: owner-linux-mm@kvack.org Precedence: bulk X-Loop: owner-majordomo@kvack.org List-ID: On Tue, 3 Dec 2019 14:46:50 +1100 Alastair D'Silva wrote: > From: Alastair D'Silva > > The heartbeat admin command is a simple admin command that exercises > the communication mechanisms within the controller. > > This patch issues a heartbeat command to the card during init to ensure > we can communicate with the card's crontroller. controller > > Signed-off-by: Alastair D'Silva > --- > drivers/nvdimm/ocxl/scm.c | 43 +++++++++++++++++++++++++++++++++++++++ > 1 file changed, 43 insertions(+) > > diff --git a/drivers/nvdimm/ocxl/scm.c b/drivers/nvdimm/ocxl/scm.c > index 8a30c887b5ed..e8b34262f397 100644 > --- a/drivers/nvdimm/ocxl/scm.c > +++ b/drivers/nvdimm/ocxl/scm.c > @@ -353,6 +353,44 @@ static bool scm_is_usable(const struct scm_data *scm_data) > return true; > } > > +/** > + * scm_heartbeat() - Issue a heartbeat command to the controller > + * @scm_data: a pointer to the SCM device data > + * Return: 0 if the controller responded correctly, negative on error > + */ > +static int scm_heartbeat(struct scm_data *scm_data) > +{ > + int rc; > + > + mutex_lock(&scm_data->admin_command.lock); > + > + rc = scm_admin_command_request(scm_data, ADMIN_COMMAND_HEARTBEAT); > + if (rc) > + goto out; > + > + rc = scm_admin_command_execute(scm_data); > + if (rc) > + goto out; > + > + rc = scm_admin_command_complete_timeout(scm_data, ADMIN_COMMAND_HEARTBEAT); > + if (rc < 0) { > + dev_err(&scm_data->dev, "Heartbeat timeout\n"); > + goto out; > + } > + > + rc = scm_admin_response(scm_data); > + if (rc < 0) > + goto out; > + if (rc != STATUS_SUCCESS) > + scm_warn_status(scm_data, "Unexpected status from heartbeat", rc); > + > + rc = scm_admin_response_handled(scm_data); > + > +out: > + mutex_unlock(&scm_data->admin_command.lock); > + return rc; > +} > + > /** > * allocate_scm_minor() - Allocate a minor number to use for an SCM device > * @scm_data: The SCM device to associate the minor with > @@ -1508,6 +1546,11 @@ static int scm_probe(struct pci_dev *pdev, const struct pci_device_id *ent) > goto err; > } > > + if (scm_heartbeat(scm_data)) { > + dev_err(&pdev->dev, "SCM Heartbeat failed\n"); > + goto err; > + } > + > elapsed = 0; > timeout = scm_data->readiness_timeout + scm_data->memory_available_timeout; > while (!scm_is_usable(scm_data)) {