From patchwork Wed Sep 9 06:27:22 2015 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Viresh Kumar X-Patchwork-Id: 53299 Return-Path: X-Original-To: linaro@patches.linaro.org Delivered-To: linaro@patches.linaro.org Received: from mail-la0-f69.google.com (mail-la0-f69.google.com [209.85.215.69]) by patches.linaro.org (Postfix) with ESMTPS id 71B4022A09 for ; Wed, 9 Sep 2015 06:27:40 +0000 (UTC) Received: by lagj9 with SMTP id j9sf122867lag.0 for ; Tue, 08 Sep 2015 23:27:39 -0700 (PDT) X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20130820; h=x-gm-message-state:delivered-to:date:from:to:cc:subject:message-id :references:mime-version:content-type:content-disposition :in-reply-to:user-agent:sender:precedence:list-id:x-original-sender :x-original-authentication-results:mailing-list:list-post:list-help :list-archive:list-unsubscribe; bh=OdEY+8yXoBtdC3Jvnl+HQiVNXCNrx51mUIKZ36UoJ84=; b=SBrFvuNa1ZRBI1PraK4QOluHBixGa85KMieIOvxJ7YM2UYXCY+0kL7oYuVeWOQ9xcP ciAPOCc50ksnQfeFddttKlUFQgat2indGdUhTuqPwdU/baQDnUe/jrBsA/XbmPmjzMYU OqS9I/S9BjX6WMz3ZXIpgyN009rEtIeJIr4Cs6vzLiOfSjXhO7mnhn02yRmwQf/0fNh3 qRrG967eCffzvV0m8YRy2lBe1JhoZ7mZqFL2PupJRpDuEGois0UpdoPVF37MGP9rzwZZ 0s9m/bb37O2LTssRuFopIobYbLFD5DR8Zbni6/MGSbZnnVc/ics4HdGjlaF7TQtKi2yY PjYw== X-Gm-Message-State: ALoCoQl66TY6jajFMtY6P0GFpltjdDsAVCTZQihZQ8HyNjje9Ny3ckmzkTsW2ukae2C/sBNGiDOr X-Received: by 10.194.115.135 with SMTP id jo7mr7635943wjb.7.1441780059371; Tue, 08 Sep 2015 23:27:39 -0700 (PDT) X-BeenThere: patchwork-forward@linaro.org Received: by 10.152.20.168 with SMTP id o8ls992lae.47.gmail; Tue, 08 Sep 2015 23:27:39 -0700 (PDT) X-Received: by 10.112.142.105 with SMTP id rv9mr26450651lbb.11.1441780059060; Tue, 08 Sep 2015 23:27:39 -0700 (PDT) Received: from mail-la0-f52.google.com (mail-la0-f52.google.com. [209.85.215.52]) by mx.google.com with ESMTPS id bw10si5692367lbc.114.2015.09.08.23.27.39 for (version=TLSv1.2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Tue, 08 Sep 2015 23:27:39 -0700 (PDT) Received-SPF: pass (google.com: domain of patch+caf_=patchwork-forward=linaro.org@linaro.org designates 209.85.215.52 as permitted sender) client-ip=209.85.215.52; Received: by lamp12 with SMTP id p12so143383lam.0 for ; Tue, 08 Sep 2015 23:27:38 -0700 (PDT) X-Received: by 10.112.77.10 with SMTP id o10mr27143768lbw.73.1441780058897; Tue, 08 Sep 2015 23:27:38 -0700 (PDT) X-Forwarded-To: patchwork-forward@linaro.org X-Forwarded-For: patch@linaro.org patchwork-forward@linaro.org Delivered-To: patch@linaro.org Received: by 10.112.59.35 with SMTP id w3csp125037lbq; Tue, 8 Sep 2015 23:27:37 -0700 (PDT) X-Received: by 10.68.104.98 with SMTP id gd2mr67922899pbb.130.1441780057369; Tue, 08 Sep 2015 23:27:37 -0700 (PDT) Received: from vger.kernel.org (vger.kernel.org. [209.132.180.67]) by mx.google.com with ESMTP id dn3si4760624pac.53.2015.09.08.23.27.36; Tue, 08 Sep 2015 23:27:37 -0700 (PDT) Received-SPF: pass (google.com: best guess record for domain of linux-pm-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) client-ip=209.132.180.67; Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1752102AbbIIG1e (ORCPT + 12 others); Wed, 9 Sep 2015 02:27:34 -0400 Received: from mail-pa0-f52.google.com ([209.85.220.52]:36693 "EHLO mail-pa0-f52.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1751837AbbIIG1c (ORCPT ); Wed, 9 Sep 2015 02:27:32 -0400 Received: by padhk3 with SMTP id hk3so289958pad.3 for ; Tue, 08 Sep 2015 23:27:31 -0700 (PDT) X-Received: by 10.68.250.98 with SMTP id zb2mr67233763pbc.40.1441780051503; Tue, 08 Sep 2015 23:27:31 -0700 (PDT) Received: from localhost ([223.227.32.18]) by smtp.gmail.com with ESMTPSA id gh5sm5631850pbc.87.2015.09.08.23.27.27 (version=TLSv1.2 cipher=RC4-SHA bits=128/128); Tue, 08 Sep 2015 23:27:29 -0700 (PDT) Date: Wed, 9 Sep 2015 11:57:22 +0530 From: Viresh Kumar To: Rob Herring Cc: Lee Jones , Stephen Boyd , Nishanth Menon , kernel@stlinux.com, "linux-pm@vger.kernel.org" , Dmitry Eremin-Solenikov , Rafael Wysocki , "linux-kernel@vger.kernel.org" , Sebastian Reichel , "devicetree@vger.kernel.org" , Arnd Bergmann , Ajit Pal Singh , "linux-arm-kernel@lists.infradead.org" Subject: Re: [PATCH v4 2/2] dt: power: st: Provide bindings for ST's OPPs Message-ID: <20150909062722.GA5266@linux> References: <20150811100941.GG5509@linux> <20150811115425.GE18282@x1> <20150811120124.GH5509@linux> <20150811132756.GG18282@x1> <20150811142812.GJ5509@linux> <20150811151736.GO18282@x1> <20150812110841.GC20238@linux> <20150826120628.GZ19409@x1> <20150902080639.GA26744@linux> MIME-Version: 1.0 Content-Disposition: inline In-Reply-To: User-Agent: Mutt/1.5.21 (2010-09-15) Sender: linux-pm-owner@vger.kernel.org Precedence: list List-ID: X-Mailing-List: linux-pm@vger.kernel.org X-Removed-Original-Auth: Dkim didn't pass. X-Original-Sender: viresh.kumar@linaro.org X-Original-Authentication-Results: mx.google.com; spf=pass (google.com: domain of patch+caf_=patchwork-forward=linaro.org@linaro.org designates 209.85.215.52 as permitted sender) smtp.mailfrom=patch+caf_=patchwork-forward=linaro.org@linaro.org Mailing-list: list patchwork-forward@linaro.org; contact patchwork-forward+owners@linaro.org X-Google-Group-Id: 836684582541 List-Post: , List-Help: , List-Archive: List-Unsubscribe: , On 02-09-15, 13:58, Rob Herring wrote: > What do you expect here? It is your job to close it. Ultimately, this > will be your problem to deal with. If you have 10 different vendors > doing selection of OPPs in 10 different ways you will not be able to > change that easily later. Maybe if you can't come up with something > common, then this should just not go into DT. You can always look at > how to do this in a common way and move from the kernel to DT later. After getting ranted a bit, here is an real attempt to solve the problem in a generic way. I hope this can take care of the complexity of both Qualcomm and ST Microelectronics SoCs. @Lee and Stephen: Lemme know if this still wouldn't work :( -------------------------8<------------------------- From: Viresh Kumar Date: Wed, 9 Sep 2015 11:47:37 +0530 Subject: [PATCH] PM / OPP: Add "opp-cuts" and "opp-supply-version" bindings For many platforms it is unknown until runtime, about which OPPs should be used or if used what should be voltage range for the supplies for a particular frequency. And this mostly depends on the version of the device or hardware, for which the OPPs are getting used. This patch adds two new OPP bindings to get this solved. 1. "opp-cuts": The purpose of this binding is to allow the platform to identify the valid OPPs based on the different levels of versions with which the hardware is identified. 2. "opp-supply-name": The purpose of this binding is to allow the platform to select the voltage range of the power supplies, for a valid OPP. Both of these can be used together, as well as independently. Signed-off-by: Viresh Kumar --- Documentation/devicetree/bindings/opp/opp.txt | 90 +++++++++++++++++++++++++++ 1 file changed, 90 insertions(+) -- To unsubscribe from this list: send the line "unsubscribe linux-pm" in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html diff --git a/Documentation/devicetree/bindings/opp/opp.txt b/Documentation/devicetree/bindings/opp/opp.txt index c56a6b1a44ef..def75f7a3614 100644 --- a/Documentation/devicetree/bindings/opp/opp.txt +++ b/Documentation/devicetree/bindings/opp/opp.txt @@ -98,6 +98,13 @@ This describes the OPPs belonging to a device. This node can have following information. But for multiple power-supplies, this must be set to pass triplet style values. +- opp-supply-version: One or more strings describing version of the supplies on + the platform. This is useful for the cases, where the platform wants to select + the voltage range for supplies at runtime, based on the specific version of + the hardware. There should be one entry in opp-microvolt array, for each + string present here. OPPs for the device must be configured, only for a single + version of the supplies. + - status: Marks the OPP table enabled/disabled. @@ -144,6 +151,16 @@ properties. - opp-suspend: Marks the OPP to be used during device suspend. Only one OPP in the table should have this. +- opp-cuts: Variable length field that contains versions/cuts/substrate of the + hardware for which the OPP is supported. Should contain entry per level of + version type. For example: a platform with three levels of versions (cuts + substrate pcode), this field should be like , where X corresponds to + different cuts, Y corresponds to different substrates and Z corresponds to + different pcodes the OPP supports. Each bit of the value corresponds to a + particular version of the level, and so we can have maximum 32 different + values of any level. A value of 0xFFFFFFFF means that all the versions of the + level are supported. + - status: Marks the node enabled/disabled. Example 1: Single cluster Dual-core ARM cortex A9, switch DVFS states together. @@ -491,3 +508,76 @@ Example 5: Multiple OPP tables }; }; }; + +Example 6: OPP selection based on hardware version +(example: three levels of versions: cuts, substrate and pcode) + +/ { + cpus { + cpu@0 { + compatible = "arm,cortex-a7"; + ... + + cpu-supply = <&cpu_supply> + operating-points-v2 = <&cpu0_opp_table_slow>; + }; + }; + + opp_table { + compatible = "operating-points-v2"; + status = "okay"; + opp-shared; + + opp00 { + /* + * Supports all substrate and pcode versions for 0xf + * cuts, i.e. only first four cuts. + */ + opp-cuts = <0xf 0xffffffff 0xffffffff> + opp-hz = /bits/ 64 <600000000>; + ... + }; + + opp01 { + /* + * Supports all substrate and pcode versions for 0x20 + * cuts, i.e. only the 6th cut. + */ + opp-cuts = <0x20 0xffffffff 0xffffffff> + opp-hz = /bits/ 64 <800000000>; + ... + }; + }; +}; + +Example 7: Multiple voltage-ranges (opp-supply-version) per supply +(example: device with 2 supplies: vcc0 and vcc1, with two possible ranges of +voltages: slow and fast) + +/ { + cpus { + cpu@0 { + compatible = "arm,cortex-a7"; + ... + + vcc0-supply = <&cpu_supply0>; + vcc1-supply = <&cpu_supply1>; + operating-points-v2 = <&cpu0_opp_table>; + }; + }; + + cpu0_opp_table: opp_table0 { + compatible = "operating-points-v2"; + supply-names = "vcc0", "vcc1"; + opp-supply-version = "slow", "fast"; + opp-shared; + + opp00 { + opp-hz = /bits/ 64 <1000000000>; + opp-microvolt = <900000 915000 925000>, /* Supply vcc0: slow */ + <910000 925000 935000>, /* Supply vcc1: slow */ + <970000 975000 985000>, /* Supply vcc0: fast */ + <960000 965000 975000>; /* Supply vcc1: fast */ + }; + }; +};