From patchwork Wed Sep 2 08:45:16 2020 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Nicola Mazzucato X-Patchwork-Id: 11750175 Return-Path: Received: from mail.kernel.org (pdx-korg-mail-1.web.codeaurora.org [172.30.200.123]) by pdx-korg-patchwork-2.web.codeaurora.org (Postfix) with ESMTP id 89A7C13B1 for ; Wed, 2 Sep 2020 08:45:15 +0000 (UTC) Received: from merlin.infradead.org (merlin.infradead.org [205.233.59.134]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by mail.kernel.org (Postfix) with ESMTPS id 5FD3620773 for ; Wed, 2 Sep 2020 08:45:15 +0000 (UTC) Authentication-Results: mail.kernel.org; dkim=pass (2048-bit key) header.d=lists.infradead.org header.i=@lists.infradead.org header.b="Kq398PYL" DMARC-Filter: OpenDMARC Filter v1.3.2 mail.kernel.org 5FD3620773 Authentication-Results: mail.kernel.org; dmarc=none (p=none dis=none) header.from=arm.com Authentication-Results: mail.kernel.org; spf=none smtp.mailfrom=linux-arm-kernel-bounces+patchwork-linux-arm=patchwork.kernel.org@lists.infradead.org DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=lists.infradead.org; s=merlin.20170209; h=Sender:Content-Transfer-Encoding: Content-Type:Cc:List-Subscribe:List-Help:List-Post:List-Archive: List-Unsubscribe:List-Id:MIME-Version:Message-Id:Date:Subject:To:From: Reply-To:Content-ID:Content-Description:Resent-Date:Resent-From:Resent-Sender :Resent-To:Resent-Cc:Resent-Message-ID:In-Reply-To:References:List-Owner; bh=27yNQZuwWZcD2OPYbKVJokrrJ5BL/Ji8XfADUNY7m5g=; b=Kq398PYL4jjZbkNrDG+HKTtbdj zMgz0yUnFfELT8eTC/CH72quVBBZ75AItEyjRjcoYGOgfEr/h37Wak8nrooEkA/+j5Om1AZcDC5na Sw8Lr2jfZ9vAeOHAP2RvHQiAmVUvujr1WmtvtK3/nRGZ4M6eeskXc6VgGl/d4AaLpFEHA1/FEBrN0 vE+jn9TYQ1shNFGgNa84bF09efjOnNZObtUenUxgN/BkgzLK8WTM7HVyGmWaNhd4Yo9nLPnaMIlOZ ETO9h01cXwJasklt8qSIpettMbdWe90MWleLwFNM56kG46TRc6uNLojktO6aKIwfJKCpR55IXfMqv svyWYnrw==; Received: from localhost ([::1] helo=merlin.infradead.org) by merlin.infradead.org with esmtp (Exim 4.92.3 #3 (Red Hat Linux)) id 1kDONu-0003On-1h; Wed, 02 Sep 2020 08:44:50 +0000 Received: from foss.arm.com ([217.140.110.172]) by merlin.infradead.org with esmtp (Exim 4.92.3 #3 (Red Hat Linux)) id 1kDONp-0003OQ-SC for linux-arm-kernel@lists.infradead.org; Wed, 02 Sep 2020 08:44:48 +0000 Received: from usa-sjc-imap-foss1.foss.arm.com (unknown [10.121.207.14]) by usa-sjc-mx-foss1.foss.arm.com (Postfix) with ESMTP id B9A2731B; Wed, 2 Sep 2020 01:44:37 -0700 (PDT) Received: from ubuntu.arm.com (unknown [10.57.6.106]) by usa-sjc-imap-foss1.foss.arm.com (Postfix) with ESMTPA id 525FD3F68F; Wed, 2 Sep 2020 01:44:36 -0700 (PDT) From: Nicola Mazzucato To: linux-kernel@vger.kernel.org, sudeep.holla@arm.com, robh@kernel.org, rjw@rjwysocki.net, viresh.kumar@linaro.org, linux-arm-kernel@lists.infradead.org, linux-pm@vger.kernel.org Subject: [PATCH] dt-bindings: arm: Add devicetree binding for cpu-performance-dependencies Date: Wed, 2 Sep 2020 09:45:16 +0100 Message-Id: <20200902084516.26584-1-nicola.mazzucato@arm.com> X-Mailer: git-send-email 2.27.0 MIME-Version: 1.0 X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20200902_044446_003439_B7515CB4 X-CRM114-Status: GOOD ( 19.54 ) X-Spam-Score: -2.3 (--) X-Spam-Report: SpamAssassin version 3.4.4 on merlin.infradead.org summary: Content analysis details: (-2.3 points) pts rule name description ---- ---------------------- -------------------------------------------------- -2.3 RCVD_IN_DNSWL_MED RBL: Sender listed at https://www.dnswl.org/, medium trust [217.140.110.172 listed in list.dnswl.org] 0.0 SPF_HELO_NONE SPF: HELO does not publish an SPF Record -0.0 SPF_PASS SPF: sender matches SPF record X-BeenThere: linux-arm-kernel@lists.infradead.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: morten.rasmussen@arm.com Sender: "linux-arm-kernel" Errors-To: linux-arm-kernel-bounces+patchwork-linux-arm=patchwork.kernel.org@lists.infradead.org Currently, there is an assumption that the performance domains as provided by the SCMI protocol should be mirroring the exact implementation in hardware, for example, the clock domains, which are a typical type of performance domains. By design, an SCMI performance domain defines the granularity of performance controls, it does not describe any underlying hardware dependencies (although they may match in many cases). As a consequence, in platforms where hardware may have the ability to control cpu performance at different granularity and choose to describe fine-grained performance control through SCMI performance domains, there is currently no way for OSPM to discover the actual cpu hardware dependencies. Inevitably, software components that rely on this missing description will cease to work. Thus, there is a need for a new description of hardware dependencies where the performance level is coordinated by hardware (or firmware) since these dependency domains might be larger than the SCMI performance domains. This new optional binding will provide visibility to OSPM on any hardware or firmware coordination of performance requests and enable more accurate assumptions about performance and performance side-effects of requesting performance level changers. This is essential information for OSPM thermal and energy management frameworks. There are two main reasons to support this new addition: 1) Per-cpu control & SCMI performance domains Same as explained above. Some platforms would like to make aggregation decisions in firmware and want to describe themselves as having per-cpu control. In order to continue to make sane decisions in the OSPM layer, we need to know about the underlying connections. With this optional binding, we provide performance dependencies information to OSPM for sets of CPUs while the h/w coordinates the performance level for each cpu. 2) ACPI With respect to performance, ACPI describes two main types of coordination that may take place in system when logical processors are required to transition to a different power/performance state. These two types are software coordination (SW) and hardware coordination (HW). In the first one, OSPM is in charge of handling such transitions while preserving the integrity of the entire system. In the latter case, the h/w is responsible for ensuring correct operations. In the HW coordination, OSPM can control each processor as if they were all independent each other. However, platforms can use ACPI defined interfaces to group CPUs to create so called "dependency domain". Such interface is the _PSD method. Users in kernel that need to know dependencies among cores, can retrieve such information via _PSD [1]. If the same system needs to work with dt + SCMI, we will have all the controls, but we are missing the information performance level coordination in hardware/firmware. This new dt binding provides the missing bits. [1]ACPI Specification, version 6.3 - 8.3 Power, Performance, and Throttling State Dependencies Signed-off-by: Nicola Mazzucato --- .../bindings/arm/cpu-perf-dependencies.yaml | 45 +++++++++++++++++++ 1 file changed, 45 insertions(+) create mode 100644 Documentation/devicetree/bindings/arm/cpu-perf-dependencies.yaml diff --git a/Documentation/devicetree/bindings/arm/cpu-perf-dependencies.yaml b/Documentation/devicetree/bindings/arm/cpu-perf-dependencies.yaml new file mode 100644 index 000000000000..3b8cf7e29982 --- /dev/null +++ b/Documentation/devicetree/bindings/arm/cpu-perf-dependencies.yaml @@ -0,0 +1,45 @@ +# SPDX-License-Identifier: GPL-2.0-only or BSD-2-Clause +%YAML 1.2 +--- +$id: http://devicetree.org/schemas/cpu-perf-dependencies.yaml# +$schema: http://devicetree.org/meta-schemas/core.yaml# + +title: CPU Performance Dependencies + +maintainers: + - Nicola Mazzucato + +description: |+ + This optional node provides information to OSPM of cpu performance + dependencies. + Each list represents a set of CPUs which have performance level + dependencies and can assumed to be roughly at the same performance + level coordinated by hardware and/or firmware. + Example: Describing CPUs in the same clock domain. + +properties: + compatible: + items: + - enum: + - arm,cpu-perf-dependencies + + cpu-perf-affinity: + $ref: '/schemas/types.yaml#/definitions/phandle' + description: | + Specifies a list of phandles to CPU nodes corresponding to a set of CPUs + which have performance affinity. + +examples: + - | + cpu-performance-dependencies { + compatible = "arm,cpu-perf-dependencies"; + cpu-perf-domain0 { + cpu-perf-affinity = <&CPU0>, <&CPU1>, <&CPU2>, <&CPU3>; + } + cpu-perf-domain1 { + cpu-perf-affinity = <&CPU4>, <&CPU5>, <&CPU6>; + } + cpu-perf-domain2 { + cpu-perf-affinity = <&CPU7>; + } + };