From patchwork Tue Jan 9 11:55:13 2018 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Ulf Hansson X-Patchwork-Id: 10151853 Return-Path: Received: from mail.wl.linuxfoundation.org (pdx-wl-mail.web.codeaurora.org [172.30.200.125]) by pdx-korg-patchwork.web.codeaurora.org (Postfix) with ESMTP id CA573603ED for ; Tue, 9 Jan 2018 11:55:40 +0000 (UTC) Received: from mail.wl.linuxfoundation.org (localhost [127.0.0.1]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id AC78C201F3 for ; Tue, 9 Jan 2018 11:55:40 +0000 (UTC) Received: by mail.wl.linuxfoundation.org (Postfix, from userid 486) id 9F6512022C; Tue, 9 Jan 2018 11:55:40 +0000 (UTC) X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on pdx-wl-mail.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-4.2 required=2.0 tests=BAYES_00,DKIM_SIGNED, DKIM_VALID,RCVD_IN_DNSWL_MED autolearn=unavailable version=3.3.1 Received: from bombadil.infradead.org (bombadil.infradead.org [65.50.211.133]) (using TLSv1.2 with cipher AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by mail.wl.linuxfoundation.org (Postfix) with ESMTPS id 07972201F3 for ; Tue, 9 Jan 2018 11:55:40 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=lists.infradead.org; s=bombadil.20170209; h=Sender: Content-Transfer-Encoding:Content-Type:MIME-Version:Cc:List-Subscribe: List-Help:List-Post:List-Archive:List-Unsubscribe:List-Id: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=3ueqAYjfBRhyHVuX2QcszeM2AAcA06Zs3Qgpaf2rnxQ=; b=VJi hahMnvQTCfjaCR8VFo1/iRF83RpjP3tRaogppgNZjRwIZuH41YRYu68laGgbnjskJ59xWZRcPWvzr AwSusrW/ueJQd97L04YN5HHD9xZJ3VWemdXYjSMOwYp3D4FPtB+N3rLf8+RJDekWaKG2Ov6P/ddfx 8CCX8ns4OBG47k9ZrfdL17Yw62Jzmj0rI4E9KgIWwkM+bc4CAGbTzKTSUye/NniP3kEFKKpB8lEDP CiowNu960A431s4MGrQLaDZcKj5/pa9XJG8T1NeHhflX/LSmD7dI3yxtvGlZ6HWGEVVgZRlgIFWk0 kEemlnvqUJpWnVWPcLOJcPjDi+j/JLw==; Received: from localhost ([127.0.0.1] helo=bombadil.infradead.org) by bombadil.infradead.org with esmtp (Exim 4.89 #1 (Red Hat Linux)) id 1eYsVF-0002UT-QN; Tue, 09 Jan 2018 11:55:37 +0000 Received: from mail-lf0-x241.google.com ([2a00:1450:4010:c07::241]) by bombadil.infradead.org with esmtps (Exim 4.89 #1 (Red Hat Linux)) id 1eYsVA-0002TH-Pj for linux-arm-kernel@lists.infradead.org; Tue, 09 Jan 2018 11:55:35 +0000 Received: by mail-lf0-x241.google.com with SMTP id e27so15613735lfb.9 for ; Tue, 09 Jan 2018 03:55:22 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; h=from:to:cc:subject:date:message-id; bh=+ke4qJI71vGziw9tMTETJfCH8HIz7l/jxSSWfzIbxb8=; b=PvmBUCnnhOqZ1b343NzZ14sodK7IfMOdN/mEwetV7FUIEHVtFYECdiWH/vKQtl3HCl PwIIHiQ3Gsv/vxmdS86Y7/Jlur6aGaoVbvPNSA6HanaSC8BUBTr9C0Aa4xNcY1d1gmcj guo2a//Q+rCOZ2i9LW1l+ZOnw+q2+/qXzvkAc= X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id; bh=+ke4qJI71vGziw9tMTETJfCH8HIz7l/jxSSWfzIbxb8=; b=JgjjSlZeIHhy5dQSkiMWlYedkVoHHSseRvUPe4FXO1tkYj1KpAxFT5RnuRjwkdevOr S7+Kh0CPaG9roVFgDlelvGZHBsHzE2pJ0ltGr6jPm6Ho9YmSgpO48xTSqdrf9JRQHwd8 1Kbg4VEfJEGRLtDWg7V/7UcvEAmkcQ7yz0kygKKpShAVbq/XzEQnsgqiDy6DYYKG0Wa0 FpJZe/1JftkFP+1xqHCoS/ELp3nsQfbmZUWE5HrR38JYEWaxNhzCY2Lb3/koQ0OkVNdS a597vu16/1oN6Do8XnYXcMDL585PGLL5tjRNdSNX6erjMBMeZ7P18fdb2qAEsiKNIFaf 6Zdw== X-Gm-Message-State: AKwxytd2+awzdQQFhGJcnCrLSm12EC0wkV2Kp5BiFhnftFVSJT5H/OrE dYYWVz4P3+AVI3EZRFvGirOQ+w== X-Google-Smtp-Source: ACJfBoval9D3vO1WVdf3V6NRD07ljc64qQYBzAPEH8haODZdpXfQ/fMwgP5sh9QKjbBMhzZAOxYO5Q== X-Received: by 10.25.150.207 with SMTP id y198mr7933493lfd.33.1515498920112; Tue, 09 Jan 2018 03:55:20 -0800 (PST) Received: from localhost.localdomain (h-158-174-22-67.NA.cust.bahnhof.se. [158.174.22.67]) by smtp.gmail.com with ESMTPSA id h71sm525584lfi.91.2018.01.09.03.55.18 (version=TLS1_2 cipher=ECDHE-RSA-AES128-SHA bits=128/128); Tue, 09 Jan 2018 03:55:19 -0800 (PST) From: Ulf Hansson To: Rob Herring , Mark Rutland , devicetree@vger.kernel.org Subject: [PATCH v3] dt: psci: Update DT bindings to support hierarchical PSCI states Date: Tue, 9 Jan 2018 12:55:13 +0100 Message-Id: <1515498913-24291-1-git-send-email-ulf.hansson@linaro.org> X-Mailer: git-send-email 2.7.4 X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20180109_035532_838308_9A61C6A0 X-CRM114-Status: GOOD ( 12.61 ) X-BeenThere: linux-arm-kernel@lists.infradead.org X-Mailman-Version: 2.1.21 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: Ulf Hansson , Lorenzo Pieralisi , Kevin Hilman , linux-kernel@vger.kernel.org, Brendan Jackman , linux-arm-kernel@lists.infradead.org, Sudeep Holla , Lina Iyer MIME-Version: 1.0 Sender: "linux-arm-kernel" Errors-To: linux-arm-kernel-bounces+patchwork-linux-arm=patchwork.kernel.org@lists.infradead.org X-Virus-Scanned: ClamAV using ClamSMTP From: Lina Iyer Update DT bindings to represent hierarchical CPU and CPU domain idle states for PSCI. Also update the PSCI examples to clearly show how flattened and hierarchical idle states can be represented in DT. Signed-off-by: Lina Iyer Reviewed-by: Rob Herring Signed-off-by: Ulf Hansson Reviewed-by: Sudeep Holla --- Changes in v3: - Added Rob's reviewed-by-tag. - Addressed comments from Sudeep. Changes in v2: - Addressed comments from Rob. - Updated some labels in the examples to get more consistency. For your information, I have picked up the work from Lina Iyer around the so called CPU cluster idling series [1,2] and I working on new versions. However, I decided to post the updates to the PSCI DT bindings first, as they will be needed to be agreed upon before further changes can be done to the PSCI firmware driver. Note, these bindings have been discussed over and over again, at LKML, but especially also at various Linux conferences, like LPC and Linaro Connect. We finally came to a conclusion and the changes we agreed upon, should be reflected in this update. Of course, it's a while ago since the latest discussions, but hopefully people don't have too hard time to remember. Kind regards Uffe [1] https://www.spinics.net/lists/arm-kernel/msg566200.html [2] https://lwn.net/Articles/716300/ --- Documentation/devicetree/bindings/arm/psci.txt | 156 +++++++++++++++++++++++++ 1 file changed, 156 insertions(+) diff --git a/Documentation/devicetree/bindings/arm/psci.txt b/Documentation/devicetree/bindings/arm/psci.txt index a2c4f1d..17aa3d3 100644 --- a/Documentation/devicetree/bindings/arm/psci.txt +++ b/Documentation/devicetree/bindings/arm/psci.txt @@ -105,7 +105,163 @@ Case 3: PSCI v0.2 and PSCI v0.1. ... }; +ARM systems can have multiple cores sometimes in hierarchical arrangement. +This often, but not always, maps directly to the processor power topology of +the system. Individual nodes in a topology have their own specific power states +and can be better represented in DT hierarchically. + +For these cases, the definitions of the idle states for the CPUs and the CPU +topology, must conform to the domain idle state specification [3]. The domain +idle states themselves, must be compatible with the defined 'domain-idle-state' +binding [1], and also need to specify the arm,psci-suspend-param property for +each idle state. + +DT allows representing CPUs and CPU idle states in two different ways - + +The flattened model as given in Example 1, lists CPU's idle states followed by +the domain idle state that the CPUs may choose. Note that the idle states are +all compatible with "arm,idle-state". + +Example 2 represents the hierarchical model of CPUs and domain idle states. +CPUs define their domain provider in their psci DT node. The domain controls +the power to the CPU and possibly other h/w blocks that would enter an idle +state along with the CPU. The CPU's idle states may therefore be considered as +the domain's idle states and have the compatible "arm,idle-state". Such domains +may also be embedded within another domain that may represent common h/w blocks +between these CPUs. The idle states of the CPU topology shall be represented as +the domain's idle states. + +In PSCI firmware v1.0, the OS-Initiated mode is introduced. In order to use it, +the hierarchical representation must be used. + +Example 1: Flattened representation of CPU and domain idle states + cpus { + #address-cells = <1>; + #size-cells = <0>; + + CPU0: cpu@0 { + device_type = "cpu"; + compatible = "arm,cortex-a53", "arm,armv8"; + reg = <0x0>; + enable-method = "psci"; + cpu-idle-states = <&CPU_PWRDN>, <&CLUSTER_RET>, + <&CLUSTER_PWRDN>; + }; + + CPU1: cpu@1 { + device_type = "cpu"; + compatible = "arm,cortex-a57", "arm,armv8"; + reg = <0x100>; + enable-method = "psci"; + cpu-idle-states = <&CPU_PWRDN>, <&CLUSTER_RET>, + <&CLUSTER_PWRDN>; + }; + + idle-states { + CPU_PWRDN: cpu-power-down { + compatible = "arm,idle-state"; + arm,psci-suspend-param = <0x000001>; + entry-latency-us = <10>; + exit-latency-us = <10>; + min-residency-us = <100>; + }; + + CLUSTER_RET: cluster-retention { + compatible = "arm,idle-state"; + arm,psci-suspend-param = <0x1000010>; + entry-latency-us = <500>; + exit-latency-us = <500>; + min-residency-us = <2000>; + }; + + CLUSTER_PWRDN: cluster-power-down { + compatible = "arm,idle-state"; + arm,psci-suspend-param = <0x1000030>; + entry-latency-us = <2000>; + exit-latency-us = <2000>; + min-residency-us = <6000>; + }; + }; + + psci { + compatible = "arm,psci-0.2"; + method = "smc"; + }; + +Example 2: Hierarchical representation of CPU and domain idle states + + cpus { + #address-cells = <1>; + #size-cells = <0>; + + CPU0: cpu@0 { + device_type = "cpu"; + compatible = "arm,cortex-a53", "arm,armv8"; + reg = <0x0>; + enable-method = "psci"; + power-domains = <&CPU_PD0>; + }; + + CPU1: cpu@1 { + device_type = "cpu"; + compatible = "arm,cortex-a57", "arm,armv8"; + reg = <0x100>; + enable-method = "psci"; + power-domains = <&CPU_PD1>; + }; + + idle-states { + CPU_PWRDN: cpu-power-down { + compatible = "arm,idle-state"; + arm,psci-suspend-param = <0x000001>; + entry-latency-us = <10>; + exit-latency-us = <10>; + min-residency-us = <100>; + }; + + CLUSTER_RET: cluster-retention { + compatible = "domain-idle-state"; + arm,psci-suspend-param = <0x1000010>; + entry-latency-us = <500>; + exit-latency-us = <500>; + min-residency-us = <2000>; + }; + + CLUSTER_PWRDN: cluster-power-down { + compatible = "domain-idle-state"; + arm,psci-suspend-param = <0x1000030>; + entry-latency-us = <2000>; + exit-latency-us = <2000>; + min-residency-us = <6000>; + }; + }; + }; + + psci { + compatible = "arm,psci-1.0"; + method = "smc"; + + CPU_PD0: cpu-pd0 { + #power-domain-cells = <0>; + domain-idle-states = <&CPU_PWRDN>; + power-domains = <&CLUSTER_PD>; + }; + + CPU_PD1: cpu-pd1 { + #power-domain-cells = <0>; + domain-idle-states = <&CPU_PWRDN>; + power-domains = <&CLUSTER_PD>; + }; + + CLUSTER_PD: cluster-pd { + #power-domain-cells = <0>; + domain-idle-states = <&CLUSTER_RET>, <&CLUSTER_PWRDN>; + }; + }; + [1] Kernel documentation - ARM idle states bindings Documentation/devicetree/bindings/arm/idle-states.txt [2] Power State Coordination Interface (PSCI) specification http://infocenter.arm.com/help/topic/com.arm.doc.den0022c/DEN0022C_Power_State_Coordination_Interface.pdf +[3]. PM Domains description + Documentation/devicetree/bindings/power/power_domain.txt