xref: /OK3568_Linux_fs/kernel/Documentation/devicetree/bindings/dma/xilinx/xilinx_dma.txt (revision 4882a59341e53eb6f0b4789bf948001014eff981)
1*4882a593SmuzhiyunXilinx AXI VDMA engine, it does transfers between memory and video devices.
2*4882a593SmuzhiyunIt can be configured to have one channel or two channels. If configured
3*4882a593Smuzhiyunas two channels, one is to transmit to the video device and another is
4*4882a593Smuzhiyunto receive from the video device.
5*4882a593Smuzhiyun
6*4882a593SmuzhiyunXilinx AXI DMA engine, it does transfers between memory and AXI4 stream
7*4882a593Smuzhiyuntarget devices. It can be configured to have one channel or two channels.
8*4882a593SmuzhiyunIf configured as two channels, one is to transmit to the device and another
9*4882a593Smuzhiyunis to receive from the device.
10*4882a593Smuzhiyun
11*4882a593SmuzhiyunXilinx AXI CDMA engine, it does transfers between memory-mapped source
12*4882a593Smuzhiyunaddress and a memory-mapped destination address.
13*4882a593Smuzhiyun
14*4882a593SmuzhiyunXilinx AXI MCDMA engine, it does transfer between memory and AXI4 stream
15*4882a593Smuzhiyuntarget devices. It can be configured to have up to 16 independent transmit
16*4882a593Smuzhiyunand receive channels.
17*4882a593Smuzhiyun
18*4882a593SmuzhiyunRequired properties:
19*4882a593Smuzhiyun- compatible: Should be one of-
20*4882a593Smuzhiyun		"xlnx,axi-vdma-1.00.a"
21*4882a593Smuzhiyun		"xlnx,axi-dma-1.00.a"
22*4882a593Smuzhiyun		"xlnx,axi-cdma-1.00.a"
23*4882a593Smuzhiyun		"xlnx,axi-mcdma-1.00.a"
24*4882a593Smuzhiyun- #dma-cells: Should be <1>, see "dmas" property below
25*4882a593Smuzhiyun- reg: Should contain VDMA registers location and length.
26*4882a593Smuzhiyun- xlnx,addrwidth: Should be the vdma addressing size in bits(ex: 32 bits).
27*4882a593Smuzhiyun- dma-ranges: Should be as the following <dma_addr cpu_addr max_len>.
28*4882a593Smuzhiyun- dma-channel child node: Should have at least one channel and can have up to
29*4882a593Smuzhiyun	two channels per device. This node specifies the properties of each
30*4882a593Smuzhiyun	DMA channel (see child node properties below).
31*4882a593Smuzhiyun- clocks: Input clock specifier. Refer to common clock bindings.
32*4882a593Smuzhiyun- clock-names: List of input clocks
33*4882a593Smuzhiyun	For VDMA:
34*4882a593Smuzhiyun	Required elements: "s_axi_lite_aclk"
35*4882a593Smuzhiyun	Optional elements: "m_axi_mm2s_aclk" "m_axi_s2mm_aclk",
36*4882a593Smuzhiyun			   "m_axis_mm2s_aclk", "s_axis_s2mm_aclk"
37*4882a593Smuzhiyun	For CDMA:
38*4882a593Smuzhiyun	Required elements: "s_axi_lite_aclk", "m_axi_aclk"
39*4882a593Smuzhiyun	For AXIDMA and MCDMA:
40*4882a593Smuzhiyun	Required elements: "s_axi_lite_aclk"
41*4882a593Smuzhiyun	Optional elements: "m_axi_mm2s_aclk", "m_axi_s2mm_aclk",
42*4882a593Smuzhiyun			   "m_axi_sg_aclk"
43*4882a593Smuzhiyun
44*4882a593SmuzhiyunRequired properties for VDMA:
45*4882a593Smuzhiyun- xlnx,num-fstores: Should be the number of framebuffers as configured in h/w.
46*4882a593Smuzhiyun
47*4882a593SmuzhiyunOptional properties for AXI DMA and MCDMA:
48*4882a593Smuzhiyun- xlnx,sg-length-width: Should be set to the width in bits of the length
49*4882a593Smuzhiyun	register as configured in h/w. Takes values {8...26}. If the property
50*4882a593Smuzhiyun	is missing or invalid then the default value 23 is used. This is the
51*4882a593Smuzhiyun	maximum value that is supported by all IP versions.
52*4882a593SmuzhiyunOptional properties for VDMA:
53*4882a593Smuzhiyun- xlnx,flush-fsync: Tells which channel to Flush on Frame sync.
54*4882a593Smuzhiyun	It takes following values:
55*4882a593Smuzhiyun	{1}, flush both channels
56*4882a593Smuzhiyun	{2}, flush mm2s channel
57*4882a593Smuzhiyun	{3}, flush s2mm channel
58*4882a593Smuzhiyun
59*4882a593SmuzhiyunRequired child node properties:
60*4882a593Smuzhiyun- compatible:
61*4882a593Smuzhiyun	For VDMA: It should be either "xlnx,axi-vdma-mm2s-channel" or
62*4882a593Smuzhiyun	"xlnx,axi-vdma-s2mm-channel".
63*4882a593Smuzhiyun	For CDMA: It should be "xlnx,axi-cdma-channel".
64*4882a593Smuzhiyun	For AXIDMA and MCDMA: It should be either "xlnx,axi-dma-mm2s-channel"
65*4882a593Smuzhiyun	or "xlnx,axi-dma-s2mm-channel".
66*4882a593Smuzhiyun- interrupts: Should contain per channel VDMA interrupts.
67*4882a593Smuzhiyun- xlnx,datawidth: Should contain the stream data width, take values
68*4882a593Smuzhiyun	{32,64...1024}.
69*4882a593Smuzhiyun
70*4882a593SmuzhiyunOptional child node properties:
71*4882a593Smuzhiyun- xlnx,include-dre: Tells hardware is configured for Data
72*4882a593Smuzhiyun	Realignment Engine.
73*4882a593SmuzhiyunOptional child node properties for VDMA:
74*4882a593Smuzhiyun- xlnx,genlock-mode: Tells Genlock synchronization is
75*4882a593Smuzhiyun	enabled/disabled in hardware.
76*4882a593Smuzhiyun- xlnx,enable-vert-flip: Tells vertical flip is
77*4882a593Smuzhiyun	enabled/disabled in hardware(S2MM path).
78*4882a593SmuzhiyunOptional child node properties for MCDMA:
79*4882a593Smuzhiyun- dma-channels: Number of dma channels in child node.
80*4882a593Smuzhiyun
81*4882a593SmuzhiyunExample:
82*4882a593Smuzhiyun++++++++
83*4882a593Smuzhiyun
84*4882a593Smuzhiyunaxi_vdma_0: axivdma@40030000 {
85*4882a593Smuzhiyun	compatible = "xlnx,axi-vdma-1.00.a";
86*4882a593Smuzhiyun	#dma_cells = <1>;
87*4882a593Smuzhiyun	reg = < 0x40030000 0x10000 >;
88*4882a593Smuzhiyun	dma-ranges = <0x00000000 0x00000000 0x40000000>;
89*4882a593Smuzhiyun	xlnx,num-fstores = <0x8>;
90*4882a593Smuzhiyun	xlnx,flush-fsync = <0x1>;
91*4882a593Smuzhiyun	xlnx,addrwidth = <0x20>;
92*4882a593Smuzhiyun	clocks = <&clk 0>, <&clk 1>, <&clk 2>, <&clk 3>, <&clk 4>;
93*4882a593Smuzhiyun	clock-names = "s_axi_lite_aclk", "m_axi_mm2s_aclk", "m_axi_s2mm_aclk",
94*4882a593Smuzhiyun		      "m_axis_mm2s_aclk", "s_axis_s2mm_aclk";
95*4882a593Smuzhiyun	dma-channel@40030000 {
96*4882a593Smuzhiyun		compatible = "xlnx,axi-vdma-mm2s-channel";
97*4882a593Smuzhiyun		interrupts = < 0 54 4 >;
98*4882a593Smuzhiyun		xlnx,datawidth = <0x40>;
99*4882a593Smuzhiyun	} ;
100*4882a593Smuzhiyun	dma-channel@40030030 {
101*4882a593Smuzhiyun		compatible = "xlnx,axi-vdma-s2mm-channel";
102*4882a593Smuzhiyun		interrupts = < 0 53 4 >;
103*4882a593Smuzhiyun		xlnx,datawidth = <0x40>;
104*4882a593Smuzhiyun	} ;
105*4882a593Smuzhiyun} ;
106*4882a593Smuzhiyun
107*4882a593Smuzhiyun
108*4882a593Smuzhiyun* DMA client
109*4882a593Smuzhiyun
110*4882a593SmuzhiyunRequired properties:
111*4882a593Smuzhiyun- dmas: a list of <[Video DMA device phandle] [Channel ID]> pairs,
112*4882a593Smuzhiyun	where Channel ID is '0' for write/tx and '1' for read/rx
113*4882a593Smuzhiyun	channel.
114*4882a593Smuzhiyun- dma-names: a list of DMA channel names, one per "dmas" entry
115*4882a593Smuzhiyun
116*4882a593SmuzhiyunExample:
117*4882a593Smuzhiyun++++++++
118*4882a593Smuzhiyun
119*4882a593Smuzhiyunvdmatest_0: vdmatest@0 {
120*4882a593Smuzhiyun	compatible ="xlnx,axi-vdma-test-1.00.a";
121*4882a593Smuzhiyun	dmas = <&axi_vdma_0 0
122*4882a593Smuzhiyun		&axi_vdma_0 1>;
123*4882a593Smuzhiyun	dma-names = "vdma0", "vdma1";
124*4882a593Smuzhiyun} ;
125