162306a36Sopenharmony_ci# SPDX-License-Identifier: (GPL-2.0-only OR BSD-2-Clause)
262306a36Sopenharmony_ci%YAML 1.2
362306a36Sopenharmony_ci---
462306a36Sopenharmony_ci$id: http://devicetree.org/schemas/display/xlnx/xlnx,zynqmp-dpsub.yaml#
562306a36Sopenharmony_ci$schema: http://devicetree.org/meta-schemas/core.yaml#
662306a36Sopenharmony_ci
762306a36Sopenharmony_cititle: Xilinx ZynqMP DisplayPort Subsystem
862306a36Sopenharmony_ci
962306a36Sopenharmony_cidescription: |
1062306a36Sopenharmony_ci  The DisplayPort subsystem of Xilinx ZynqMP (Zynq UltraScale+ MPSoC)
1162306a36Sopenharmony_ci  implements the display and audio pipelines based on the DisplayPort v1.2
1262306a36Sopenharmony_ci  standard. The subsystem includes multiple functional blocks as below:
1362306a36Sopenharmony_ci
1462306a36Sopenharmony_ci               +------------------------------------------------------------+
1562306a36Sopenharmony_ci  +--------+   | +----------------+     +-----------+                       |
1662306a36Sopenharmony_ci  | DPDMA  | --->|                | --> |   Video   | Video +-------------+ |
1762306a36Sopenharmony_ci  | 4x vid |   | |                |     | Rendering | -+--> |             | |   +------+
1862306a36Sopenharmony_ci  | 2x aud |   | |  Audio/Video   | --> | Pipeline  |  |    | DisplayPort |---> | PHY0 |
1962306a36Sopenharmony_ci  +--------+   | | Buffer Manager |     +-----------+  |    |   Source    | |   +------+
2062306a36Sopenharmony_ci               | |    and STC     |     +-----------+  |    | Controller  | |   +------+
2162306a36Sopenharmony_ci  Live Video --->|                | --> |   Audio   | Audio |             |---> | PHY1 |
2262306a36Sopenharmony_ci               | |                |     |   Mixer   | --+-> |             | |   +------+
2362306a36Sopenharmony_ci  Live Audio --->|                | --> |           |  ||   +-------------+ |
2462306a36Sopenharmony_ci               | +----------------+     +-----------+  ||                   |
2562306a36Sopenharmony_ci               +---------------------------------------||-------------------+
2662306a36Sopenharmony_ci                                                       vv
2762306a36Sopenharmony_ci                                                 Blended Video and
2862306a36Sopenharmony_ci                                                 Mixed Audio to PL
2962306a36Sopenharmony_ci
3062306a36Sopenharmony_ci  The Buffer Manager interacts with external interface such as DMA engines or
3162306a36Sopenharmony_ci  live audio/video streams from the programmable logic. The Video Rendering
3262306a36Sopenharmony_ci  Pipeline blends the video and graphics layers and performs colorspace
3362306a36Sopenharmony_ci  conversion. The Audio Mixer mixes the incoming audio streams. The DisplayPort
3462306a36Sopenharmony_ci  Source Controller handles the DisplayPort protocol and connects to external
3562306a36Sopenharmony_ci  PHYs.
3662306a36Sopenharmony_ci
3762306a36Sopenharmony_ci  The subsystem supports 2 video and 2 audio streams, and various pixel formats
3862306a36Sopenharmony_ci  and depths up to 4K@30 resolution.
3962306a36Sopenharmony_ci
4062306a36Sopenharmony_ci  Please refer to "Zynq UltraScale+ Device Technical Reference Manual"
4162306a36Sopenharmony_ci  (https://www.xilinx.com/support/documentation/user_guides/ug1085-zynq-ultrascale-trm.pdf)
4262306a36Sopenharmony_ci  for more details.
4362306a36Sopenharmony_ci
4462306a36Sopenharmony_cimaintainers:
4562306a36Sopenharmony_ci  - Laurent Pinchart <laurent.pinchart@ideasonboard.com>
4662306a36Sopenharmony_ci
4762306a36Sopenharmony_ciproperties:
4862306a36Sopenharmony_ci  compatible:
4962306a36Sopenharmony_ci    const: xlnx,zynqmp-dpsub-1.7
5062306a36Sopenharmony_ci
5162306a36Sopenharmony_ci  reg:
5262306a36Sopenharmony_ci    maxItems: 4
5362306a36Sopenharmony_ci  reg-names:
5462306a36Sopenharmony_ci    items:
5562306a36Sopenharmony_ci      - const: dp
5662306a36Sopenharmony_ci      - const: blend
5762306a36Sopenharmony_ci      - const: av_buf
5862306a36Sopenharmony_ci      - const: aud
5962306a36Sopenharmony_ci
6062306a36Sopenharmony_ci  interrupts:
6162306a36Sopenharmony_ci    maxItems: 1
6262306a36Sopenharmony_ci
6362306a36Sopenharmony_ci  clocks:
6462306a36Sopenharmony_ci    description:
6562306a36Sopenharmony_ci      The APB clock and at least one video clock are mandatory, the audio clock
6662306a36Sopenharmony_ci      is optional.
6762306a36Sopenharmony_ci    minItems: 2
6862306a36Sopenharmony_ci    items:
6962306a36Sopenharmony_ci      - description: dp_apb_clk is the APB clock
7062306a36Sopenharmony_ci      - description: dp_aud_clk is the Audio clock
7162306a36Sopenharmony_ci      - description:
7262306a36Sopenharmony_ci          dp_vtc_pixel_clk_in is the non-live video clock (from Processing
7362306a36Sopenharmony_ci          System)
7462306a36Sopenharmony_ci      - description:
7562306a36Sopenharmony_ci          dp_live_video_in_clk is the live video clock (from Programmable
7662306a36Sopenharmony_ci          Logic)
7762306a36Sopenharmony_ci  clock-names:
7862306a36Sopenharmony_ci    oneOf:
7962306a36Sopenharmony_ci      - minItems: 2
8062306a36Sopenharmony_ci        items:
8162306a36Sopenharmony_ci          - const: dp_apb_clk
8262306a36Sopenharmony_ci          - enum: [ dp_vtc_pixel_clk_in, dp_live_video_in_clk ]
8362306a36Sopenharmony_ci          - enum: [ dp_vtc_pixel_clk_in, dp_live_video_in_clk ]
8462306a36Sopenharmony_ci      - minItems: 3
8562306a36Sopenharmony_ci        items:
8662306a36Sopenharmony_ci          - const: dp_apb_clk
8762306a36Sopenharmony_ci          - const: dp_aud_clk
8862306a36Sopenharmony_ci          - enum: [ dp_vtc_pixel_clk_in, dp_live_video_in_clk ]
8962306a36Sopenharmony_ci          - enum: [ dp_vtc_pixel_clk_in, dp_live_video_in_clk ]
9062306a36Sopenharmony_ci
9162306a36Sopenharmony_ci  power-domains:
9262306a36Sopenharmony_ci    maxItems: 1
9362306a36Sopenharmony_ci
9462306a36Sopenharmony_ci  resets:
9562306a36Sopenharmony_ci    maxItems: 1
9662306a36Sopenharmony_ci
9762306a36Sopenharmony_ci  dmas:
9862306a36Sopenharmony_ci    items:
9962306a36Sopenharmony_ci      - description: Video layer, plane 0 (RGB or luma)
10062306a36Sopenharmony_ci      - description: Video layer, plane 1 (U/V or U)
10162306a36Sopenharmony_ci      - description: Video layer, plane 2 (V)
10262306a36Sopenharmony_ci      - description: Graphics layer
10362306a36Sopenharmony_ci  dma-names:
10462306a36Sopenharmony_ci    items:
10562306a36Sopenharmony_ci      - const: vid0
10662306a36Sopenharmony_ci      - const: vid1
10762306a36Sopenharmony_ci      - const: vid2
10862306a36Sopenharmony_ci      - const: gfx0
10962306a36Sopenharmony_ci
11062306a36Sopenharmony_ci  phys:
11162306a36Sopenharmony_ci    description: PHYs for the DP data lanes
11262306a36Sopenharmony_ci    minItems: 1
11362306a36Sopenharmony_ci    maxItems: 2
11462306a36Sopenharmony_ci  phy-names:
11562306a36Sopenharmony_ci    minItems: 1
11662306a36Sopenharmony_ci    items:
11762306a36Sopenharmony_ci      - const: dp-phy0
11862306a36Sopenharmony_ci      - const: dp-phy1
11962306a36Sopenharmony_ci
12062306a36Sopenharmony_ci  ports:
12162306a36Sopenharmony_ci    $ref: /schemas/graph.yaml#/properties/ports
12262306a36Sopenharmony_ci    description: |
12362306a36Sopenharmony_ci      Connections to the programmable logic and the DisplayPort PHYs. Each port
12462306a36Sopenharmony_ci      shall have a single endpoint.
12562306a36Sopenharmony_ci
12662306a36Sopenharmony_ci    properties:
12762306a36Sopenharmony_ci      port@0:
12862306a36Sopenharmony_ci        $ref: /schemas/graph.yaml#/properties/port
12962306a36Sopenharmony_ci        description: The live video input from the programmable logic
13062306a36Sopenharmony_ci
13162306a36Sopenharmony_ci      port@1:
13262306a36Sopenharmony_ci        $ref: /schemas/graph.yaml#/properties/port
13362306a36Sopenharmony_ci        description: The live graphics input from the programmable logic
13462306a36Sopenharmony_ci
13562306a36Sopenharmony_ci      port@2:
13662306a36Sopenharmony_ci        $ref: /schemas/graph.yaml#/properties/port
13762306a36Sopenharmony_ci        description: The live audio input from the programmable logic
13862306a36Sopenharmony_ci
13962306a36Sopenharmony_ci      port@3:
14062306a36Sopenharmony_ci        $ref: /schemas/graph.yaml#/properties/port
14162306a36Sopenharmony_ci        description: The blended video output to the programmable logic
14262306a36Sopenharmony_ci
14362306a36Sopenharmony_ci      port@4:
14462306a36Sopenharmony_ci        $ref: /schemas/graph.yaml#/properties/port
14562306a36Sopenharmony_ci        description: The mixed audio output to the programmable logic
14662306a36Sopenharmony_ci
14762306a36Sopenharmony_ci      port@5:
14862306a36Sopenharmony_ci        $ref: /schemas/graph.yaml#/properties/port
14962306a36Sopenharmony_ci        description: The DisplayPort output
15062306a36Sopenharmony_ci
15162306a36Sopenharmony_ci    required:
15262306a36Sopenharmony_ci      - port@0
15362306a36Sopenharmony_ci      - port@1
15462306a36Sopenharmony_ci      - port@2
15562306a36Sopenharmony_ci      - port@3
15662306a36Sopenharmony_ci      - port@4
15762306a36Sopenharmony_ci      - port@5
15862306a36Sopenharmony_ci
15962306a36Sopenharmony_cirequired:
16062306a36Sopenharmony_ci  - compatible
16162306a36Sopenharmony_ci  - reg
16262306a36Sopenharmony_ci  - reg-names
16362306a36Sopenharmony_ci  - interrupts
16462306a36Sopenharmony_ci  - clocks
16562306a36Sopenharmony_ci  - clock-names
16662306a36Sopenharmony_ci  - power-domains
16762306a36Sopenharmony_ci  - resets
16862306a36Sopenharmony_ci  - dmas
16962306a36Sopenharmony_ci  - dma-names
17062306a36Sopenharmony_ci  - phys
17162306a36Sopenharmony_ci  - phy-names
17262306a36Sopenharmony_ci  - ports
17362306a36Sopenharmony_ci
17462306a36Sopenharmony_ciadditionalProperties: false
17562306a36Sopenharmony_ci
17662306a36Sopenharmony_ciexamples:
17762306a36Sopenharmony_ci  - |
17862306a36Sopenharmony_ci    #include <dt-bindings/phy/phy.h>
17962306a36Sopenharmony_ci    #include <dt-bindings/reset/xlnx-zynqmp-resets.h>
18062306a36Sopenharmony_ci
18162306a36Sopenharmony_ci    display@fd4a0000 {
18262306a36Sopenharmony_ci        compatible = "xlnx,zynqmp-dpsub-1.7";
18362306a36Sopenharmony_ci        reg = <0xfd4a0000 0x1000>,
18462306a36Sopenharmony_ci              <0xfd4aa000 0x1000>,
18562306a36Sopenharmony_ci              <0xfd4ab000 0x1000>,
18662306a36Sopenharmony_ci              <0xfd4ac000 0x1000>;
18762306a36Sopenharmony_ci        reg-names = "dp", "blend", "av_buf", "aud";
18862306a36Sopenharmony_ci        interrupts = <0 119 4>;
18962306a36Sopenharmony_ci        interrupt-parent = <&gic>;
19062306a36Sopenharmony_ci
19162306a36Sopenharmony_ci        clock-names = "dp_apb_clk", "dp_aud_clk", "dp_live_video_in_clk";
19262306a36Sopenharmony_ci        clocks = <&dp_aclk>, <&clkc 17>, <&si570_1>;
19362306a36Sopenharmony_ci
19462306a36Sopenharmony_ci        power-domains = <&pd_dp>;
19562306a36Sopenharmony_ci        resets = <&reset ZYNQMP_RESET_DP>;
19662306a36Sopenharmony_ci
19762306a36Sopenharmony_ci        dma-names = "vid0", "vid1", "vid2", "gfx0";
19862306a36Sopenharmony_ci        dmas = <&xlnx_dpdma 0>,
19962306a36Sopenharmony_ci               <&xlnx_dpdma 1>,
20062306a36Sopenharmony_ci               <&xlnx_dpdma 2>,
20162306a36Sopenharmony_ci               <&xlnx_dpdma 3>;
20262306a36Sopenharmony_ci
20362306a36Sopenharmony_ci        phys = <&psgtr 1 PHY_TYPE_DP 0 3>,
20462306a36Sopenharmony_ci               <&psgtr 0 PHY_TYPE_DP 1 3>;
20562306a36Sopenharmony_ci
20662306a36Sopenharmony_ci        phy-names = "dp-phy0", "dp-phy1";
20762306a36Sopenharmony_ci
20862306a36Sopenharmony_ci        ports {
20962306a36Sopenharmony_ci            #address-cells = <1>;
21062306a36Sopenharmony_ci            #size-cells = <0>;
21162306a36Sopenharmony_ci
21262306a36Sopenharmony_ci            port@0 {
21362306a36Sopenharmony_ci                reg = <0>;
21462306a36Sopenharmony_ci            };
21562306a36Sopenharmony_ci            port@1 {
21662306a36Sopenharmony_ci                reg = <1>;
21762306a36Sopenharmony_ci            };
21862306a36Sopenharmony_ci            port@2 {
21962306a36Sopenharmony_ci                reg = <2>;
22062306a36Sopenharmony_ci            };
22162306a36Sopenharmony_ci            port@3 {
22262306a36Sopenharmony_ci                reg = <3>;
22362306a36Sopenharmony_ci            };
22462306a36Sopenharmony_ci            port@4 {
22562306a36Sopenharmony_ci                reg = <4>;
22662306a36Sopenharmony_ci            };
22762306a36Sopenharmony_ci            port@5 {
22862306a36Sopenharmony_ci                reg = <5>;
22962306a36Sopenharmony_ci                dpsub_dp_out: endpoint {
23062306a36Sopenharmony_ci                    remote-endpoint = <&dp_connector>;
23162306a36Sopenharmony_ci                };
23262306a36Sopenharmony_ci            };
23362306a36Sopenharmony_ci        };
23462306a36Sopenharmony_ci    };
23562306a36Sopenharmony_ci
23662306a36Sopenharmony_ci...
237