Received: by 2002:a25:f815:0:0:0:0:0 with SMTP id u21csp4119746ybd; Tue, 25 Jun 2019 14:34:07 -0700 (PDT) X-Google-Smtp-Source: APXvYqwXABqIipzKmE9pnUEFOf8T8AjetVyX/3VTi6jdxmGedSdu8KNnvLdqRrjF8XzLyxlE4Sxo X-Received: by 2002:a17:902:6b02:: with SMTP id o2mr814956plk.99.1561498447344; Tue, 25 Jun 2019 14:34:07 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1561498447; cv=none; d=google.com; s=arc-20160816; b=ApLyt1aYUZDA7pAG4Gz1O8ZIlv+6xkhCtpIhlsTUfLNVBCiGlsaR+YOr2/O1qu4a7J NIHwnpkWPzWEukhdWMYC/dFkSF2IsNnDfNaeQdeBpyWUeXCJ5huyM/iNzw2SZGhsSFQT n3YiWtlp8xKaou+GH/RWuo2/atHlkFM8WOQ4n7r5ttOMF9KK8bCYoWz3g3hHBCunTVwF m7ymyqAy3182V1mJEJZZwxx+M8+wD3EEa4o/6l3TOZg7dojMPlQjfqzxjEhPmLMGF49c 1jJV1+QLLASdi14+ZutWCDItAM6mAyybb1acWbBU968B2982BvHuq4ily1oYXtG8FhtR GawA== 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=c6hAycyMlxz47CFouFEVRVMQfFzVdquweZ4JkxM8rHY=; b=R3M5IdF2+SEffbF8hWpi2yNlHc3ku+qpUBWgtOshZdnqRxCfQm6R55Mw/l7ihJyDaB J8555JkZ7Gi2sGCUwvvYkOKLJuJ/dhpJfVYM3OO9as6wDF3OBIoo6VSMNSKZIKEK3aIl Rd8WJ1ehEUgI9ZzDCp31GJZ6N9np6VRmzJTweYtR1I8bHE6HYhGjGjR1FKt5RZ29omJ6 1FDP12+5cVZLndtoOVENP7Kzt3aYUfbqPaDuNkiTZIDK5Kyx9eIPS6dPFNTDmPP2Wzhw XC/nJGs7sZDrsEnLFoEHu/Q3pRtP5+H3f8ELkKgl9D5Jdv6ZMqB/APlDDinONeN61aZy nOWw== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@google.com header.s=20161025 header.b=vEdbAftA; 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 a22si14046992pgw.60.2019.06.25.14.33.47; Tue, 25 Jun 2019 14:34:07 -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=vEdbAftA; 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 S1726274AbfFYVdn (ORCPT + 99 others); Tue, 25 Jun 2019 17:33:43 -0400 Received: from mail-pl1-f202.google.com ([209.85.214.202]:44974 "EHLO mail-pl1-f202.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1725914AbfFYVdm (ORCPT ); Tue, 25 Jun 2019 17:33:42 -0400 Received: by mail-pl1-f202.google.com with SMTP id n1so15522plk.11 for ; Tue, 25 Jun 2019 14:33:42 -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=c6hAycyMlxz47CFouFEVRVMQfFzVdquweZ4JkxM8rHY=; b=vEdbAftA62D7XRgIji4W8EBitFBZHh3LfoDOdtCDkUr/sLgCAReon/sLsp2TZCVwbg CkxOVs5hdloQkhFG/hMcJUpfmAmNc4IASleRLhQvbRZYIY++XI5FkjwlcmMn4PbIeVdg QKax3rsPgT6Skrr+8OIOif2cEWoB1PWxiMHrR4KinqV9JS1Hk7peMVLptfltiFvxWp2J Ux8LQQtZMShxqosksrqcue6KtFLfTRODveLJm3Clzv5UcDmSJL1YhVnwj9htFjezFvxU ROAUBKalSsVqLlFjvE9DrUeRs+j9SCuNFKlJMEEPs9J+tUU+7+/PmI90QnQRgLx17odv CMaw== 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=c6hAycyMlxz47CFouFEVRVMQfFzVdquweZ4JkxM8rHY=; b=n7Cameo0LNtGyq4Vn5TVzpr5fHDPunvo5Dl9X3t8//ihPyyROlR6zUjTnK/WjJr/m2 LzfVOV4o1gK3Vg+02LKz2a/4vKCaOsVMqxMME7HhNkOFekcCoqom6IfsS87UbbGVMjSZ blEZ+EWMxx8FdEYJ4TcOWkYO50hKup6jWPX+pW42yS0ys5OrJahMm2I95xDoggkWK9s7 HqI07kSGbv6jRtSN5GJYf+vjpug400aB+z2eRJIuqsoUZXNScjkdCbLomxUHvjs6+5Rw EUMDQawBVYSCwOb9zFwm19kfS45eKbvvmo+xp9+DM3meVaUXimhbecTw3BqPS6pPWZYf dCxw== X-Gm-Message-State: APjAAAVpCEfucqFZwIL7lZgY8OSSgMZ01atFuvtuwCEEC77AMJV8sbk8 3Ah4a54oyyAphtHBAYMuIrEdHc0+Rl3I3mQ= X-Received: by 2002:a63:dd53:: with SMTP id g19mr39414633pgj.3.1561498421863; Tue, 25 Jun 2019 14:33:41 -0700 (PDT) Date: Tue, 25 Jun 2019 14:33:33 -0700 Message-Id: <20190625213337.157525-1-saravanak@google.com> Mime-Version: 1.0 X-Mailer: git-send-email 2.22.0.410.gd8fdbe21b5-goog Subject: [PATCH v2 0/4] 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 , 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 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 (4): 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 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 | 56 +++++++++++++++++++++++++++++- drivers/opp/of.c | 14 -------- include/linux/devfreq.h | 1 + include/linux/pm_opp.h | 11 ++++++ 6 files changed, 88 insertions(+), 20 deletions(-) -- 2.22.0.410.gd8fdbe21b5-goog