Rework the PowerVR Rogue GPU binding to use an explicit, per variant
style for defining power domain properties and add support for the
T-HEAD TH1520 SoC's GPU.
To improve clarity and precision, the binding is refactored so that
power domain items are listed explicitly for each variant [1]. The
previous method relied on an implicit, positional mapping between the
`power-domains` and `power-domain-names` properties. This change
replaces the generic rules with self contained if/then blocks for each
GPU variant, making the relationship between power domains and their
names explicit and unambiguous.
The generic if block for img,img-rogue, which previously required
power-domains and power-domain-names for all variants, is removed.
Instead, each specific GPU variant now defines its own power domain
requirements within a self-contained if/then block, making the schema
more explicit.
This new structure is then used to add support for the
`thead,th1520-gpu`. While its BXM-4-64 IP has two conceptual power
domains, the TH1520 SoC integrates them behind a single power gate. The
new binding models this with a specific rule that enforces a single
`power-domains` entry and disallows the `power-domain-names` property.
Link: https://lore.kernel.org/all/4d79c8dd-c5fb-442c-ac65-37e7176b0cdd@linaro.org/ [1]
Signed-off-by: Michal Wilczynski <m.wilczynski@samsung.com>
---
.../devicetree/bindings/gpu/img,powervr-rogue.yaml | 33 ++++++++++++++++------
1 file changed, 25 insertions(+), 8 deletions(-)
diff --git a/Documentation/devicetree/bindings/gpu/img,powervr-rogue.yaml b/Documentation/devicetree/bindings/gpu/img,powervr-rogue.yaml
index 4450e2e73b3ccf74d29f0e31e2e6687d7cbe5d65..dc53ed59331bedee2d7438288f482870714bbf46 100644
--- a/Documentation/devicetree/bindings/gpu/img,powervr-rogue.yaml
+++ b/Documentation/devicetree/bindings/gpu/img,powervr-rogue.yaml
@@ -21,6 +21,11 @@ properties:
# work with newer dts.
- const: img,img-axe
- const: img,img-rogue
+ - items:
+ - enum:
+ - thead,th1520-gpu
+ - const: img,img-bxm-4-64
+ - const: img,img-rogue
- items:
- enum:
- ti,j721s2-gpu
@@ -77,14 +82,18 @@ required:
additionalProperties: false
allOf:
- # Constraints added alongside the new compatible strings that would otherwise
- # create an ABI break.
- if:
properties:
compatible:
contains:
- const: img,img-rogue
+ const: img,img-axe-1-16m
then:
+ properties:
+ power-domains:
+ items:
+ - description: Power domain A
+ power-domain-names:
+ maxItems: 1
required:
- power-domains
- power-domain-names
@@ -93,13 +102,16 @@ allOf:
properties:
compatible:
contains:
- const: img,img-axe-1-16m
+ const: thead,th1520-gpu
then:
properties:
power-domains:
- maxItems: 1
- power-domain-names:
- maxItems: 1
+ items:
+ - description: The single, unified power domain for the GPU on the
+ TH1520 SoC, integrating all internal IP power domains.
+ power-domain-names: false
+ required:
+ - power-domains
- if:
properties:
@@ -109,9 +121,14 @@ allOf:
then:
properties:
power-domains:
- minItems: 2
+ items:
+ - description: Power domain A
+ - description: Power domain B
power-domain-names:
minItems: 2
+ required:
+ - power-domains
+ - power-domain-names
- if:
properties:
--
2.34.1
On Fri, Aug 01, 2025 at 12:31:02PM +0200, Michal Wilczynski wrote: > Rework the PowerVR Rogue GPU binding to use an explicit, per variant > style for defining power domain properties and add support for the > T-HEAD TH1520 SoC's GPU. > > To improve clarity and precision, the binding is refactored so that > power domain items are listed explicitly for each variant [1]. The > previous method relied on an implicit, positional mapping between the > `power-domains` and `power-domain-names` properties. This change > replaces the generic rules with self contained if/then blocks for each > GPU variant, making the relationship between power domains and their > names explicit and unambiguous. > > The generic if block for img,img-rogue, which previously required > power-domains and power-domain-names for all variants, is removed. > Instead, each specific GPU variant now defines its own power domain > requirements within a self-contained if/then block, making the schema > more explicit. > > This new structure is then used to add support for the > `thead,th1520-gpu`. While its BXM-4-64 IP has two conceptual power > domains, the TH1520 SoC integrates them behind a single power gate. The > new binding models this with a specific rule that enforces a single > `power-domains` entry and disallows the `power-domain-names` property. > > Link: https://lore.kernel.org/all/4d79c8dd-c5fb-442c-ac65-37e7176b0cdd@linaro.org/ [1] > > Signed-off-by: Michal Wilczynski <m.wilczynski@samsung.com> > --- > .../devicetree/bindings/gpu/img,powervr-rogue.yaml | 33 ++++++++++++++++------ > 1 file changed, 25 insertions(+), 8 deletions(-) Reviewed-by: Krzysztof Kozlowski <krzysztof.kozlowski@linaro.org> Best regards, Krzysztof
On 01/08/2025 11:31, Michal Wilczynski wrote:
> Rework the PowerVR Rogue GPU binding to use an explicit, per variant
> style for defining power domain properties and add support for the
> T-HEAD TH1520 SoC's GPU.
>
> To improve clarity and precision, the binding is refactored so that
> power domain items are listed explicitly for each variant [1]. The
> previous method relied on an implicit, positional mapping between the
> `power-domains` and `power-domain-names` properties. This change
> replaces the generic rules with self contained if/then blocks for each
> GPU variant, making the relationship between power domains and their
> names explicit and unambiguous.
>
> The generic if block for img,img-rogue, which previously required
> power-domains and power-domain-names for all variants, is removed.
> Instead, each specific GPU variant now defines its own power domain
> requirements within a self-contained if/then block, making the schema
> more explicit.
>
> This new structure is then used to add support for the
> `thead,th1520-gpu`. While its BXM-4-64 IP has two conceptual power
> domains, the TH1520 SoC integrates them behind a single power gate. The
> new binding models this with a specific rule that enforces a single
> `power-domains` entry and disallows the `power-domain-names` property.
>
> Link: https://lore.kernel.org/all/4d79c8dd-c5fb-442c-ac65-37e7176b0cdd@linaro.org/ [1]
>
> Signed-off-by: Michal Wilczynski <m.wilczynski@samsung.com>
I'm happy with this version for the power domains (and I see Krzysztof
agrees with his R-b, thanks!), but somewhere in the chaos we've lost the
minItems: 3 constraint for clock{s,-names}. Would you mind adding that
as a conditional on thead,th1520-gpu?
Cheers,
Matt
> ---
> .../devicetree/bindings/gpu/img,powervr-rogue.yaml | 33 ++++++++++++++++------
> 1 file changed, 25 insertions(+), 8 deletions(-)
>
> diff --git a/Documentation/devicetree/bindings/gpu/img,powervr-rogue.yaml b/Documentation/devicetree/bindings/gpu/img,powervr-rogue.yaml
> index 4450e2e73b3ccf74d29f0e31e2e6687d7cbe5d65..dc53ed59331bedee2d7438288f482870714bbf46 100644
> --- a/Documentation/devicetree/bindings/gpu/img,powervr-rogue.yaml
> +++ b/Documentation/devicetree/bindings/gpu/img,powervr-rogue.yaml
> @@ -21,6 +21,11 @@ properties:
> # work with newer dts.
> - const: img,img-axe
> - const: img,img-rogue
> + - items:
> + - enum:
> + - thead,th1520-gpu
> + - const: img,img-bxm-4-64
> + - const: img,img-rogue
> - items:
> - enum:
> - ti,j721s2-gpu
> @@ -77,14 +82,18 @@ required:
> additionalProperties: false
>
> allOf:
> - # Constraints added alongside the new compatible strings that would otherwise
> - # create an ABI break.
> - if:
> properties:
> compatible:
> contains:
> - const: img,img-rogue
> + const: img,img-axe-1-16m
> then:
> + properties:
> + power-domains:
> + items:
> + - description: Power domain A
> + power-domain-names:
> + maxItems: 1
> required:
> - power-domains
> - power-domain-names
> @@ -93,13 +102,16 @@ allOf:
> properties:
> compatible:
> contains:
> - const: img,img-axe-1-16m
> + const: thead,th1520-gpu
> then:
> properties:
> power-domains:
> - maxItems: 1
> - power-domain-names:
> - maxItems: 1
> + items:
> + - description: The single, unified power domain for the GPU on the
> + TH1520 SoC, integrating all internal IP power domains.
> + power-domain-names: false
> + required:
> + - power-domains
>
> - if:
> properties:
> @@ -109,9 +121,14 @@ allOf:
> then:
> properties:
> power-domains:
> - minItems: 2
> + items:
> + - description: Power domain A
> + - description: Power domain B
> power-domain-names:
> minItems: 2
> + required:
> + - power-domains
> + - power-domain-names
>
> - if:
> properties:
>
--
Matt Coster
E: matt.coster@imgtec.com
© 2016 - 2026 Red Hat, Inc.