Split shared schema into per-gen and group adrenos by clocks used. Signed-off-by: Adam Skladowski <a39.skl@xxxxxxxxx> --- .../devicetree/bindings/display/msm/gpu.yaml | 317 ++---------------- .../bindings/display/msm/qcom,adreno-306.yaml | 115 +++++++ .../bindings/display/msm/qcom,adreno-330.yaml | 111 ++++++ .../bindings/display/msm/qcom,adreno-405.yaml | 135 ++++++++ .../bindings/display/msm/qcom,adreno-506.yaml | 184 ++++++++++ .../bindings/display/msm/qcom,adreno-530.yaml | 161 +++++++++ .../bindings/display/msm/qcom,adreno-540.yaml | 154 +++++++++ .../bindings/display/msm/qcom,adreno-6xx.yaml | 160 +++++++++ .../display/msm/qcom,adreno-common.yaml | 112 +++++++ 9 files changed, 1157 insertions(+), 292 deletions(-) create mode 100644 Documentation/devicetree/bindings/display/msm/qcom,adreno-306.yaml create mode 100644 Documentation/devicetree/bindings/display/msm/qcom,adreno-330.yaml create mode 100644 Documentation/devicetree/bindings/display/msm/qcom,adreno-405.yaml create mode 100644 Documentation/devicetree/bindings/display/msm/qcom,adreno-506.yaml create mode 100644 Documentation/devicetree/bindings/display/msm/qcom,adreno-530.yaml create mode 100644 Documentation/devicetree/bindings/display/msm/qcom,adreno-540.yaml create mode 100644 Documentation/devicetree/bindings/display/msm/qcom,adreno-6xx.yaml create mode 100644 Documentation/devicetree/bindings/display/msm/qcom,adreno-common.yaml diff --git a/Documentation/devicetree/bindings/display/msm/gpu.yaml b/Documentation/devicetree/bindings/display/msm/gpu.yaml index 40b5c6bd11f8..be29d85e597c 100644 --- a/Documentation/devicetree/bindings/display/msm/gpu.yaml +++ b/Documentation/devicetree/bindings/display/msm/gpu.yaml @@ -5,7 +5,7 @@ $id: http://devicetree.org/schemas/display/msm/gpu.yaml# $schema: http://devicetree.org/meta-schemas/core.yaml# -title: Adreno or Snapdragon GPUs +title: Imageon 200 GPU maintainers: - Rob Clark <robdclark@xxxxxxxxx> @@ -13,18 +13,6 @@ maintainers: properties: compatible: oneOf: - - description: | - The driver is parsing the compat string for Adreno to - figure out the chip-id. - items: - - pattern: '^qcom,adreno-[0-9a-f][0-9a-f][0-9a-f][0-9a-f][0-9a-f][0-9a-f][0-9a-f][0-9a-f]$' - - const: qcom,adreno - - description: | - The driver is parsing the compat string for Adreno to - figure out the gpu-id and patch level. - items: - - pattern: '^qcom,adreno-[3-7][0-9][0-9]\.[0-9]+$' - - const: qcom,adreno - description: | The driver is parsing the compat string for Imageon to figure out the gpu-id and patch level. @@ -32,88 +20,31 @@ properties: - pattern: '^amd,imageon-200\.[0-1]$' - const: amd,imageon - clocks: true + clocks: + items: + - description: GPU Core clock + - description: GPU Memory Interface clock - clock-names: true + clock-names: + items: + - const: core_clk + - const: mem_iface_clk reg: - minItems: 1 - maxItems: 3 + items: + - description: base address of GPU device reg-names: - minItems: 1 - maxItems: 3 + items: + - const: kgsl_3d0_reg_memory interrupts: - maxItems: 1 - - interrupt-names: - maxItems: 1 - - interconnects: - minItems: 1 - maxItems: 2 - - interconnect-names: - minItems: 1 items: - - const: gfx-mem - - const: ocmem + - description: interrupt of GPU device - iommus: - minItems: 1 - maxItems: 64 - - sram: - $ref: /schemas/types.yaml#/definitions/phandle-array - minItems: 1 - maxItems: 4 + interrupt-names: items: - maxItems: 1 - description: | - phandles to one or more reserved on-chip SRAM regions. - phandle to the On Chip Memory (OCMEM) that's present on some a3xx and - a4xx Snapdragon SoCs. See - Documentation/devicetree/bindings/sram/qcom,ocmem.yaml - - operating-points-v2: true - opp-table: - type: object - - power-domains: - maxItems: 1 - - zap-shader: - type: object - additionalProperties: false - description: | - For a5xx and a6xx devices this node contains a memory-region that - points to reserved memory to store the zap shader that can be used to - help bring the GPU out of secure mode. - properties: - memory-region: - maxItems: 1 - - firmware-name: - description: | - Default name of the firmware to load to the remote processor. - - "#cooling-cells": - const: 2 - - nvmem-cell-names: - maxItems: 1 - - nvmem-cells: - description: efuse registers - maxItems: 1 - - qcom,gmu: - $ref: /schemas/types.yaml#/definitions/phandle - description: | - For GMU attached devices a phandle to the GMU device that will - control the power for the GPU. - + - const: kgsl_3d0_irq required: - compatible @@ -122,222 +53,24 @@ required: additionalProperties: false -allOf: - - if: - properties: - compatible: - contains: - pattern: '^qcom,adreno-[3-5][0-9][0-9]\.[0-9]+$' - - then: - properties: - clocks: - minItems: 2 - maxItems: 7 - - clock-names: - items: - anyOf: - - const: core - description: GPU Core clock - - const: iface - description: GPU Interface clock - - const: mem - description: GPU Memory clock - - const: mem_iface - description: GPU Memory Interface clock - - const: alt_mem_iface - description: GPU Alternative Memory Interface clock - - const: gfx3d - description: GPU 3D engine clock - - const: rbbmtimer - description: GPU RBBM Timer for Adreno 5xx series - - const: rbcpr - description: GPU RB Core Power Reduction clock - minItems: 2 - maxItems: 7 - - required: - - clocks - - clock-names - - - if: - properties: - compatible: - contains: - enum: - - qcom,adreno-610.0 - - qcom,adreno-619.1 - then: - properties: - clocks: - minItems: 6 - maxItems: 6 - - clock-names: - items: - - const: core - description: GPU Core clock - - const: iface - description: GPU Interface clock - - const: mem_iface - description: GPU Memory Interface clock - - const: alt_mem_iface - description: GPU Alternative Memory Interface clock - - const: gmu - description: CX GMU clock - - const: xo - description: GPUCC clocksource clock - - reg-names: - minItems: 1 - items: - - const: kgsl_3d0_reg_memory - - const: cx_dbgc - - required: - - clocks - - clock-names - else: - if: - properties: - compatible: - contains: - pattern: '^qcom,adreno-[67][0-9][0-9]\.[0-9]+$' - - then: # Starting with A6xx, the clocks are usually defined in the GMU node - properties: - clocks: false - clock-names: false - - reg-names: - minItems: 1 - items: - - const: kgsl_3d0_reg_memory - - const: cx_mem - - const: cx_dbgc - examples: - | - // Example a3xx/4xx: + // Example imageon-200: - #include <dt-bindings/clock/qcom,mmcc-msm8974.h> - #include <dt-bindings/clock/qcom,rpmcc.h> + #include <dt-bindings/clock/imx5-clock.h> #include <dt-bindings/interrupt-controller/irq.h> - #include <dt-bindings/interrupt-controller/arm-gic.h> - gpu: gpu@fdb00000 { - compatible = "qcom,adreno-330.2", "qcom,adreno"; + gpu: gpu@30000000 { + compatible = "amd,imageon-200.0", "amd,imageon"; - reg = <0xfdb00000 0x10000>; + reg = <0x30000000 0x20000>; reg-names = "kgsl_3d0_reg_memory"; - clock-names = "core", "iface", "mem_iface"; - clocks = <&mmcc OXILI_GFX3D_CLK>, - <&mmcc OXILICX_AHB_CLK>, - <&mmcc OXILICX_AXI_CLK>; + clock-names = "core_clk", "mem_iface_clk"; + clocks = <&clks IMX5_CLK_GPU3D_GATE>, + <&clks IMX5_CLK_GARB_GATE>; - interrupts = <GIC_SPI 33 IRQ_TYPE_LEVEL_HIGH>; + interrupts = <12>; interrupt-names = "kgsl_3d0_irq"; - - sram = <&gpu_sram>; - power-domains = <&mmcc OXILICX_GDSC>; - operating-points-v2 = <&gpu_opp_table>; - iommus = <&gpu_iommu 0>; - #cooling-cells = <2>; - }; - - ocmem@fdd00000 { - compatible = "qcom,msm8974-ocmem"; - - reg = <0xfdd00000 0x2000>, - <0xfec00000 0x180000>; - reg-names = "ctrl", "mem"; - - clocks = <&rpmcc RPM_SMD_OCMEMGX_CLK>, - <&mmcc OCMEMCX_OCMEMNOC_CLK>; - clock-names = "core", "iface"; - - #address-cells = <1>; - #size-cells = <1>; - ranges = <0 0xfec00000 0x100000>; - - gpu_sram: gpu-sram@0 { - reg = <0x0 0x100000>; - }; - }; - - | - - // Example a6xx (with GMU): - - #include <dt-bindings/clock/qcom,gpucc-sdm845.h> - #include <dt-bindings/clock/qcom,gcc-sdm845.h> - #include <dt-bindings/power/qcom-rpmpd.h> - #include <dt-bindings/interrupt-controller/irq.h> - #include <dt-bindings/interrupt-controller/arm-gic.h> - #include <dt-bindings/interconnect/qcom,sdm845.h> - - reserved-memory { - #address-cells = <2>; - #size-cells = <2>; - - zap_shader_region: gpu@8f200000 { - compatible = "shared-dma-pool"; - reg = <0x0 0x90b00000 0x0 0xa00000>; - no-map; - }; - }; - - gpu@5000000 { - compatible = "qcom,adreno-630.2", "qcom,adreno"; - - reg = <0x5000000 0x40000>, <0x509e000 0x10>; - reg-names = "kgsl_3d0_reg_memory", "cx_mem"; - - #cooling-cells = <2>; - - interrupts = <GIC_SPI 300 IRQ_TYPE_LEVEL_HIGH>; - - iommus = <&adreno_smmu 0>; - - operating-points-v2 = <&gpu_opp_table>; - - interconnects = <&rsc_hlos MASTER_GFX3D &rsc_hlos SLAVE_EBI1>; - interconnect-names = "gfx-mem"; - - qcom,gmu = <&gmu>; - - gpu_opp_table: opp-table { - compatible = "operating-points-v2"; - - opp-430000000 { - opp-hz = /bits/ 64 <430000000>; - opp-level = <RPMH_REGULATOR_LEVEL_SVS_L1>; - opp-peak-kBps = <5412000>; - }; - - opp-355000000 { - opp-hz = /bits/ 64 <355000000>; - opp-level = <RPMH_REGULATOR_LEVEL_SVS>; - opp-peak-kBps = <3072000>; - }; - - opp-267000000 { - opp-hz = /bits/ 64 <267000000>; - opp-level = <RPMH_REGULATOR_LEVEL_LOW_SVS>; - opp-peak-kBps = <3072000>; - }; - - opp-180000000 { - opp-hz = /bits/ 64 <180000000>; - opp-level = <RPMH_REGULATOR_LEVEL_MIN_SVS>; - opp-peak-kBps = <1804000>; - }; - }; - - zap-shader { - memory-region = <&zap_shader_region>; - firmware-name = "qcom/LENOVO/81JL/qcdxkmsuc850.mbn"; - }; }; diff --git a/Documentation/devicetree/bindings/display/msm/qcom,adreno-306.yaml b/Documentation/devicetree/bindings/display/msm/qcom,adreno-306.yaml new file mode 100644 index 000000000000..2d2b86edaed0 --- /dev/null +++ b/Documentation/devicetree/bindings/display/msm/qcom,adreno-306.yaml @@ -0,0 +1,115 @@ +# SPDX-License-Identifier: GPL-2.0-only OR BSD-2-Clause +%YAML 1.2 +--- +$id: http://devicetree.org/schemas/display/msm/qcom,adreno-306.yaml# +$schema: http://devicetree.org/meta-schemas/core.yaml# + +title: Qualcomm Adreno 3xx GPU + +maintainers: + - Rob Clark <robdclark@xxxxxxxxx> + +description: + Device tree bindings for Adreno 306 GPU. + +select: + properties: + compatible: + contains: + enum: + - qcom,adreno-306.0 + required: + - compatible + +$ref: /schemas/display/msm/qcom,adreno-common.yaml# + +properties: + compatible: + items: + - enum: + - qcom,adreno-306.0 + - const: qcom,adreno + reg: + items: + - description: base address of GPU device + + reg-names: + items: + - const: kgsl_3d0_reg_memory + + clocks: + items: + - description: GPU Core clock + - description: GPU Interface clock + - description: GPU Memory clock + - description: GPU Memory Interface clock + - description: GPU Memory Interface clock + - description: GPU 3D engine clock + + clock-names: + items: + - const: core + - const: iface + - const: mem + - const: mem_iface + - const: alt_mem_iface + - const: gfx3d + +required: + - clocks + - clock-names + - power-domains + +unevaluatedProperties: false + +examples: + - | + // Example a306 : + + #include <dt-bindings/clock/qcom,gcc-msm8916.h> + #include <dt-bindings/power/qcom-rpmpd.h> + #include <dt-bindings/interrupt-controller/irq.h> + #include <dt-bindings/interrupt-controller/arm-gic.h> + + gpu@1c00000 { + compatible = "qcom,adreno-306.0", "qcom,adreno"; + + reg = <0x01c00000 0x20000>; + reg-names = "kgsl_3d0_reg_memory"; + + interrupts = <GIC_SPI 33 IRQ_TYPE_LEVEL_HIGH>; + + clocks = <&gcc GCC_OXILI_GFX3D_CLK>, + <&gcc GCC_OXILI_AHB_CLK>, + <&gcc GCC_OXILI_GMEM_CLK>, + <&gcc GCC_BIMC_GFX_CLK>, + <&gcc GCC_BIMC_GPU_CLK>, + <&gcc GFX3D_CLK_SRC>; + + clock-names = "core", + "iface", + "mem", + "mem_iface", + "alt_mem_iface", + "gfx3d"; + + power-domains = <&gcc OXILI_GDSC>; + iommus = <&gpu_iommu 1>, <&gpu_iommu 2>; + + operating-points-v2 = <&gpu_opp_table>; + + #cooling-cells = <2>; + + gpu_opp_table: opp-table { + compatible = "operating-points-v2"; + + opp-19200000 { + opp-hz = /bits/ 64 <19200000>; + }; + + opp-400000000 { + opp-hz = /bits/ 64 <400000000>; + opp-supported-hw = <0x1ff>; + }; + }; + }; diff --git a/Documentation/devicetree/bindings/display/msm/qcom,adreno-330.yaml b/Documentation/devicetree/bindings/display/msm/qcom,adreno-330.yaml new file mode 100644 index 000000000000..46ad110571cd --- /dev/null +++ b/Documentation/devicetree/bindings/display/msm/qcom,adreno-330.yaml @@ -0,0 +1,111 @@ +# SPDX-License-Identifier: GPL-2.0-only OR BSD-2-Clause +%YAML 1.2 +--- +$id: http://devicetree.org/schemas/display/msm/qcom,adreno-330.yaml# +$schema: http://devicetree.org/meta-schemas/core.yaml# + +title: Qualcomm Adreno 3xx GPU + +maintainers: + - Rob Clark <robdclark@xxxxxxxxx> + +description: + Device tree bindings for Adreno 330 GPU. + +select: + properties: + compatible: + contains: + enum: + - qcom,adreno-305.18 + - qcom,adreno-330.1 + required: + - compatible + +$ref: /schemas/display/msm/qcom,adreno-common.yaml# + +properties: + compatible: + items: + - enum: + - qcom,adreno-305.18 + - qcom,adreno-330.1 + - const: qcom,adreno + reg: + items: + - description: base address of GPU device + + reg-names: + items: + - const: kgsl_3d0_reg_memory + + clocks: + items: + - description: GPU Core clock + - description: GPU Interface clock + - description: GPU Memory Interface clock + + clock-names: + items: + - const: core + - const: iface + - const: mem_iface + +required: + - clocks + - clock-names + - power-domains + +unevaluatedProperties: false + +examples: + - | + // Example a306 : + + #include <dt-bindings/clock/qcom,gcc-msm8974.h> + #include <dt-bindings/clock/qcom,mmcc-msm8974.h> + #include <dt-bindings/power/qcom-rpmpd.h> + #include <dt-bindings/interrupt-controller/irq.h> + #include <dt-bindings/interrupt-controller/arm-gic.h> + + gpu@fdb00000 { + compatible = "qcom,adreno-330.1", "qcom,adreno"; + + reg = <0xfdb00000 0x10000>; + reg-names = "kgsl_3d0_reg_memory"; + + interrupts = <GIC_SPI 33 IRQ_TYPE_LEVEL_HIGH>; + interrupt-names = "kgsl_3d0_irq"; + + clocks = <&mmcc OXILI_GFX3D_CLK>, + <&mmcc OXILICX_AHB_CLK>, + <&mmcc OXILICX_AXI_CLK>; + + clock-names = "core", + "iface", + "mem_iface"; + + power-domains = <&mmcc OXILICX_GDSC>; + iommus = <&gpu_iommu 0>; + + sram = <&gmu_sram>; + operating-points-v2 = <&gpu_opp_table>; + + #cooling-cells = <2>; + + gpu_opp_table: opp-table { + compatible = "operating-points-v2"; + + opp-27000000 { + opp-hz = /bits/ 64 <27000000>; + }; + + opp-200000000 { + opp-hz = /bits/ 64 <200000000>; + }; + + opp-320000000 { + opp-hz = /bits/ 64 <320000000>; + }; + }; + }; diff --git a/Documentation/devicetree/bindings/display/msm/qcom,adreno-405.yaml b/Documentation/devicetree/bindings/display/msm/qcom,adreno-405.yaml new file mode 100644 index 000000000000..d3bcf1dafe95 --- /dev/null +++ b/Documentation/devicetree/bindings/display/msm/qcom,adreno-405.yaml @@ -0,0 +1,135 @@ +# SPDX-License-Identifier: GPL-2.0-only OR BSD-2-Clause +%YAML 1.2 +--- +$id: http://devicetree.org/schemas/display/msm/qcom,adreno-405.yaml# +$schema: http://devicetree.org/meta-schemas/core.yaml# + +title: Qualcomm Adreno 4xx GPU + +maintainers: + - Rob Clark <robdclark@xxxxxxxxx> + +description: + Device tree bindings for Adreno 405 GPU. + +select: + properties: + compatible: + contains: + enum: + - qcom,adreno-405.0 + required: + - compatible + +$ref: /schemas/display/msm/qcom,adreno-common.yaml# + +properties: + compatible: + items: + - enum: + - qcom,adreno-405.0 + - const: qcom,adreno + reg: + items: + - description: base address of GPU device + + reg-names: + items: + - const: kgsl_3d0_reg_memory + + clocks: + items: + - description: GPU Core clock + - description: GPU Interface clock + - description: GPU Memory clock + - description: GPU Memory Interface clock + - description: GPU Memory Interface clock + - description: GPU 3D engine clock + - description: GPU RBBM Timer for Adreno 4xx series + + clock-names: + items: + - const: core + - const: iface + - const: mem + - const: mem_iface + - const: alt_mem_iface + - const: gfx3d + - const: rbbmtimer + +required: + - clocks + - clock-names + - power-domains + +unevaluatedProperties: false + +examples: + - | + // Example a405 : + + #include <dt-bindings/clock/qcom,gcc-msm8939.h> + #include <dt-bindings/power/qcom-rpmpd.h> + #include <dt-bindings/interrupt-controller/irq.h> + #include <dt-bindings/interrupt-controller/arm-gic.h> + + gpu@1c00000 { + compatible = "qcom,adreno-405.0", "qcom,adreno"; + + reg = <0x01c00000 0x40000>; + reg-names = "kgsl_3d0_reg_memory"; + + interrupts = <GIC_SPI 33 IRQ_TYPE_LEVEL_HIGH>; + + clocks = <&gcc GCC_OXILI_GFX3D_CLK>, + <&gcc GCC_OXILI_AHB_CLK>, + <&gcc GCC_OXILI_GMEM_CLK>, + <&gcc GCC_BIMC_GFX_CLK>, + <&gcc GCC_BIMC_GPU_CLK>, + <&gcc GFX3D_CLK_SRC>, + <&gcc GCC_OXILI_TIMER_CLK>; + + clock-names = "core", + "iface", + "mem", + "mem_iface", + "alt_mem_iface", + "gfx3d", + "rbbmtimer"; + + power-domains = <&gcc OXILI_GDSC>; + iommus = <&gpu_iommu 1>, <&gpu_iommu 2>; + + operating-points-v2 = <&gpu_opp_table>; + + #cooling-cells = <2>; + + gpu_opp_table: opp-table { + compatible = "operating-points-v2"; + + opp-19200000 { + opp-hz = /bits/ 64 <19200000>; + }; + + opp-220000000 { + opp-hz = /bits/ 64 <220000000>; + }; + + opp-400000000 { + opp-hz = /bits/ 64 <400000000>; + }; + + opp-465000000 { + opp-hz = /bits/ 64 <465000000>; + }; + + opp-550000000 { + opp-hz = /bits/ 64 <550000000>; + }; + + opp-600000000 { + opp-hz = /bits/ 64 <600000000>; + }; + }; + }; + diff --git a/Documentation/devicetree/bindings/display/msm/qcom,adreno-506.yaml b/Documentation/devicetree/bindings/display/msm/qcom,adreno-506.yaml new file mode 100644 index 000000000000..58e43a3c1c6d --- /dev/null +++ b/Documentation/devicetree/bindings/display/msm/qcom,adreno-506.yaml @@ -0,0 +1,184 @@ +# SPDX-License-Identifier: GPL-2.0-only OR BSD-2-Clause +%YAML 1.2 +--- +$id: http://devicetree.org/schemas/display/msm/qcom,adreno-506.yaml# +$schema: http://devicetree.org/meta-schemas/core.yaml# + +title: Qualcomm Adreno 506 GPU + +maintainers: + - Rob Clark <robdclark@xxxxxxxxx> + +description: + Device tree bindings for Adreno 506 GPU. + +select: + properties: + compatible: + contains: + enum: + - qcom,adreno-504.0 + - qcom,adreno-505.0 + - qcom,adreno-506.0 + - qcom,adreno-510.0 + required: + - compatible + +$ref: /schemas/display/msm/qcom,adreno-common.yaml# + +properties: + compatible: + items: + - enum: + - qcom,adreno-504.0 + - qcom,adreno-505.0 + - qcom,adreno-506.0 + - qcom,adreno-510.0 + - const: qcom,adreno + + reg: + items: + - description: base address of GPU device + + reg-names: + items: + - const: kgsl_3d0_reg_memory + + clocks: + items: + - description: GPU Always-On clock + - description: GPU Core clock + - description: GPU Interface clock + - description: GPU Memory clock + - description: GPU Memory Interface clock + - description: GPU RBBM Timer for Adreno 5xx series + + clock-names: + items: + - const: alwayson + - const: core + - const: iface + - const: mem + - const: mem_iface + - const: rbbmtimer + +required: + - clocks + - clock-names + - power-domains + +unevaluatedProperties: false + +examples: + - | + // Example a506 : + + #include <dt-bindings/clock/qcom,gcc-msm8953.h> + #include <dt-bindings/power/qcom-rpmpd.h> + #include <dt-bindings/interrupt-controller/irq.h> + #include <dt-bindings/interrupt-controller/arm-gic.h> + + reserved-memory { + #address-cells = <2>; + #size-cells = <2>; + + zap_shader_region: memory@81800000 { + compatible = "shared-dma-pool"; + reg = <0x0 0x81800000 0x0 0x2000>; + no-map; + }; + }; + + + gpu@1c00000 { + compatible = "qcom,adreno-506.0", "qcom,adreno"; + + reg = <0x01c00000 0x40000>; + reg-names = "kgsl_3d0_reg_memory"; + + interrupts = <GIC_SPI 33 IRQ_TYPE_LEVEL_HIGH>; + + clocks = <&gcc GCC_OXILI_AON_CLK>, + <&gcc GCC_OXILI_GFX3D_CLK>, + <&gcc GCC_OXILI_AHB_CLK>, + <&gcc GCC_BIMC_GFX_CLK>, + <&gcc GCC_BIMC_GPU_CLK>, + <&gcc GCC_OXILI_TIMER_CLK>; + + clock-names = "alwayson", + "core", + "iface", + "mem", + "mem_iface", + "rbbmtimer"; + + power-domains = <&gcc OXILI_GX_GDSC>; + iommus = <&gpu_iommu 0>; + + nvmem-cells = <&speedbin_efuse>; + nvmem-cell-names = "speed_bin"; + + operating-points-v2 = <&gpu_opp_table>; + + #cooling-cells = <2>; + + gpu_opp_table: opp-table { + compatible = "operating-points-v2"; + + opp-200000000 { + opp-hz = /bits/ 64 <200000000>; + opp-supported-hw = <0x1ff>; + }; + + opp-266670000 { + opp-hz = /bits/ 64 <266670000>; + opp-supported-hw = <0x1ff>; + }; + + opp-320000000 { + opp-hz = /bits/ 64 <320000000>; + opp-supported-hw = <0x1ff>; + }; + + opp-400000000 { + opp-hz = /bits/ 64 <400000000>; + opp-supported-hw = <0x1ff>; + }; + + opp-510000000 { + opp-hz = /bits/ 64 <510000000>; + opp-supported-hw = <0x1ff>; + }; + + opp-560000000 { + opp-hz = /bits/ 64 <560000000>; + opp-supported-hw = <0x1ff>; + }; + + opp-600000000 { + opp-hz = /bits/ 64 <600000000>; + opp-supported-hw = <0x1ff>; + }; + + opp-650000000 { + opp-hz = /bits/ 64 <650000000>; + opp-supported-hw = <0x185>; + }; + + opp-685000000 { + opp-hz = /bits/ 64 <685000000>; + opp-supported-hw = <0x100>; + }; + + opp-725000000 { + opp-hz = /bits/ 64 <725000000>; + opp-supported-hw = <0x100>; + }; + }; + + zap-shader { + memory-region = <&zap_shader_region>; + firmware-name = "a506_zap.mdt"; + }; + }; + diff --git a/Documentation/devicetree/bindings/display/msm/qcom,adreno-530.yaml b/Documentation/devicetree/bindings/display/msm/qcom,adreno-530.yaml new file mode 100644 index 000000000000..6d31697782f2 --- /dev/null +++ b/Documentation/devicetree/bindings/display/msm/qcom,adreno-530.yaml @@ -0,0 +1,161 @@ +# SPDX-License-Identifier: GPL-2.0-only OR BSD-2-Clause +%YAML 1.2 +--- +$id: http://devicetree.org/schemas/display/msm/qcom,adreno-530.yaml# +$schema: http://devicetree.org/meta-schemas/core.yaml# + +title: Qualcomm Adreno 530 GPU + +maintainers: + - Rob Clark <robdclark@xxxxxxxxx> + +description: + Device tree bindings for Adreno 530 GPU. + +select: + properties: + compatible: + contains: + enum: + - qcom,adreno-530.2 + required: + - compatible + +$ref: /schemas/display/msm/qcom,adreno-common.yaml# + +properties: + compatible: + items: + - enum: + - qcom,adreno-530.2 + - const: qcom,adreno + reg: + items: + - description: base address of GPU device + + reg-names: + items: + - const: kgsl_3d0_reg_memory + + clocks: + items: + - description: GPU Core clock + - description: GPU Interface clock + - description: GPU RBBM Timer for Adreno 5xx series + - description: GPU Memory clock + - description: GPU Memory Interface clock + + clock-names: + items: + - const: core + - const: iface + - const: rbbmtimer + - const: mem + - const: mem_iface + + +required: + - clocks + - clock-names + - power-domains + +unevaluatedProperties: false + +examples: + - | + // Example a530 : + + #include <dt-bindings/clock/qcom,gcc-msm8996.h> + #include <dt-bindings/clock/qcom,mmcc-msm8996.h> + #include <dt-bindings/power/qcom-rpmpd.h> + #include <dt-bindings/interrupt-controller/irq.h> + #include <dt-bindings/interrupt-controller/arm-gic.h> + #include <dt-bindings/interconnect/qcom,msm8996.h> + + reserved-memory { + #address-cells = <2>; + #size-cells = <2>; + + gpu_mem: memory@90f00000 { + compatible = "shared-dma-pool"; + reg = <0x0 0x90f00000 0x0 0x100000>; + no-map; + }; + }; + + gpu@b00000 { + compatible = "qcom,adreno-530.2", "qcom,adreno"; + + reg = <0x00b00000 0x3f000>; + reg-names = "kgsl_3d0_reg_memory"; + + interrupts = <GIC_SPI 300 IRQ_TYPE_LEVEL_HIGH>; + + clocks = <&mmcc GPU_GX_GFX3D_CLK>, + <&mmcc GPU_AHB_CLK>, + <&mmcc GPU_GX_RBBMTIMER_CLK>, + <&gcc GCC_BIMC_GFX_CLK>, + <&gcc GCC_MMSS_BIMC_GFX_CLK>; + + clock-names = "core", + "iface", + "rbbmtimer", + "mem", + "mem_iface"; + + power-domains = <&mmcc GPU_GX_GDSC>; + iommus = <&adreno_smmu 0>; + + nvmem-cells = <&speedbin_efuse>; + nvmem-cell-names = "speed_bin"; + + operating-points-v2 = <&gpu_opp_table>; + + interconnects = <&bimc MASTER_GRAPHICS_3D &bimc SLAVE_EBI_CH0>; + interconnect-names = "gfx-mem"; + + #cooling-cells = <2>; + + gpu_opp_table: opp-table { + compatible = "operating-points-v2"; + + opp-624000000 { + opp-hz = /bits/ 64 <624000000>; + opp-supported-hw = <0x09>; + }; + + opp-560000000 { + opp-hz = /bits/ 64 <560000000>; + opp-supported-hw = <0x0d>; + }; + + opp-510000000 { + opp-hz = /bits/ 64 <510000000>; + opp-supported-hw = <0xff>; + }; + + opp-401800000 { + opp-hz = /bits/ 64 <401800000>; + opp-supported-hw = <0xff>; + }; + + opp-315000000 { + opp-hz = /bits/ 64 <315000000>; + opp-supported-hw = <0xff>; + }; + + opp-214000000 { + opp-hz = /bits/ 64 <214000000>; + opp-supported-hw = <0xff>; + }; + + opp-133000000 { + opp-hz = /bits/ 64 <133000000>; + opp-supported-hw = <0xff>; + }; + }; + + zap-shader { + memory-region = <&gpu_mem>; + }; + }; diff --git a/Documentation/devicetree/bindings/display/msm/qcom,adreno-540.yaml b/Documentation/devicetree/bindings/display/msm/qcom,adreno-540.yaml new file mode 100644 index 000000000000..bb7ccb8ddc28 --- /dev/null +++ b/Documentation/devicetree/bindings/display/msm/qcom,adreno-540.yaml @@ -0,0 +1,154 @@ +# SPDX-License-Identifier: GPL-2.0-only OR BSD-2-Clause +%YAML 1.2 +--- +$id: http://devicetree.org/schemas/display/msm/qcom,adreno-540.yaml# +$schema: http://devicetree.org/meta-schemas/core.yaml# + +title: Qualcomm Adreno 5xx GPU + +maintainers: + - Rob Clark <robdclark@xxxxxxxxx> + +description: + Device tree bindings for Adreno 540 GPU. + +select: + properties: + compatible: + contains: + enum: + - qcom,adreno-508.0 + - qcom,adreno-512.0 + - qcom,adreno-540.1 + required: + - compatible + +$ref: /schemas/display/msm/qcom,adreno-common.yaml# + +properties: + compatible: + items: + - enum: + - qcom,adreno-508.0 + - qcom,adreno-512.0 + - qcom,adreno-540.1 + - const: qcom,adreno + reg: + items: + - description: base address of GPU device + + reg-names: + items: + - const: kgsl_3d0_reg_memory + + clocks: + items: + - description: GPU Interface clock + - description: GPU RBBM Timer for Adreno 5xx series + - description: GPU Memory clock + - description: GPU Memory Interface clock + - description: GPU RBCPR clock + - description: GPU Core clock + + clock-names: + items: + - const: iface + - const: rbbmtimer + - const: mem + - const: mem_iface + - const: rbcpr + - const: core + +required: + - clocks + - clock-names + - power-domains + +unevaluatedProperties: false + +examples: + - | + // Example a540 : + + #include <dt-bindings/clock/qcom,gcc-msm8998.h> + #include <dt-bindings/clock/qcom,gpucc-msm8998.h> + #include <dt-bindings/power/qcom-rpmpd.h> + #include <dt-bindings/interrupt-controller/irq.h> + #include <dt-bindings/interrupt-controller/arm-gic.h> + + gpu@5000000 { + compatible = "qcom,adreno-540.1", "qcom,adreno"; + + reg = <0x05000000 0x40000>; + reg-names = "kgsl_3d0_reg_memory"; + + interrupts = <GIC_SPI 300 IRQ_TYPE_LEVEL_HIGH>; + + clocks = <&gcc GCC_GPU_CFG_AHB_CLK>, + <&gpucc RBBMTIMER_CLK>, + <&gcc GCC_BIMC_GFX_CLK>, + <&gcc GCC_GPU_BIMC_GFX_CLK>, + <&gpucc RBCPR_CLK>, + <&gpucc GFX3D_CLK>; + + clock-names = "iface", + "rbbmtimer", + "mem", + "mem_iface", + "rbcpr", + "core"; + + power-domains = <&rpmpd MSM8998_VDDMX>; + iommus = <&adreno_smmu 0>; + + operating-points-v2 = <&gpu_opp_table>; + + #cooling-cells = <2>; + + gpu_opp_table: opp-table { + compatible = "operating-points-v2"; + + opp-710000097 { + opp-hz = /bits/ 64 <710000097>; + opp-level = <RPM_SMD_LEVEL_TURBO>; + opp-supported-hw = <0xff>; + }; + + opp-670000048 { + opp-hz = /bits/ 64 <670000048>; + opp-level = <RPM_SMD_LEVEL_NOM_PLUS>; + opp-supported-hw = <0xff>; + }; + + opp-596000097 { + opp-hz = /bits/ 64 <596000097>; + opp-level = <RPM_SMD_LEVEL_NOM>; + opp-supported-hw = <0xff>; + }; + + opp-515000097 { + opp-hz = /bits/ 64 <515000097>; + opp-level = <RPM_SMD_LEVEL_SVS_PLUS>; + opp-supported-hw = <0xff>; + }; + + opp-414000000 { + opp-hz = /bits/ 64 <414000000>; + opp-level = <RPM_SMD_LEVEL_SVS>; + opp-supported-hw = <0xff>; + }; + + opp-342000000 { + opp-hz = /bits/ 64 <342000000>; + opp-level = <RPM_SMD_LEVEL_LOW_SVS>; + opp-supported-hw = <0xff>; + }; + + opp-257000000 { + opp-hz = /bits/ 64 <257000000>; + opp-level = <RPM_SMD_LEVEL_MIN_SVS>; + opp-supported-hw = <0xff>; + }; + }; + }; + diff --git a/Documentation/devicetree/bindings/display/msm/qcom,adreno-6xx.yaml b/Documentation/devicetree/bindings/display/msm/qcom,adreno-6xx.yaml new file mode 100644 index 000000000000..89106ff2215f --- /dev/null +++ b/Documentation/devicetree/bindings/display/msm/qcom,adreno-6xx.yaml @@ -0,0 +1,160 @@ +# SPDX-License-Identifier: GPL-2.0-only OR BSD-2-Clause +%YAML 1.2 +--- +$id: http://devicetree.org/schemas/display/msm/qcom,adreno-6xx.yaml# +$schema: http://devicetree.org/meta-schemas/core.yaml# + +title: Qualcomm Adreno 6xx GPU + +maintainers: + - Rob Clark <robdclark@xxxxxxxxx> + +description: + Device tree bindings for Adreno 600 series of GPU. + +select: + properties: + compatible: + contains: + pattern: '^qcom,adreno-[67][0-9][0-9]\.[0-9]$' + required: + - compatible + +$ref: /schemas/display/msm/qcom,adreno-common.yaml# + +properties: + compatible: + contains: + pattern: '^qcom,adreno-[67][0-9][0-9]\.[0-9]$' + +allOf: + - $ref: qcom,adreno-common.yaml# + - if: + properties: + compatible: + items: + - enum: + - qcom,adreno-610.0 + - qcom,adreno-619.1 + - const: qcom,adreno + then: + properties: + clocks: + minItems: 6 + maxItems: 6 + + clock-names: + items: + - const: core + description: GPU Core clock + - const: iface + description: GPU Interface clock + - const: mem_iface + description: GPU Memory Interface clock + - const: alt_mem_iface + description: GPU Alternative Memory Interface clock + - const: gmu + description: CX GMU clock + - const: xo + description: GPUCC clocksource clock + + reg-names: + minItems: 1 + items: + - const: kgsl_3d0_reg_memory + - const: cx_dbgc + + required: + - clocks + - clock-names + - power-domains + else: + properties: + clocks: false + clock-names: false + power-domains: false + + reg-names: + minItems: 1 + items: + - const: kgsl_3d0_reg_memory + - const: cx_mem + - const: cx_dbgc + +unevaluatedProperties: false + +examples: + - | + // Example a6xx (with GMU): + + #include <dt-bindings/clock/qcom,gpucc-sdm845.h> + #include <dt-bindings/clock/qcom,gcc-sdm845.h> + #include <dt-bindings/power/qcom-rpmpd.h> + #include <dt-bindings/interrupt-controller/irq.h> + #include <dt-bindings/interrupt-controller/arm-gic.h> + #include <dt-bindings/interconnect/qcom,sdm845.h> + + reserved-memory { + #address-cells = <2>; + #size-cells = <2>; + + zap_shader_region: memory@8f200000 { + compatible = "shared-dma-pool"; + reg = <0x0 0x90b00000 0x0 0xa00000>; + no-map; + }; + }; + + gpu@5000000 { + compatible = "qcom,adreno-630.2", "qcom,adreno"; + + reg = <0x5000000 0x40000>, <0x509e000 0x10>; + reg-names = "kgsl_3d0_reg_memory", "cx_mem"; + + #cooling-cells = <2>; + + interrupts = <GIC_SPI 300 IRQ_TYPE_LEVEL_HIGH>; + + iommus = <&adreno_smmu 0>; + + operating-points-v2 = <&gpu_opp_table>; + + interconnects = <&rsc_hlos MASTER_GFX3D &rsc_hlos SLAVE_EBI1>; + interconnect-names = "gfx-mem"; + + qcom,gmu = <&gmu>; + + gpu_opp_table: opp-table { + compatible = "operating-points-v2"; + + opp-430000000 { + opp-hz = /bits/ 64 <430000000>; + opp-level = <RPMH_REGULATOR_LEVEL_SVS_L1>; + opp-peak-kBps = <5412000>; + }; + + opp-355000000 { + opp-hz = /bits/ 64 <355000000>; + opp-level = <RPMH_REGULATOR_LEVEL_SVS>; + opp-peak-kBps = <3072000>; + }; + + opp-267000000 { + opp-hz = /bits/ 64 <267000000>; + opp-level = <RPMH_REGULATOR_LEVEL_LOW_SVS>; + opp-peak-kBps = <3072000>; + }; + + opp-180000000 { + opp-hz = /bits/ 64 <180000000>; + opp-level = <RPMH_REGULATOR_LEVEL_MIN_SVS>; + opp-peak-kBps = <1804000>; + }; + }; + + zap-shader { + memory-region = <&zap_shader_region>; + firmware-name = "qcom/LENOVO/81JL/qcdxkmsuc850.mbn"; + }; + }; +... diff --git a/Documentation/devicetree/bindings/display/msm/qcom,adreno-common.yaml b/Documentation/devicetree/bindings/display/msm/qcom,adreno-common.yaml new file mode 100644 index 000000000000..592d45de6c0b --- /dev/null +++ b/Documentation/devicetree/bindings/display/msm/qcom,adreno-common.yaml @@ -0,0 +1,112 @@ +# SPDX-License-Identifier: GPL-2.0-only OR BSD-2-Clause +%YAML 1.2 +--- +$id: http://devicetree.org/schemas/display/msm/qcom,adreno-common.yaml# +$schema: http://devicetree.org/meta-schemas/core.yaml# + +title: Qualcomm Adreno common properties + +maintainers: + - Rob Clark <robdclark@xxxxxxxxx> + +description: + Device tree bindings for Adreno GPUs + +select: + false + +properties: + $nodename: + pattern: "^gpu@[0-9a-f]+$" + + reg: + minItems: 1 + maxItems: 3 + + reg-names: + minItems: 1 + maxItems: 3 + + power-domains: + maxItems: 1 + + clocks: + minItems: 2 + maxItems: 7 + + clock-names: + minItems: 2 + maxItems: 7 + + interrupts: + maxItems: 1 + + interrupt-names: + maxItems: 1 + + interconnects: + minItems: 1 + maxItems: 2 + + interconnect-names: + minItems: 1 + maxItems: 2 + + iommus: + minItems: 1 + maxItems: 64 + + sram: + $ref: /schemas/types.yaml#/definitions/phandle-array + minItems: 1 + maxItems: 4 + items: + maxItems: 1 + description: | + phandles to one or more reserved on-chip SRAM regions. + phandle to the On Chip Memory (OCMEM) that's present on some a3xx and + a4xx Snapdragon SoCs. See + Documentation/devicetree/bindings/sram/qcom,ocmem.yaml + + operating-points-v2: true + opp-table: + type: object + + zap-shader: + type: object + additionalProperties: false + description: | + For a5xx and a6xx devices this node contains a memory-region that + points to reserved memory to store the zap shader that can be used to + help bring the GPU out of secure mode. + properties: + memory-region: + maxItems: 1 + + firmware-name: + description: | + Default name of the firmware to load to the remote processor. + + "#cooling-cells": + const: 2 + + nvmem-cell-names: + maxItems: 1 + + nvmem-cells: + description: efuse registers + maxItems: 1 + + qcom,gmu: + $ref: /schemas/types.yaml#/definitions/phandle + description: | + For GMU attached devices a phandle to the GMU device that will + control the power for the GPU. + +required: + - reg + - reg-names + - interrupts + - iommus + +additionalProperties: true -- 2.44.0