[v3,2/5] dt-bindings: cpufreq: apple,soc-cpufreq: Add binding for Apple SoC cpufreq
Message ID | 20221024043925.25379-3-marcan@marcan.st |
---|---|
State | New |
Headers |
Return-Path: <linux-kernel-owner@vger.kernel.org> Delivered-To: ouuuleilei@gmail.com Received: by 2002:a5d:6687:0:0:0:0:0 with SMTP id l7csp250740wru; Sun, 23 Oct 2022 21:41:14 -0700 (PDT) X-Google-Smtp-Source: AMsMyM5bUmAVWIsmkmXUmLpfzoJC6puyhM+xcmdxMf5sLd52xPvDh6G6XGSFsl8si0uyMJW3xNty X-Received: by 2002:a05:6402:2744:b0:45c:9978:eae8 with SMTP id z4-20020a056402274400b0045c9978eae8mr29308268edd.361.1666586474598; Sun, 23 Oct 2022 21:41:14 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1666586474; cv=none; d=google.com; s=arc-20160816; b=Np5v6cAbqFTI1TQFFpMuXXiY6nNGIz60ayOr+CpkJpEKVboeYEVrGQWoNyTmOETvPK x8e5RpcRtcqxRg8teJYp3Di66NDrJ3KYG3xV7M3HlF/QvlMG5uhjDRmjmWWu3i7iMnRe 7FKN3IlfVC3NzNC3CAcuW4fZPtFv8R3/G2xqmP/BiCj3j9YIsWdM7UwpBkMxA/RzhsR7 RHgrwwk6YrnxzDPmJkSG9lOgawwv76JACaxI3Q4E6KcyACImW++m/ZlPYdZqajFPbURs p6G9sGfR1RgASgdgXno6YhXjQsH+4hoaEmcjiSScRaBrSPlArBMQ+9u7SIpf3lJUut+M CjFw== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:content-transfer-encoding:mime-version :references:in-reply-to:message-id:date:subject:cc:to:from :dkim-signature; bh=zsUB5VNfZk+gPfeEgiV2bVsBoj0g/ysqhUZxYRd0nkU=; b=Ky/reXY0JCIv2tPakeblPK3vLfkK2E+UXAWHNByafjULSXrZkqW0XLMqTi7xPBfmxB 3ehzGH7cAJxO7QpfrtxX4k//80hHvslia2mVw1mRWpq0NAT/8hUDF96MAkavhOL3ZCVF X3XctiuxBAvy7dpVfrou3rdgz/dDaLiZW0+Nj3VzFxqwd3qQ2rJn/a8/OC/7bbg1V16m wUhTaCucJP/lBw5XPB6M3vWKqyVQ7GkNVlZn7IYyTjy+1ruwSFRuvTVGt9ktLU0Xgh2U LGUxzhbUNkraM6TEx0LBy7n4lMpCmW9xyJU+T1phWWuyNTJ8IPQZtNzJfHB/sK0UHMeW j2rg== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@marcan.st header.s=default header.b=LYVmh+bS; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=QUARANTINE sp=QUARANTINE dis=NONE) header.from=marcan.st Received: from out1.vger.email (out1.vger.email. [2620:137:e000::1:20]) by mx.google.com with ESMTP id be15-20020a0564021a2f00b00461a9ddbda7si2962276edb.90.2022.10.23.21.40.50; Sun, 23 Oct 2022 21:41:14 -0700 (PDT) Received-SPF: pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) client-ip=2620:137:e000::1:20; Authentication-Results: mx.google.com; dkim=pass header.i=@marcan.st header.s=default header.b=LYVmh+bS; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=QUARANTINE sp=QUARANTINE dis=NONE) header.from=marcan.st Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S229958AbiJXEkA (ORCPT <rfc822;pwkd43@gmail.com> + 99 others); Mon, 24 Oct 2022 00:40:00 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:52582 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S229923AbiJXEjy (ORCPT <rfc822;linux-kernel@vger.kernel.org>); Mon, 24 Oct 2022 00:39:54 -0400 Received: from mail.marcansoft.com (marcansoft.com [212.63.210.85]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id A00E827B10; Sun, 23 Oct 2022 21:39:51 -0700 (PDT) Received: from [127.0.0.1] (localhost [127.0.0.1]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (4096 bits) server-digest SHA256) (No client certificate requested) (Authenticated sender: hector@marcansoft.com) by mail.marcansoft.com (Postfix) with ESMTPSA id 77582424B9; Mon, 24 Oct 2022 04:39:45 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=marcan.st; s=default; t=1666586389; bh=PVbU0np+97Je803BzzDJxHjiUfk3jhfRkIFZVZYuHUk=; h=From:To:Cc:Subject:Date:In-Reply-To:References; b=LYVmh+bSESpCH7QKiV6mv4Oel4WaxJcbFyjwesld4g+umRsZfe3jzeACIQA9EgbL7 e6OGgdiAPDOSHb8/nv5mm22hYgipk5ewwnU7QaD1AVWv5E/qaBNNWuVQ+Sw0kgSiJd z2SC/9VTTruuzFJvFIjAftSYNWMl9xowXkOMOW0Dgpc39xJ3xZ9c6eb/OiH8SytExD Yo0YvQNegGkH9Wk3jOjZv9wiUNd8TiBzbWxMUO7vFeKemw0Kfk+VmbcYcZ+kq/iW9N Tqn36RYv+D7IwdzRQZPJGzYjRt/ZSIJKUFIF52a+fkODGhOhqz8kXAH/uSr9/KMTBa 4YWpOYw+wbarA== From: Hector Martin <marcan@marcan.st> To: "Rafael J. Wysocki" <rafael@kernel.org>, Viresh Kumar <viresh.kumar@linaro.org>, Matthias Brugger <matthias.bgg@gmail.com> Cc: Hector Martin <marcan@marcan.st>, Sven Peter <sven@svenpeter.dev>, Alyssa Rosenzweig <alyssa@rosenzweig.io>, Rob Herring <robh+dt@kernel.org>, Krzysztof Kozlowski <krzysztof.kozlowski+dt@linaro.org>, Stephen Boyd <sboyd@kernel.org>, Ulf Hansson <ulf.hansson@linaro.org>, Marc Zyngier <maz@kernel.org>, Mark Kettenis <mark.kettenis@xs4all.nl>, asahi@lists.linux.dev, linux-arm-kernel@lists.infradead.org, linux-pm@vger.kernel.org, devicetree@vger.kernel.org, linux-kernel@vger.kernel.org Subject: [PATCH v3 2/5] dt-bindings: cpufreq: apple,soc-cpufreq: Add binding for Apple SoC cpufreq Date: Mon, 24 Oct 2022 13:39:22 +0900 Message-Id: <20221024043925.25379-3-marcan@marcan.st> X-Mailer: git-send-email 2.35.1 In-Reply-To: <20221024043925.25379-1-marcan@marcan.st> References: <20221024043925.25379-1-marcan@marcan.st> MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Spam-Status: No, score=-2.1 required=5.0 tests=BAYES_00,DKIM_SIGNED, DKIM_VALID,DKIM_VALID_AU,DKIM_VALID_EF,SPF_HELO_NONE,SPF_PASS autolearn=ham autolearn_force=no version=3.4.6 X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on lindbergh.monkeyblade.net Precedence: bulk List-ID: <linux-kernel.vger.kernel.org> X-Mailing-List: linux-kernel@vger.kernel.org X-getmail-retrieved-from-mailbox: =?utf-8?q?INBOX?= X-GMAIL-THRID: =?utf-8?q?1747542579560690273?= X-GMAIL-MSGID: =?utf-8?q?1747542579560690273?= |
Series |
Apple SoC cpufreq driver
|
|
Commit Message
Hector Martin
Oct. 24, 2022, 4:39 a.m. UTC
This binding represents the cpufreq/DVFS hardware present in Apple SoCs.
The hardware has an independent controller per CPU cluster, and we
represent them as unique nodes in order to accurately describe the
hardware. The driver is responsible for binding them as a single cpufreq
device (in the Linux cpufreq model).
Signed-off-by: Hector Martin <marcan@marcan.st>
---
.../cpufreq/apple,cluster-cpufreq.yaml | 119 ++++++++++++++++++
1 file changed, 119 insertions(+)
create mode 100644 Documentation/devicetree/bindings/cpufreq/apple,cluster-cpufreq.yaml
Comments
On 24/10/2022 00:39, Hector Martin wrote: > This binding represents the cpufreq/DVFS hardware present in Apple SoCs. > The hardware has an independent controller per CPU cluster, and we > represent them as unique nodes in order to accurately describe the > hardware. The driver is responsible for binding them as a single cpufreq > device (in the Linux cpufreq model). > > Signed-off-by: Hector Martin <marcan@marcan.st> > --- > .../cpufreq/apple,cluster-cpufreq.yaml | 119 ++++++++++++++++++ > 1 file changed, 119 insertions(+) > create mode 100644 Documentation/devicetree/bindings/cpufreq/apple,cluster-cpufreq.yaml > > diff --git a/Documentation/devicetree/bindings/cpufreq/apple,cluster-cpufreq.yaml b/Documentation/devicetree/bindings/cpufreq/apple,cluster-cpufreq.yaml > new file mode 100644 > index 000000000000..b11452f91468 > --- /dev/null > +++ b/Documentation/devicetree/bindings/cpufreq/apple,cluster-cpufreq.yaml > @@ -0,0 +1,119 @@ > +# SPDX-License-Identifier: GPL-2.0-only OR BSD-2-Clause > +%YAML 1.2 > +--- > +$id: http://devicetree.org/schemas/cpufreq/apple,cluster-cpufreq.yaml# > +$schema: http://devicetree.org/meta-schemas/core.yaml# > + > +title: Apple SoC cluster cpufreq device Few nits, in general looks fine to me. > + > +maintainers: > + - Hector Martin <marcan@marcan.st> > + > +description: | > + Apple SoCs (e.g. M1) have a per-cpu-cluster DVFS controller that is part of > + the cluster management register block. This binding uses the standard > + operating-points-v2 table to define the CPU performance states, with the > + opp-level property specifying the hardware p-state index for that level. > + > +properties: > + compatible: > + oneOf: > + - items: > + - const: apple,t8103-cluster-cpufreq > + - const: apple,cluster-cpufreq > + - items: > + - const: apple,t6000-cluster-cpufreq > + - const: apple,t8103-cluster-cpufreq > + - const: apple,cluster-cpufreq > + - items: > + - const: apple,t8112-cluster-cpufreq With the first one (t8103) - it's an enum. > + - const: apple,cluster-cpufreq > + > + reg: > + maxItems: 1 > + description: The register region for this CPU cluster DVFS controller Drop description, quite obvious. > + > + '#performance-domain-cells': > + const: 0 > + > +required: > + - compatible > + - reg > + - '#performance-domain-cells' > + > +additionalProperties: false > + > +examples: > + - | > + // This example shows a single CPU per domain and 2 domains, > + // with two p-states per domain. > + // Shipping hardware has 2-4 CPUs per domain and 2-6 domains. > + cpus { > + #address-cells = <2>; > + #size-cells = <0>; > + > + cpu@0 { > + compatible = "apple,icestorm"; > + device_type = "cpu"; > + reg = <0x0 0x0>; > + operating-points-v2 = <&ecluster_opp>; > + performance-domains = <&cpufreq_e>; > + }; > + > + cpu@10100 { > + compatible = "apple,firestorm"; > + device_type = "cpu"; > + reg = <0x0 0x10100>; > + operating-points-v2 = <&pcluster_opp>; > + performance-domains = <&cpufreq_p>; > + }; > + }; > + > + ecluster_opp: opp-table-0 { > + compatible = "operating-points-v2"; > + opp-shared; > + > + opp01 { > + opp-hz = /bits/ 64 <600000000>; > + opp-level = <1>; > + clock-latency-ns = <7500>; > + }; > + opp02 { > + opp-hz = /bits/ 64 <972000000>; > + opp-level = <2>; > + clock-latency-ns = <22000>; > + }; > + }; > + > + pcluster_opp: opp-table-1 { > + compatible = "operating-points-v2"; > + opp-shared; > + > + opp01 { > + opp-hz = /bits/ 64 <600000000>; > + opp-level = <1>; > + clock-latency-ns = <8000>; > + }; > + opp02 { > + opp-hz = /bits/ 64 <828000000>; > + opp-level = <2>; > + clock-latency-ns = <19000>; > + }; > + }; > + > + soc { > + #address-cells = <2>; > + #size-cells = <2>; > + > + cpufreq_e: cpufreq@210e20000 { Node name: performance-controller (cpufreq is rather Linux naming) > + compatible = "apple,t8103-cluster-cpufreq", "apple,cluster-cpufreq"; > + reg = <0x2 0x10e20000 0 0x1000>; > + #performance-domain-cells = <0>; > + }; > + > + cpufreq_p: cpufreq@211e20000 { The same. > + compatible = "apple,t8103-cluster-cpufreq", "apple,cluster-cpufreq"; > + reg = <0x2 0x11e20000 0 0x1000>; > + #performance-domain-cells = <0>; > + }; > + }; Best regards, Krzysztof
On 26/10/2022 01.01, Krzysztof Kozlowski wrote: > On 24/10/2022 00:39, Hector Martin wrote: >> This binding represents the cpufreq/DVFS hardware present in Apple SoCs. >> The hardware has an independent controller per CPU cluster, and we >> represent them as unique nodes in order to accurately describe the >> hardware. The driver is responsible for binding them as a single cpufreq >> device (in the Linux cpufreq model). >> >> Signed-off-by: Hector Martin <marcan@marcan.st> >> --- >> .../cpufreq/apple,cluster-cpufreq.yaml | 119 ++++++++++++++++++ >> 1 file changed, 119 insertions(+) >> create mode 100644 Documentation/devicetree/bindings/cpufreq/apple,cluster-cpufreq.yaml >> >> diff --git a/Documentation/devicetree/bindings/cpufreq/apple,cluster-cpufreq.yaml b/Documentation/devicetree/bindings/cpufreq/apple,cluster-cpufreq.yaml >> new file mode 100644 >> index 000000000000..b11452f91468 >> --- /dev/null >> +++ b/Documentation/devicetree/bindings/cpufreq/apple,cluster-cpufreq.yaml >> @@ -0,0 +1,119 @@ >> +# SPDX-License-Identifier: GPL-2.0-only OR BSD-2-Clause >> +%YAML 1.2 >> +--- >> +$id: http://devicetree.org/schemas/cpufreq/apple,cluster-cpufreq.yaml# >> +$schema: http://devicetree.org/meta-schemas/core.yaml# >> + >> +title: Apple SoC cluster cpufreq device > > Few nits, in general looks fine to me. > >> + >> +maintainers: >> + - Hector Martin <marcan@marcan.st> >> + >> +description: | >> + Apple SoCs (e.g. M1) have a per-cpu-cluster DVFS controller that is part of >> + the cluster management register block. This binding uses the standard >> + operating-points-v2 table to define the CPU performance states, with the >> + opp-level property specifying the hardware p-state index for that level. >> + >> +properties: >> + compatible: >> + oneOf: >> + - items: >> + - const: apple,t8103-cluster-cpufreq >> + - const: apple,cluster-cpufreq >> + - items: >> + - const: apple,t6000-cluster-cpufreq >> + - const: apple,t8103-cluster-cpufreq >> + - const: apple,cluster-cpufreq >> + - items: >> + - const: apple,t8112-cluster-cpufreq > > With the first one (t8103) - it's an enum. This is deliberate. t6000 is compatible with t8103, but t8112 is not (though all are compatible with what the generic apple,cluster-cpufreq compatible implies). Ack on the rest, I'll spin a v4 in a few days if there are no other comments. Thanks! - Hector
On 25/10/2022 13:22, Hector Martin wrote: > On 26/10/2022 01.01, Krzysztof Kozlowski wrote: >> On 24/10/2022 00:39, Hector Martin wrote: >>> This binding represents the cpufreq/DVFS hardware present in Apple SoCs. >>> The hardware has an independent controller per CPU cluster, and we >>> represent them as unique nodes in order to accurately describe the >>> hardware. The driver is responsible for binding them as a single cpufreq >>> device (in the Linux cpufreq model). >>> >>> Signed-off-by: Hector Martin <marcan@marcan.st> >>> --- >>> .../cpufreq/apple,cluster-cpufreq.yaml | 119 ++++++++++++++++++ >>> 1 file changed, 119 insertions(+) >>> create mode 100644 Documentation/devicetree/bindings/cpufreq/apple,cluster-cpufreq.yaml >>> >>> diff --git a/Documentation/devicetree/bindings/cpufreq/apple,cluster-cpufreq.yaml b/Documentation/devicetree/bindings/cpufreq/apple,cluster-cpufreq.yaml >>> new file mode 100644 >>> index 000000000000..b11452f91468 >>> --- /dev/null >>> +++ b/Documentation/devicetree/bindings/cpufreq/apple,cluster-cpufreq.yaml >>> @@ -0,0 +1,119 @@ >>> +# SPDX-License-Identifier: GPL-2.0-only OR BSD-2-Clause >>> +%YAML 1.2 >>> +--- >>> +$id: http://devicetree.org/schemas/cpufreq/apple,cluster-cpufreq.yaml# >>> +$schema: http://devicetree.org/meta-schemas/core.yaml# >>> + >>> +title: Apple SoC cluster cpufreq device >> >> Few nits, in general looks fine to me. >> >>> + >>> +maintainers: >>> + - Hector Martin <marcan@marcan.st> >>> + >>> +description: | >>> + Apple SoCs (e.g. M1) have a per-cpu-cluster DVFS controller that is part of >>> + the cluster management register block. This binding uses the standard >>> + operating-points-v2 table to define the CPU performance states, with the >>> + opp-level property specifying the hardware p-state index for that level. >>> + >>> +properties: >>> + compatible: >>> + oneOf: >>> + - items: >>> + - const: apple,t8103-cluster-cpufreq >>> + - const: apple,cluster-cpufreq >>> + - items: >>> + - const: apple,t6000-cluster-cpufreq >>> + - const: apple,t8103-cluster-cpufreq >>> + - const: apple,cluster-cpufreq >>> + - items: >>> + - const: apple,t8112-cluster-cpufreq >> >> With the first one (t8103) - it's an enum. > > This is deliberate. t6000 is compatible with t8103, but t8112 is not > (though all are compatible with what the generic apple,cluster-cpufreq > compatible implies). I was not talking about t6000. I was talking about two entries - first and last - which should be just an enum. There is no compatibility, so what is here deliberate? To not make enum things which are an enum? Best regards, Krzysztof
On Wed, Oct 26, 2022 at 02:22:40AM +0900, Hector Martin wrote: > On 26/10/2022 01.01, Krzysztof Kozlowski wrote: > > On 24/10/2022 00:39, Hector Martin wrote: > >> This binding represents the cpufreq/DVFS hardware present in Apple SoCs. > >> The hardware has an independent controller per CPU cluster, and we > >> represent them as unique nodes in order to accurately describe the > >> hardware. The driver is responsible for binding them as a single cpufreq > >> device (in the Linux cpufreq model). > >> > >> Signed-off-by: Hector Martin <marcan@marcan.st> > >> --- > >> .../cpufreq/apple,cluster-cpufreq.yaml | 119 ++++++++++++++++++ > >> 1 file changed, 119 insertions(+) > >> create mode 100644 Documentation/devicetree/bindings/cpufreq/apple,cluster-cpufreq.yaml > >> > >> diff --git a/Documentation/devicetree/bindings/cpufreq/apple,cluster-cpufreq.yaml b/Documentation/devicetree/bindings/cpufreq/apple,cluster-cpufreq.yaml > >> new file mode 100644 > >> index 000000000000..b11452f91468 > >> --- /dev/null > >> +++ b/Documentation/devicetree/bindings/cpufreq/apple,cluster-cpufreq.yaml > >> @@ -0,0 +1,119 @@ > >> +# SPDX-License-Identifier: GPL-2.0-only OR BSD-2-Clause > >> +%YAML 1.2 > >> +--- > >> +$id: http://devicetree.org/schemas/cpufreq/apple,cluster-cpufreq.yaml# > >> +$schema: http://devicetree.org/meta-schemas/core.yaml# > >> + > >> +title: Apple SoC cluster cpufreq device > > > > Few nits, in general looks fine to me. > > > >> + > >> +maintainers: > >> + - Hector Martin <marcan@marcan.st> > >> + > >> +description: | > >> + Apple SoCs (e.g. M1) have a per-cpu-cluster DVFS controller that is part of > >> + the cluster management register block. This binding uses the standard > >> + operating-points-v2 table to define the CPU performance states, with the > >> + opp-level property specifying the hardware p-state index for that level. > >> + > >> +properties: > >> + compatible: > >> + oneOf: > >> + - items: > >> + - const: apple,t8103-cluster-cpufreq > >> + - const: apple,cluster-cpufreq > >> + - items: > >> + - const: apple,t6000-cluster-cpufreq > >> + - const: apple,t8103-cluster-cpufreq > >> + - const: apple,cluster-cpufreq > >> + - items: > >> + - const: apple,t8112-cluster-cpufreq > > > > With the first one (t8103) - it's an enum. > > This is deliberate. t6000 is compatible with t8103, but t8112 is not > (though all are compatible with what the generic apple,cluster-cpufreq > compatible implies). What does compatible mean here? IOW, what can a client do with 'apple,cluster-cpufreq' alone? It's one thing for self-contained blocks to remain unchanged from chip to chip, but things like this tend to change frequently. It looks like for 4 chips we have 3 different versions. Rob
On 26/10/2022 03.56, Krzysztof Kozlowski wrote: > On 25/10/2022 13:22, Hector Martin wrote: >> On 26/10/2022 01.01, Krzysztof Kozlowski wrote: >>> On 24/10/2022 00:39, Hector Martin wrote: >>>> This binding represents the cpufreq/DVFS hardware present in Apple SoCs. >>>> The hardware has an independent controller per CPU cluster, and we >>>> represent them as unique nodes in order to accurately describe the >>>> hardware. The driver is responsible for binding them as a single cpufreq >>>> device (in the Linux cpufreq model). >>>> >>>> Signed-off-by: Hector Martin <marcan@marcan.st> >>>> --- >>>> .../cpufreq/apple,cluster-cpufreq.yaml | 119 ++++++++++++++++++ >>>> 1 file changed, 119 insertions(+) >>>> create mode 100644 Documentation/devicetree/bindings/cpufreq/apple,cluster-cpufreq.yaml >>>> >>>> diff --git a/Documentation/devicetree/bindings/cpufreq/apple,cluster-cpufreq.yaml b/Documentation/devicetree/bindings/cpufreq/apple,cluster-cpufreq.yaml >>>> new file mode 100644 >>>> index 000000000000..b11452f91468 >>>> --- /dev/null >>>> +++ b/Documentation/devicetree/bindings/cpufreq/apple,cluster-cpufreq.yaml >>>> @@ -0,0 +1,119 @@ >>>> +# SPDX-License-Identifier: GPL-2.0-only OR BSD-2-Clause >>>> +%YAML 1.2 >>>> +--- >>>> +$id: http://devicetree.org/schemas/cpufreq/apple,cluster-cpufreq.yaml# >>>> +$schema: http://devicetree.org/meta-schemas/core.yaml# >>>> + >>>> +title: Apple SoC cluster cpufreq device >>> >>> Few nits, in general looks fine to me. >>> >>>> + >>>> +maintainers: >>>> + - Hector Martin <marcan@marcan.st> >>>> + >>>> +description: | >>>> + Apple SoCs (e.g. M1) have a per-cpu-cluster DVFS controller that is part of >>>> + the cluster management register block. This binding uses the standard >>>> + operating-points-v2 table to define the CPU performance states, with the >>>> + opp-level property specifying the hardware p-state index for that level. >>>> + >>>> +properties: >>>> + compatible: >>>> + oneOf: >>>> + - items: >>>> + - const: apple,t8103-cluster-cpufreq >>>> + - const: apple,cluster-cpufreq >>>> + - items: >>>> + - const: apple,t6000-cluster-cpufreq >>>> + - const: apple,t8103-cluster-cpufreq >>>> + - const: apple,cluster-cpufreq >>>> + - items: >>>> + - const: apple,t8112-cluster-cpufreq >>> >>> With the first one (t8103) - it's an enum. >> >> This is deliberate. t6000 is compatible with t8103, but t8112 is not >> (though all are compatible with what the generic apple,cluster-cpufreq >> compatible implies). > > I was not talking about t6000. I was talking about two entries - first > and last - which should be just an enum. There is no compatibility, so > what is here deliberate? To not make enum things which are an enum? Sorry, I didn't understand what you meant. You mean that the two entries should be merged, with an enum for the first item listing both SoCs, right? - Hector
On 26/10/2022 08.12, Rob Herring wrote: > On Wed, Oct 26, 2022 at 02:22:40AM +0900, Hector Martin wrote: >> On 26/10/2022 01.01, Krzysztof Kozlowski wrote: >>> On 24/10/2022 00:39, Hector Martin wrote: >>>> This binding represents the cpufreq/DVFS hardware present in Apple SoCs. >>>> The hardware has an independent controller per CPU cluster, and we >>>> represent them as unique nodes in order to accurately describe the >>>> hardware. The driver is responsible for binding them as a single cpufreq >>>> device (in the Linux cpufreq model). >>>> >>>> Signed-off-by: Hector Martin <marcan@marcan.st> >>>> --- >>>> .../cpufreq/apple,cluster-cpufreq.yaml | 119 ++++++++++++++++++ >>>> 1 file changed, 119 insertions(+) >>>> create mode 100644 Documentation/devicetree/bindings/cpufreq/apple,cluster-cpufreq.yaml >>>> >>>> diff --git a/Documentation/devicetree/bindings/cpufreq/apple,cluster-cpufreq.yaml b/Documentation/devicetree/bindings/cpufreq/apple,cluster-cpufreq.yaml >>>> new file mode 100644 >>>> index 000000000000..b11452f91468 >>>> --- /dev/null >>>> +++ b/Documentation/devicetree/bindings/cpufreq/apple,cluster-cpufreq.yaml >>>> @@ -0,0 +1,119 @@ >>>> +# SPDX-License-Identifier: GPL-2.0-only OR BSD-2-Clause >>>> +%YAML 1.2 >>>> +--- >>>> +$id: http://devicetree.org/schemas/cpufreq/apple,cluster-cpufreq.yaml# >>>> +$schema: http://devicetree.org/meta-schemas/core.yaml# >>>> + >>>> +title: Apple SoC cluster cpufreq device >>> >>> Few nits, in general looks fine to me. >>> >>>> + >>>> +maintainers: >>>> + - Hector Martin <marcan@marcan.st> >>>> + >>>> +description: | >>>> + Apple SoCs (e.g. M1) have a per-cpu-cluster DVFS controller that is part of >>>> + the cluster management register block. This binding uses the standard >>>> + operating-points-v2 table to define the CPU performance states, with the >>>> + opp-level property specifying the hardware p-state index for that level. >>>> + >>>> +properties: >>>> + compatible: >>>> + oneOf: >>>> + - items: >>>> + - const: apple,t8103-cluster-cpufreq >>>> + - const: apple,cluster-cpufreq >>>> + - items: >>>> + - const: apple,t6000-cluster-cpufreq >>>> + - const: apple,t8103-cluster-cpufreq >>>> + - const: apple,cluster-cpufreq >>>> + - items: >>>> + - const: apple,t8112-cluster-cpufreq >>> >>> With the first one (t8103) - it's an enum. >> >> This is deliberate. t6000 is compatible with t8103, but t8112 is not >> (though all are compatible with what the generic apple,cluster-cpufreq >> compatible implies). > > What does compatible mean here? IOW, what can a client do with > 'apple,cluster-cpufreq' alone? It's one thing for self-contained blocks > to remain unchanged from chip to chip, but things like this tend to > change frequently. It looks like for 4 chips we have 3 different > versions. This is described in the cover letter. The actual cpufreq control is identical for all shipping SoCs right now (that's 5 SoCs, since t6000 is actually also t6001 and t6002) and will work with just that generic compatible (and almost certainly quite a few SoC generations going back too). It's just that I found a useful register that gives you feedback on the *actual* pstate, and that register field shifted one bit on t8112 because they ran out of bits. If the driver finds a t8103 or t8112 compatible, it will use that register to accurately report the current frequency (subject to boost frequency restrictions). If it doesn't, it will just report the requested frequency as actual. t6000 is compatible with t8103 in this regard, hence the tiering. I expect lots of future SoCs to be compatible with t8112, since although they exceeded 16 pstates there, I doubt they'll push beyond 32 and have to move it another bit any time soon. Right *now*, since boost frequencies are unachievable and disabled due to reasons unrelated to this driver, all compatibles are, in fact, completely equivalent in functionality for end users, and nothing would change if we just had `apple,cluster-cpufreq` in the DT. This will change once we get cpuidle support, which unlocks boost frequencies as a side effect, but that will require no changes to this driver/series (other than uncommenting the extra OPPs in the DT). - Hector
On 26/10/2022 00:18, Hector Martin wrote: >>>> With the first one (t8103) - it's an enum. >>> >>> This is deliberate. t6000 is compatible with t8103, but t8112 is not >>> (though all are compatible with what the generic apple,cluster-cpufreq >>> compatible implies). >> >> I was not talking about t6000. I was talking about two entries - first >> and last - which should be just an enum. There is no compatibility, so >> what is here deliberate? To not make enum things which are an enum? > > Sorry, I didn't understand what you meant. You mean that the two entries > should be merged, with an enum for the first item listing both SoCs, right? Yes Best regards, Krzysztof
diff --git a/Documentation/devicetree/bindings/cpufreq/apple,cluster-cpufreq.yaml b/Documentation/devicetree/bindings/cpufreq/apple,cluster-cpufreq.yaml new file mode 100644 index 000000000000..b11452f91468 --- /dev/null +++ b/Documentation/devicetree/bindings/cpufreq/apple,cluster-cpufreq.yaml @@ -0,0 +1,119 @@ +# SPDX-License-Identifier: GPL-2.0-only OR BSD-2-Clause +%YAML 1.2 +--- +$id: http://devicetree.org/schemas/cpufreq/apple,cluster-cpufreq.yaml# +$schema: http://devicetree.org/meta-schemas/core.yaml# + +title: Apple SoC cluster cpufreq device + +maintainers: + - Hector Martin <marcan@marcan.st> + +description: | + Apple SoCs (e.g. M1) have a per-cpu-cluster DVFS controller that is part of + the cluster management register block. This binding uses the standard + operating-points-v2 table to define the CPU performance states, with the + opp-level property specifying the hardware p-state index for that level. + +properties: + compatible: + oneOf: + - items: + - const: apple,t8103-cluster-cpufreq + - const: apple,cluster-cpufreq + - items: + - const: apple,t6000-cluster-cpufreq + - const: apple,t8103-cluster-cpufreq + - const: apple,cluster-cpufreq + - items: + - const: apple,t8112-cluster-cpufreq + - const: apple,cluster-cpufreq + + reg: + maxItems: 1 + description: The register region for this CPU cluster DVFS controller + + '#performance-domain-cells': + const: 0 + +required: + - compatible + - reg + - '#performance-domain-cells' + +additionalProperties: false + +examples: + - | + // This example shows a single CPU per domain and 2 domains, + // with two p-states per domain. + // Shipping hardware has 2-4 CPUs per domain and 2-6 domains. + cpus { + #address-cells = <2>; + #size-cells = <0>; + + cpu@0 { + compatible = "apple,icestorm"; + device_type = "cpu"; + reg = <0x0 0x0>; + operating-points-v2 = <&ecluster_opp>; + performance-domains = <&cpufreq_e>; + }; + + cpu@10100 { + compatible = "apple,firestorm"; + device_type = "cpu"; + reg = <0x0 0x10100>; + operating-points-v2 = <&pcluster_opp>; + performance-domains = <&cpufreq_p>; + }; + }; + + ecluster_opp: opp-table-0 { + compatible = "operating-points-v2"; + opp-shared; + + opp01 { + opp-hz = /bits/ 64 <600000000>; + opp-level = <1>; + clock-latency-ns = <7500>; + }; + opp02 { + opp-hz = /bits/ 64 <972000000>; + opp-level = <2>; + clock-latency-ns = <22000>; + }; + }; + + pcluster_opp: opp-table-1 { + compatible = "operating-points-v2"; + opp-shared; + + opp01 { + opp-hz = /bits/ 64 <600000000>; + opp-level = <1>; + clock-latency-ns = <8000>; + }; + opp02 { + opp-hz = /bits/ 64 <828000000>; + opp-level = <2>; + clock-latency-ns = <19000>; + }; + }; + + soc { + #address-cells = <2>; + #size-cells = <2>; + + cpufreq_e: cpufreq@210e20000 { + compatible = "apple,t8103-cluster-cpufreq", "apple,cluster-cpufreq"; + reg = <0x2 0x10e20000 0 0x1000>; + #performance-domain-cells = <0>; + }; + + cpufreq_p: cpufreq@211e20000 { + compatible = "apple,t8103-cluster-cpufreq", "apple,cluster-cpufreq"; + reg = <0x2 0x11e20000 0 0x1000>; + #performance-domain-cells = <0>; + }; + };