Received: by 2002:ac0:a581:0:0:0:0:0 with SMTP id m1-v6csp1035716imm; Wed, 20 Jun 2018 10:28:23 -0700 (PDT) X-Google-Smtp-Source: ADUXVKL6qLil4G85NI7/+8PjPMXC9rhG2tTdLYOp9vdisXDLZI8AijbWX8ETf0wRZeRuhPJruxMJ X-Received: by 2002:a65:60d2:: with SMTP id r18-v6mr19779198pgv.306.1529515703772; Wed, 20 Jun 2018 10:28:23 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1529515703; cv=none; d=google.com; s=arc-20160816; b=V49xdgcJVO7ZHv2NE0xlc0eMk66Ib1fs+7kq6FRY2tKTnvYL786OQRCn3sFuUzoTNP uNymLwPJNmpzlEfDRbnm54q0XC6BbmeBAuFm+XRsr4r65yAwmGelsx5FbJqxYGEMIvWu rytrSxc9HRmQnAnHA2W9dmxby/P6mRlSPOBb2S4CuTVBqsiQXTexdY+3sv4ahDGRnuOl YbU2oy/G/cXx8Ln0GKrEo4Yu0Sx14ZG33+zt2R8NyWuPRNoCI3O/CIeRjaKbbApoFp3e R40fCDKebJHV8m9kTeMKBulkIZ9VPHCBz4YFiyTe7NMtq+ezePN+KcGm0Te7q0C8p2oY mHxw== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:sender:references:in-reply-to:message-id:date :subject:cc:to:from:dkim-signature:arc-authentication-results; bh=s31a5XHCk1LHbjCX4EljRqRwb2bVRICfynyfVhTJkR0=; b=c/UE/9swboO25tsFQOMQwJHKchJVOqk89qY36du4YzJWy1jHmdq4C9fAsG1BPRZXJN OTGKCx+6L2IzIdRSVQUdExZ4fLckdCYmU1Yqm6yxDYClWmnUer/z0UzD54TUKDcHJVhO Mc3Ez8CSPIGcaI4o5rAlBAjKL+yVCmMOVug2rZSRapx4OS+Wp/413765kmBq06zrz6zY NDnPn74BTjPjKMhI2GZP11a+YnK5FIdVRyDzFVCpha9m0uFkTcOmjG6+Uc2WIl8jAvzs D8luK0O/n24yYtDeudRCovfszfBqZ9XMJuFBV3xnCrXKH68QsRI0LE6slJX937J2Nouq mHBA== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@linaro.org header.s=google header.b=iXrzpP2V; 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=NONE sp=NONE dis=NONE) header.from=linaro.org Return-Path: Received: from vger.kernel.org (vger.kernel.org. [209.132.180.67]) by mx.google.com with ESMTP id x125-v6si2884691pfb.237.2018.06.20.10.28.09; Wed, 20 Jun 2018 10:28:23 -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=@linaro.org header.s=google header.b=iXrzpP2V; 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=NONE sp=NONE dis=NONE) header.from=linaro.org Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S933160AbeFTR1E (ORCPT + 99 others); Wed, 20 Jun 2018 13:27:04 -0400 Received: from mail-lf0-f65.google.com ([209.85.215.65]:38602 "EHLO mail-lf0-f65.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1754560AbeFTRWy (ORCPT ); Wed, 20 Jun 2018 13:22:54 -0400 Received: by mail-lf0-f65.google.com with SMTP id i83-v6so480092lfh.5 for ; Wed, 20 Jun 2018 10:22:53 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; h=from:to:cc:subject:date:message-id:in-reply-to:references; bh=s31a5XHCk1LHbjCX4EljRqRwb2bVRICfynyfVhTJkR0=; b=iXrzpP2VIW1uEn7SDhpIWIrhT1BGKp3VQgqFi0ObjnSMqCpL0i+9njkgtjp25ss4EC Vr2fRR738kAgUu2guAiCra4VAoTy1ds84NwOpCTgnMm0AURdnyo+LEAVP803Uety06qT wjIikiNNl0q7q6Y7iCsDgqZd+215crOtzAx94= 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:in-reply-to :references; bh=s31a5XHCk1LHbjCX4EljRqRwb2bVRICfynyfVhTJkR0=; b=nvHNKGJxUW/GHZbjWjjKW2RFw9VzifSPl4ntKqDGRQ2N72kvx0BcqpKA98/LukkF0K bEq+hLCs6W0zPsY+uj2BLRyfFABB4K3hvT/LkteJ78nDKnn97zjh2X2sDfzOQ/OS/LvT wLOPD5h/4WeeTr+gDBSyjOnG4tvk7i47emRE6VG1P3rHSn7wZ7Jm1i5SZzXXb8wtX5fX zjbjUGaoGF+uw+k70C55BsMgUlXJfvNmB/W1VxcYHZgBrKyn2jcJD/bFJWQdT91bUIi6 9OMh6CN06XT4JjILsGqL8j2XImnH+T/+YRXSftnEj39vEpS+sLDp/oJABWbclhHq+P0J Mh7w== X-Gm-Message-State: APt69E1x7ncotn+KprtE5mXKLAUdVn32aB+PUui6R0s88sfYX1OM89XH UEAXVKJEGv2Wl53oOUfVi9ep7Q== X-Received: by 2002:a2e:18b:: with SMTP id f11-v6mr14719435lji.83.1529515373159; Wed, 20 Jun 2018 10:22:53 -0700 (PDT) Received: from localhost.localdomain (h-158-174-22-210.NA.cust.bahnhof.se. [158.174.22.210]) by smtp.gmail.com with ESMTPSA id b2-v6sm514441lji.85.2018.06.20.10.22.51 (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Wed, 20 Jun 2018 10:22:52 -0700 (PDT) From: Ulf Hansson To: "Rafael J . Wysocki" , Sudeep Holla , Lorenzo Pieralisi , Mark Rutland , linux-pm@vger.kernel.org Cc: Kevin Hilman , Lina Iyer , Lina Iyer , Ulf Hansson , Rob Herring , Daniel Lezcano , Thomas Gleixner , Vincent Guittot , Stephen Boyd , Juri Lelli , Geert Uytterhoeven , linux-arm-kernel@lists.infradead.org, linux-arm-msm@vger.kernel.org, linux-kernel@vger.kernel.org Subject: [PATCH v8 10/26] dt: psci: Update DT bindings to support hierarchical PSCI states Date: Wed, 20 Jun 2018 19:22:10 +0200 Message-Id: <20180620172226.15012-11-ulf.hansson@linaro.org> X-Mailer: git-send-email 2.17.1 In-Reply-To: <20180620172226.15012-1-ulf.hansson@linaro.org> References: <20180620172226.15012-1-ulf.hansson@linaro.org> Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org From: Lina Iyer Update DT bindings to represent hierarchical CPU and CPU PM domain idle states for PSCI. Also update the PSCI examples to clearly show how flattened and hierarchical idle states can be represented in DT. Cc: Lina Iyer Signed-off-by: Lina Iyer Co-developed-by: Ulf Hansson Signed-off-by: Ulf Hansson Reviewed-by: Rob Herring Reviewed-by: Sudeep Holla --- .../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 a2c4f1d52492..17aa3d3a1c8e 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 -- 2.17.1