# SPDX-License-Identifier: (GPL-2.0 OR BSD-2-Clause) # Copyright 2019 Bootlin %YAML 1.2 --- $id: http://devicetree.org/schemas/display/xylon,logicvc-display.yaml# $schema: http://devicetree.org/meta-schemas/core.yaml# title: Xylon LogiCVC display controller maintainers: - Paul Kocialkowski <paul.kocialkowski@bootlin.com> description: | The Xylon LogiCVC is a display controller that supports multiple layers. It is usually implemented as programmable logic and was optimized for use with Xilinx Zynq-7000 SoCs and Xilinx FPGAs. Because the controller is intended for use in a FPGA, most of the configuration of the controller takes place at logic configuration bitstream synthesis time. As a result, many of the device-tree bindings are meant to reflect the synthesis configuration and must not be configured differently. Matching synthesis parameters are provided when applicable. Layers are declared in the "layers" sub-node and have dedicated configuration. In version 3 of the controller, each layer has fixed memory offset and address starting from the video memory base address for its framebuffer. In version 4, framebuffers are configured with a direct memory address instead. properties: compatible: enum: - xylon,logicvc-3.02.a-display - xylon,logicvc-4.01.a-display reg: maxItems: 1 clocks: minItems: 1 maxItems: 4 clock-names: minItems: 1 items: # vclk is required and must be provided as first item. - const: vclk # Other clocks are optional and can be provided in any order. - enum: - vclk2 - lvdsclk - lvdsclkn - enum: - vclk2 - lvdsclk - lvdsclkn - enum: - vclk2 - lvdsclk - lvdsclkn interrupts: maxItems: 1 memory-region: maxItems: 1 xylon,display-interface: enum: # Parallel RGB interface (C_DISPLAY_INTERFACE == 0) - parallel-rgb # ITU-T BR656 interface (C_DISPLAY_INTERFACE == 1) - bt656 # 4-bit LVDS interface (C_DISPLAY_INTERFACE == 2) - lvds-4bits # 3-bit LVDS interface (C_DISPLAY_INTERFACE == 4) - lvds-3bits # DVI interface (C_DISPLAY_INTERFACE == 5) - dvi description: Display output interface (C_DISPLAY_INTERFACE). xylon,display-colorspace: enum: # RGB colorspace (C_DISPLAY_COLOR_SPACE == 0) - rgb # YUV 4:2:2 colorspace (C_DISPLAY_COLOR_SPACE == 1) - yuv422 # YUV 4:4:4 colorspace (C_DISPLAY_COLOR_SPACE == 2) - yuv444 description: Display output colorspace (C_DISPLAY_COLOR_SPACE). xylon,display-depth: $ref: /schemas/types.yaml#/definitions/uint32 description: Display output depth (C_PIXEL_DATA_WIDTH). xylon,row-stride: $ref: /schemas/types.yaml#/definitions/uint32 description: Fixed number of pixels in a framebuffer row (C_ROW_STRIDE). xylon,dithering: $ref: /schemas/types.yaml#/definitions/flag description: Dithering module is enabled (C_XCOLOR) xylon,background-layer: $ref: /schemas/types.yaml#/definitions/flag description: | The last layer is used to display a black background (C_USE_BACKGROUND). The layer must still be registered. xylon,layers-configurable: $ref: /schemas/types.yaml#/definitions/flag description: | Configuration of layers' size, position and offset is enabled (C_USE_SIZE_POSITION). layers: type: object properties: "#address-cells": const: 1 "#size-cells": const: 0 patternProperties: "^layer@[0-9]+$": type: object properties: reg: maxItems: 1 xylon,layer-depth: $ref: /schemas/types.yaml#/definitions/uint32 description: Layer depth (C_LAYER_X_DATA_WIDTH). xylon,layer-colorspace: enum: # RGB colorspace (C_LAYER_X_TYPE == 0) - rgb # YUV packed colorspace (C_LAYER_X_TYPE == 0) - yuv description: Layer colorspace (C_LAYER_X_TYPE). xylon,layer-alpha-mode: enum: # Alpha is configured layer-wide (C_LAYER_X_ALPHA_MODE == 0) - layer # Alpha is configured per-pixel (C_LAYER_X_ALPHA_MODE == 1) - pixel description: Alpha mode for the layer (C_LAYER_X_ALPHA_MODE). xylon,layer-base-offset: $ref: /schemas/types.yaml#/definitions/uint32 description: | Offset in number of lines (C_LAYER_X_OFFSET) starting from the video RAM base (C_VMEM_BASEADDR), only for version 3. xylon,layer-buffer-offset: $ref: /schemas/types.yaml#/definitions/uint32 description: | Offset in number of lines (C_BUFFER_*_OFFSET) starting from the layer base offset for the second buffer used in double-buffering. xylon,layer-primary: $ref: /schemas/types.yaml#/definitions/flag description: | Layer should be registered as a primary plane (exactly one is required). additionalProperties: false required: - reg - xylon,layer-depth - xylon,layer-colorspace - xylon,layer-alpha-mode required: - "#address-cells" - "#size-cells" - layer@0 additionalProperties: false description: | The description of the display controller layers, containing layer sub-nodes that each describe a registered layer. port: $ref: /schemas/graph.yaml#/properties/port description: | Video output port, typically connected to a panel or bridge. additionalProperties: false required: - compatible - reg - clocks - clock-names - interrupts - xylon,display-interface - xylon,display-colorspace - xylon,display-depth - xylon,row-stride - layers - port examples: - | #include <dt-bindings/interrupt-controller/irq.h> logicvc: logicvc@43c00000 { compatible = "xylon,logicvc-3.02.a", "syscon", "simple-mfd"; reg = <0x43c00000 0x6000>; #address-cells = <1>; #size-cells = <1>; logicvc_display: display@0 { compatible = "xylon,logicvc-3.02.a-display"; reg = <0x0 0x6000>; memory-region = <&logicvc_cma>; clocks = <&logicvc_vclk 0>, <&logicvc_lvdsclk 0>; clock-names = "vclk", "lvdsclk"; interrupt-parent = <&intc>; interrupts = <0 34 IRQ_TYPE_LEVEL_HIGH>; xylon,display-interface = "lvds-4bits"; xylon,display-colorspace = "rgb"; xylon,display-depth = <16>; xylon,row-stride = <1024>; xylon,layers-configurable; layers { #address-cells = <1>; #size-cells = <0>; layer@0 { reg = <0>; xylon,layer-depth = <16>; xylon,layer-colorspace = "rgb"; xylon,layer-alpha-mode = "layer"; xylon,layer-base-offset = <0>; xylon,layer-buffer-offset = <480>; xylon,layer-primary; }; layer@1 { reg = <1>; xylon,layer-depth = <16>; xylon,layer-colorspace = "rgb"; xylon,layer-alpha-mode = "layer"; xylon,layer-base-offset = <2400>; xylon,layer-buffer-offset = <480>; }; layer@2 { reg = <2>; xylon,layer-depth = <16>; xylon,layer-colorspace = "rgb"; xylon,layer-alpha-mode = "layer"; xylon,layer-base-offset = <960>; xylon,layer-buffer-offset = <480>; }; layer@3 { reg = <3>; xylon,layer-depth = <16>; xylon,layer-colorspace = "rgb"; xylon,layer-alpha-mode = "layer"; xylon,layer-base-offset = <480>; xylon,layer-buffer-offset = <480>; }; layer@4 { reg = <4>; xylon,layer-depth = <16>; xylon,layer-colorspace = "rgb"; xylon,layer-alpha-mode = "layer"; xylon,layer-base-offset = <8192>; xylon,layer-buffer-offset = <480>; }; }; port { #address-cells = <1>; #size-cells = <0>; logicvc_output: endpoint@0 { reg = <0>; remote-endpoint = <&panel_input>; }; }; }; };