1# SPDX-License-Identifier: (GPL-2.0 OR BSD-2-Clause)
2
3%YAML 1.2
4---
5$id: "http://devicetree.org/schemas/media/qcom,msm8996-venus.yaml#"
6$schema: "http://devicetree.org/meta-schemas/core.yaml#"
7
8title: Qualcomm Venus video encode and decode accelerators
9
10maintainers:
11  - Stanimir Varbanov <stanimir.varbanov@linaro.org>
12
13description: |
14  The Venus IP is a video encode and decode accelerator present
15  on Qualcomm platforms
16
17properties:
18  compatible:
19    const: qcom,msm8996-venus
20
21  reg:
22    maxItems: 1
23
24  interrupts:
25    maxItems: 1
26
27  power-domains:
28    maxItems: 1
29
30  clocks:
31    maxItems: 4
32
33  clock-names:
34    items:
35      - const: core
36      - const: iface
37      - const: bus
38      - const: mbus
39
40  iommus:
41    maxItems: 20
42
43  memory-region:
44    maxItems: 1
45
46  video-decoder:
47    type: object
48
49    properties:
50      compatible:
51        const: venus-decoder
52
53      clocks:
54        maxItems: 1
55
56      clock-names:
57        items:
58          - const: core
59
60      power-domains:
61        maxItems: 1
62
63    required:
64      - compatible
65      - clocks
66      - clock-names
67      - power-domains
68
69    additionalProperties: false
70
71  video-encoder:
72    type: object
73
74    properties:
75      compatible:
76        const: venus-encoder
77
78      clocks:
79        maxItems: 1
80
81      clock-names:
82        items:
83          - const: core
84
85      power-domains:
86        maxItems: 1
87
88    required:
89      - compatible
90      - clocks
91      - clock-names
92      - power-domains
93
94    additionalProperties: false
95
96  video-firmware:
97    type: object
98    additionalProperties: false
99
100    description: |
101      Firmware subnode is needed when the platform does not
102      have TrustZone.
103
104    properties:
105      iommus:
106        maxItems: 1
107
108    required:
109      - iommus
110
111required:
112  - compatible
113  - reg
114  - interrupts
115  - power-domains
116  - clocks
117  - clock-names
118  - iommus
119  - memory-region
120  - video-decoder
121  - video-encoder
122
123additionalProperties: false
124
125examples:
126  - |
127        #include <dt-bindings/interrupt-controller/arm-gic.h>
128        #include <dt-bindings/clock/qcom,mmcc-msm8996.h>
129
130        video-codec@c00000 {
131                compatible = "qcom,msm8996-venus";
132                reg = <0x00c00000 0xff000>;
133                interrupts = <GIC_SPI 287 IRQ_TYPE_LEVEL_HIGH>;
134                clocks = <&mmcc VIDEO_CORE_CLK>,
135                         <&mmcc VIDEO_AHB_CLK>,
136                         <&mmcc VIDEO_AXI_CLK>,
137                         <&mmcc VIDEO_MAXI_CLK>;
138                clock-names = "core", "iface", "bus", "mbus";
139                power-domains = <&mmcc VENUS_GDSC>;
140                iommus =  <&venus_smmu 0x00>,
141                          <&venus_smmu 0x01>,
142                          <&venus_smmu 0x0a>,
143                          <&venus_smmu 0x07>,
144                          <&venus_smmu 0x0e>,
145                          <&venus_smmu 0x0f>,
146                          <&venus_smmu 0x08>,
147                          <&venus_smmu 0x09>,
148                          <&venus_smmu 0x0b>,
149                          <&venus_smmu 0x0c>,
150                          <&venus_smmu 0x0d>,
151                          <&venus_smmu 0x10>,
152                          <&venus_smmu 0x11>,
153                          <&venus_smmu 0x21>,
154                          <&venus_smmu 0x28>,
155                          <&venus_smmu 0x29>,
156                          <&venus_smmu 0x2b>,
157                          <&venus_smmu 0x2c>,
158                          <&venus_smmu 0x2d>,
159                          <&venus_smmu 0x31>;
160                memory-region = <&venus_mem>;
161
162                video-decoder {
163                        compatible = "venus-decoder";
164                        clocks = <&mmcc VIDEO_SUBCORE0_CLK>;
165                        clock-names = "core";
166                        power-domains = <&mmcc VENUS_CORE0_GDSC>;
167                };
168
169                video-encoder {
170                        compatible = "venus-encoder";
171                        clocks = <&mmcc VIDEO_SUBCORE1_CLK>;
172                        clock-names = "core";
173                        power-domains = <&mmcc VENUS_CORE1_GDSC>;
174                };
175        };
176