Received: by 2002:a25:ad19:0:0:0:0:0 with SMTP id y25csp1435153ybi; Wed, 17 Jul 2019 15:25:17 -0700 (PDT) X-Google-Smtp-Source: APXvYqx4bMuovzy1NTBe8goDVVHX/AijX1INN1DplQo8/zvjbsqCqv3P0qwUgw+9Cz3CQFtKI04y X-Received: by 2002:a17:902:44f:: with SMTP id 73mr46486403ple.192.1563402316901; Wed, 17 Jul 2019 15:25:16 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1563402316; cv=none; d=google.com; s=arc-20160816; b=vD4yi3MIijllYX8GW96bIxDx7A0JTtYkbdfeKeavVvMblRGtr2SI+Yg0hAB82Ngb8r 4rSxGVIOJGkcrhV2wn7XR2PPQPHhaz3lUsCF2/mHIk7UkEW6a7XqbiKNbYNJDzZATlxZ H8vLumqdJLqiWNhrylIf4YwLH0B5+KUz2RcsbI9fHSHel09FQL11eU7BzcE/kFllQhzw 5JMqE30rCkPf7AbMQlFSzPtNoR1av0YGc7HdVMeX22Bh8BLQ870gi0reEt0oXtnk1A5R FrI4j8G/KOe/gQJBiz2uuIYHePqS4GO8Q4fmObyJi0ruhpCG0Ogu9wi9seeuGcVy1p4x 8ldg== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:sender:cc:to:from:subject:references :mime-version:message-id:in-reply-to:date:dkim-signature; bh=DiFJ3QV0jm1YQeH6o85iwOHAT3O/cgKmhpXPhBt1zRY=; b=Lz/fio7TXTMv0oZRZ4JN+0SPX2mt6oO4/5ePkaGAAMF72DTdjbx9T1FwpEMNWmg9LT uumDqXS49+DTu6cjKQaOpzIktum+Tzm4louQ4uRGxKSIhaFqfrXvNlkNqj1WU0Pe2SXQ QjinVljGRcSfQ2Yu7U3/1N7Sqrh5inFvBguHG8e+LRkdwjdwoC4TH7JK5JkqePB0seCm T9h6lpBbTjJkzZKsPBM/b5TSodzwASfOh3XTMl7whGtq4g8Kc+hf4qUfTBo8uhVw6p9H uLuxVT7UUfj9P1TGfvGEK1hvMoUDtau459WV7HJPeh7El+VMcdF61s/e11zOfN+gHhjk 0rLA== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@google.com header.s=20161025 header.b=gUnX3uWK; 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; dmarc=pass (p=REJECT sp=REJECT dis=NONE) header.from=google.com Return-Path: Received: from vger.kernel.org (vger.kernel.org. [209.132.180.67]) by mx.google.com with ESMTP id q19si23006959pjp.24.2019.07.17.15.25.00; Wed, 17 Jul 2019 15:25:16 -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; dkim=pass header.i=@google.com header.s=20161025 header.b=gUnX3uWK; 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; dmarc=pass (p=REJECT sp=REJECT dis=NONE) header.from=google.com Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1731085AbfGQWYL (ORCPT + 99 others); Wed, 17 Jul 2019 18:24:11 -0400 Received: from mail-vk1-f201.google.com ([209.85.221.201]:55042 "EHLO mail-vk1-f201.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1730921AbfGQWYH (ORCPT ); Wed, 17 Jul 2019 18:24:07 -0400 Received: by mail-vk1-f201.google.com with SMTP id w137so11793864vkd.21 for ; Wed, 17 Jul 2019 15:24:07 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20161025; h=date:in-reply-to:message-id:mime-version:references:subject:from:to :cc; bh=DiFJ3QV0jm1YQeH6o85iwOHAT3O/cgKmhpXPhBt1zRY=; b=gUnX3uWKzKk0PdpWQOACtbCTUosGhC+9X0hmQ8V9U0YJgXRqIB7VQ82FCFG0UaJZgc ANHsa7Am/jr3H95GksDN+aZmOygrs8L74TDbC8/XgptqkBFsTMsk6GligRGiGe/KnInP EDr4mxKVQAhQcthiTTFSxY0rADMAj9jGZYOVzO2PbcLzkZNoEvYe9g0z5YqmuKJ89dF3 B4ByPzdiT6Yhd+AWM6x8lr87ib5BFJAatlvOE+TvhbUy1qN12S/0oJE91nD/HkU6v/JH KT24Fj55t1N5sXs0DGIBl8CjLkb4WmGcxMtiCWEMcGYeR+kD2kDk3oqQVNP3YLiLa6aq sBng== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:date:in-reply-to:message-id:mime-version :references:subject:from:to:cc; bh=DiFJ3QV0jm1YQeH6o85iwOHAT3O/cgKmhpXPhBt1zRY=; b=Sjw4rfB2ZyhZJE2MGRQHnUhV1svCDWUnjroTvdA5EV7GzEETGZPlhhrN/BsGjiOV3W koQVFq4BJa12PyV2xUuFaQe+ctRDyZpnHVke9eFmfl5AuoEKMpnJeGq2oCuxrWR7WPxD nWFsk9g7Ah9dg0MS1arofQDlJDhgVJjGnUl7cmD2NUQSZ9YF0NRl2UOFFqQC1s28ULye pNcofpoUt+YAgXD+VW8ywGWF8TGu1JwOgmyDB8qes40vFT9deASqpVtufyp6HQQmT+zZ T81WwOnDsAwy7i3bhvAVC+GJvJ3+p47pDy7Lj6J7hHvJOS/P9v7M3u+bG/KEVv6TWWUH 0l9g== X-Gm-Message-State: APjAAAUPl6g3OedliKZ6Gm3873ywuWgk5FldobV9z91KyctuD8vugNzn n+KE5cWe+caDeJEKFsIgr0sLq2Y85sKhkb8= X-Received: by 2002:ab0:7457:: with SMTP id p23mr4958003uaq.138.1563402246655; Wed, 17 Jul 2019 15:24:06 -0700 (PDT) Date: Wed, 17 Jul 2019 15:23:40 -0700 In-Reply-To: <20190717222340.137578-1-saravanak@google.com> Message-Id: <20190717222340.137578-6-saravanak@google.com> Mime-Version: 1.0 References: <20190717222340.137578-1-saravanak@google.com> X-Mailer: git-send-email 2.22.0.510.g264f2c817a-goog Subject: [PATCH v3 5/5] PM / devfreq: Add required OPPs support to passive governor From: Saravana Kannan To: MyungJoo Ham , Kyungmin Park , Chanwoo Choi , Viresh Kumar , Nishanth Menon , Stephen Boyd , "Rafael J. Wysocki" Cc: Saravana Kannan , Sibi Sankar , kernel-team@android.com, linux-pm@vger.kernel.org, linux-kernel@vger.kernel.org Content-Type: text/plain; charset="UTF-8" Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Look at the required OPPs of the "parent" device to determine the OPP that is required from the slave device managed by the passive governor. This allows having mappings between a parent device and a slave device even when they don't have the same number of OPPs. Signed-off-by: Saravana Kannan Acked-by: MyungJoo Ham Acked-by: Chanwoo Choi --- drivers/devfreq/governor_passive.c | 20 +++++++++++++++----- 1 file changed, 15 insertions(+), 5 deletions(-) diff --git a/drivers/devfreq/governor_passive.c b/drivers/devfreq/governor_passive.c index 58308948b863..24ce94c80f06 100644 --- a/drivers/devfreq/governor_passive.c +++ b/drivers/devfreq/governor_passive.c @@ -19,7 +19,7 @@ static int devfreq_passive_get_target_freq(struct devfreq *devfreq, = (struct devfreq_passive_data *)devfreq->data; struct devfreq *parent_devfreq = (struct devfreq *)p_data->parent; unsigned long child_freq = ULONG_MAX; - struct dev_pm_opp *opp; + struct dev_pm_opp *opp = NULL, *p_opp = NULL; int i, count, ret = 0; /* @@ -56,13 +56,20 @@ static int devfreq_passive_get_target_freq(struct devfreq *devfreq, * list of parent device. Because in this case, *freq is temporary * value which is decided by ondemand governor. */ - opp = devfreq_recommended_opp(parent_devfreq->dev.parent, freq, 0); - if (IS_ERR(opp)) { - ret = PTR_ERR(opp); + p_opp = devfreq_recommended_opp(parent_devfreq->dev.parent, freq, 0); + if (IS_ERR(p_opp)) { + ret = PTR_ERR(p_opp); goto out; } - dev_pm_opp_put(opp); + if (devfreq->opp_table && parent_devfreq->opp_table) + opp = dev_pm_opp_xlate_opp(parent_devfreq->opp_table, + devfreq->opp_table, p_opp); + if (opp) { + *freq = dev_pm_opp_get_freq(opp); + dev_pm_opp_put(opp); + goto out; + } /* * Get the OPP table's index of decided freqeuncy by governor @@ -89,6 +96,9 @@ static int devfreq_passive_get_target_freq(struct devfreq *devfreq, *freq = child_freq; out: + if (!IS_ERR_OR_NULL(opp)) + dev_pm_opp_put(p_opp); + return ret; } -- 2.22.0.510.g264f2c817a-goog