From nobody Tue Jun 16 20:38:48 2026 Received: from mail-pg1-f170.google.com (mail-pg1-f170.google.com [209.85.215.170]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id EDF4B3A9628 for ; Mon, 20 Apr 2026 23:51:24 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.215.170 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1776729087; cv=none; b=StUta2NrshD7s8dRWcRBPCgs71HTPtryrGP0LYbpYHIwaMOSH67cJUpv+YGk/hWCJWfqKyj/9FgE0cgMe1qhFwlb+NFt0hp4Y7bdAhrsq18ZNvNijlrc0uFk3aduZOqGp7wXCKNzJoC/Bv7QXSZvzTpc923wXMky7TurTNmggK4= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1776729087; c=relaxed/simple; bh=Q7DrslDoEzNPakyLJFXorxvjgyPUA3DGKqDVH51Yzcc=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=FD0gLp78cVFdsfeCroLcGw33AAovU2D1aIxPsMcsvG+WniRZXoce6H/w2l1qbfbidVVkyDYytx/gbHq9/ShDdCF26kC/44McWViQ+jvCnZ/TsE8lTDiuk7IEFhMaYyJw8d+1jUOgwGYqjUFe8tT3E3iXTNytLUxSviKZrA/FEew= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=none (p=none dis=none) header.from=baylibre.com; spf=pass smtp.mailfrom=baylibre.com; dkim=pass (2048-bit key) header.d=baylibre-com.20251104.gappssmtp.com header.i=@baylibre-com.20251104.gappssmtp.com header.b=jLgvKzZK; arc=none smtp.client-ip=209.85.215.170 Authentication-Results: smtp.subspace.kernel.org; dmarc=none (p=none dis=none) header.from=baylibre.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=baylibre.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=baylibre-com.20251104.gappssmtp.com header.i=@baylibre-com.20251104.gappssmtp.com header.b="jLgvKzZK" Received: by mail-pg1-f170.google.com with SMTP id 41be03b00d2f7-c76b994f7a8so1224596a12.3 for ; Mon, 20 Apr 2026 16:51:24 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=baylibre-com.20251104.gappssmtp.com; s=20251104; t=1776729084; x=1777333884; darn=vger.kernel.org; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :mime-version:subject:date:from:from:to:cc:subject:date:message-id :reply-to; bh=8R1cxPctftOG89u1iC1smvABtKfPmxn/YCB26kmM4dc=; b=jLgvKzZKAMd1aKLQfqhOpaN5xDskyrAuOB3k9JC1W90OjlUQo3nL5xBxqUvTZu9vPT TgpIsu6X2nQQ99gLq4kCbWMfFcgdTqd8LC+ytHi2bJh3SMcN6uZz7BhtERfzvYIC6CmN L2R2al76o5NNI2/mv8BiGR7raG56XjAv7yHYCc0rJWf7VPmOyeuARewEawjwVsbxJQX5 v/WLPc0egiN+XJzKAe4STpRhmQm3WqqoWU33G7vw5rKIVryFpckQiajW0iLFc8nrLJ6M WgZOYKZ4k6VCbWRV/w+i4FGP3LpyyR7oipi1y3L/mh84UpPC8uu2KRqBuBr1azN2poTJ 8zyA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1776729084; x=1777333884; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :mime-version:subject:date:from:x-gm-gg:x-gm-message-state:from:to :cc:subject:date:message-id:reply-to; bh=8R1cxPctftOG89u1iC1smvABtKfPmxn/YCB26kmM4dc=; b=etb+o24hUXQw1pcRV1lymgjcqpaQ3TpX+tdgMrrlJdAIXcWBCpLMzFS27Yf122JIpI BmnHr4htL7cl95I14P+qVPBKX+NfK1rdUvdldbwnBiTNMGyKb2yfvDZ8oUSvQuPvipMy hdJXKPQVT0GdwPTMuKVlyMZS+mXWOuxThR8ch/NAEkzb8QGdA3oc9r1kT5/FXa+XHIpV 8UWcscAreBJvORu5AOyqYCgMJ8dznbySSRz8Wp4ODmCcaW0XIqlT9sWwwK0uvQ9aLjdu oXkfvDQEs5Qif7vtPBmP06+WMcS77q9duvD2j9VovUjnCTVtDFHuwbVMUnQYbeRTOhT7 dPzw== X-Forwarded-Encrypted: i=1; AFNElJ8jhyK3sVu/oZYyN8DFs8eiL9Q5a3ZnFNsxEVK+3PHYwqru4svhF1Vqti6h9gxqVrwE0ac8GAskYNAzOxE=@vger.kernel.org X-Gm-Message-State: AOJu0Yxq482KBLJ/6vZVx0ZY6ul+OUq3Z34Zp1wHKtZm5SiWo7ZHgTxo 30LIRAeYdMjCH3F2fZp/x7cm35fyYjdZJuBOBdDBYCZu0baebzCy7W5TYX1tMNAQo+4= X-Gm-Gg: AeBDieub93wburrNYUOeCwIMvoaDO0FHxLmyHL45mLfmVzMOcHlSnwvNM3P5DA5Zii5 KRGke4RNmoY29dWnyX7tguHaZIT1ANwKiWjvCP90ghQcfBJOUixph7dV9f+0ZqK6ICpAAY6UDde AywPL/iT4JxGVIMzfJH233vWXprUWr+6SxyFAP4QBI7WQweSYOInBdpuSb7CHP3wlo4zYwvYv0M MVKZj0ftv5K4nGro8g1D71R2gi4aqGdIJPAGmjhaFOPkbOrjQ10eSDYb2SYKEPsZFyHHFS+ignf 0jgt62g2HYCfDHN0asOZvQT6JNBUTpPYN1Rve2Q22AfISEs4mUWQu1nPVgqgs973HVwBcnQt4hH gF4R03qcwmsAcsOuG6Jr/QaxveGCTUz27whalk9PQTaihMxtTFnamoWXRlnC96Cqu1ku1hErVKt JA8XR3jXMq1bm2OWTx2vbTb1vulq3XUg== X-Received: by 2002:a05:6a20:728c:b0:39b:8b8b:39ce with SMTP id adf61e73a8af0-3a08d8a8993mr17248087637.28.1776729084324; Mon, 20 Apr 2026 16:51:24 -0700 (PDT) Received: from localhost ([97.126.187.42]) by smtp.gmail.com with ESMTPSA id 41be03b00d2f7-c79770512afsm8971320a12.31.2026.04.20.16.51.23 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 20 Apr 2026 16:51:23 -0700 (PDT) From: "Kevin Hilman (TI)" Date: Mon, 20 Apr 2026 16:51:17 -0700 Subject: [PATCH v3 1/3] dt-bindings: power: Add power-domains-child-ids property Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Message-Id: <20260420-topic-lpm-pmdomain-child-ids-v3-1-c2c40bef238c@baylibre.com> References: <20260420-topic-lpm-pmdomain-child-ids-v3-0-c2c40bef238c@baylibre.com> In-Reply-To: <20260420-topic-lpm-pmdomain-child-ids-v3-0-c2c40bef238c@baylibre.com> To: Ulf Hansson , Rob Herring Cc: Geert Uytterhoeven , linux-pm@vger.kernel.org, devicetree@vger.kernel.org, linux-kernel@vger.kernel.org, arm-scmi@vger.kernel.org, linux-arm-kernel@lists.infradead.org X-Mailer: b4 0.15-dev X-Developer-Signature: v=1; a=openpgp-sha256; l=2786; i=khilman@baylibre.com; h=from:subject:message-id; bh=Q7DrslDoEzNPakyLJFXorxvjgyPUA3DGKqDVH51Yzcc=; b=owEBbQKS/ZANAwAIAVk3GJrT+8ZlAcsmYgBp5rv6y5BVxIx65aoeOBX8R0eL+DjLn/kqdKdjG dQAzKibPciJAjMEAAEIAB0WIQR7h0YOFpJ/qfW/8QxZNxia0/vGZQUCaea7+gAKCRBZNxia0/vG ZbjvEACLFm8MlgnDXUwIXc34z4MIVMeC4pRZKS5y5cxAvaZdis5Gxu5fOKT/+s17jCAWuK0q+fJ DbjLai39AfHqDfnLFpEDUQHABLV2HYUD6OlbhD2R4Rw++dgo3muH4Uh9fwQQhi91qGsqqKBTn8R pl5axwFaYkNQ/XefNvVGYI6JAY3m6BActyrFbjh9VzVVJEUlw4ghAte13QAoN7uLTfjDY+tAob+ cgaWr46DmW2xvpGTHgg5jpLSoyBVlsi0JlWTmf4KJ0yIn+AVW5ba91z4b+R3Ig2SZv4uBRo0v/G KQHjmx12T+bN4wXKuCkgEpcx6I0vISxobB31N0GaSd2a5NwktJeS/WPrSLRBEUR0IWoF1dqJPCp KToR7eKTzaCvxRL0iNKEeIHx3IlBIGphI8U+2TeqYd4/zrQuHnX7u98R2llldy6lLaKBc0PR8Jv 7fIMns0u0h3P0XAtvWygGW6/RqqIXTjbqUWXHPtOIdQxWACYpd2zB92iH5UmZ+3Hfu5Lblvfaue Z7211y5p/CKrXtFR3F7FU4bChCS0HHuDXWxfQc1X+3gsMJsEz7XpBWxSAhV6ROnNEnBdxYmKdIU m5+6L4n9dW507Co3jALSjmPbc/ZSck+znnQTEsmLplf0gX4qpKc5RSyfZqujiPT8vxlToYH/4Vh rDwvioXHnY+8WMQ== X-Developer-Key: i=khilman@baylibre.com; a=openpgp; fpr=7B87460E16927FA9F5BFF10C5937189AD3FBC665 Add binding documentation for the new power-domains-child-ids property, which works in conjunction with the existing power-domains property to establish parent-child relationships between a multi-domain power domain provider and external parent domains. Each element in the uint32 array identifies the child domain ID (index) within the provider that should be made a child domain of the corresponding phandle entry in power-domains. The two arrays must have the same number of elements. Signed-off-by: Kevin Hilman (TI) --- Documentation/devicetree/bindings/power/power-domain.yaml | 34 +++++++++++= +++++++++++++++++++++++ 1 file changed, 34 insertions(+) diff --git a/Documentation/devicetree/bindings/power/power-domain.yaml b/Do= cumentation/devicetree/bindings/power/power-domain.yaml index b1147dbf2e73..163b0af158fd 100644 --- a/Documentation/devicetree/bindings/power/power-domain.yaml +++ b/Documentation/devicetree/bindings/power/power-domain.yaml @@ -68,6 +68,21 @@ properties: by the given provider should be subdomains of the domain specified by this binding. =20 + power-domains-child-ids: + $ref: /schemas/types.yaml#/definitions/uint32-array + description: + An array of child domain IDs that correspond to the power-domains + property. This property is only applicable to power domain providers + with "#power-domain-cells" > 0 (i.e., providers that supply multiple + power domains). It specifies which of the provider's child domains + should be associated with each parent domain listed in the power-dom= ains + property. The number of elements in this array must match the number= of + phandles in the power-domains property. Each element specifies the c= hild + domain ID (index) that should be made a child domain of the correspo= nding + parent domain. This enables hierarchical power domain structures whe= re + different child domains from the same provider can have different + parent domains. + required: - "#power-domain-cells" =20 @@ -133,3 +148,22 @@ examples: min-residency-us =3D <7000>; }; }; + + - | + // Example: SCMI domain 15 -> MAIN_PD, SCMI domain 19 -> WKUP_PD + MAIN_PD: power-controller-main { + compatible =3D "foo,power-controller"; + #power-domain-cells =3D <0>; + }; + + WKUP_PD: power-controller-wkup { + compatible =3D "foo,power-controller"; + #power-domain-cells =3D <0>; + }; + + scmi_pds: power-controller-scmi { + compatible =3D "foo,power-controller"; + #power-domain-cells =3D <1>; + power-domains =3D <&MAIN_PD>, <&WKUP_PD>; + power-domains-child-ids =3D <15>, <19>; + }; --=20 2.51.0 From nobody Tue Jun 16 20:38:48 2026 Received: from mail-pg1-f172.google.com (mail-pg1-f172.google.com [209.85.215.172]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 166AC3845CF for ; Mon, 20 Apr 2026 23:51:25 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.215.172 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1776729088; cv=none; b=nuJqRb68PbGoQCfaDd7nQLd+9Bk87xQ33cM0PluexRiRPElr4ftibuTUT/Li/7JhyYvgOujXsfaCoIDzEGNFrpuZK+iJLzGwO68O+EefGtc70e9LzsqUYUrPKAFcwlD5UL02gstf7CaW5uZD2XsufpeL4NHjY2o3SXOQm48TjwY= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1776729088; c=relaxed/simple; bh=AJAxCQJaWoA/4dBEUCt/1XgQiiTMcAO9mItznU/aNFk=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=C+9WonYzgA1OMGf7Dn/aR4o/40d/4ntu0HQwx/BVXRIyRvakW0qDC/CYgsbTWw8YZxjT4spcW51YRaS0YfZ0ZdJ70MPS/MRByYXAYBQODcgNFCYlNd9JsuQJt7ueho/aSEEKd09LSGjXHS5v0oqW7iByJA1x4pvRNQH1joP72Qc= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=none (p=none dis=none) header.from=baylibre.com; spf=pass smtp.mailfrom=baylibre.com; dkim=pass (2048-bit key) header.d=baylibre-com.20251104.gappssmtp.com header.i=@baylibre-com.20251104.gappssmtp.com header.b=O2S0d5QX; arc=none smtp.client-ip=209.85.215.172 Authentication-Results: smtp.subspace.kernel.org; dmarc=none (p=none dis=none) header.from=baylibre.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=baylibre.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=baylibre-com.20251104.gappssmtp.com header.i=@baylibre-com.20251104.gappssmtp.com header.b="O2S0d5QX" Received: by mail-pg1-f172.google.com with SMTP id 41be03b00d2f7-c76b994f7a8so1224602a12.3 for ; Mon, 20 Apr 2026 16:51:25 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=baylibre-com.20251104.gappssmtp.com; s=20251104; t=1776729085; x=1777333885; darn=vger.kernel.org; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :mime-version:subject:date:from:from:to:cc:subject:date:message-id :reply-to; bh=XMwNLBTWs20Z4a1mhT5Vdgx1QV1o4tHwHoJ1DhdYYC0=; b=O2S0d5QXR4f0ph6bivk11ifji9VOW3YsYz8rOWSIsOUtClGC5lW5UOoxxqtDB0tY76 JCf02Oum/PWaDdQwk/eD0I+TKl6b6rEd7PpezUzvpimqnwhzGLflkfOGJXmQMh2+bvaO btkikm8lJzyMBNvamgAwKnL866ssl5wEA+DhfRoZJ0CNZSEu/9UNDQB0wOhP+6GE+uJe 4nVvNMuts9EZDlAN6jJIQO0bgnQg1osR8KcfTJouo1SuZWpDj2WYGF3chJVc8WE/abJk AnOsaX7eAM7hoar7aofi41Kx4HKcx47d3QIehdjLFA4jRjg5MjOdiJPsndRMnehPhgpC gsTQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1776729085; x=1777333885; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :mime-version:subject:date:from:x-gm-gg:x-gm-message-state:from:to :cc:subject:date:message-id:reply-to; bh=XMwNLBTWs20Z4a1mhT5Vdgx1QV1o4tHwHoJ1DhdYYC0=; b=FXNvqdfccSIo/tgWVPvdUpCrthR1teEmwDtZnHkrlyNV872NmtqUfFtTdTw0F5BUDW 9E1i9SvU0ltjN8ehXH2f+EQMVuc5noWn/bHHLzyZnOwfklKJaIt6R93mkRWryvb9J5rz 5c9yHNeU6g/NV7pqV7eq7b2CdbKlZoj2R1nq1FVLKIOckgSIgc0QzhPcWWrDtmUcxiss o5RwGvjmTtJ76erMSt/mDmKxOr8xcDLJ2Vcftopa1K7YSJ0LYX1StVeRXKvYr1AX2XH5 CCvwLIaR+C28YgCm5fsoWy3lfGDg/8FglKVROH2rAVqA3OaYz5i4sIDIOgy2FMcRW7Pr DS0Q== X-Forwarded-Encrypted: i=1; AFNElJ+EsMXsnEpSkbPESeDWlUhbshQEXuGOVG2ekGYLTRED1nlfKgB51FVXEUX3IUs//fKM4gV9J/pgQ+OdE6M=@vger.kernel.org X-Gm-Message-State: AOJu0YxuswwK4nPi5K0GmaUwb/ZxlWO10cQkkxorNnZS0AJICSO9CwrP bH0pHeYhJA5AnuFSvxt757Tx7C1+hdqZPk/GNio9GlRh4VjtekPL0N/xF2sg9Jz/NQU= X-Gm-Gg: AeBDiesbxz+20xJk74nObA7359eSMfN0gOqJUzjxYvOzrUfJ3OPKdj2y6LZo8G2yBMj cb7T0nVcadrXnFKd1YYJ9rjoY1wTs1rgPgVGHsz38i0QKOB1OUCq3NmszMtHIDz5vxCYrAzyf7s 4sWSInk6hEvXxm7gce5Jv0xxYnduktJpBzLmLm7GIm9jwnBGm9xIv+EpU9A8f6CzR1/NFzagKyC VbTx/tvXRbzFBs3+6jvJvY/N+OzcMTYPHTsJ1GdzVOAHxLqzankUND/3nVK8zrPh5gIrspN36Vv 0ZlSpQ32PEhdFK22k3dLE06OURUPRKTrpPX/ujhuw+SRpLJl8h5p+xElCEjovDLlolSlYZapLIO /w+Jpppl7cEFp0N/0p0zU3oVI9oqw8zIW+adhF6++SuRsYgzoQqCQnTbxtiFPorRi+T4Uh5OExs sjYp55k6pykU3qpTxxFzfnw1wsAy3MuQ== X-Received: by 2002:a05:6a20:4324:b0:398:c351:aa0e with SMTP id adf61e73a8af0-3a08d7aaef5mr16353897637.25.1776729085329; Mon, 20 Apr 2026 16:51:25 -0700 (PDT) Received: from localhost ([97.126.187.42]) by smtp.gmail.com with ESMTPSA id 41be03b00d2f7-c7976f8fcbdsm8701643a12.6.2026.04.20.16.51.24 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 20 Apr 2026 16:51:24 -0700 (PDT) From: "Kevin Hilman (TI)" Date: Mon, 20 Apr 2026 16:51:18 -0700 Subject: [PATCH v3 2/3] pmdomain: core: add support for power-domains-child-ids Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Message-Id: <20260420-topic-lpm-pmdomain-child-ids-v3-2-c2c40bef238c@baylibre.com> References: <20260420-topic-lpm-pmdomain-child-ids-v3-0-c2c40bef238c@baylibre.com> In-Reply-To: <20260420-topic-lpm-pmdomain-child-ids-v3-0-c2c40bef238c@baylibre.com> To: Ulf Hansson , Rob Herring Cc: Geert Uytterhoeven , linux-pm@vger.kernel.org, devicetree@vger.kernel.org, linux-kernel@vger.kernel.org, arm-scmi@vger.kernel.org, linux-arm-kernel@lists.infradead.org X-Mailer: b4 0.15-dev X-Developer-Signature: v=1; a=openpgp-sha256; l=8659; i=khilman@baylibre.com; h=from:subject:message-id; bh=AJAxCQJaWoA/4dBEUCt/1XgQiiTMcAO9mItznU/aNFk=; b=owEBbQKS/ZANAwAIAVk3GJrT+8ZlAcsmYgBp5rv6vpqm0H64AdXGyGr6LuEuvzEUtEWUspmmt x7x7wBcYdyJAjMEAAEIAB0WIQR7h0YOFpJ/qfW/8QxZNxia0/vGZQUCaea7+gAKCRBZNxia0/vG ZaxVD/0bUSM94rccXv8PpC+2wx3taiizU8xLxUqSv0zq+L5JxFKRxGolyFoYnm6mH88UVGkJVAC fthcHrH3KOuNSjjzaIAjVsHMLrSWP5oxdmDw88EejlrkqcgIu1QG5eXHN5OzH71m79XT3Gmfa9E QwsMsty5CXxzFUo7VqnHTpMWdbhxapy4dOdM0uCFp9a6/q74lMMcH2v5YSeqGWpYgRTyTTlDIzR DYTfXnszo4pQPa1Z72QHLAsj+/gClNfCqsEjvNhv7A2SxboLVl5U89baEk7NuAnQ9IeHjeKnBJq s5HQ2Dgc1uK/pKAsOya9DShUfxTxsJwbO1VGF4rFmJegsoM8TbFMAYw6rZL6+O7MVRM3JPxEKwE wU70Lp52lb7CdDzrHb6Z2xMI01lLJXJKtdn9pDpxG/R4ks8OkkUu5UBaFRWKP0wdEdK83hRRu77 dVxy1T5XwcHEV0bV/nW9l2V+97LdrTf87n193jrkKDr9vT4MhEwbbJKjqK5LPyos5FsI4ch3Dmr fF3VUVHc+cYzpjHLrnw0DjanUGPMwlMS7NvsoYcq6O/+6eX61rsIuB6mRHt0vKIdBvNpLGDy3eY 4AL3Fe9ysLBRpPjahNqEgLM445u0SLBWOZQRJWMUZKHI5eOAtrnGH4hmNRBusS5AXDx0wUPbl8D 6/1Ve4kEobjKy+A== X-Developer-Key: i=khilman@baylibre.com; a=openpgp; fpr=7B87460E16927FA9F5BFF10C5937189AD3FBC665 Currently, PM domains can only support hierarchy for simple providers (e.g. ones with #power-domain-cells =3D 0). Add support for oncell providers as well by adding a new property `power-domains-child-ids` to describe the parent/child relationship. For example, an SCMI PM domain provider has multiple domains, each of which might be a child of diffeent parent domains. In this example, the parent domains are MAIN_PD and WKUP_PD: scmi_pds: protocol@11 { reg =3D <0x11>; #power-domain-cells =3D <1>; power-domains =3D <&MAIN_PD>, <&WKUP_PD>; power-domains-child-ids =3D <15>, <19>; }; With this example using the new property, SCMI PM domain 15 becomes a child domain of MAIN_PD, and SCMI domain 19 becomes a child domain of WKUP_PD. To support this feature, add two new core functions - of_genpd_add_child_ids() - of_genpd_remove_child_ids() which can be called by pmdomain providers to add/remove child domains if they support the new property power-domains-child-ids. The add function is "all or nothing". If it cannot add all of the child domains in the list, it will unwind any additions already made and report a failure. Signed-off-by: Kevin Hilman (TI) --- drivers/pmdomain/core.c | 167 ++++++++++++++++++++++++++++++++++++++++++= +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++= ++++++++++++++++++++++++++++++++++++++++++++++++++ include/linux/pm_domain.h | 16 ++++++++++++++++ 2 files changed, 183 insertions(+) diff --git a/drivers/pmdomain/core.c b/drivers/pmdomain/core.c index 61c2277c9ce3..97498a37336d 100644 --- a/drivers/pmdomain/core.c +++ b/drivers/pmdomain/core.c @@ -2909,6 +2909,173 @@ static struct generic_pm_domain *genpd_get_from_pro= vider( return genpd; } =20 +/** + * of_genpd_add_child_ids() - Parse power-domains-child-ids property + * @np: Device node pointer associated with the PM domain provider. + * @data: Pointer to the onecell data associated with the PM domain provid= er. + * + * Parse the power-domains and power-domains-child-ids properties to estab= lish + * parent-child relationships for PM domains. The power-domains property l= ists + * parent domains, and power-domains-child-ids lists which child domain IDs + * should be associated with each parent. + * + * Uses "all or nothing" semantics: either all relationships are establish= ed + * successfully, or none are (any partially-added relationships are unwound + * on error). + * + * Returns the number of parent-child relationships established on success, + * 0 if the properties don't exist, or a negative error code on failure. + */ +int of_genpd_add_child_ids(struct device_node *np, + struct genpd_onecell_data *data) +{ + struct of_phandle_args parent_args; + struct generic_pm_domain *parent_genpd, *child_genpd; + struct generic_pm_domain **pairs; /* pairs[2*i]=3Dparent, pairs[2*i+1]=3D= child */ + u32 child_id; + int i, ret, count, child_count, added =3D 0; + + /* Check if both properties exist */ + count =3D of_count_phandle_with_args(np, "power-domains", "#power-domain-= cells"); + if (count <=3D 0) + return 0; + + child_count =3D of_property_count_u32_elems(np, "power-domains-child-ids"= ); + if (child_count < 0) + return 0; + if (child_count !=3D count) + return -EINVAL; + + /* Allocate tracking array for error unwind (parent/child pairs) */ + pairs =3D kmalloc_array(count * 2, sizeof(*pairs), GFP_KERNEL); + if (!pairs) + return -ENOMEM; + + for (i =3D 0; i < count; i++) { + ret =3D of_property_read_u32_index(np, "power-domains-child-ids", + i, &child_id); + if (ret) + goto err_unwind; + + /* Validate child ID is within bounds */ + if (child_id >=3D data->num_domains) { + pr_err("Child ID %u out of bounds (max %u) for %pOF\n", + child_id, data->num_domains - 1, np); + ret =3D -EINVAL; + goto err_unwind; + } + + /* Get the child domain */ + child_genpd =3D data->domains[child_id]; + if (!child_genpd) { + pr_err("Child domain %u is NULL for %pOF\n", child_id, np); + ret =3D -EINVAL; + goto err_unwind; + } + + ret =3D of_parse_phandle_with_args(np, "power-domains", + "#power-domain-cells", i, + &parent_args); + if (ret) + goto err_unwind; + + /* Get the parent domain */ + parent_genpd =3D genpd_get_from_provider(&parent_args); + of_node_put(parent_args.np); + if (IS_ERR(parent_genpd)) { + pr_err("Failed to get parent domain for %pOF: %ld\n", + np, PTR_ERR(parent_genpd)); + ret =3D PTR_ERR(parent_genpd); + goto err_unwind; + } + + /* Establish parent-child relationship */ + ret =3D pm_genpd_add_subdomain(parent_genpd, child_genpd); + if (ret) { + pr_err("Failed to add child domain %u to parent in %pOF: %d\n", + child_id, np, ret); + goto err_unwind; + } + + /* Track for potential unwind */ + pairs[2 * added] =3D parent_genpd; + pairs[2 * added + 1] =3D child_genpd; + added++; + + pr_debug("Added child domain %u (%s) to parent %s for %pOF\n", + child_id, child_genpd->name, parent_genpd->name, np); + } + + kfree(pairs); + return count; + +err_unwind: + /* Reverse all previously established relationships */ + while (added-- > 0) + pm_genpd_remove_subdomain(pairs[2 * added], pairs[2 * added + 1]); + kfree(pairs); + return ret; +} +EXPORT_SYMBOL_GPL(of_genpd_add_child_ids); + +/** + * of_genpd_remove_child_ids() - Remove parent-child PM domain relationshi= ps + * @np: Device node pointer associated with the PM domain provider. + * @data: Pointer to the onecell data associated with the PM domain provid= er. + * + * Reverses the effect of of_genpd_add_child_ids() by parsing the same + * power-domains and power-domains-child-ids properties and calling + * pm_genpd_remove_subdomain() for each established relationship. + * + * Returns 0 on success, -ENOENT if properties don't exist, or negative er= ror + * code on failure. + */ +int of_genpd_remove_child_ids(struct device_node *np, + struct genpd_onecell_data *data) +{ + struct of_phandle_args parent_args; + struct generic_pm_domain *parent_genpd, *child_genpd; + u32 child_id; + int i, ret, count, child_count; + + /* Check if both properties exist */ + count =3D of_count_phandle_with_args(np, "power-domains", "#power-domain-= cells"); + if (count <=3D 0) + return -ENOENT; + + child_count =3D of_property_count_u32_elems(np, "power-domains-child-ids"= ); + if (child_count < 0) + return -ENOENT; + if (child_count !=3D count) + return -EINVAL; + + for (i =3D 0; i < count; i++) { + if (of_property_read_u32_index(np, "power-domains-child-ids", + i, &child_id)) + continue; + + if (child_id >=3D data->num_domains || !data->domains[child_id]) + continue; + + ret =3D of_parse_phandle_with_args(np, "power-domains", + "#power-domain-cells", i, + &parent_args); + if (ret) + continue; + + parent_genpd =3D genpd_get_from_provider(&parent_args); + of_node_put(parent_args.np); + if (IS_ERR(parent_genpd)) + continue; + + child_genpd =3D data->domains[child_id]; + pm_genpd_remove_subdomain(parent_genpd, child_genpd); + } + + return 0; +} +EXPORT_SYMBOL_GPL(of_genpd_remove_child_ids); + /** * of_genpd_add_device() - Add a device to an I/O PM domain * @genpdspec: OF phandle args to use for look-up PM domain diff --git a/include/linux/pm_domain.h b/include/linux/pm_domain.h index f67a2cb7d781..b44615d79af6 100644 --- a/include/linux/pm_domain.h +++ b/include/linux/pm_domain.h @@ -465,6 +465,10 @@ struct generic_pm_domain *of_genpd_remove_last(struct = device_node *np); int of_genpd_parse_idle_states(struct device_node *dn, struct genpd_power_state **states, int *n); void of_genpd_sync_state(struct device_node *np); +int of_genpd_add_child_ids(struct device_node *np, + struct genpd_onecell_data *data); +int of_genpd_remove_child_ids(struct device_node *np, + struct genpd_onecell_data *data); =20 int genpd_dev_pm_attach(struct device *dev); struct device *genpd_dev_pm_attach_by_id(struct device *dev, @@ -534,6 +538,18 @@ struct generic_pm_domain *of_genpd_remove_last(struct = device_node *np) { return ERR_PTR(-EOPNOTSUPP); } + +static inline int of_genpd_add_child_ids(struct device_node *np, + struct genpd_onecell_data *data) +{ + return -EOPNOTSUPP; +} + +static inline int of_genpd_remove_child_ids(struct device_node *np, + struct genpd_onecell_data *data) +{ + return -EOPNOTSUPP; +} #endif /* CONFIG_PM_GENERIC_DOMAINS_OF */ =20 #ifdef CONFIG_PM --=20 2.51.0 From nobody Tue Jun 16 20:38:48 2026 Received: from mail-pj1-f46.google.com (mail-pj1-f46.google.com [209.85.216.46]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id C7D633C73EC for ; Mon, 20 Apr 2026 23:51:26 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.216.46 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1776729088; cv=none; b=fZbS/6Jqsb0L7q+SIfUYn/kzZkqOX2TokRKEkO37EjSfIvTYiC7DNfgEzV7AdEJWvErytrtnRucwSg7LQKgDVt4pfV/FJYyJLsJBeG7VTPgg6jTEJ/xz2B48TfHrzM/Cs88yQE4mYD0ENZaAFybldlv9Y6tNf9bhKVD775769wM= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1776729088; c=relaxed/simple; bh=fQmK2/l/owONuV/KAsTohuLBlI/zxOSPwI6yoI7yexU=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=HctYKGymMi+3yBN3ex4PhU1L7jw0dktjP0dUFZN/+Af01HEfhab7wZAdrC6ZWAYd1vFMWtjQi50PE2agv/R5fqy/YfZE1IJrxPLffDVaKp9gUPmwq5rBU9TqO4vE1w1CVarIpAXh9tSz5U9VnkcJePn//AHaZSN5DKShYL/8I8k= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=none (p=none dis=none) header.from=baylibre.com; spf=pass smtp.mailfrom=baylibre.com; dkim=pass (2048-bit key) header.d=baylibre-com.20251104.gappssmtp.com header.i=@baylibre-com.20251104.gappssmtp.com header.b=oIw5RRyu; arc=none smtp.client-ip=209.85.216.46 Authentication-Results: smtp.subspace.kernel.org; dmarc=none (p=none dis=none) header.from=baylibre.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=baylibre.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=baylibre-com.20251104.gappssmtp.com header.i=@baylibre-com.20251104.gappssmtp.com header.b="oIw5RRyu" Received: by mail-pj1-f46.google.com with SMTP id 98e67ed59e1d1-354bc7c2c46so2116326a91.0 for ; Mon, 20 Apr 2026 16:51:26 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=baylibre-com.20251104.gappssmtp.com; s=20251104; t=1776729086; x=1777333886; darn=vger.kernel.org; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :mime-version:subject:date:from:from:to:cc:subject:date:message-id :reply-to; bh=qLT3tpSwkvQ2Tt/V/NMhLxE2z8Vhzn3uRFvBt+UOKAM=; b=oIw5RRyuQCGzQNvGXnbBTnSR4HL5DoHvlTEVVDqWJBOJPRr6hAEbzeqkF96o5rEkmj g2x99e7pVYTnNDMuU7xd6hoM4+qujmxg45AXPHGX3TpwG7QoOoqrs7/bbZZ7BPDIOgvE 7b1up6Ab2izgt5ZEVxQXLoVEaTcCdK170kT/drfopfqUlmwBwSw8Fv89n7p+ZGy4ZggP ViT1RS9XgKgPTnhKkr6eQTJFO7lwkMGQzNaKevNwraaVxIOs06H5mPbz6+HVEtNBnXw2 hoKs2qHm0BRrKEhasNlBDmTkNYX32EPOanRIpByz9IRWE6yPlmyFKmwOjoLVTB8aggWs 60mA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1776729086; x=1777333886; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :mime-version:subject:date:from:x-gm-gg:x-gm-message-state:from:to :cc:subject:date:message-id:reply-to; bh=qLT3tpSwkvQ2Tt/V/NMhLxE2z8Vhzn3uRFvBt+UOKAM=; b=guMC/XcmZ30/JAwWOvfcHACByFDLgaaHyAW4zn0WutIFLXP35AeFJtkKGX5zWA2Snh kU82pJf0dHVx0NQlSqSyjluBO3nt8s+/YFc8lBPCZy3gmkmeJPBeIlpZJiUpl1pS7ig6 lBHdjEPFVRyM3jkQTJexVNuiUjyd6JAVxma9QUtgtjHMR4hsD1Q8kz3mwHoo53KosHrk RDar1bSXCDKc7Lt38b4jT2yFX+K1zBDn2I3wT41W8ywDZ/G8V4butOM4a+RsflJH6460 4LZOtLFTWi97uqSQ8e+Zotgq+iqutZ4iElEBM+DTev9Cx1VVL3yroqqhlQcOnXLAghVa +G8Q== X-Forwarded-Encrypted: i=1; AFNElJ997h/Kv9wde3eNC2164F35tslmtjt6a40fK2vZ3hQYWvNbqbU55Ox+4ngMw1KoQwEZ/ljQ4lbSfCF3WqA=@vger.kernel.org X-Gm-Message-State: AOJu0Yx7V/FvjqqqrKrDxyAcTXmxoelMQGKQ8hvjHUOlKqWUz8Z7cKms 4IfFdAvx99jZ3TSTShdln/ER4T6iN9aEl+U0QvTJpS5nUTxFRNGAV9STISfhrsiOhuE= X-Gm-Gg: AeBDieuGfkz4rSjvmiUaXfiUIKV8CQTzPuAfJn8vDWacgQh6LVroKA+QT/TNhYpxsDN aLK2gKEWgeDnjadlXdvlNN6dhCU9ciLzbI4aujwL/0QzBUBjiV1eEUk9fzGsYV0xjksNw1SpNsL YL2M+cguj+Krrl9AawHbmMx133TwGlYFv1zfSGwVw/K6dypl97F2zw4HmK0zEaBfVnNYeDbFr0t oXtxYZx3AW5+gU9jsuJlIzgWPNK5IUeRSapB0640aLIIh2IhhiO5bNsrTqAlUL/UFoppkF5HlU8 U7KOPHlupTltDcNhBx1J/jEZWsHvftjbW6TeX0xNwa6vf10GfTxbqQcXE3q2MuIeTU74gP5ZkjZ TLNqntBHn9IfBICLWF0eC/qs55wglKuc6ypH4uXLxRJLkhojgbnIPtnIeVBhs//pocloWhsjZ1l ByDpHs2Jgsbdya2TmzmujwKYM1kg0OUg== X-Received: by 2002:a17:90b:1804:b0:359:83d3:27d3 with SMTP id 98e67ed59e1d1-361403c326fmr16049310a91.2.1776729086216; Mon, 20 Apr 2026 16:51:26 -0700 (PDT) Received: from localhost ([97.126.187.42]) by smtp.gmail.com with ESMTPSA id 98e67ed59e1d1-36141898ebasm11819562a91.7.2026.04.20.16.51.25 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 20 Apr 2026 16:51:25 -0700 (PDT) From: "Kevin Hilman (TI)" Date: Mon, 20 Apr 2026 16:51:19 -0700 Subject: [PATCH v3 3/3] pmdomain: arm_scmi: add support for domain hierarchies Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Message-Id: <20260420-topic-lpm-pmdomain-child-ids-v3-3-c2c40bef238c@baylibre.com> References: <20260420-topic-lpm-pmdomain-child-ids-v3-0-c2c40bef238c@baylibre.com> In-Reply-To: <20260420-topic-lpm-pmdomain-child-ids-v3-0-c2c40bef238c@baylibre.com> To: Ulf Hansson , Rob Herring Cc: Geert Uytterhoeven , linux-pm@vger.kernel.org, devicetree@vger.kernel.org, linux-kernel@vger.kernel.org, arm-scmi@vger.kernel.org, linux-arm-kernel@lists.infradead.org X-Mailer: b4 0.15-dev X-Developer-Signature: v=1; a=openpgp-sha256; l=1582; i=khilman@baylibre.com; h=from:subject:message-id; bh=fQmK2/l/owONuV/KAsTohuLBlI/zxOSPwI6yoI7yexU=; b=owEBbQKS/ZANAwAIAVk3GJrT+8ZlAcsmYgBp5rv6y2OemQ05EvI6I9Eb7ji7vCtT8ygEexN59 biCxvg2gTSJAjMEAAEIAB0WIQR7h0YOFpJ/qfW/8QxZNxia0/vGZQUCaea7+gAKCRBZNxia0/vG ZWyAD/0d0/YBQizqrbUviBkwWp3DBYDrtv2ykMygkKlK5l5L3sb28ibT5WnM8ZKqh+t0KUia/iZ z1ZHFEHYVTHi9u+NXT0H10ur1LRQnWGt5fziPeyxaezbBY4YrI/MerMp3WyJ9xuVPRWOA1hbbii HvTXoszaQQsEngTIMXMz4v/+a9W8NcOWYD3awqyH1Dbr8aSno7skX2VyScGvFIBeCHo4PMfqx3f rYbFgy28uknIGuOkg/CWTwjojLRtghphUiE9bfW2083x15l6bhlcvg4eTAFL/IkzQmd/pUPLzKD Ww8WkE+0rrAvtEh0o/UMFr89T19zGcyPaCKJXBSa+7AhimyFta28Iz7x1mInWwrkSSv7rwQDxi5 K70tevOBPa/T5RgkyteJfwHSKMTpUsi3qz5YYV41r0+VFVzBuklBnQmgVAgDpA3sAhBiVM8zPgo dDLB094XaZa/Zr8ZtRa5EauOf+LM04uLX648SRJMw1HgO0E4qYU5qiW1axHnL+aQb9j63RHEoZP zgzU71AQBfc+RsWUukD2frkeinl9TgSa7UgMVrb4fjd9t6AH1K0NDThwQUdogfzqM5wHV+uUbya ImAuPuowMRCnwI57qIk42BJJJk7hBurgdH9Q9kP0yP0yj+37ivwb/NruZSiW/vU0XrsFBVln7C6 HLUBmgLhKNszwiw== X-Developer-Key: i=khilman@baylibre.com; a=openpgp; fpr=7B87460E16927FA9F5BFF10C5937189AD3FBC665 After primary SCMI pmdomain is created, use new of_genpd helper which checks for child domain mappings defined in power-domains-child-ids. Also remove any child domain mappings when SCMI domain is removed. Signed-off-by: Kevin Hilman (TI) --- drivers/pmdomain/arm/scmi_pm_domain.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/drivers/pmdomain/arm/scmi_pm_domain.c b/drivers/pmdomain/arm/s= cmi_pm_domain.c index b5e2ffd5ea64..66dcf2e687a8 100644 --- a/drivers/pmdomain/arm/scmi_pm_domain.c +++ b/drivers/pmdomain/arm/scmi_pm_domain.c @@ -114,6 +114,14 @@ static int scmi_pm_domain_probe(struct scmi_device *sd= ev) =20 dev_set_drvdata(dev, scmi_pd_data); =20 + /* + * Parse (optional) power-domains-child-ids property to + * establish parent-child relationships + */ + ret =3D of_genpd_add_child_ids(np, scmi_pd_data); + if (ret < 0) + dev_err(dev, "Failed to add child domain hierarchy: %d\n", ret); + return 0; err_rm_genpds: for (i =3D num_domains - 1; i >=3D 0; i--) @@ -129,9 +137,13 @@ static void scmi_pm_domain_remove(struct scmi_device *= sdev) struct device *dev =3D &sdev->dev; struct device_node *np =3D dev->of_node; =20 + scmi_pd_data =3D dev_get_drvdata(dev); + + /* Remove any parent-child relationships established at probe time */ + of_genpd_remove_child_ids(np, scmi_pd_data); + of_genpd_del_provider(np); =20 - scmi_pd_data =3D dev_get_drvdata(dev); for (i =3D 0; i < scmi_pd_data->num_domains; i++) { if (!scmi_pd_data->domains[i]) continue; --=20 2.51.0