| # 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>; |
| }; |
| }; |
| }; |
| }; |