diff mbox series

arm64: dts: imx8mm: Add GPU nodes for 2D and 3D core

Message ID 20200930155418.535857-1-l.stach@pengutronix.de (mailing list archive)
State New, archived
Headers show
Series arm64: dts: imx8mm: Add GPU nodes for 2D and 3D core | expand

Commit Message

Lucas Stach Sept. 30, 2020, 3:54 p.m. UTC
From: Frieder Schrempf <frieder.schrempf@kontron.de>

According to the documents, the i.MX8M-Mini features a GC320 and a
GCNanoUltra GPU core. Etnaviv detects them as:

	etnaviv-gpu 38000000.gpu: model: GC600, revision: 4653
	etnaviv-gpu 38008000.gpu: model: GC520, revision: 5341

This seems to work fine more or less without any changes to the HWDB,
which still might be needed in the future to correct some features,
etc.

[lst]: Added power domains and switched clock assignments to the
       new clock defines used for the composite clocks, instead of
       relying on the backwards compat defines.

Signed-off-by: Frieder Schrempf <frieder.schrempf@kontron.de>
Signed-off-by: Lucas Stach <l.stach@pengutronix.de>
---
This patch depends on the power domain support for i.MX8MM, as the
GPUs are in a invalid state (which might lead to full system lockups)
if they are not properly powered on via the power sequencing
implemented in the GPCv2 driver.
---
 arch/arm64/boot/dts/freescale/imx8mm.dtsi | 39 +++++++++++++++++++++++
 1 file changed, 39 insertions(+)

Comments

Marek Vasut Sept. 30, 2020, 4:03 p.m. UTC | #1
On 9/30/20 5:54 PM, Lucas Stach wrote:
> From: Frieder Schrempf <frieder.schrempf@kontron.de>
> 
> According to the documents, the i.MX8M-Mini features a GC320 and a
> GCNanoUltra GPU core. Etnaviv detects them as:
> 
> 	etnaviv-gpu 38000000.gpu: model: GC600, revision: 4653
> 	etnaviv-gpu 38008000.gpu: model: GC520, revision: 5341
> 
> This seems to work fine more or less without any changes to the HWDB,
> which still might be needed in the future to correct some features,
> etc.
> 
> [lst]: Added power domains and switched clock assignments to the
>        new clock defines used for the composite clocks, instead of
>        relying on the backwards compat defines.
> 
> Signed-off-by: Frieder Schrempf <frieder.schrempf@kontron.de>
> Signed-off-by: Lucas Stach <l.stach@pengutronix.de>
> ---
> This patch depends on the power domain support for i.MX8MM, as the
> GPUs are in a invalid state (which might lead to full system lockups)
> if they are not properly powered on via the power sequencing
> implemented in the GPCv2 driver.

And that means the three power domains in the MX8MM can not really be
used, because there is only one reset for all the GPUs, sigh.

Reviewed-by: Marek Vasut <marex@denx.de>
Krzysztof Kozlowski Oct. 1, 2020, 8:53 a.m. UTC | #2
On Wed, Sep 30, 2020 at 05:54:18PM +0200, Lucas Stach wrote:
> From: Frieder Schrempf <frieder.schrempf@kontron.de>
> 
> According to the documents, the i.MX8M-Mini features a GC320 and a
> GCNanoUltra GPU core. Etnaviv detects them as:
> 
> 	etnaviv-gpu 38000000.gpu: model: GC600, revision: 4653
> 	etnaviv-gpu 38008000.gpu: model: GC520, revision: 5341
> 
> This seems to work fine more or less without any changes to the HWDB,
> which still might be needed in the future to correct some features,
> etc.
> 
> [lst]: Added power domains and switched clock assignments to the
>        new clock defines used for the composite clocks, instead of
>        relying on the backwards compat defines.
> 
> Signed-off-by: Frieder Schrempf <frieder.schrempf@kontron.de>
> Signed-off-by: Lucas Stach <l.stach@pengutronix.de>
> ---
> This patch depends on the power domain support for i.MX8MM, as the
> GPUs are in a invalid state (which might lead to full system lockups)
> if they are not properly powered on via the power sequencing
> implemented in the GPCv2 driver.
> ---
>  arch/arm64/boot/dts/freescale/imx8mm.dtsi | 39 +++++++++++++++++++++++
>  1 file changed, 39 insertions(+)
> 

Acked-by: Krzysztof Kozlowski <krzk@kernel.org>

Best regards,
Krzysztof
diff mbox series

Patch

diff --git a/arch/arm64/boot/dts/freescale/imx8mm.dtsi b/arch/arm64/boot/dts/freescale/imx8mm.dtsi
index ab379d02d4e4..2f5812763315 100644
--- a/arch/arm64/boot/dts/freescale/imx8mm.dtsi
+++ b/arch/arm64/boot/dts/freescale/imx8mm.dtsi
@@ -1012,6 +1012,45 @@ 
 			status = "disabled";
 		};
 
+		gpu_3d: gpu@38000000 {
+			compatible = "vivante,gc";
+			reg = <0x38000000 0x8000>;
+			interrupts = <GIC_SPI 3 IRQ_TYPE_LEVEL_HIGH>;
+			clocks = <&clk IMX8MM_CLK_GPU_AHB>,
+			         <&clk IMX8MM_CLK_GPU_BUS_ROOT>,
+			         <&clk IMX8MM_CLK_GPU3D_ROOT>,
+			         <&clk IMX8MM_CLK_GPU3D_ROOT>;
+			clock-names = "reg", "bus", "core", "shader";
+			assigned-clocks = <&clk IMX8MM_CLK_GPU3D_CORE>,
+			                  <&clk IMX8MM_CLK_GPU_AXI>,
+			                  <&clk IMX8MM_CLK_GPU_AHB>,
+			                  <&clk IMX8MM_GPU_PLL_OUT>;
+			assigned-clock-parents = <&clk IMX8MM_GPU_PLL_OUT>,
+			                         <&clk IMX8MM_SYS_PLL1_800M>,
+			                         <&clk IMX8MM_SYS_PLL1_800M>;
+			assigned-clock-rates = <0>, <0>,<400000000>,<1000000000>;
+			power-domains = <&pgc_gpu>;
+		};
+
+		gpu_2d: gpu@38008000 {
+			compatible = "vivante,gc";
+			reg = <0x38008000 0x8000>;
+			interrupts = <GIC_SPI 25 IRQ_TYPE_LEVEL_HIGH>;
+			clocks = <&clk IMX8MM_CLK_GPU_AHB>,
+			         <&clk IMX8MM_CLK_GPU_BUS_ROOT>,
+			         <&clk IMX8MM_CLK_GPU2D_ROOT>;
+			clock-names = "reg", "bus", "core";
+			assigned-clocks = <&clk IMX8MM_CLK_GPU2D_CORE>,
+			                  <&clk IMX8MM_CLK_GPU_AXI>,
+			                  <&clk IMX8MM_CLK_GPU_AHB>,
+			                  <&clk IMX8MM_GPU_PLL_OUT>;
+			assigned-clock-parents = <&clk IMX8MM_GPU_PLL_OUT>,
+			                         <&clk IMX8MM_SYS_PLL1_800M>,
+			                         <&clk IMX8MM_SYS_PLL1_800M>;
+			assigned-clock-rates = <0>, <0>,<400000000>,<1000000000>;
+			power-domains = <&pgc_gpu>;
+		};
+
 		gic: interrupt-controller@38800000 {
 			compatible = "arm,gic-v3";
 			reg = <0x38800000 0x10000>, /* GIC Dist */