GNU Linux-libre 6.1.90-gnu
[releases.git] / Documentation / devicetree / bindings / media / qcom,msm8996-venus.yaml
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
8 title: Qualcomm Venus video encode and decode accelerators
9
10 maintainers:
11   - Stanimir Varbanov <stanimir.varbanov@linaro.org>
12
13 description: |
14   The Venus IP is a video encode and decode accelerator present
15   on Qualcomm platforms
16
17 properties:
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
111 required:
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
123 additionalProperties: false
124
125 examples:
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         };