xref: /OK3568_Linux_fs/kernel/Documentation/devicetree/bindings/display/mediatek/mediatek,disp.txt (revision 4882a59341e53eb6f0b4789bf948001014eff981)
1*4882a593SmuzhiyunMediatek display subsystem
2*4882a593Smuzhiyun==========================
3*4882a593Smuzhiyun
4*4882a593SmuzhiyunThe Mediatek display subsystem consists of various DISP function blocks in the
5*4882a593SmuzhiyunMMSYS register space. The connections between them can be configured by output
6*4882a593Smuzhiyunand input selectors in the MMSYS_CONFIG register space. Pixel clock and start
7*4882a593Smuzhiyunof frame signal are distributed to the other function blocks by a DISP_MUTEX
8*4882a593Smuzhiyunfunction block.
9*4882a593Smuzhiyun
10*4882a593SmuzhiyunAll DISP device tree nodes must be siblings to the central MMSYS_CONFIG node.
11*4882a593SmuzhiyunFor a description of the MMSYS_CONFIG binding, see
12*4882a593SmuzhiyunDocumentation/devicetree/bindings/arm/mediatek/mediatek,mmsys.txt.
13*4882a593Smuzhiyun
14*4882a593SmuzhiyunDISP function blocks
15*4882a593Smuzhiyun====================
16*4882a593Smuzhiyun
17*4882a593SmuzhiyunA display stream starts at a source function block that reads pixel data from
18*4882a593Smuzhiyunmemory and ends with a sink function block that drives pixels on a display
19*4882a593Smuzhiyuninterface, or writes pixels back to memory. All DISP function blocks have
20*4882a593Smuzhiyuntheir own register space, interrupt, and clock gate. The blocks that can
21*4882a593Smuzhiyunaccess memory additionally have to list the IOMMU and local arbiter they are
22*4882a593Smuzhiyunconnected to.
23*4882a593Smuzhiyun
24*4882a593SmuzhiyunFor a description of the display interface sink function blocks, see
25*4882a593SmuzhiyunDocumentation/devicetree/bindings/display/mediatek/mediatek,dsi.txt and
26*4882a593SmuzhiyunDocumentation/devicetree/bindings/display/mediatek/mediatek,dpi.txt.
27*4882a593Smuzhiyun
28*4882a593SmuzhiyunRequired properties (all function blocks):
29*4882a593Smuzhiyun- compatible: "mediatek,<chip>-disp-<function>", one of
30*4882a593Smuzhiyun	"mediatek,<chip>-disp-ovl"   		- overlay (4 layers, blending, csc)
31*4882a593Smuzhiyun	"mediatek,<chip>-disp-ovl-2l"           - overlay (2 layers, blending, csc)
32*4882a593Smuzhiyun	"mediatek,<chip>-disp-rdma"  		- read DMA / line buffer
33*4882a593Smuzhiyun	"mediatek,<chip>-disp-wdma"  		- write DMA
34*4882a593Smuzhiyun	"mediatek,<chip>-disp-ccorr"            - color correction
35*4882a593Smuzhiyun	"mediatek,<chip>-disp-color" 		- color processor
36*4882a593Smuzhiyun	"mediatek,<chip>-disp-dither"           - dither
37*4882a593Smuzhiyun	"mediatek,<chip>-disp-aal"   		- adaptive ambient light controller
38*4882a593Smuzhiyun	"mediatek,<chip>-disp-gamma" 		- gamma correction
39*4882a593Smuzhiyun	"mediatek,<chip>-disp-merge" 		- merge streams from two RDMA sources
40*4882a593Smuzhiyun	"mediatek,<chip>-disp-split" 		- split stream to two encoders
41*4882a593Smuzhiyun	"mediatek,<chip>-disp-ufoe"  		- data compression engine
42*4882a593Smuzhiyun	"mediatek,<chip>-dsi"        		- DSI controller, see mediatek,dsi.txt
43*4882a593Smuzhiyun	"mediatek,<chip>-dpi"        		- DPI controller, see mediatek,dpi.txt
44*4882a593Smuzhiyun	"mediatek,<chip>-disp-mutex" 		- display mutex
45*4882a593Smuzhiyun	"mediatek,<chip>-disp-od"    		- overdrive
46*4882a593Smuzhiyun  the supported chips are mt2701, mt7623, mt2712 and mt8173.
47*4882a593Smuzhiyun- reg: Physical base address and length of the function block register space
48*4882a593Smuzhiyun- interrupts: The interrupt signal from the function block (required, except for
49*4882a593Smuzhiyun  merge and split function blocks).
50*4882a593Smuzhiyun- clocks: device clocks
51*4882a593Smuzhiyun  See Documentation/devicetree/bindings/clock/clock-bindings.txt for details.
52*4882a593Smuzhiyun  For most function blocks this is just a single clock input. Only the DSI and
53*4882a593Smuzhiyun  DPI controller nodes have multiple clock inputs. These are documented in
54*4882a593Smuzhiyun  mediatek,dsi.txt and mediatek,dpi.txt, respectively.
55*4882a593Smuzhiyun  An exception is that the mt8183 mutex is always free running with no clocks property.
56*4882a593Smuzhiyun
57*4882a593SmuzhiyunRequired properties (DMA function blocks):
58*4882a593Smuzhiyun- compatible: Should be one of
59*4882a593Smuzhiyun	"mediatek,<chip>-disp-ovl"
60*4882a593Smuzhiyun	"mediatek,<chip>-disp-rdma"
61*4882a593Smuzhiyun	"mediatek,<chip>-disp-wdma"
62*4882a593Smuzhiyun  the supported chips are mt2701 and mt8173.
63*4882a593Smuzhiyun- larb: Should contain a phandle pointing to the local arbiter device as defined
64*4882a593Smuzhiyun  in Documentation/devicetree/bindings/memory-controllers/mediatek,smi-larb.txt
65*4882a593Smuzhiyun- iommus: Should point to the respective IOMMU block with master port as
66*4882a593Smuzhiyun  argument, see Documentation/devicetree/bindings/iommu/mediatek,iommu.yaml
67*4882a593Smuzhiyun  for details.
68*4882a593Smuzhiyun
69*4882a593SmuzhiyunExamples:
70*4882a593Smuzhiyun
71*4882a593Smuzhiyunmmsys: clock-controller@14000000 {
72*4882a593Smuzhiyun	compatible = "mediatek,mt8173-mmsys", "syscon";
73*4882a593Smuzhiyun	reg = <0 0x14000000 0 0x1000>;
74*4882a593Smuzhiyun	power-domains = <&scpsys MT8173_POWER_DOMAIN_MM>;
75*4882a593Smuzhiyun	#clock-cells = <1>;
76*4882a593Smuzhiyun};
77*4882a593Smuzhiyun
78*4882a593Smuzhiyunovl0: ovl@1400c000 {
79*4882a593Smuzhiyun	compatible = "mediatek,mt8173-disp-ovl";
80*4882a593Smuzhiyun	reg = <0 0x1400c000 0 0x1000>;
81*4882a593Smuzhiyun	interrupts = <GIC_SPI 180 IRQ_TYPE_LEVEL_LOW>;
82*4882a593Smuzhiyun	power-domains = <&scpsys MT8173_POWER_DOMAIN_MM>;
83*4882a593Smuzhiyun	clocks = <&mmsys CLK_MM_DISP_OVL0>;
84*4882a593Smuzhiyun	iommus = <&iommu M4U_PORT_DISP_OVL0>;
85*4882a593Smuzhiyun	mediatek,larb = <&larb0>;
86*4882a593Smuzhiyun};
87*4882a593Smuzhiyun
88*4882a593Smuzhiyunovl1: ovl@1400d000 {
89*4882a593Smuzhiyun	compatible = "mediatek,mt8173-disp-ovl";
90*4882a593Smuzhiyun	reg = <0 0x1400d000 0 0x1000>;
91*4882a593Smuzhiyun	interrupts = <GIC_SPI 181 IRQ_TYPE_LEVEL_LOW>;
92*4882a593Smuzhiyun	power-domains = <&scpsys MT8173_POWER_DOMAIN_MM>;
93*4882a593Smuzhiyun	clocks = <&mmsys CLK_MM_DISP_OVL1>;
94*4882a593Smuzhiyun	iommus = <&iommu M4U_PORT_DISP_OVL1>;
95*4882a593Smuzhiyun	mediatek,larb = <&larb4>;
96*4882a593Smuzhiyun};
97*4882a593Smuzhiyun
98*4882a593Smuzhiyunrdma0: rdma@1400e000 {
99*4882a593Smuzhiyun	compatible = "mediatek,mt8173-disp-rdma";
100*4882a593Smuzhiyun	reg = <0 0x1400e000 0 0x1000>;
101*4882a593Smuzhiyun	interrupts = <GIC_SPI 182 IRQ_TYPE_LEVEL_LOW>;
102*4882a593Smuzhiyun	power-domains = <&scpsys MT8173_POWER_DOMAIN_MM>;
103*4882a593Smuzhiyun	clocks = <&mmsys CLK_MM_DISP_RDMA0>;
104*4882a593Smuzhiyun	iommus = <&iommu M4U_PORT_DISP_RDMA0>;
105*4882a593Smuzhiyun	mediatek,larb = <&larb0>;
106*4882a593Smuzhiyun};
107*4882a593Smuzhiyun
108*4882a593Smuzhiyunrdma1: rdma@1400f000 {
109*4882a593Smuzhiyun	compatible = "mediatek,mt8173-disp-rdma";
110*4882a593Smuzhiyun	reg = <0 0x1400f000 0 0x1000>;
111*4882a593Smuzhiyun	interrupts = <GIC_SPI 183 IRQ_TYPE_LEVEL_LOW>;
112*4882a593Smuzhiyun	power-domains = <&scpsys MT8173_POWER_DOMAIN_MM>;
113*4882a593Smuzhiyun	clocks = <&mmsys CLK_MM_DISP_RDMA1>;
114*4882a593Smuzhiyun	iommus = <&iommu M4U_PORT_DISP_RDMA1>;
115*4882a593Smuzhiyun	mediatek,larb = <&larb4>;
116*4882a593Smuzhiyun};
117*4882a593Smuzhiyun
118*4882a593Smuzhiyunrdma2: rdma@14010000 {
119*4882a593Smuzhiyun	compatible = "mediatek,mt8173-disp-rdma";
120*4882a593Smuzhiyun	reg = <0 0x14010000 0 0x1000>;
121*4882a593Smuzhiyun	interrupts = <GIC_SPI 184 IRQ_TYPE_LEVEL_LOW>;
122*4882a593Smuzhiyun	power-domains = <&scpsys MT8173_POWER_DOMAIN_MM>;
123*4882a593Smuzhiyun	clocks = <&mmsys CLK_MM_DISP_RDMA2>;
124*4882a593Smuzhiyun	iommus = <&iommu M4U_PORT_DISP_RDMA2>;
125*4882a593Smuzhiyun	mediatek,larb = <&larb4>;
126*4882a593Smuzhiyun};
127*4882a593Smuzhiyun
128*4882a593Smuzhiyunwdma0: wdma@14011000 {
129*4882a593Smuzhiyun	compatible = "mediatek,mt8173-disp-wdma";
130*4882a593Smuzhiyun	reg = <0 0x14011000 0 0x1000>;
131*4882a593Smuzhiyun	interrupts = <GIC_SPI 185 IRQ_TYPE_LEVEL_LOW>;
132*4882a593Smuzhiyun	power-domains = <&scpsys MT8173_POWER_DOMAIN_MM>;
133*4882a593Smuzhiyun	clocks = <&mmsys CLK_MM_DISP_WDMA0>;
134*4882a593Smuzhiyun	iommus = <&iommu M4U_PORT_DISP_WDMA0>;
135*4882a593Smuzhiyun	mediatek,larb = <&larb0>;
136*4882a593Smuzhiyun};
137*4882a593Smuzhiyun
138*4882a593Smuzhiyunwdma1: wdma@14012000 {
139*4882a593Smuzhiyun	compatible = "mediatek,mt8173-disp-wdma";
140*4882a593Smuzhiyun	reg = <0 0x14012000 0 0x1000>;
141*4882a593Smuzhiyun	interrupts = <GIC_SPI 186 IRQ_TYPE_LEVEL_LOW>;
142*4882a593Smuzhiyun	power-domains = <&scpsys MT8173_POWER_DOMAIN_MM>;
143*4882a593Smuzhiyun	clocks = <&mmsys CLK_MM_DISP_WDMA1>;
144*4882a593Smuzhiyun	iommus = <&iommu M4U_PORT_DISP_WDMA1>;
145*4882a593Smuzhiyun	mediatek,larb = <&larb4>;
146*4882a593Smuzhiyun};
147*4882a593Smuzhiyun
148*4882a593Smuzhiyuncolor0: color@14013000 {
149*4882a593Smuzhiyun	compatible = "mediatek,mt8173-disp-color";
150*4882a593Smuzhiyun	reg = <0 0x14013000 0 0x1000>;
151*4882a593Smuzhiyun	interrupts = <GIC_SPI 187 IRQ_TYPE_LEVEL_LOW>;
152*4882a593Smuzhiyun	power-domains = <&scpsys MT8173_POWER_DOMAIN_MM>;
153*4882a593Smuzhiyun	clocks = <&mmsys CLK_MM_DISP_COLOR0>;
154*4882a593Smuzhiyun};
155*4882a593Smuzhiyun
156*4882a593Smuzhiyuncolor1: color@14014000 {
157*4882a593Smuzhiyun	compatible = "mediatek,mt8173-disp-color";
158*4882a593Smuzhiyun	reg = <0 0x14014000 0 0x1000>;
159*4882a593Smuzhiyun	interrupts = <GIC_SPI 188 IRQ_TYPE_LEVEL_LOW>;
160*4882a593Smuzhiyun	power-domains = <&scpsys MT8173_POWER_DOMAIN_MM>;
161*4882a593Smuzhiyun	clocks = <&mmsys CLK_MM_DISP_COLOR1>;
162*4882a593Smuzhiyun};
163*4882a593Smuzhiyun
164*4882a593Smuzhiyunaal@14015000 {
165*4882a593Smuzhiyun	compatible = "mediatek,mt8173-disp-aal";
166*4882a593Smuzhiyun	reg = <0 0x14015000 0 0x1000>;
167*4882a593Smuzhiyun	interrupts = <GIC_SPI 189 IRQ_TYPE_LEVEL_LOW>;
168*4882a593Smuzhiyun	power-domains = <&scpsys MT8173_POWER_DOMAIN_MM>;
169*4882a593Smuzhiyun	clocks = <&mmsys CLK_MM_DISP_AAL>;
170*4882a593Smuzhiyun};
171*4882a593Smuzhiyun
172*4882a593Smuzhiyungamma@14016000 {
173*4882a593Smuzhiyun	compatible = "mediatek,mt8173-disp-gamma";
174*4882a593Smuzhiyun	reg = <0 0x14016000 0 0x1000>;
175*4882a593Smuzhiyun	interrupts = <GIC_SPI 190 IRQ_TYPE_LEVEL_LOW>;
176*4882a593Smuzhiyun	power-domains = <&scpsys MT8173_POWER_DOMAIN_MM>;
177*4882a593Smuzhiyun	clocks = <&mmsys CLK_MM_DISP_GAMMA>;
178*4882a593Smuzhiyun};
179*4882a593Smuzhiyun
180*4882a593Smuzhiyunufoe@1401a000 {
181*4882a593Smuzhiyun	compatible = "mediatek,mt8173-disp-ufoe";
182*4882a593Smuzhiyun	reg = <0 0x1401a000 0 0x1000>;
183*4882a593Smuzhiyun	interrupts = <GIC_SPI 191 IRQ_TYPE_LEVEL_LOW>;
184*4882a593Smuzhiyun	power-domains = <&scpsys MT8173_POWER_DOMAIN_MM>;
185*4882a593Smuzhiyun	clocks = <&mmsys CLK_MM_DISP_UFOE>;
186*4882a593Smuzhiyun};
187*4882a593Smuzhiyun
188*4882a593Smuzhiyundsi0: dsi@1401b000 {
189*4882a593Smuzhiyun	/* See mediatek,dsi.txt for details */
190*4882a593Smuzhiyun};
191*4882a593Smuzhiyun
192*4882a593Smuzhiyundpi0: dpi@1401d000 {
193*4882a593Smuzhiyun	/* See mediatek,dpi.txt for details */
194*4882a593Smuzhiyun};
195*4882a593Smuzhiyun
196*4882a593Smuzhiyunmutex: mutex@14020000 {
197*4882a593Smuzhiyun	compatible = "mediatek,mt8173-disp-mutex";
198*4882a593Smuzhiyun	reg = <0 0x14020000 0 0x1000>;
199*4882a593Smuzhiyun	interrupts = <GIC_SPI 169 IRQ_TYPE_LEVEL_LOW>;
200*4882a593Smuzhiyun	power-domains = <&scpsys MT8173_POWER_DOMAIN_MM>;
201*4882a593Smuzhiyun	clocks = <&mmsys CLK_MM_MUTEX_32K>;
202*4882a593Smuzhiyun};
203*4882a593Smuzhiyun
204*4882a593Smuzhiyunod@14023000 {
205*4882a593Smuzhiyun	compatible = "mediatek,mt8173-disp-od";
206*4882a593Smuzhiyun	reg = <0 0x14023000 0 0x1000>;
207*4882a593Smuzhiyun	power-domains = <&scpsys MT8173_POWER_DOMAIN_MM>;
208*4882a593Smuzhiyun	clocks = <&mmsys CLK_MM_DISP_OD>;
209*4882a593Smuzhiyun};
210