From nobody Sat May 30 16:39:14 2026 Received: from mail-pf1-f170.google.com (mail-pf1-f170.google.com [209.85.210.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 052BA389469 for ; Fri, 10 Apr 2026 23:44:52 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.210.170 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1775864694; cv=none; b=B6ga5GwaeHYsSjgCScodiczATtyymE2XvMfKXLNYguF5S9uVW/Hi4APCf9yr0GkfpJgwF5C8UTNQdkOjhuqEKbIjStemaio3Ru/TO8EQkLWaLMM4pPE8cJ2ArVlU10/S9I57zog60WZAq7tts55AhHadmSryBca9d1om0LzwXD4= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1775864694; c=relaxed/simple; bh=Q7DrslDoEzNPakyLJFXorxvjgyPUA3DGKqDVH51Yzcc=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=RzDI6Mt80cdEYmhp8Ybe0XtdV9Hun4H1P/TMMrwtJKwKh4LXgyxPDBeu4VUKcPqHwsZRqY5hurrk+NO4ePCFpBLOu+A7cyo5jTRnyie1PpSSv+IQo1Pg+ekMZV1GiZO8O3wRxydnwBcNET6teKRTSZo1MpmEZXbG5r47dhjtfBU= 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=gnKdVaRk; arc=none smtp.client-ip=209.85.210.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="gnKdVaRk" Received: by mail-pf1-f170.google.com with SMTP id d2e1a72fcca58-82f07e5ad92so1043309b3a.0 for ; Fri, 10 Apr 2026 16:44:52 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=baylibre-com.20251104.gappssmtp.com; s=20251104; t=1775864692; x=1776469492; 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=gnKdVaRkjAWGEHYXxs0clbo1wFG0G+VV+Whv3UemtpB6zL984GjYbwzA8/SyJPHNSp fLMvlluqsFn4cNTUoyTsVEv3fiZJorus+G9RDEU4nxulErwfNyc/RfCEpaaSN+ALcD/c ewP7R6fM8qyDr/zK0kuwd6asRLeDya/QgTCPt9dmZfHQIw0Z6+w00WehRR3qeFEulHOI U9YVyyVF0Cew06bqVbk15DOoItizOJEYag4/xL2MNw+vNuFcvyEhQn4eh7yBSujvfZuI keYkCa1YKrpJQtG8SSPyFKVh4hbwbQjPRsl2a+ViTBlNZJ2Qp/Rzmy3h+PLURr5L3qMN 6HHQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1775864692; x=1776469492; 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=EKFyR0TA4T2tqKB1Y7ZpvxDAMP7AlqDOjIUEEkzKnCeAshWsvsvN6AK1vVuyBPXCvV HieIftVWSI5tQnULw5KxzY45QQR1ze+kLxR3HnU5/7mK/fFKd9ZhWuLVxcEKbPGW5ZCQ +PP4GsvWdb7fIk+ELAhTEfICHhKtMcyuLpOw5ujp0foW43rr+cdwzpLulkrH6RlD5Ars r33qDqosKLoZtKknGhH8GUAfjLw1i7hEqRDf4DCCO+1eIrJ2dJfhi/eeUtdy0X2eeqCQ YFml27IlCHgt7ctERtNPUrZzvLMzpt8985FHUfIT25bNga54U+08kQTDRRhVl5V4C0fa gEkg== X-Forwarded-Encrypted: i=1; AJvYcCXh2xb2+x0PIbRUmErGr+xeunWJGn0gZaZs2RFGseucmzTQQIwQLFGEPztIlWTCjOU0Hp6vhY9yqcIT72Q=@vger.kernel.org X-Gm-Message-State: AOJu0Yzab8bQZw/n45Yfwo5TPiUc1mjpoGAS94jMXqKXNIA1HCo5MERL LnnTBVj2VkCBeC9TevKa7wIQg8laMOaQEQVnsytXZzIMvyWtTI874GojYofyJGK2pRE= X-Gm-Gg: AeBDiev+I8ihQOj15sFISsMhOWtqmZClgr9MYN/YCoj4azLfz+JIFLhsqJ0CvaxrfrC +Bs6vD4BrIzjm+X2Q/tqBUfhx75Z8IMNeHLXVXx8drfgei0JEEHoP3Bpf4JDAsCdFcFMvQSBNjc NFq4rZTRTiT53cYCwC0/zmiFPWpdXCNVudO+3zFv6g36IQXLPMdMR6NvomNLEicuA79FN2dOMf8 BIxwxBvkbkoe8W+P4EQma4R7p2RWuP1lFY++x+FfkM7eMaDHzc5Qy3/F8L1Bo46MpOUK+ciA/+U QSepWeqEladsA7dUpRYaKdzRtCLdfM3IryGNTusdr6/twORyopx0xpzXX6/tUqPV8QJtNLJ2Puv rS39zl1SGRNNPx2Is73Uz/TwaS7/UM7nG9OnUzEI5ud/s0iAUX3yH6bPp05/O3gO0SrenR6ukO4 MtiuWbXY45r4lghwec22Q= X-Received: by 2002:a05:6a00:ab87:b0:82c:d861:3caf with SMTP id d2e1a72fcca58-82f0c330a64mr5568325b3a.36.1775864692381; Fri, 10 Apr 2026 16:44:52 -0700 (PDT) Received: from localhost ([97.126.187.42]) by smtp.gmail.com with ESMTPSA id d2e1a72fcca58-82f0c4df7f5sm5463230b3a.43.2026.04.10.16.44.51 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 10 Apr 2026 16:44:51 -0700 (PDT) From: "Kevin Hilman (TI)" Date: Fri, 10 Apr 2026 16:44:36 -0700 Subject: [PATCH v2 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: <20260410-topic-lpm-pmdomain-child-ids-v2-1-83396e4b5f8b@baylibre.com> References: <20260410-topic-lpm-pmdomain-child-ids-v2-0-83396e4b5f8b@baylibre.com> In-Reply-To: <20260410-topic-lpm-pmdomain-child-ids-v2-0-83396e4b5f8b@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+8ZlAcsmYgBp2YtyOdtjOuG32HA1t4vZodKj+AtEzJXdLxdNK SBaLyQt9hWJAjMEAAEIAB0WIQR7h0YOFpJ/qfW/8QxZNxia0/vGZQUCadmLcgAKCRBZNxia0/vG ZVcMD/9z8v/EsqqHjDNjy14vtJNbHcyIHfgkcmj1hhwzj3D70G/XIhtqV07i5/gQ3fi3xIBTY3E ntok5PuQhWiF5bk7yByI///EuLdnvu8CQA/OUQd5Tv4PgvFs/4pA7N8O51dzMpcmwGUGt0ypEsa a09pNZud2wFIMRxcn5hsEWfd6bM7lkbrXlSKtM8ITugv+rlyHK5SjNpTbq1jiMPFMtKPHVM/J+/ YLDhxDToUY/yaVUPyhGRSIPRLhoFdL9MILQ4epNlNf1dBsi6HZ3vi7mFfR3a2HM0CyUdFgf1+O+ D5VEJGwJJuRgBDzq4B/5wDdiVcAS24uCR7q+z5SFhw3X11l4mK4lT3T6v15o6BvHBchxqCLXzmf peaV81WmrdSNnKRcpBySD97Nx3ciwLFN+o3bClhYFr0+LbtPHDF9diKwHxDLjgifWR4newliHnI tkJz1Cy6AeUUDV9tFWYOFVXADN2fPx3zg7lo0119TJJlbRH1xP9YwdEuSfuAsYeJrXWHtPXsvHm rO6AAdGOrE6qU4/vbZNpxhZs7cLy9mz3ytBzhIN9pO3VqP1LuPoHRYIRVhDRY7YdhialFyXLb/b YzIQNiLC8lAw0DjQ9sFz0b0Z5t2rUrMtqH4f9D4H+00CA0zuOwehTwi1uhoMuh/S00iifjD5c0o ao9SZfFhrVfcLOw== 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) Reviewed-by: Rob Herring (Arm) --- 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 Sat May 30 16:39:14 2026 Received: from mail-pj1-f52.google.com (mail-pj1-f52.google.com [209.85.216.52]) (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 E74A73890F3 for ; Fri, 10 Apr 2026 23:44:54 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.216.52 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1775864696; cv=none; b=P3AnRFFV254hZcHhPdgIgr4Cydx8kM8sfXjyaK5bi4RD+BJu/gyL9rnAYroO8MfeTuoONA/HUYPLABIxgH3OXlNV4LB8+GTJIrft4Qt6l4/yzsTWxeg7m7LlfzG4vABcFH35wYgfiFGxZp/CQ8xVXqOjaiLocML0PUIiD1v/57I= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1775864696; c=relaxed/simple; bh=mBjWuQi/HGwha5ym3E4fgVBst1esK2Mr/oGnli4oYYk=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=TjYSgisJaLQXPXy3Rn05Hu03q83yE2bjiJDDIrNmZyk6hzG83/btjE2ZZruz2IIyTfNOIWUY//pMM24jIJxgIGNUv3ICFnAYU7VrwRQ9O8h4xn2Zcc3cWSQhsQ4L2nX/I3O44MXAPZegoBNE8zD0iNVxrrDyG6vgWtufOcfV6nY= 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=YEYRercQ; arc=none smtp.client-ip=209.85.216.52 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="YEYRercQ" Received: by mail-pj1-f52.google.com with SMTP id 98e67ed59e1d1-35c206f0481so2626603a91.0 for ; Fri, 10 Apr 2026 16:44:54 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=baylibre-com.20251104.gappssmtp.com; s=20251104; t=1775864694; x=1776469494; 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=/fL3GNwfZ1nsisPUDCuJfqwmmtNAVNx2CIYyMLfPb2w=; b=YEYRercQhT39fTi1QOwcrn9GQupLUkcew70TfOLVF+nCxX+kaYPxdFATD/Dbqu3aZJ a9v8YsXLszzs75qL4AE2n2JHGr421rxKN2jSsuiyHcMa+N3Pe3GvZyOktKfNZ0+L2cKy Obi/YFxiIhMX2rBBYQvIU3A+1UF9KSdnVFufSPEM4EwYpnJUNZKRoEyEoTDAZAMxqbHn Zj8pDX5jmDN5JCLcSP8QXV+iIiNcAaKMXXzXkY+SSvrOp8+fn+WD8LCn7p0Z/3j3IYF7 zqZynrCmGc/IxEQ5DAB78TYjHU6yKbgsG1Nz4jpFR1Qvab59pjmdYF4i81JuHdttpKdV rJUA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1775864694; x=1776469494; 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=/fL3GNwfZ1nsisPUDCuJfqwmmtNAVNx2CIYyMLfPb2w=; b=fXu7sWHGnv4lfgxhZA9CBkFVAMg21hLK+CG8otjDN2ATXKUrojxSsHJ1aMY50+X1n2 7iKzcX/MGk5Ghf0Ea//h2+XOdyR5GMNH/sT4Z5bwbaq0C5q7b+vWQ3zDghI4dgINa4cE 0aVtPqITnVs4xRH4AlCgtvC1BuNik1qndtz5BserPpDW5D4DVjW+yiwNQ+1esQlSZc3E IGiAVH4eJ4lrsz5u4P7V+hOOguDcbIXIdy6+nlA90Bs1D+f6uinofSqrvZ0vC4+lpD+R SfUQawzZhrvu5M5mgaGnCNMDIAJe26HPbEVdgxdTeh5Ie7Q4+tuQ/zdRuRL2KKbCjVIa 3c+g== X-Forwarded-Encrypted: i=1; AJvYcCXNKtuWkjVyyGHOtgfQAVkevrfsc4+crQWovQgLuW8qFhJXCFHF4cqVUKZqAN03V+fIMTMMFH04MnAFkEI=@vger.kernel.org X-Gm-Message-State: AOJu0YyQhcPKioccLahMiOrSC1xmgGsl43Mt3s+B5/r62e1v6PyF34YG OScXc6Dqn44LH5OJTem/JT9jZ7SvQ3NHKLlDw0AvrAYHulhHqvQ7T61Ez3iipk6/vVo= X-Gm-Gg: AeBDiesF02S6ttNNG6v5UhUUatOlA79vWt/GEzq64pMgePeziZwMvAQgEdQBiNi+8rC K8GFoNu4asqDK2Mg66s/XvldO0EFvMkuYXUJU4CySVN1Cf1BpMdxc6MiMoEOD08WOvDr6lQYVLH GmJWWB0S8wtukUHE+4Eb+8+6gk9nGHmZoFcXhH3CFdmMU655j3A5hqr55ClGNoUswie6h3e7aas 7nZGnVkvjfOg4HADOoDb66yZPi0gFsuA+WMuwNjbAgU1LcecW/jE4uIO97ljomGYo0GliU+LdqD Rjx8iJn+0j9dnkMCVQX0E3yGTysnMFhAjLPG83Yf04thbij36K8VH/4luc5KdgC5wvTiu4nHou5 9I5imF24gdaHF+6QL83jz/XAqdpYAGuNUUlkWuLMTflMmKyXyIQbsKL1xytpD0I4uVXCE7+p4UK 2+mNpzQBRdNYRZDyMMmP6X0LBcxo+nNA== X-Received: by 2002:a17:90b:3ccd:b0:35b:9ab6:1d4b with SMTP id 98e67ed59e1d1-35e42846246mr5553462a91.20.1775864694213; Fri, 10 Apr 2026 16:44:54 -0700 (PDT) Received: from localhost ([97.126.187.42]) by smtp.gmail.com with ESMTPSA id 98e67ed59e1d1-35e42db1b51sm1766213a91.3.2026.04.10.16.44.52 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 10 Apr 2026 16:44:53 -0700 (PDT) From: "Kevin Hilman (TI)" Date: Fri, 10 Apr 2026 16:44:37 -0700 Subject: [PATCH v2 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: <20260410-topic-lpm-pmdomain-child-ids-v2-2-83396e4b5f8b@baylibre.com> References: <20260410-topic-lpm-pmdomain-child-ids-v2-0-83396e4b5f8b@baylibre.com> In-Reply-To: <20260410-topic-lpm-pmdomain-child-ids-v2-0-83396e4b5f8b@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=8599; i=khilman@baylibre.com; h=from:subject:message-id; bh=mBjWuQi/HGwha5ym3E4fgVBst1esK2Mr/oGnli4oYYk=; b=owEBbQKS/ZANAwAIAVk3GJrT+8ZlAcsmYgBp2YtyQkv9A8zRsOwGZF+JZjPXQaBYJzu6eUYGq rH+XEE2lX2JAjMEAAEIAB0WIQR7h0YOFpJ/qfW/8QxZNxia0/vGZQUCadmLcgAKCRBZNxia0/vG ZbZ9D/9QG6dV9icaKXFsVCK8sPfQLATnm6mg1puEFW+8wV9eXzTFJ3TFjHdCvkC+ZCLVI51S6qo pQnENkg/SxGUVGrFXWUtAreTjBzUgpIKmHEgTsjRw/15fNtz3rW5qRDAM+qvG33QCxBTxDLWp7a FLDfj2NFDoqNyXSjUA0op74x9XDuAkKq0HllBxwWxWFzosNooe+0728Uezd0KQmd97sYFKhS7we XsIiV6mop+XMczwGXw+IzmY6pTVXx9GJoGj8S8Br88PDZ2JFNhqMoxuqBXZVs70cOGMD1cTV5dT 80GIUo1BQZSSjPFBz0OCjpyEq8zjhfjZl5jFLBDaY5b5G8YeAFBl82XeDWzx424vZqZIw+Sr9un zwN14y4Hfd+3v6YOLRjkwtfzyeJT7vcS3cFIWGCML13YKNxaG5oZLH8SgWyjSwD8412mm+eiJUV pVGa4yTJOI+R2noGqdyn+KZfTzR3Cxrj1/MQ8TI2Xl3dCu9RooHmpwygpy/Ufsg776l4+7eSoY2 mXVRYE+GJk0308bxjUhjEUbXLOijCYzH6OMvQYQp/8bmJ93tET6Gn4C2hmGGXcPfzi2VVMQGjFI pB/i7USbCoxR34jnJEMnmU51yAA+NoXUeM8wuPOZM6SZeX0AtLPS5OZgcxDl0gdj7IYmCnspBqo eiOAP6LhVm+7f2g== 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 | 166 ++++++++++++++++++++++++++++++++++++++++++= +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++= +++++++++++++++++++++++++++++++++++++++++++++++++ include/linux/pm_domain.h | 16 ++++++++++++++++ 2 files changed, 182 insertions(+) diff --git a/drivers/pmdomain/core.c b/drivers/pmdomain/core.c index 61c2277c9ce3..f978477dd546 100644 --- a/drivers/pmdomain/core.c +++ b/drivers/pmdomain/core.c @@ -2909,6 +2909,172 @@ 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 0 on success, -ENOENT if properties don't exist, or negative er= ror code. + */ +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 -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; + + /* 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 0; + +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 Sat May 30 16:39:14 2026 Received: from mail-pj1-f52.google.com (mail-pj1-f52.google.com [209.85.216.52]) (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 A0E2138B7C3 for ; Fri, 10 Apr 2026 23:44:55 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.216.52 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1775864703; cv=none; b=UZzYnJVY4MI38jmVPHrtXZV7bQ3tvpXW4v/rsqpi1RprYzCYVVuqnCH3Rbe554cG9NKddrmgbPP0iX7ZPP77R+Fk1Yv6vk7iB9XNGENnqwvywj6FXFNnW+rD+OzeQIpfMxSJhGgImz4f3Pgq4ovdkqiVIHiodR4dYR2oqoRM/Mc= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1775864703; c=relaxed/simple; bh=PX3RRvN2uw+9v2vWDcKKkvjMH6VQ8rbrFfzvSFGoTrc=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=aIpCqY6BLYNG5b3GgTRm7k07PlpFtmwbUA/0QERibHtWYQ5BRgIRTL+T/Hk8lYc5Adqj/ec3MKS+fdksLzSVt2/Q5cerlzVhDRVScXpi665wdQGux4gVQvjE8XjTM3yzlPon8VcdBL3EjbaRubD+4hedyLHucBxq2JgvMqeOoFw= 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=XZua8WeG; arc=none smtp.client-ip=209.85.216.52 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="XZua8WeG" Received: by mail-pj1-f52.google.com with SMTP id 98e67ed59e1d1-35d9827661bso1536617a91.3 for ; Fri, 10 Apr 2026 16:44:55 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=baylibre-com.20251104.gappssmtp.com; s=20251104; t=1775864695; x=1776469495; 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=xxPy7nsbAghT5E3uapDIu2fOz6eF6mBtTMfx5Uz4VeU=; b=XZua8WeGfCr4k4mE+rvwlptJ/p3wHvwzwxzlTBP59YNBbtwLDVUJX04VY62G/+w6Gq kYHn7tYff7CvsOeuhmHIouAZI2GQn3uYxEFofP30JlwRKNVQpU4hI5JIMU3A1EtIaa20 KVBDBX9/WuTdnl/hQCfYBq90DjR7DF2c59X+p+1s7eS8yuY3wn5KfFJO7Am63kswYaZN FaCzmZda1ifd9mSKZQjAqD+s0iUUgkZ3SNo8OWOmGszMPXTMja7hKW1vTQcGy1pFMGHZ HhSrRMH1mn/nCw4SHPm++/DD1Kf1l2VIUS/58wTDl1xBEjddormGlGCuIZGnroK/5B7y Wtjw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1775864695; x=1776469495; 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=xxPy7nsbAghT5E3uapDIu2fOz6eF6mBtTMfx5Uz4VeU=; b=nEGnlLh5bI5R9kJNC58VD0y5j61rDH/s5QlOemE4kAT5/vPDvP+HjEMqsUFULnEodG xaA8EdNUPjOzuFUA7gcrZLQd0hMtlkHu4w+8XvBbilGyqYS6LeVfctSF3f/eLu0fnFIa VjS2PqmTu08Hq/APqOX657Bq7sQDJLb2UNppkCmGxH3+UtLzfiSyEx8BKXSHW3J+nz3m C91qYgo9ik4KTQTzMzCvMVSDM6yC7XerIBFy31MLMG95Zms55Twoa8lcvg0sR0D/995E NRjAS8w+E0BhP/4T5gn7Ozdk4sLppM8rNw4pngH3SqQJloZbT2libByZWiniZumn/dpa xiuw== X-Forwarded-Encrypted: i=1; AJvYcCVOlc1DwQi6huZuHnW3KH+fZHxILI0BlapCySnis+P0hqXVU38FWFlx2Nvmx6uCHjsgu2ELMluBjFejpzk=@vger.kernel.org X-Gm-Message-State: AOJu0Ywo8DvJzEsEBgBvo6ptNFTtjRGAR0BC3wf36jADTeXHt3dWJ2lb 6xPCa3DrUu55grgX+aaHRl13328EavUJFA1HNLAIh9Ulii6AJKPvJBjJe70eGt/uUgI= X-Gm-Gg: AeBDieuHBqtTexsMXGOuNL8UxYsCZfJ2R3ceJZxmYxvxX35vFKP5laz3H0sC7YXTs+o JA+6Q6rekpqvO9oJrxy9K4cFUywJwplhqQ1A+oBw3iUmUog4ZDxQjXTFm7G671M5IZEIfFkf330 LLP7WX4n2w9VXvi+JPDWFEft83POXSG9UDw+WEPTeOyguirboRcK4niGSWK6PJROSLbUhcMWd/u RxIBpu10XPmUGnJp8kJkyKJ6MXhk6XSmgLXPr6YdZGzkm7lxsMCT6YUmmjKQxPmvZwnYHmdFgjv EwZID8hL77C7UDm1pNnD1Ynxfbl8a/q6L/HKF2OD+7W+U1hzc8ZIZ1FbYYFv+PzLPbXZLO318Tl VLEm9Ek4OL4Tjei4Sev2SO4Cujrdrw0GZ38Z11FxPZFeBrvCaToKbrxfEAN8wueUkhxF/ALOnng LD+XXH8l0FFwi9ORy2W4k= X-Received: by 2002:a17:90a:f945:b0:35d:9c32:6219 with SMTP id 98e67ed59e1d1-35e427d7f46mr5220267a91.9.1775864695045; Fri, 10 Apr 2026 16:44:55 -0700 (PDT) Received: from localhost ([97.126.187.42]) by smtp.gmail.com with ESMTPSA id 98e67ed59e1d1-35e3517f2a0sm10472699a91.17.2026.04.10.16.44.54 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 10 Apr 2026 16:44:54 -0700 (PDT) From: "Kevin Hilman (TI)" Date: Fri, 10 Apr 2026 16:44:38 -0700 Subject: [PATCH v2 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: <20260410-topic-lpm-pmdomain-child-ids-v2-3-83396e4b5f8b@baylibre.com> References: <20260410-topic-lpm-pmdomain-child-ids-v2-0-83396e4b5f8b@baylibre.com> In-Reply-To: <20260410-topic-lpm-pmdomain-child-ids-v2-0-83396e4b5f8b@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=1600; i=khilman@baylibre.com; h=from:subject:message-id; bh=PX3RRvN2uw+9v2vWDcKKkvjMH6VQ8rbrFfzvSFGoTrc=; b=owEBbQKS/ZANAwAIAVk3GJrT+8ZlAcsmYgBp2YtyxxHvOuglRXsHxemtA1xpH5tLnawaN4yYq oG8j7wWxguJAjMEAAEIAB0WIQR7h0YOFpJ/qfW/8QxZNxia0/vGZQUCadmLcgAKCRBZNxia0/vG ZWS7D/4ubuhV0GKzqz0HTWzwuwk/cyPQdJs5BD5yPk3x2OlDujuArp5KWz9Zb862Sl2RNLa6EUB VTHLsDJYzazuaQiunBkJH3uoMnSTIh0uwRh6OaOVafKsMld/NWyfDh2LKusn3S3ulc343Nv3IwT fr/S5HZiJyMHxNVUoS3j3YQ0Q9I+d5J1LrrQAalSGOlANEvwyIf+/p0IJ6sd1NUVo1Tj1AGdyT/ rtibZq1EakyZsTdWvNLe+utfRPHY5aAC8BedesuQWRbA30Gy/KK0N9IjxE/mwSaLDpJJPMgZ+MM d/K8sRQS4NsAVnmdj3kE4QznzUFzCgf+zXzcJCTsU9RSC+QThJgTUrmogCCEiowaqZGUiEtTUI0 giUEDl/doY5z7UXNUX16ImfEk1cUUGefUJH/CV7r7OHXo7ECqHBVw92UkhQozOFL1OuffuNuX/i b4siw+J58JNN7+bS2EvW0otNbs7udqEIlHy/GlNs7FIWn6xMEmselmWU0phneTxuDe2Xuwe0MMQ HuZzQ9LvL5DC0PK8+VAJGxUtM2gk+j/JygVHXWPbyO567XetOAcybWkywZokcbHmrAewVzV7o3+ pDU+5g6kuThE4wZmtwDEaTTl9mnxQXkqSaSJsDNSVOBj05g0o4wM7/U7E/IdyaSNOJVIqPn/+TD Eq7vbGTMdWb8EPw== 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..6d33b3d62ef3 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 && ret !=3D -ENOENT) + 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