302 lines
8.4 KiB
YAML
302 lines
8.4 KiB
YAML
|
# 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>;
|
||
|
};
|
||
|
};
|
||
|
};
|
||
|
};
|