Received: by 2002:a05:6a10:f3d0:0:0:0:0 with SMTP id a16csp227991pxv; Thu, 8 Jul 2021 00:55:23 -0700 (PDT) X-Google-Smtp-Source: ABdhPJxyG2PdFxCT7JJGmG46u7u5sSugIQx4JGX4E9NwosATsFTGNqfWkQ4+KWx13/XEOW2P/fUB X-Received: by 2002:a17:906:c14e:: with SMTP id dp14mr28741593ejc.349.1625730922820; Thu, 08 Jul 2021 00:55:22 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1625730922; cv=none; d=google.com; s=arc-20160816; b=L/fTxlWYY3VOyldBDTFqAx4H6UYzNfJTdKQ79z16X3vR9u8BnBEBOX6/JdQd8W6KJC NgPVZH4YqynCKfnADLoWaRJ9Xxx6GCijStBgneDtxXMMLH404SWO0tJZIhNdSLm1SqNn v311CV/KBWE6SUOoqvbAFPM1J/KZvkjLIxr95tDj/DSvgEMnvx6VKKyYU9Sh5bv+Bxex H/WePSyOAbN7RtQG5/5yI8oE9YSnBGGzQXAAI079XuSIMbqFfevueuDvTfdjk4DA2lQi E1RYeMHuQzEWMVzRp8frzXBgU4g469U8Gmt43OvqCetMRSGEw1ZrG8jRzO8e/BS375CI C5Gg== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:user-agent:in-reply-to:content-disposition :mime-version:references:message-id:subject:cc:to:from:date :dkim-signature; bh=K3KoPC3LRTr3a33D+5oYfwCBSbOGKOZphYLnnWXbw5g=; b=HNHmQTt8JXhTTWCgSCWUv1I6/6PfYGICRVn/SAniVQltwEpZ4Z8Rj9o76kvSU6N0/6 mbw6Gqi2/GvnMea8B/B0H9GcZvlSff9qljeCG7QXhQrYsz+TBiKsXNeH0oCGlF/z1pHG 3q2cw9AV2pUTZIr3FULtjiInYpCpLsRLqx2/jYV+FCYroUlK2aHuonyQmp9NKGEfUP8m 5AZR07Trcfn+HxVxeQRDQuNS+i0zDfnOzHHubJwizTRuvLmsp5hHKoSsfppHymTZT1sM rERaRgAE3NhHeZk0OG9y87uVmN/7OhaSaTfEjQfSxKbU2JmxsqMPU2zlt5aaWQMwVqHZ HlpA== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@linaro.org header.s=google header.b="df4U/QiI"; 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=pass (p=NONE sp=NONE dis=NONE) header.from=linaro.org Return-Path: Received: from vger.kernel.org (vger.kernel.org. [23.128.96.18]) by mx.google.com with ESMTP id di13si2030478ejc.111.2021.07.08.00.54.59; Thu, 08 Jul 2021 00:55:22 -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; dkim=pass header.i=@linaro.org header.s=google header.b="df4U/QiI"; 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=pass (p=NONE sp=NONE dis=NONE) header.from=linaro.org Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S230480AbhGHH4i (ORCPT + 99 others); Thu, 8 Jul 2021 03:56:38 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:45332 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S229851AbhGHH4h (ORCPT ); Thu, 8 Jul 2021 03:56:37 -0400 Received: from mail-pj1-x102e.google.com (mail-pj1-x102e.google.com [IPv6:2607:f8b0:4864:20::102e]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 6E77EC06175F for ; Thu, 8 Jul 2021 00:53:56 -0700 (PDT) Received: by mail-pj1-x102e.google.com with SMTP id g24so3052605pji.4 for ; Thu, 08 Jul 2021 00:53:56 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; h=date:from:to:cc:subject:message-id:references:mime-version :content-disposition:in-reply-to:user-agent; bh=K3KoPC3LRTr3a33D+5oYfwCBSbOGKOZphYLnnWXbw5g=; b=df4U/QiIkn3tE/Ln289Z3dWN0WYK0K1ntOga5FPafBbBJvzSb8pWFfB0iEv7ul4TOH tRKxJTiplzLX180VrADBGIuGWpYePE5lf7FqxLRrQXJKNi3MblaDkv+LjG0ORsEIAHEz TslzUltxxizQHjtZvJXqnKYY5KnwBw/gpX/dCViEtkdhxaV2yVKqkmrMHxsBJRznbptZ IOzvjlcD1mTfmwYIwvMV5f8/HCyI61/QN821FUQaFAc3CNHmmWzh9X7a3H1tUlW3MQFb 6euPdoXxbVOMBCti94k2gi8GraIktVmk7YQSbnm2OJvcUZrmZd0PIWMbKIw3JIgpe8L3 oNZw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:date:from:to:cc:subject:message-id:references :mime-version:content-disposition:in-reply-to:user-agent; bh=K3KoPC3LRTr3a33D+5oYfwCBSbOGKOZphYLnnWXbw5g=; b=i4fBsj7d51dAhEFrh4+5Dcils5Epw+f9vcPhfUeRqwZ6H8+Yw5qpMxpzqJDNreDy7J Gj3qOI3xmYSUZ1hhkxJQ9ea2XF87xG0cq6x5L7gR/NMLK5wKdhHAI7bo/UwkCuG/Qj4g acbIuAaLf3DHomGyaylZkMpAvAqdF4vjfmF2N7Y5eBImAotQ3/VfR0SsF/zVR/Uub/mP MTCdzR7DFJUwm84LUR34CpxgTBxsiP80nHnM3mNPoV7gItrAyblfSl3lQSmj++ybo0YZ SBTlKD7zmQPoI8GTnilNc6EYvmiJ4XmodObTbjqLeTLPtK7NqWOKkkGbiIl58Vstyl8l Ofag== X-Gm-Message-State: AOAM533Mqj1TTNmV4SH8xYm7MI6lB6Pg0AIxXOC+FPPLA6nVZeVFfcjs UvxodNjUb5b91IQWVqjjcqmvnQ== X-Received: by 2002:a17:90a:c253:: with SMTP id d19mr3520815pjx.225.1625730835751; Thu, 08 Jul 2021 00:53:55 -0700 (PDT) Received: from localhost ([106.201.108.2]) by smtp.gmail.com with ESMTPSA id l189sm1982324pgl.41.2021.07.08.00.53.54 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 08 Jul 2021 00:53:55 -0700 (PDT) Date: Thu, 8 Jul 2021 13:23:53 +0530 From: Viresh Kumar To: Ionela Voinescu , Kevin Wangtao , Leo Yan , Jassi Brar Cc: zhongkaihua@huawei.com, Dmitry Osipenko , Viresh Kumar , Nishanth Menon , Stephen Boyd , linux-pm@vger.kernel.org, Vincent Guittot , Rafael Wysocki , Sibi Sankar , linux-kernel@vger.kernel.org, linux-arm-kernel@lists.infradead.org Subject: Re: [PATCH 03/13] opp: Keep track of currently programmed OPP Message-ID: <20210708075353.ivsuc4y47i6bbhgz@vireshk-i7> References: <96b57316a2a307a5cc5ff7302b3cd0084123a2ed.1611227342.git.viresh.kumar@linaro.org> <20210707102410.GA4357@arm.com> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <20210707102410.GA4357@arm.com> User-Agent: NeoMutt/20180716-391-311a52 Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org On 07-07-21, 11:24, Ionela Voinescu wrote: > Now comes the interesting part: what seems to fix it is a call to > clk_get_rate(opp_table->clk) in _set_opp(), which is what basically > happened before this patch, as _find_current_opp() was always called. > I do not need to do anything with the returned frequency. Wow, thanks for narrowing it down this far :) I had a quick look and this is what I think is the problem here. This platform uses mailbox API to send its frequency change requests to another processor. And the way it is written currently, I don't see any guarantee whatsoever which say "once clk_set_rate() returns, the frequency would have already changed". And this may exactly be the thing you are able to hit, luckily because of this patchset :) As a quick way of checking if that is right or not, this may make it work: diff --git a/drivers/mailbox/hi3660-mailbox.c b/drivers/mailbox/hi3660-mailbox.c index 395ddc250828..9856c1c84dcf 100644 --- a/drivers/mailbox/hi3660-mailbox.c +++ b/drivers/mailbox/hi3660-mailbox.c @@ -201,6 +201,9 @@ static int hi3660_mbox_send_data(struct mbox_chan *chan, void *msg) /* Trigger data transferring */ writel(BIT(mchan->ack_irq), base + MBOX_SEND_REG); + + hi3660_mbox_check_state(chan); + return 0; } -------------------------8<------------------------- As a proper fix, something like this (not even compile tested) is required I believe as I don't see the clients would know if the transfer is over. Cc'ing mailbox guys to see what can be done. diff --git a/drivers/clk/hisilicon/clk-hi3660-stub.c b/drivers/clk/hisilicon/clk-hi3660-stub.c index 3a653d54bee0..c1e62ea4cf01 100644 --- a/drivers/clk/hisilicon/clk-hi3660-stub.c +++ b/drivers/clk/hisilicon/clk-hi3660-stub.c @@ -89,7 +89,6 @@ static int hi3660_stub_clk_set_rate(struct clk_hw *hw, unsigned long rate, stub_clk->msg[0], stub_clk->msg[1]); mbox_send_message(stub_clk_chan.mbox, stub_clk->msg); - mbox_client_txdone(stub_clk_chan.mbox, 0); stub_clk->rate = rate; return 0; @@ -131,7 +130,7 @@ static int hi3660_stub_clk_probe(struct platform_device *pdev) /* Use mailbox client without blocking */ stub_clk_chan.cl.dev = dev; stub_clk_chan.cl.tx_done = NULL; - stub_clk_chan.cl.tx_block = false; + stub_clk_chan.cl.tx_block = true; stub_clk_chan.cl.knows_txdone = false; /* Allocate mailbox channel */ diff --git a/drivers/mailbox/hi3660-mailbox.c b/drivers/mailbox/hi3660-mailbox.c index 395ddc250828..8f6b787c0aba 100644 --- a/drivers/mailbox/hi3660-mailbox.c +++ b/drivers/mailbox/hi3660-mailbox.c @@ -1,5 +1,5 @@ // SPDX-License-Identifier: GPL-2.0 -// Copyright (c) 2017-2018 HiSilicon Limited. +// Copyright (c) 2017-2018 Hisilicon Limited. // Copyright (c) 2017-2018 Linaro Limited. #include @@ -83,7 +83,7 @@ static struct hi3660_mbox *to_hi3660_mbox(struct mbox_controller *mbox) return container_of(mbox, struct hi3660_mbox, controller); } -static int hi3660_mbox_check_state(struct mbox_chan *chan) +static bool hi3660_mbox_last_tx_done(struct mbox_chan *chan) { unsigned long ch = (unsigned long)chan->con_priv; struct hi3660_mbox *mbox = to_hi3660_mbox(chan->mbox); @@ -94,20 +94,20 @@ static int hi3660_mbox_check_state(struct mbox_chan *chan) /* Mailbox is ready to use */ if (readl(base + MBOX_MODE_REG) & MBOX_STATE_READY) - return 0; + return true; /* Wait for acknowledge from remote */ ret = readx_poll_timeout_atomic(readl, base + MBOX_MODE_REG, val, (val & MBOX_STATE_ACK), 1000, 300000); if (ret) { dev_err(mbox->dev, "%s: timeout for receiving ack\n", __func__); - return ret; + return false; } /* clear ack state, mailbox will get back to ready state */ writel(BIT(mchan->ack_irq), base + MBOX_ICLR_REG); - return 0; + return true; } static int hi3660_mbox_unlock(struct mbox_chan *chan) @@ -182,10 +182,6 @@ static int hi3660_mbox_send_data(struct mbox_chan *chan, void *msg) unsigned int i; int ret; - ret = hi3660_mbox_check_state(chan); - if (ret) - return ret; - /* Clear mask for destination interrupt */ writel_relaxed(~BIT(mchan->dst_irq), base + MBOX_IMASK_REG); @@ -207,6 +203,7 @@ static int hi3660_mbox_send_data(struct mbox_chan *chan, void *msg) static const struct mbox_chan_ops hi3660_mbox_ops = { .startup = hi3660_mbox_startup, .send_data = hi3660_mbox_send_data, + .last_tx_done = hi3660_mbox_last_tx_done, }; static struct mbox_chan *hi3660_mbox_xlate(struct mbox_controller *controller, @@ -259,6 +256,7 @@ static int hi3660_mbox_probe(struct platform_device *pdev) mbox->controller.num_chans = MBOX_CHAN_MAX; mbox->controller.ops = &hi3660_mbox_ops; mbox->controller.of_xlate = hi3660_mbox_xlate; + mbox->controller.txdone_poll = true; /* Initialize mailbox channel data */ chan = mbox->chan; -- viresh