1# SPDX-License-Identifier: (GPL-2.0 OR BSD-2-Clause) 2# Copyright 2019 Texas Instruments Incorporated 3%YAML 1.2 4--- 5$id: http://devicetree.org/schemas/display/ti/ti,am65x-dss.yaml# 6$schema: http://devicetree.org/meta-schemas/core.yaml# 7 8title: Texas Instruments AM65x Display Subsystem 9 10maintainers: 11 - Jyri Sarha <jsarha@ti.com> 12 - Tomi Valkeinen <tomi.valkeinen@ti.com> 13 14description: | 15 The AM625 and AM65x TI Keystone Display SubSystem has two output 16 ports and two video planes. In AM65x DSS, the first video port 17 supports 1 OLDI TX and in AM625 DSS, the first video port output is 18 internally routed to 2 OLDI TXes. The second video port supports DPI 19 format. The first plane is full video plane with all features and the 20 second is a "lite plane" without scaling support. 21 The AM62L display subsystem has a single output port which supports DPI 22 format but it only supports single video "lite plane" which does not support 23 scaling. The output port is routed to SoC boundary via DPI interface and same 24 DPI signals are also routed internally to DSI Tx controller present within the 25 SoC. Due to clocking limitations only one of the interface i.e. either DSI or 26 DPI can be used at once. 27 28properties: 29 compatible: 30 enum: 31 - ti,am625-dss 32 - ti,am62a7-dss 33 - ti,am62l-dss 34 - ti,am65x-dss 35 36 reg: 37 description: 38 Addresses to each DSS memory region described in the SoC's TRM. 39 items: 40 - description: common DSS register area 41 - description: VIDL1 light video plane 42 - description: VID video plane 43 - description: OVR1 overlay manager for vp1 44 - description: OVR2 overlay manager for vp2 45 - description: VP1 video port 1 46 - description: VP2 video port 2 47 - description: common1 DSS register area 48 49 reg-names: 50 items: 51 - const: common 52 - const: vidl1 53 - const: vid 54 - const: ovr1 55 - const: ovr2 56 - const: vp1 57 - const: vp2 58 - const: common1 59 60 clocks: 61 items: 62 - description: fck DSS functional clock 63 - description: vp1 Video Port 1 pixel clock 64 - description: vp2 Video Port 2 pixel clock 65 66 clock-names: 67 items: 68 - const: fck 69 - const: vp1 70 - const: vp2 71 72 assigned-clocks: 73 minItems: 1 74 maxItems: 3 75 76 assigned-clock-parents: 77 minItems: 1 78 maxItems: 3 79 80 interrupts: 81 maxItems: 1 82 83 power-domains: 84 maxItems: 1 85 description: phandle to the associated power domain 86 87 dma-coherent: true 88 89 ports: 90 $ref: /schemas/graph.yaml#/properties/ports 91 92 properties: 93 port@0: 94 $ref: /schemas/graph.yaml#/properties/port 95 description: 96 For AM65x DSS, the OLDI output port node from video port 1. 97 For AM625 DSS, the internal DPI output port node from video 98 port 1. 99 For AM62A7 DSS, the port is tied off inside the SoC. 100 For AM62L DSS, the DSS DPI output port node from video port 1 101 or DSI Tx controller node connected to video port 1. 102 properties: 103 endpoint@0: 104 $ref: /schemas/graph.yaml#/properties/endpoint 105 description: 106 For AM625 DSS, VP Connection to OLDI0. 107 For AM65X DSS, OLDI output from the SoC. 108 109 endpoint@1: 110 $ref: /schemas/graph.yaml#/properties/endpoint 111 description: 112 For AM625 DSS, VP Connection to OLDI1. 113 114 anyOf: 115 - required: 116 - endpoint 117 - required: 118 - endpoint@0 119 - endpoint@1 120 121 port@1: 122 $ref: /schemas/graph.yaml#/properties/port 123 description: 124 The DSS DPI output port node from video port 2 125 126 ti,am65x-oldi-io-ctrl: 127 $ref: /schemas/types.yaml#/definitions/phandle 128 description: 129 phandle to syscon device node mapping OLDI IO_CTRL registers. 130 The mapped range should point to OLDI_DAT0_IO_CTRL, map it and 131 following OLDI_DAT1_IO_CTRL, OLDI_DAT2_IO_CTRL, OLDI_DAT3_IO_CTRL, 132 and OLDI_CLK_IO_CTRL registers. This property is needed for OLDI 133 interface to work. 134 135 max-memory-bandwidth: 136 $ref: /schemas/types.yaml#/definitions/uint32 137 description: 138 Input memory (from main memory to dispc) bandwidth limit in 139 bytes per second 140 141 oldi-transmitters: 142 description: 143 Child node under the DSS, to describe all the OLDI transmitters connected 144 to the DSS videoports. 145 type: object 146 additionalProperties: false 147 148 properties: 149 "#address-cells": 150 const: 1 151 152 "#size-cells": 153 const: 0 154 155 patternProperties: 156 '^oldi@[0-1]$': 157 $ref: ti,am625-oldi.yaml# 158 description: OLDI transmitters connected to the DSS VPs 159 160allOf: 161 - if: 162 properties: 163 compatible: 164 contains: 165 const: ti,am62a7-dss 166 then: 167 properties: 168 oldi-transmitters: false 169 ports: 170 properties: 171 port@0: false 172 - if: 173 properties: 174 compatible: 175 contains: 176 const: ti,am62l-dss 177 then: 178 properties: 179 ports: 180 properties: 181 port@1: false 182 183 - if: 184 properties: 185 compatible: 186 contains: 187 enum: 188 - ti,am62l-dss 189 - ti,am65x-dss 190 then: 191 properties: 192 oldi-transmitters: false 193 ports: 194 properties: 195 port@0: 196 properties: 197 endpoint@1: false 198 199required: 200 - compatible 201 - reg 202 - reg-names 203 - clocks 204 - clock-names 205 - interrupts 206 - ports 207 208additionalProperties: false 209 210examples: 211 - | 212 #include <dt-bindings/interrupt-controller/arm-gic.h> 213 #include <dt-bindings/interrupt-controller/irq.h> 214 #include <dt-bindings/soc/ti,sci_pm_domain.h> 215 216 dss: dss@4a00000 { 217 compatible = "ti,am65x-dss"; 218 reg = <0x04a00000 0x1000>, /* common */ 219 <0x04a02000 0x1000>, /* vidl1 */ 220 <0x04a06000 0x1000>, /* vid */ 221 <0x04a07000 0x1000>, /* ovr1 */ 222 <0x04a08000 0x1000>, /* ovr2 */ 223 <0x04a0a000 0x1000>, /* vp1 */ 224 <0x04a0b000 0x1000>, /* vp2 */ 225 <0x04a01000 0x1000>; /* common1 */ 226 reg-names = "common", "vidl1", "vid", 227 "ovr1", "ovr2", "vp1", "vp2", "common1"; 228 ti,am65x-oldi-io-ctrl = <&dss_oldi_io_ctrl>; 229 power-domains = <&k3_pds 67 TI_SCI_PD_EXCLUSIVE>; 230 clocks = <&k3_clks 67 1>, 231 <&k3_clks 216 1>, 232 <&k3_clks 67 2>; 233 clock-names = "fck", "vp1", "vp2"; 234 interrupts = <GIC_SPI 166 IRQ_TYPE_EDGE_RISING>; 235 ports { 236 #address-cells = <1>; 237 #size-cells = <0>; 238 port@0 { 239 reg = <0>; 240 oldi_out0: endpoint { 241 remote-endpoint = <&lcd_in0>; 242 }; 243 }; 244 }; 245 }; 246 247 - | 248 #include <dt-bindings/interrupt-controller/arm-gic.h> 249 #include <dt-bindings/interrupt-controller/irq.h> 250 #include <dt-bindings/soc/ti,sci_pm_domain.h> 251 252 bus { 253 #address-cells = <2>; 254 #size-cells = <2>; 255 dss1: dss@30200000 { 256 compatible = "ti,am625-dss"; 257 reg = <0x00 0x30200000 0x00 0x1000>, /* common */ 258 <0x00 0x30202000 0x00 0x1000>, /* vidl1 */ 259 <0x00 0x30206000 0x00 0x1000>, /* vid */ 260 <0x00 0x30207000 0x00 0x1000>, /* ovr1 */ 261 <0x00 0x30208000 0x00 0x1000>, /* ovr2 */ 262 <0x00 0x3020a000 0x00 0x1000>, /* vp1 */ 263 <0x00 0x3020b000 0x00 0x1000>, /* vp2 */ 264 <0x00 0x30201000 0x00 0x1000>; /* common1 */ 265 reg-names = "common", "vidl1", "vid", 266 "ovr1", "ovr2", "vp1", "vp2", "common1"; 267 power-domains = <&k3_pds 186 TI_SCI_PD_EXCLUSIVE>; 268 clocks = <&k3_clks 186 6>, 269 <&vp1_clock>, 270 <&k3_clks 186 2>; 271 clock-names = "fck", "vp1", "vp2"; 272 interrupts = <GIC_SPI 84 IRQ_TYPE_LEVEL_HIGH>; 273 oldi-transmitters { 274 #address-cells = <1>; 275 #size-cells = <0>; 276 oldi0: oldi@0 { 277 reg = <0>; 278 clocks = <&k3_clks 186 0>; 279 clock-names = "serial"; 280 ti,companion-oldi = <&oldi1>; 281 ti,oldi-io-ctrl = <&dss_oldi_io_ctrl>; 282 ports { 283 #address-cells = <1>; 284 #size-cells = <0>; 285 port@0 { 286 reg = <0>; 287 oldi0_in: endpoint { 288 remote-endpoint = <&dpi0_out0>; 289 }; 290 }; 291 port@1 { 292 reg = <1>; 293 oldi0_out: endpoint { 294 remote-endpoint = <&panel_in0>; 295 }; 296 }; 297 }; 298 }; 299 oldi1: oldi@1 { 300 reg = <1>; 301 clocks = <&k3_clks 186 0>; 302 clock-names = "serial"; 303 ti,secondary-oldi; 304 ti,companion-oldi = <&oldi0>; 305 ti,oldi-io-ctrl = <&dss_oldi_io_ctrl>; 306 ports { 307 #address-cells = <1>; 308 #size-cells = <0>; 309 port@0 { 310 reg = <0>; 311 oldi1_in: endpoint { 312 remote-endpoint = <&dpi0_out1>; 313 }; 314 }; 315 port@1 { 316 reg = <1>; 317 oldi1_out: endpoint { 318 remote-endpoint = <&panel_in1>; 319 }; 320 }; 321 }; 322 }; 323 }; 324 ports { 325 #address-cells = <1>; 326 #size-cells = <0>; 327 port@0 { 328 #address-cells = <1>; 329 #size-cells = <0>; 330 reg = <0>; 331 dpi0_out0: endpoint@0 { 332 reg = <0>; 333 remote-endpoint = <&oldi0_in>; 334 }; 335 dpi0_out1: endpoint@1 { 336 reg = <1>; 337 remote-endpoint = <&oldi1_in>; 338 }; 339 }; 340 port@1 { 341 reg = <1>; 342 dpi1_out: endpoint { 343 remote-endpoint = <&hdmi_bridge>; 344 }; 345 }; 346 }; 347 }; 348 }; 349