Received: by 2002:a05:6a10:f3d0:0:0:0:0 with SMTP id a16csp3015349pxv; Mon, 12 Jul 2021 07:21:31 -0700 (PDT) X-Google-Smtp-Source: ABdhPJy4J4fZpb+51wHGyGwJFd2jtG+UEm8DM2DwSdxSBdCoLOqU4dx5P71UVEgrB8nZIYhkpBhq X-Received: by 2002:a92:c7a6:: with SMTP id f6mr23032485ilk.20.1626099691164; Mon, 12 Jul 2021 07:21:31 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1626099691; cv=none; d=google.com; s=arc-20160816; b=Z5Iaqg+NxdR6REe5b0uaP4y3Y+ozh2bERHWAiMOy8b14uoadq5mro0ebUKzVKdSpBf qQ3p4sSDw8RagJJJ1+3UJQJOS0dOYBeKEA8Ot2pWTYlSX2/l3fZX6plYTN8qm5f1/dDK oVzUAICwW0MhtAKUuIP/yHRupHlh24pKiFACrLP+B/DGQnWZ3aKMVDOzQus/DAeHlWyZ YnX9Y1zdOEdVhfGTDUTmBjVu1WgTU5Dr89+xnY8b4T9CZBciQeYzeGRS1gmTE8uSNWvU ZgRE8CP9t6WJ68QOjDDaA16xicyPjFnHZaQvqdJkW/AQmn6aX9ricDTmPvKChqgG49gz RiIQ== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:references:in-reply-to:message-id:date:subject :cc:to:from; bh=s/jxBFYZSKQnYiTY67mqF5AUsU32inhLaDxcRD5eSo8=; b=zaH6I2S5840/MbB5XfYx2SZj4Ia2VjpsuK8LtV6MSstSxWtYXa3zsmyC2mkqRRJMDJ Wp64bkP0qY9dtiG0iCyd3ngs9WGB2Lo6D8ypvL3zOIoigsFd2DyH9wRLbm6uJRS/6zxS VWqxo6HcCIgcq6RZ1OPmfp+NA2BOM1QZvBHLPM5RBQxRWA1ye5vRIuN+/pq7SoY+Xy4n kO6Sx26jqkp8pBsyDMg63uRRnUuekW9LUInRhHoRPKG59b0QJqjfTcvqCkSwMOnNGXrb P3fhzARA/mGYtlruZ3WnEsDGmbXJv27F9E3D8Hy6X7nyOtU3S7FHahuWx6f+xh2zr8Ym NbOg== ARC-Authentication-Results: i=1; mx.google.com; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=fail (p=NONE sp=NONE dis=NONE) header.from=arm.com Return-Path: Received: from vger.kernel.org (vger.kernel.org. [23.128.96.18]) by mx.google.com with ESMTP id a5si17212024ioq.24.2021.07.12.07.21.19; Mon, 12 Jul 2021 07:21:31 -0700 (PDT) Received-SPF: pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) client-ip=23.128.96.18; Authentication-Results: mx.google.com; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=fail (p=NONE sp=NONE dis=NONE) header.from=arm.com Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S235101AbhGLOWW (ORCPT + 99 others); Mon, 12 Jul 2021 10:22:22 -0400 Received: from foss.arm.com ([217.140.110.172]:56034 "EHLO foss.arm.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S235006AbhGLOWV (ORCPT ); Mon, 12 Jul 2021 10:22:21 -0400 Received: from usa-sjc-imap-foss1.foss.arm.com (unknown [10.121.207.14]) by usa-sjc-mx-foss1.foss.arm.com (Postfix) with ESMTP id 637FED6E; Mon, 12 Jul 2021 07:19:33 -0700 (PDT) Received: from e120937-lin.home (unknown [172.31.20.19]) by usa-sjc-imap-foss1.foss.arm.com (Postfix) with ESMTPSA id 695603F774; Mon, 12 Jul 2021 07:19:30 -0700 (PDT) From: Cristian Marussi To: linux-kernel@vger.kernel.org, linux-arm-kernel@lists.infradead.org, virtualization@lists.linux-foundation.org, virtio-dev@lists.oasis-open.org Cc: sudeep.holla@arm.com, james.quinlan@broadcom.com, Jonathan.Cameron@Huawei.com, f.fainelli@gmail.com, etienne.carriere@linaro.org, vincent.guittot@linaro.org, souvik.chakravarty@arm.com, cristian.marussi@arm.com, igor.skalkin@opensynergy.com, peter.hilber@opensynergy.com, alex.bennee@linaro.org, jean-philippe@linaro.org, mikhail.golubev@opensynergy.com, anton.yakovlev@opensynergy.com, Vasyl.Vavrychuk@opensynergy.com, Andriy.Tryshnivskyy@opensynergy.com Subject: [PATCH v6 10/17] firmware: arm_scmi: Make polling mode optional Date: Mon, 12 Jul 2021 15:18:26 +0100 Message-Id: <20210712141833.6628-11-cristian.marussi@arm.com> X-Mailer: git-send-email 2.17.1 In-Reply-To: <20210712141833.6628-1-cristian.marussi@arm.com> References: <20210712141833.6628-1-cristian.marussi@arm.com> Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Add a check for the presence of .poll_done transport operation so that transports that do not need to support polling mode have no need to provide a dummy .poll_done callback either and polling mode can be disabled in the SCMI core for that tranport. Signed-off-by: Cristian Marussi --- drivers/firmware/arm_scmi/driver.c | 43 ++++++++++++++++++------------ 1 file changed, 26 insertions(+), 17 deletions(-) diff --git a/drivers/firmware/arm_scmi/driver.c b/drivers/firmware/arm_scmi/driver.c index a952b6527b8a..4183d25c9289 100644 --- a/drivers/firmware/arm_scmi/driver.c +++ b/drivers/firmware/arm_scmi/driver.c @@ -777,25 +777,34 @@ static int do_xfer(const struct scmi_protocol_handle *ph, } if (xfer->hdr.poll_completion) { - ktime_t stop = ktime_add_ns(ktime_get(), SCMI_MAX_POLL_TO_NS); - - spin_until_cond(scmi_xfer_done_no_timeout(cinfo, xfer, stop)); - - if (ktime_before(ktime_get(), stop)) { - unsigned long flags; - - /* - * Do not fetch_response if an out-of-order delayed - * response is being processed. - */ - spin_lock_irqsave(&xfer->lock, flags); - if (xfer->state == SCMI_XFER_SENT_OK) { - info->desc->ops->fetch_response(cinfo, xfer); - xfer->state = SCMI_XFER_RESP_OK; + if (info->desc->ops->poll_done) { + ktime_t stop = ktime_add_ns(ktime_get(), + SCMI_MAX_POLL_TO_NS); + + spin_until_cond(scmi_xfer_done_no_timeout(cinfo, xfer, + stop)); + + if (ktime_before(ktime_get(), stop)) { + unsigned long flags; + + /* + * Do not fetch_response if an out-of-order delayed + * response is being processed. + */ + spin_lock_irqsave(&xfer->lock, flags); + if (xfer->state == SCMI_XFER_SENT_OK) { + info->desc->ops->fetch_response(cinfo, + xfer); + xfer->state = SCMI_XFER_RESP_OK; + } + spin_unlock_irqrestore(&xfer->lock, flags); + } else { + ret = -ETIMEDOUT; } - spin_unlock_irqrestore(&xfer->lock, flags); } else { - ret = -ETIMEDOUT; + dev_warn_once(dev, + "Polling mode is not supported by transport.\n"); + ret = EINVAL; } } else { /* And we wait for the response. */ -- 2.17.1