1# SPDX-License-Identifier: (GPL-2.0 OR BSD-2-Clause) 2# Copyright 2019 Bootlin 3%YAML 1.2 4--- 5$id: "http://devicetree.org/schemas/display/xylon,logicvc-display.yaml#" 6$schema: "http://devicetree.org/meta-schemas/core.yaml#" 7 8title: Xylon LogiCVC display controller 9 10maintainers: 11 - Paul Kocialkowski <paul.kocialkowski@bootlin.com> 12 13description: | 14 The Xylon LogiCVC is a display controller that supports multiple layers. 15 It is usually implemented as programmable logic and was optimized for use 16 with Xilinx Zynq-7000 SoCs and Xilinx FPGAs. 17 18 Because the controller is intended for use in a FPGA, most of the 19 configuration of the controller takes place at logic configuration bitstream 20 synthesis time. As a result, many of the device-tree bindings are meant to 21 reflect the synthesis configuration and must not be configured differently. 22 Matching synthesis parameters are provided when applicable. 23 24 Layers are declared in the "layers" sub-node and have dedicated configuration. 25 In version 3 of the controller, each layer has fixed memory offset and address 26 starting from the video memory base address for its framebuffer. In version 4, 27 framebuffers are configured with a direct memory address instead. 28 29properties: 30 compatible: 31 enum: 32 - xylon,logicvc-3.02.a-display 33 - xylon,logicvc-4.01.a-display 34 35 reg: 36 maxItems: 1 37 38 clocks: 39 minItems: 1 40 maxItems: 4 41 42 clock-names: 43 minItems: 1 44 items: 45 # vclk is required and must be provided as first item. 46 - const: vclk 47 # Other clocks are optional and can be provided in any order. 48 - enum: 49 - vclk2 50 - lvdsclk 51 - lvdsclkn 52 - enum: 53 - vclk2 54 - lvdsclk 55 - lvdsclkn 56 - enum: 57 - vclk2 58 - lvdsclk 59 - lvdsclkn 60 61 interrupts: 62 maxItems: 1 63 64 memory-region: 65 maxItems: 1 66 67 xylon,display-interface: 68 enum: 69 # Parallel RGB interface (C_DISPLAY_INTERFACE == 0) 70 - parallel-rgb 71 # ITU-T BR656 interface (C_DISPLAY_INTERFACE == 1) 72 - bt656 73 # 4-bit LVDS interface (C_DISPLAY_INTERFACE == 2) 74 - lvds-4bits 75 # 3-bit LVDS interface (C_DISPLAY_INTERFACE == 4) 76 - lvds-3bits 77 # DVI interface (C_DISPLAY_INTERFACE == 5) 78 - dvi 79 description: Display output interface (C_DISPLAY_INTERFACE). 80 81 xylon,display-colorspace: 82 enum: 83 # RGB colorspace (C_DISPLAY_COLOR_SPACE == 0) 84 - rgb 85 # YUV 4:2:2 colorspace (C_DISPLAY_COLOR_SPACE == 1) 86 - yuv422 87 # YUV 4:4:4 colorspace (C_DISPLAY_COLOR_SPACE == 2) 88 - yuv444 89 description: Display output colorspace (C_DISPLAY_COLOR_SPACE). 90 91 xylon,display-depth: 92 $ref: "/schemas/types.yaml#/definitions/uint32" 93 description: Display output depth (C_PIXEL_DATA_WIDTH). 94 95 xylon,row-stride: 96 $ref: "/schemas/types.yaml#/definitions/uint32" 97 description: Fixed number of pixels in a framebuffer row (C_ROW_STRIDE). 98 99 xylon,dithering: 100 $ref: "/schemas/types.yaml#/definitions/flag" 101 description: Dithering module is enabled (C_XCOLOR) 102 103 xylon,background-layer: 104 $ref: "/schemas/types.yaml#/definitions/flag" 105 description: | 106 The last layer is used to display a black background (C_USE_BACKGROUND). 107 The layer must still be registered. 108 109 xylon,layers-configurable: 110 $ref: "/schemas/types.yaml#/definitions/flag" 111 description: | 112 Configuration of layers' size, position and offset is enabled 113 (C_USE_SIZE_POSITION). 114 115 layers: 116 type: object 117 118 properties: 119 "#address-cells": 120 const: 1 121 122 "#size-cells": 123 const: 0 124 125 patternProperties: 126 "^layer@[0-9]+$": 127 type: object 128 129 properties: 130 reg: 131 maxItems: 1 132 133 xylon,layer-depth: 134 $ref: "/schemas/types.yaml#/definitions/uint32" 135 description: Layer depth (C_LAYER_X_DATA_WIDTH). 136 137 xylon,layer-colorspace: 138 enum: 139 # RGB colorspace (C_LAYER_X_TYPE == 0) 140 - rgb 141 # YUV packed colorspace (C_LAYER_X_TYPE == 0) 142 - yuv 143 description: Layer colorspace (C_LAYER_X_TYPE). 144 145 xylon,layer-alpha-mode: 146 enum: 147 # Alpha is configured layer-wide (C_LAYER_X_ALPHA_MODE == 0) 148 - layer 149 # Alpha is configured per-pixel (C_LAYER_X_ALPHA_MODE == 1) 150 - pixel 151 description: Alpha mode for the layer (C_LAYER_X_ALPHA_MODE). 152 153 xylon,layer-base-offset: 154 $ref: "/schemas/types.yaml#/definitions/uint32" 155 description: | 156 Offset in number of lines (C_LAYER_X_OFFSET) starting from the 157 video RAM base (C_VMEM_BASEADDR), only for version 3. 158 159 xylon,layer-buffer-offset: 160 $ref: "/schemas/types.yaml#/definitions/uint32" 161 description: | 162 Offset in number of lines (C_BUFFER_*_OFFSET) starting from the 163 layer base offset for the second buffer used in double-buffering. 164 165 xylon,layer-primary: 166 $ref: "/schemas/types.yaml#/definitions/flag" 167 description: | 168 Layer should be registered as a primary plane (exactly one is 169 required). 170 171 additionalProperties: false 172 173 required: 174 - reg 175 - xylon,layer-depth 176 - xylon,layer-colorspace 177 - xylon,layer-alpha-mode 178 179 required: 180 - "#address-cells" 181 - "#size-cells" 182 - layer@0 183 184 additionalProperties: false 185 186 description: | 187 The description of the display controller layers, containing layer 188 sub-nodes that each describe a registered layer. 189 190 port: 191 $ref: /schemas/graph.yaml#/properties/port 192 description: | 193 Video output port, typically connected to a panel or bridge. 194 195additionalProperties: false 196 197required: 198 - compatible 199 - reg 200 - clocks 201 - clock-names 202 - interrupts 203 - xylon,display-interface 204 - xylon,display-colorspace 205 - xylon,display-depth 206 - xylon,row-stride 207 - layers 208 - port 209 210examples: 211 - | 212 #include <dt-bindings/interrupt-controller/irq.h> 213 214 logicvc: logicvc@43c00000 { 215 compatible = "xylon,logicvc-3.02.a", "syscon", "simple-mfd"; 216 reg = <0x43c00000 0x6000>; 217 218 #address-cells = <1>; 219 #size-cells = <1>; 220 221 logicvc_display: display@0 { 222 compatible = "xylon,logicvc-3.02.a-display"; 223 reg = <0x0 0x6000>; 224 225 memory-region = <&logicvc_cma>; 226 227 clocks = <&logicvc_vclk 0>, <&logicvc_lvdsclk 0>; 228 clock-names = "vclk", "lvdsclk"; 229 230 interrupt-parent = <&intc>; 231 interrupts = <0 34 IRQ_TYPE_LEVEL_HIGH>; 232 233 xylon,display-interface = "lvds-4bits"; 234 xylon,display-colorspace = "rgb"; 235 xylon,display-depth = <16>; 236 xylon,row-stride = <1024>; 237 238 xylon,layers-configurable; 239 240 layers { 241 #address-cells = <1>; 242 #size-cells = <0>; 243 244 layer@0 { 245 reg = <0>; 246 xylon,layer-depth = <16>; 247 xylon,layer-colorspace = "rgb"; 248 xylon,layer-alpha-mode = "layer"; 249 xylon,layer-base-offset = <0>; 250 xylon,layer-buffer-offset = <480>; 251 xylon,layer-primary; 252 }; 253 254 layer@1 { 255 reg = <1>; 256 xylon,layer-depth = <16>; 257 xylon,layer-colorspace = "rgb"; 258 xylon,layer-alpha-mode = "layer"; 259 xylon,layer-base-offset = <2400>; 260 xylon,layer-buffer-offset = <480>; 261 }; 262 263 layer@2 { 264 reg = <2>; 265 xylon,layer-depth = <16>; 266 xylon,layer-colorspace = "rgb"; 267 xylon,layer-alpha-mode = "layer"; 268 xylon,layer-base-offset = <960>; 269 xylon,layer-buffer-offset = <480>; 270 }; 271 272 layer@3 { 273 reg = <3>; 274 xylon,layer-depth = <16>; 275 xylon,layer-colorspace = "rgb"; 276 xylon,layer-alpha-mode = "layer"; 277 xylon,layer-base-offset = <480>; 278 xylon,layer-buffer-offset = <480>; 279 }; 280 281 layer@4 { 282 reg = <4>; 283 xylon,layer-depth = <16>; 284 xylon,layer-colorspace = "rgb"; 285 xylon,layer-alpha-mode = "layer"; 286 xylon,layer-base-offset = <8192>; 287 xylon,layer-buffer-offset = <480>; 288 }; 289 }; 290 291 port { 292 #address-cells = <1>; 293 #size-cells = <0>; 294 295 logicvc_output: endpoint@0 { 296 reg = <0>; 297 remote-endpoint = <&panel_input>; 298 }; 299 }; 300 }; 301 }; 302