From patchwork Mon Jul 8 15:47:30 2019 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Sudeep Holla X-Patchwork-Id: 168680 Delivered-To: patch@linaro.org Received: by 2002:a92:4782:0:0:0:0:0 with SMTP id e2csp7331308ilk; Mon, 8 Jul 2019 08:48:01 -0700 (PDT) X-Google-Smtp-Source: APXvYqzh7SPk/VUArviIJd8U+l+VMBAZONsTQgzhzp4fYFzln4tO8fWicAVho9muAadKbVOiiJPl X-Received: by 2002:a63:c508:: with SMTP id f8mr25192129pgd.48.1562600880965; Mon, 08 Jul 2019 08:48:00 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1562600880; cv=none; d=google.com; s=arc-20160816; b=NpovHvK4pGG897JfBzCjp3/tXGUFBoq6pg18TkS08qROrBUFNp4eUF9zoNigqWBvmD atBJbgPQGO/OZy2rmFpdnbc5K4PJYoPh7fnjXaRPveAIltluaWPPJF9sw9YreqUQe08F Bi/00/LxYrJb+aE35CZDWu531s4u6QYVFJn8R+weOSxd46yFfNL6EtUTIpKuLUiVHHcU mpw02wOWPgYsiLb9tiJ1Hj2nkRMHZ6faEnvfAQq/USCgXEwvDpwco4tyJ8dgZ8uEj/o1 HbQ5nJpMOol/ygqshN4KZnIYBsMvBPBze9GPa6Gcwjp+5wiMqozmCiJItv0fWW4UV4SX z24w== 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=1ErbM/I6OV9NXtunUPFjTaTSw8ruJxHurmMAz0mWtLk=; b=udLQQMw6Iv1EBDCxBoDAxpp76OgjK5EsCL3RT0ONYDD5X4hhuVE9LxdFrPHek5UMiD fXwyPjMPdGzgYsOHf9xn9Yp5UiOlNsOArxvOE4FmcE+eA3N652f5SytD6zXfyWmFTq7M 8AsMrUt59OweykLFGQBpiRzDGe4Ax7/NJIdYpJvyaUTtYZyhiEpZ7FTop8j47TnDVSmx UmYkZ1Cz+twI4/x6Q17gWNeRdPkY2dHINsw3Do8Evcg97Kl9QBnSFsNVn7Z3dB7Lqa/U LFQDgg2b1kVJHMpFQ6aTfEcEsqX3kYj+xrlFtfrLqe988BPy/FnyQNbblLRa1ZmUvoBz 93Hw== 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 Return-Path: Received: from vger.kernel.org (vger.kernel.org. [209.132.180.67]) by mx.google.com with ESMTP id n187si18384414pgn.362.2019.07.08.08.48.00; Mon, 08 Jul 2019 08:48:00 -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 Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S2391381AbfGHPr7 (ORCPT + 30 others); Mon, 8 Jul 2019 11:47:59 -0400 Received: from foss.arm.com ([217.140.110.172]:52426 "EHLO foss.arm.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S2391358AbfGHPrz (ORCPT ); Mon, 8 Jul 2019 11:47:55 -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 428EDCFC; Mon, 8 Jul 2019 08:47:55 -0700 (PDT) Received: from usa.arm.com (e107155-lin.cambridge.arm.com [10.1.196.42]) by usa-sjc-imap-foss1.foss.arm.com (Postfix) with ESMTPA id 3FB5A3F59C; Mon, 8 Jul 2019 08:47:54 -0700 (PDT) From: Sudeep Holla To: linux-arm-kernel@lists.infradead.org Cc: Sudeep Holla , linux-kernel@vger.kernel.org, Peng Fan , Jim Quinlan , Bo Zhang , Volodymyr Babchuk Subject: [PATCH 11/11] firmware: arm_scmi: Use asynchronous CLOCK_RATE_SET when possible Date: Mon, 8 Jul 2019 16:47:30 +0100 Message-Id: <20190708154730.16643-12-sudeep.holla@arm.com> X-Mailer: git-send-email 2.17.1 In-Reply-To: <20190708154730.16643-1-sudeep.holla@arm.com> References: <20190708154730.16643-1-sudeep.holla@arm.com> Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org CLOCK_PROTOCOL_ATTRIBUTES provides attributes to indicate the maximum number of pending asynchronous clock rate changes supported by the platform. If it's non-zero, then we should be able to use asynchronous clock rate set for any clocks until the maximum limit is reached. Keeping the current count of pending asynchronous clock set rate requests, we can decide if we can you asynchronous request for the incoming/new request. Signed-off-by: Sudeep Holla --- drivers/firmware/arm_scmi/clock.c | 21 ++++++++++++++++++--- 1 file changed, 18 insertions(+), 3 deletions(-) -- 2.17.1 diff --git a/drivers/firmware/arm_scmi/clock.c b/drivers/firmware/arm_scmi/clock.c index dd215bd11a58..70044b7c812e 100644 --- a/drivers/firmware/arm_scmi/clock.c +++ b/drivers/firmware/arm_scmi/clock.c @@ -56,7 +56,7 @@ struct scmi_msg_resp_clock_describe_rates { struct scmi_clock_set_rate { __le32 flags; #define CLOCK_SET_ASYNC BIT(0) -#define CLOCK_SET_DELAYED BIT(1) +#define CLOCK_SET_IGNORE_RESP BIT(1) #define CLOCK_SET_ROUND_UP BIT(2) #define CLOCK_SET_ROUND_AUTO BIT(3) __le32 id; @@ -67,6 +67,7 @@ struct scmi_clock_set_rate { struct clock_info { int num_clocks; int max_async_req; + atomic_t cur_async_req; struct scmi_clock_info *clk; }; @@ -221,21 +222,35 @@ static int scmi_clock_rate_set(const struct scmi_handle *handle, u32 clk_id, u64 rate) { int ret; + u32 flags = 0; struct scmi_xfer *t; struct scmi_clock_set_rate *cfg; + struct clock_info *ci = handle->clk_priv; ret = scmi_xfer_get_init(handle, CLOCK_RATE_SET, SCMI_PROTOCOL_CLOCK, sizeof(*cfg), 0, &t); if (ret) return ret; + if (ci->max_async_req) { + if (atomic_inc_return(&ci->cur_async_req) < ci->max_async_req) + flags |= CLOCK_SET_ASYNC; + else + atomic_dec(&ci->cur_async_req); + } + cfg = t->tx.buf; - cfg->flags = cpu_to_le32(0); + cfg->flags = cpu_to_le32(flags); cfg->id = cpu_to_le32(clk_id); cfg->value_low = cpu_to_le32(rate & 0xffffffff); cfg->value_high = cpu_to_le32(rate >> 32); - ret = scmi_do_xfer(handle, t); + if (flags & CLOCK_SET_ASYNC) { + ret = scmi_do_xfer_with_response(handle, t); + atomic_dec(&ci->cur_async_req); + } else { + ret = scmi_do_xfer(handle, t); + } scmi_xfer_put(handle, t); return ret;