Received: by 2002:a25:ad19:0:0:0:0:0 with SMTP id y25csp1434465ybi; Wed, 17 Jul 2019 15:24:28 -0700 (PDT) X-Google-Smtp-Source: APXvYqzYo/DwRpeynNkpY3MG/xr/tTSvjom26gguXhrMkxRPNb28x0eJIjoyjpX1oY1I4NQN/acN X-Received: by 2002:a17:902:6a85:: with SMTP id n5mr42917703plk.73.1563402268086; Wed, 17 Jul 2019 15:24:28 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1563402268; cv=none; d=google.com; s=arc-20160816; b=TdVQt9otMKB0WIB1UwanK7chiGW09Enn0KgramnGJjGZu8HtV49SE4tHZZwbXoWfp4 wa1wG/FoA9ffgEERiooXZ3lp9LRY/bL7uNidpbp8rf95dR5XYIylHATbgTPeWX08BBbd 1b3qhM1rzg2u+Pr881/g/HPczhieGZM1fWie3F/hxJpV6mCOxuonpRbH/Yi3/QKsZJqS 5PluDclD4mz5ppRmCViGHGeO2aKxrtCwhospuXFJyxxSoqy4oqMxX2OMZb2a1RfnCSBw R4uRFhBYf+bpWNPhv5ykOev9R8TAWlkkVF1NHei5Igf0Xth17fkGi67Oocyuv1pEbHUW wvLg== 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:mime-version :message-id:date:dkim-signature; bh=39fzf43hDflkP+uYiNQxS6xaHQ083/QpMzmuyzPtUdY=; b=rctZLQ0Xb1SjIMhP081Clnv6fMT+ekNjYmW9P8ph0hhgLZcPgyUgWhJrdr2pMwq9Dy LOKN7ZzVrgS6CmhvnR5l87lFuxdLxUtu4Sk7cWs5UlLkjcoFi9+5RWSaTNhhGvNf7cmw L82QgwFz6+VTrEr92f8OguRDnzcyO+c8GQHLhySQrfVbw4YGpIzfmbPGolhHk00nbj6r uRepiFOXqBsWKRZsTYp5Ur6do7kRJRpsNMsl7i8LzOtP1n0segUx9PAle0zYtyuAGpdV 2rUh890tPXt+D3XQ81ZiDSa/B8wGKnDCa6Biz34a8u78Lr+aEnSwDGFeUsrovE5Mp1e9 nzyQ== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@google.com header.s=20161025 header.b=wFgStKAL; 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 y84si79071pfc.33.2019.07.17.15.24.10; Wed, 17 Jul 2019 15:24:28 -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=wFgStKAL; 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 S1727883AbfGQWXv (ORCPT + 99 others); Wed, 17 Jul 2019 18:23:51 -0400 Received: from mail-qt1-f201.google.com ([209.85.160.201]:50767 "EHLO mail-qt1-f201.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1727410AbfGQWXv (ORCPT ); Wed, 17 Jul 2019 18:23:51 -0400 Received: by mail-qt1-f201.google.com with SMTP id g30so22525165qtm.17 for ; Wed, 17 Jul 2019 15:23:50 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20161025; h=date:message-id:mime-version:subject:from:to:cc; bh=39fzf43hDflkP+uYiNQxS6xaHQ083/QpMzmuyzPtUdY=; b=wFgStKALBEnEGt6LhTq/NEkpkuHrszbthkXReAklwB+fSi7678pDRTqdNzz1J4M7nQ ithAPBOwnlK/vKTUQ8NpZ2t9LBCBbrrJe3mw3JT0Dgfce1x2Q5MuyZtMXeSoOexQFeQV py46WEEyAGWvUX+KNIp/iqwcV0fa/fzpvLiC/4OQTxkpTvI5wRI9EHAYAtfoEDifD/GT /iNk5d/5wuI4iQBwCsijLBHpImT7oD4vEh2hK7wDETFJTR/pmnq0CBWdMndIj669gqKJ fuL9MWGkllNLV1YHMI9IXiPM9Fd8XTzkdEguRkLxJ8n+cyxQfOhUUrLsYskJyMXGyHJ6 wFcA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:date:message-id:mime-version:subject:from:to:cc; bh=39fzf43hDflkP+uYiNQxS6xaHQ083/QpMzmuyzPtUdY=; b=S/u4iQWeQADdycf1yK8Ii9kGhhRTLGw5gx92T9kO6sczTpoemc8C+fwejxrCpFwP2f shJiATamvBo31Tv41So6la4Q3xrdSMDBOrY4OXnwWbjhVe0vpitmZyYLY6f9i2lr72xu BFmX/UXhgnX8lmeeTwT7h05UJLJzM+s1g4LcbD5R+pe6Ow9wu606hmQU034kM2eDKuVS YDXDHlz99PdOcL727Hv1IYWo8MHoyI4M9X9oN7euNVE6n9zENcg970MpiQhm0LMC/ed1 jSS1SzHo+wETLZyZ1DN6bx0NdAij6FglabdTN7k1W0gcjNOUQJfltHUP2Dkg3Y6Dy3uy meMg== X-Gm-Message-State: APjAAAU336j0YJ4DVI97EAUjuCiKww+60eAClGGchF9dVZPd6eCyOyMY n7fkJA8xbMsfk+9IaefXZV+5iXWfnwdK1Sc= X-Received: by 2002:a37:646:: with SMTP id 67mr26866101qkg.287.1563402229934; Wed, 17 Jul 2019 15:23:49 -0700 (PDT) Date: Wed, 17 Jul 2019 15:23:35 -0700 Message-Id: <20190717222340.137578-1-saravanak@google.com> Mime-Version: 1.0 X-Mailer: git-send-email 2.22.0.510.g264f2c817a-goog Subject: [PATCH v3 0/5] Add required-opps support to devfreq passive gov 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 The devfreq passive governor scales the frequency of a "child" device based on the current frequency of a "parent" device (not parent/child in the sense of device hierarchy). As of today, the passive governor requires one of the following to work correctly: 1. The parent and child device have the same number of frequencies 2. The child device driver passes a mapping function to translate from parent frequency to child frequency. When (1) is not true, (2) is the only option right now. But often times, all that is required is a simple mapping from parent's frequency to child's frequency. Since OPPs already support pointing to other "required-opps", add support for using that to map from parent device frequency to child device frequency. That way, every child device driver doesn't have to implement a separate mapping function anytime (1) isn't true. Some common (but not comprehensive) reason for needing a devfreq passive governor to adjust the frequency of one device based on another are: 1. These were the combination of frequencies that were validated/screened during the manufacturing process. 2. These are the sensible performance combinations between two devices interacting with each other. So that when one runs fast the other doesn't become the bottleneck. 3. Hardware bugs requiring some kind of frequency ratio between devices. For example, the following mapping can't be captured in DT as it stands today because the parent and child device have different number of OPPs. But with this patch series, this mapping can be captured cleanly. In arch/arm64/boot/dts/exynos/exynos5433-bus.dtsi you have something like this with the following changes: bus_g2d_400: bus0 { compatible = "samsung,exynos-bus"; clocks = <&cmu_top CLK_ACLK_G2D_400>; clock-names = "bus"; operating-points-v2 = <&bus_g2d_400_opp_table>; status = "disabled"; }; bus_noc2: bus9 { compatible = "samsung,exynos-bus"; clocks = <&cmu_mif CLK_ACLK_BUS2_400>; clock-names = "bus"; operating-points-v2 = <&bus_noc2_opp_table>; status = "disabled"; }; bus_g2d_400_opp_table: opp_table2 { compatible = "operating-points-v2"; opp-shared; opp-400000000 { opp-hz = /bits/ 64 <400000000>; opp-microvolt = <1075000>; required-opps = <&noc2_400>; }; opp-267000000 { opp-hz = /bits/ 64 <267000000>; opp-microvolt = <1000000>; required-opps = <&noc2_200>; }; opp-200000000 { opp-hz = /bits/ 64 <200000000>; opp-microvolt = <975000>; required-opps = <&noc2_200>; }; opp-160000000 { opp-hz = /bits/ 64 <160000000>; opp-microvolt = <962500>; required-opps = <&noc2_134>; }; opp-134000000 { opp-hz = /bits/ 64 <134000000>; opp-microvolt = <950000>; required-opps = <&noc2_134>; }; opp-100000000 { opp-hz = /bits/ 64 <100000000>; opp-microvolt = <937500>; required-opps = <&noc2_100>; }; }; bus_noc2_opp_table: opp_table6 { compatible = "operating-points-v2"; noc2_400: opp-400000000 { opp-hz = /bits/ 64 <400000000>; }; noc2_200: opp-200000000 { opp-hz = /bits/ 64 <200000000>; }; noc2_134: opp-134000000 { opp-hz = /bits/ 64 <134000000>; }; noc2_100: opp-100000000 { opp-hz = /bits/ 64 <100000000>; }; }; -Saravana v2 -> v3: - Rebased onto linux-next. - Added documentation comment for new fields. - Added support for lazy required-opps linking. - Updated Ack/Reviewed-bys. v1 -> v2: - Cached OPP table reference in devfreq to avoid looking up every time. - Renamed variable in passive governor to be more intuitive. - Updated cover letter with examples. Saravana Kannan (5): OPP: Allow required-opps even if the device doesn't have power-domains OPP: Add function to look up required OPP's for a given OPP OPP: Improve require-opps linking PM / devfreq: Cache OPP table reference in devfreq PM / devfreq: Add required OPPs support to passive governor drivers/devfreq/devfreq.c | 6 ++ drivers/devfreq/governor_passive.c | 20 ++++-- drivers/opp/core.c | 84 ++++++++++++++++++++++--- drivers/opp/of.c | 98 +++++++++++++----------------- drivers/opp/opp.h | 5 ++ include/linux/devfreq.h | 2 + include/linux/pm_opp.h | 11 ++++ 7 files changed, 156 insertions(+), 70 deletions(-) -- 2.22.0.510.g264f2c817a-goog