All of lore.kernel.org
 help / color / mirror / Atom feed
diff for duplicates of <773cbb9b4bc8b03c06a5d48a6df7e2faeb3fb49a.camel@mediatek.com>

diff --git a/N1/2.bin b/N1/2.bin
new file mode 100644
index 0000000..796075f
--- /dev/null
+++ b/N1/2.bin
@@ -0,0 +1,1132 @@
+<html><body><p>
+<pre>
+On&#32;Wed,&#32;2025-02-12&#32;at&#32;09:30&#32;+0000,&#32;CK&#32;Hu&#32;(&#32993;&#20426;&#20809;)&#32;wrote:
+&gt;&#32;Hi,&#32;Paul:
+&gt;&#32;
+&gt;&#32;On&#32;Fri,&#32;2025-01-10&#32;at&#32;20:34&#32;+0800,&#32;paul-pl.chen&#32;wrote:
+&gt;&#32;&gt;&#32;From:&#32;&quot;Nancy.Lin&quot;&#32;&lt;nancy.lin@mediatek.com&gt;
+&gt;&#32;&gt;&#32;
+&gt;&#32;&gt;&#32;To&#32;support&#32;multiple&#32;mmsys&#32;instances&#32;in&#32;the&#32;one&#32;mediatek-drm
+&gt;&#32;&gt;&#32;instance,
+&gt;&#32;&gt;&#32;providing&#32;improved&#32;flexibility&#32;and&#32;scalability&#32;by&#32;the&#32;following
+&gt;&#32;&gt;&#32;changes:
+&gt;&#32;&gt;&#32;
+&gt;&#32;&gt;&#32;1.&#32;Defined&#32;new&#32;DRM&#32;component&#32;IDs&#32;DDP_COMPONENT_DRM_OVLSYS_ADAPTOR*
+&gt;&#32;&gt;&#32;&#160;&#32;to&#32;support&#32;different&#32;mmsys&#32;composition.
+&gt;&#32;&gt;&#32;2.&#32;Added&#32;new&#32;component&#32;types&#32;MTK_DISP_VIRTUAL&#32;to&#32;support&#32;the
+&gt;&#32;&gt;&#32;&#160;&#32;routing&#32;to&#32;virtual&#32;display&#32;components.
+&gt;&#32;&gt;&#32;3.&#32;Added&#32;and&#32;adjusted&#32;the&#32;existed&#32;structure&#32;or&#32;interface&#32;to&#32;extend
+&gt;&#32;&gt;&#32;&#160;&#32;the&#32;support&#32;of&#32;multiple&#32;mmsys&#32;instances.
+&gt;&#32;&gt;&#32;4.&#32;Modified&#32;the&#32;component&#32;matching&#32;and&#32;binding&#32;logic&#32;to&#32;support
+&gt;&#32;&gt;&#32;&#160;&#32;multiple&#32;mmsys&#32;instances.
+&gt;&#32;
+&gt;&#32;I&#32;think&#32;the&#32;title&#32;would&#32;confuse&#32;me.
+&gt;&#32;Original&#32;mediatek-drm&#32;driver&#32;already&#32;support&#32;multiple&#32;mmsys.
+&gt;&#32;I&#32;try&#32;to&#32;understand&#32;MT8196&#32;display.
+&gt;&#32;Is&#32;one&#32;display&#32;pipeline&#32;separated&#32;into&#32;two&#32;mmsys&#63;
+&gt;&#32;The&#32;first&#32;is&#32;ovlsys&#32;and&#32;the&#32;second&#32;is&#32;dispsys&#63;
+&gt;&#32;If&#32;so,&#32;I&#32;would&#32;like&#32;mediatek-drm&#32;driver&#32;see&#32;only&#32;mmsys&#32;(dispsys),
+&gt;&#32;and&#32;let&#32;ovlsys&#32;control&#32;is&#32;hidden&#32;in&#32;ovlsys&#32;sub&#32;driver,&#32;so&#32;mediatek-
+&gt;&#32;drm&#32;driver&#32;would&#32;not&#32;change&#32;so&#32;much.
+&gt;&#32;
+&gt;&#32;&gt;&#32;
+&gt;&#32;&gt;&#32;Signed-off-by:&#32;Nancy.Lin&#32;&lt;nancy.lin@mediatek.com&gt;
+&gt;&#32;&gt;&#32;Signed-off-by:&#32;Paul-pl.Chen&#32;&lt;paul-pl.chen@mediatek.com&gt;
+&gt;&#32;&gt;&#32;---
+&gt;&#32;&gt;&#32;&#160;drivers/gpu/drm/mediatek/mtk_crtc.c&#160;&#160;&#160;&#160;&#32;|&#32;350&#32;+++++++++++++++++++-
+&gt;&#32;&gt;&#32;----
+&gt;&#32;&gt;&#32;&#160;drivers/gpu/drm/mediatek/mtk_crtc.h&#160;&#160;&#160;&#160;&#32;|&#160;&#160;&#32;6&#32;+-
+&gt;&#32;&gt;&#32;&#160;drivers/gpu/drm/mediatek/mtk_ddp_comp.c&#32;|&#32;106&#32;+++++--
+&gt;&#32;&gt;&#32;&#160;drivers/gpu/drm/mediatek/mtk_ddp_comp.h&#32;|&#160;&#160;&#32;2&#32;+
+&gt;&#32;&gt;&#32;&#160;drivers/gpu/drm/mediatek/mtk_drm_drv.c&#160;&#32;|&#32;223&#32;++++++++++++---
+&gt;&#32;&gt;&#32;&#160;drivers/gpu/drm/mediatek/mtk_drm_drv.h&#160;&#32;|&#160;&#32;16&#32;+-
+&gt;&#32;&gt;&#32;&#160;6&#32;files&#32;changed,&#32;578&#32;insertions(+),&#32;125&#32;deletions(-)
+&gt;&#32;&gt;&#32;
+&gt;&#32;&gt;&#32;diff&#32;--git&#32;a/drivers/gpu/drm/mediatek/mtk_crtc.c
+&gt;&#32;&gt;&#32;b/drivers/gpu/drm/mediatek/mtk_crtc.c
+&gt;&#32;&gt;&#32;index&#32;eb0e1233ad04..eca6941bfaa2&#32;100644
+&gt;&#32;&gt;&#32;---&#32;a/drivers/gpu/drm/mediatek/mtk_crtc.c
+&gt;&#32;&gt;&#32;+++&#32;b/drivers/gpu/drm/mediatek/mtk_crtc.c
+&gt;&#32;&gt;&#32;@@&#32;-58,13&#32;+58,17&#32;@@&#32;struct&#32;mtk_crtc&#32;{
+&gt;&#32;&gt;&#32;&#160;wait_queue_head_tcb_blocking_queue;
+&gt;&#32;&gt;&#32;&#160;#endif
+&gt;&#32;&gt;&#32;&#160;
+&gt;&#32;&gt;&#32;-struct&#32;device*mmsys_dev;
+&gt;&#32;&gt;&#32;+struct&#32;device*mmsys_dev[MAX_MMSYS];
+&gt;&#32;&gt;&#32;&#160;struct&#32;device*dma_dev;
+&gt;&#32;&gt;&#32;-struct&#32;mtk_mutex*mutex;
+&gt;&#32;&gt;&#32;+struct&#32;device*vdisp_ao_dev;
+&gt;&#32;&gt;&#32;+struct&#32;mtk_mutex*mutex[MAX_MMSYS];
+&gt;&#32;&gt;&#32;&#160;unsigned&#32;intddp_comp_nr;
+&gt;&#32;&gt;&#32;&#160;struct&#32;mtk_ddp_comp**ddp_comp;
+&gt;&#32;&gt;&#32;+enum&#32;mtk_drm_mmsys*ddp_comp_sys;
+&gt;&#32;&gt;&#32;+boolexist[MAX_MMSYS];
+&gt;&#32;&gt;&#32;&#160;unsigned&#32;intnum_conn_routes;
+&gt;&#32;&gt;&#32;&#160;const&#32;struct&#32;mtk_drm_route*conn_routes;
+&gt;&#32;&gt;&#32;+enum&#32;mtk_drm_mmsysconn_routes_sys;
+&gt;&#32;&gt;&#32;&#160;
+&gt;&#32;&gt;&#32;&#160;/*&#32;lock&#32;for&#32;display&#32;hardware&#32;access&#32;*/
+&gt;&#32;&gt;&#32;&#160;struct&#32;mutexhw_lock;
+&gt;&#32;&gt;&#32;@@&#32;-82,6&#32;+86,11&#32;@@&#32;struct&#32;mtk_crtc_state&#32;{
+&gt;&#32;&gt;&#32;&#160;unsigned&#32;intpending_vrefresh;
+&gt;&#32;&gt;&#32;&#160;};
+&gt;&#32;&gt;&#32;&#160;
+&gt;&#32;&gt;&#32;+struct&#32;mtk_crtc_comp_info&#32;{
+&gt;&#32;&gt;&#32;+enum&#32;mtk_drm_mmsys&#32;sys;
+&gt;&#32;&gt;&#32;+unsigned&#32;int&#32;comp_id;
+&gt;&#32;&gt;&#32;+};
+&gt;&#32;&gt;&#32;+
+&gt;&#32;&gt;&#32;&#160;static&#32;inline&#32;struct&#32;mtk_crtc&#32;*to_mtk_crtc(struct&#32;drm_crtc&#32;*c)
+&gt;&#32;&gt;&#32;&#160;{
+&gt;&#32;&gt;&#32;&#160;return&#32;container_of(c,&#32;struct&#32;mtk_crtc,&#32;base);
+&gt;&#32;&gt;&#32;@@&#32;-125,7&#32;+134,9&#32;@@&#32;static&#32;void&#32;mtk_crtc_destroy(struct&#32;drm_crtc
+&gt;&#32;&gt;&#32;*crtc)
+&gt;&#32;&gt;&#32;&#160;struct&#32;mtk_crtc&#32;*mtk_crtc&#32;=&#32;to_mtk_crtc(crtc);
+&gt;&#32;&gt;&#32;&#160;int&#32;i;
+&gt;&#32;&gt;&#32;&#160;
+&gt;&#32;&gt;&#32;-mtk_mutex_put(mtk_crtc-&gt;mutex);
+&gt;&#32;&gt;&#32;+for&#32;(i&#32;=&#32;0;&#32;i&#32;&lt;&#32;MAX_MMSYS;&#32;i++)
+&gt;&#32;&gt;&#32;+if&#32;(mtk_crtc-&gt;mutex[i])
+&gt;&#32;&gt;&#32;+mtk_mutex_put(mtk_crtc-&gt;mutex[i]);
+&gt;&#32;&gt;&#32;&#160;#if&#32;IS_REACHABLE(CONFIG_MTK_CMDQ)
+&gt;&#32;&gt;&#32;&#160;if&#32;(mtk_crtc-&gt;cmdq_client.chan)&#32;{
+&gt;&#32;&gt;&#32;&#160;cmdq_pkt_destroy(&amp;mtk_crtc-&gt;cmdq_client,
+&gt;&#32;&gt;&#32;&amp;mtk_crtc-&gt;cmdq_handle);
+&gt;&#32;&gt;&#32;@@&#32;-223,7&#32;+234,14&#32;@@&#32;static&#32;int&#32;mtk_crtc_ddp_clk_enable(struct
+&gt;&#32;&gt;&#32;mtk_crtc&#32;*mtk_crtc)
+&gt;&#32;&gt;&#32;&#160;int&#32;i;
+&gt;&#32;&gt;&#32;&#160;
+&gt;&#32;&gt;&#32;&#160;for&#32;(i&#32;=&#32;0;&#32;i&#32;&lt;&#32;mtk_crtc-&gt;ddp_comp_nr;&#32;i++)&#32;{
+&gt;&#32;&gt;&#32;+enum&#32;mtk_drm_mmsys&#32;mmsys;
+&gt;&#32;&gt;&#32;+
+&gt;&#32;&gt;&#32;&#160;ret&#32;=&#32;mtk_ddp_comp_clk_enable(mtk_crtc-
+&gt;&#32;&gt;&#32;&gt;ddp_comp[i]);
+&gt;&#32;&gt;&#32;+if&#32;(mtk_ddp_comp_get_type(mtk_crtc-&gt;ddp_comp[i]-
+&gt;&#32;&gt;&#32;&gt;id)&#32;==&#32;MTK_DISP_VIRTUAL)&#32;{
+&gt;&#32;&gt;&#32;+mmsys&#32;=&#32;mtk_crtc-&gt;ddp_comp_sys[i];
+&gt;&#32;&gt;&#32;+ret&#32;=&#32;mtk_mmsys_ddp_clk_enable(mtk_crtc-
+&gt;&#32;&gt;&#32;&gt;mmsys_dev[mmsys],
+&gt;&#32;&gt;&#32;+&#160;&#160;&#160;&#160;&#160;&#160;&#32;mtk_crtc-
+&gt;&#32;&gt;&#32;&gt;ddp_comp[i]-&gt;id);
+&gt;&#32;&gt;&#32;+}
+&gt;&#32;&gt;&#32;&#160;if&#32;(ret)&#32;{
+&gt;&#32;&gt;&#32;&#160;DRM_ERROR(&quot;Failed&#32;to&#32;enable&#32;clock&#32;%d:
+&gt;&#32;&gt;&#32;%d&#92;n&quot;,&#32;i,&#32;ret);
+&gt;&#32;&gt;&#32;&#160;goto&#32;err;
+&gt;&#32;&gt;&#32;@@&#32;-232,17&#32;+250,28&#32;@@&#32;static&#32;int&#32;mtk_crtc_ddp_clk_enable(struct
+&gt;&#32;&gt;&#32;mtk_crtc&#32;*mtk_crtc)
+&gt;&#32;&gt;&#32;&#160;
+&gt;&#32;&gt;&#32;&#160;return&#32;0;
+&gt;&#32;&gt;&#32;&#160;err:
+&gt;&#32;&gt;&#32;-while&#32;(--i&#32;&gt;=&#32;0)
+&gt;&#32;&gt;&#32;+while&#32;(--i&#32;&gt;=&#32;0)&#32;{
+&gt;&#32;&gt;&#32;&#160;mtk_ddp_comp_clk_disable(mtk_crtc-&gt;ddp_comp[i]);
+&gt;&#32;&gt;&#32;+if&#32;(mtk_ddp_comp_get_type(mtk_crtc-&gt;ddp_comp[i]-
+&gt;&#32;&gt;&#32;&gt;id)&#32;==&#32;MTK_DISP_VIRTUAL)
+&gt;&#32;&gt;&#32;+mtk_mmsys_ddp_clk_disable(mtk_crtc-
+&gt;&#32;&gt;&#32;&gt;mmsys_dev[mtk_crtc-&gt;ddp_comp_sys[i]],
+&gt;&#32;&gt;&#32;+&#160;&#32;mtk_crtc-
+&gt;&#32;&gt;&#32;&gt;ddp_comp[i]-&gt;id);
+&gt;&#32;&gt;&#32;+}
+&gt;&#32;&gt;&#32;&#160;return&#32;ret;
+&gt;&#32;&gt;&#32;&#160;}
+&gt;&#32;&gt;&#32;&#160;
+&gt;&#32;&gt;&#32;&#160;static&#32;void&#32;mtk_crtc_ddp_clk_disable(struct&#32;mtk_crtc&#32;*mtk_crtc)
+&gt;&#32;&gt;&#32;&#160;{
+&gt;&#32;&gt;&#32;&#160;int&#32;i;
+&gt;&#32;&gt;&#32;+enum&#32;mtk_drm_mmsys&#32;mmsys;
+&gt;&#32;&gt;&#32;&#160;
+&gt;&#32;&gt;&#32;-for&#32;(i&#32;=&#32;0;&#32;i&#32;&lt;&#32;mtk_crtc-&gt;ddp_comp_nr;&#32;i++)
+&gt;&#32;&gt;&#32;+for&#32;(i&#32;=&#32;0;&#32;i&#32;&lt;&#32;mtk_crtc-&gt;ddp_comp_nr;&#32;i++)&#32;{
+&gt;&#32;&gt;&#32;&#160;mtk_ddp_comp_clk_disable(mtk_crtc-&gt;ddp_comp[i]);
+&gt;&#32;&gt;&#32;+if&#32;(mtk_ddp_comp_get_type(mtk_crtc-&gt;ddp_comp[i]-
+&gt;&#32;&gt;&#32;&gt;id)&#32;==&#32;MTK_DISP_VIRTUAL)&#32;{
+&gt;&#32;&gt;&#32;+mmsys&#32;=&#32;mtk_crtc-&gt;ddp_comp_sys[i];
+&gt;&#32;&gt;&#32;+mtk_mmsys_ddp_clk_disable(mtk_crtc-
+&gt;&#32;&gt;&#32;&gt;mmsys_dev[mmsys],
+&gt;&#32;&gt;&#32;+&#160;&#32;mtk_crtc-
+&gt;&#32;&gt;&#32;&gt;ddp_comp[i]-&gt;id);
+&gt;&#32;&gt;&#32;+}
+&gt;&#32;&gt;&#32;+}
+&gt;&#32;&gt;&#32;&#160;}
+&gt;&#32;&gt;&#32;&#160;
+&gt;&#32;&gt;&#32;&#160;static
+&gt;&#32;&gt;&#32;@@&#32;-332,7&#32;+361,8&#32;@@&#32;static&#32;int&#32;mtk_crtc_ddp_hw_init(struct&#32;mtk_crtc
+&gt;&#32;&gt;&#32;*mtk_crtc)
+&gt;&#32;&gt;&#32;&#160;struct&#32;drm_connector_list_iter&#32;conn_iter;
+&gt;&#32;&gt;&#32;&#160;unsigned&#32;int&#32;width,&#32;height,&#32;vrefresh,&#32;bpc&#32;=&#32;MTK_MAX_BPC;
+&gt;&#32;&gt;&#32;&#160;int&#32;ret;
+&gt;&#32;&gt;&#32;-int&#32;i;
+&gt;&#32;&gt;&#32;+int&#32;i,&#32;j;
+&gt;&#32;&gt;&#32;+enum&#32;mtk_drm_mmsys&#32;mmsys;
+&gt;&#32;&gt;&#32;&#160;
+&gt;&#32;&gt;&#32;&#160;if&#32;(WARN_ON(!crtc-&gt;state))
+&gt;&#32;&gt;&#32;&#160;return&#32;-EINVAL;
+&gt;&#32;&gt;&#32;@@&#32;-362,10&#32;+392,18&#32;@@&#32;static&#32;int&#32;mtk_crtc_ddp_hw_init(struct
+&gt;&#32;&gt;&#32;mtk_crtc&#32;*mtk_crtc)
+&gt;&#32;&gt;&#32;&#160;return&#32;ret;
+&gt;&#32;&gt;&#32;&#160;}
+&gt;&#32;&gt;&#32;&#160;
+&gt;&#32;&gt;&#32;-ret&#32;=&#32;mtk_mutex_prepare(mtk_crtc-&gt;mutex);
+&gt;&#32;&gt;&#32;-if&#32;(ret&#32;&lt;&#32;0)&#32;{
+&gt;&#32;&gt;&#32;-DRM_ERROR(&quot;Failed&#32;to&#32;enable&#32;mutex&#32;clock:&#32;%d&#92;n&quot;,
+&gt;&#32;&gt;&#32;ret);
+&gt;&#32;&gt;&#32;-goto&#32;err_pm_runtime_put;
+&gt;&#32;&gt;&#32;+for&#32;(i&#32;=&#32;0;&#32;i&#32;&lt;&#32;MAX_MMSYS;&#32;i++)
+&gt;&#32;&gt;&#32;+if&#32;(mtk_crtc-&gt;exist[i])
+&gt;&#32;&gt;&#32;+mtk_mmsys_top_clk_enable(mtk_crtc-
+&gt;&#32;&gt;&#32;&gt;mmsys_dev[i]);
+&gt;&#32;&gt;&#32;+
+&gt;&#32;&gt;&#32;+for&#32;(i&#32;=&#32;0;&#32;i&#32;&lt;&#32;MAX_MMSYS;&#32;i++)&#32;{
+&gt;&#32;&gt;&#32;+if&#32;(!mtk_crtc-&gt;mutex[i]&#32;||&#32;!mtk_crtc-&gt;exist[i])
+&gt;&#32;&gt;&#32;+continue;
+&gt;&#32;&gt;&#32;+ret&#32;=&#32;mtk_mutex_prepare(mtk_crtc-&gt;mutex[i]);
+&gt;&#32;&gt;&#32;+if&#32;(ret&#32;&lt;&#32;0)&#32;{
+&gt;&#32;&gt;&#32;+DRM_ERROR(&quot;Failed&#32;to&#32;enable&#32;mmsys%d&#32;mutex
+&gt;&#32;&gt;&#32;clock:&#32;%d&#92;n&quot;,&#32;i,&#32;ret);
+&gt;&#32;&gt;&#32;+goto&#32;err_pm_runtime_put;
+&gt;&#32;&gt;&#32;+}
+&gt;&#32;&gt;&#32;&#160;}
+&gt;&#32;&gt;&#32;&#160;
+&gt;&#32;&gt;&#32;&#160;ret&#32;=&#32;mtk_crtc_ddp_clk_enable(mtk_crtc);
+&gt;&#32;&gt;&#32;@@&#32;-374,19&#32;+412,36&#32;@@&#32;static&#32;int&#32;mtk_crtc_ddp_hw_init(struct
+&gt;&#32;&gt;&#32;mtk_crtc&#32;*mtk_crtc)
+&gt;&#32;&gt;&#32;&#160;goto&#32;err_mutex_unprepare;
+&gt;&#32;&gt;&#32;&#160;}
+&gt;&#32;&gt;&#32;&#160;
+&gt;&#32;&gt;&#32;+if&#32;(mtk_crtc-&gt;vdisp_ao_dev)
+&gt;&#32;&gt;&#32;+mtk_mmsys_default_config(mtk_crtc-&gt;vdisp_ao_dev);
+&gt;&#32;&gt;&#32;+
+&gt;&#32;&gt;&#32;+for&#32;(i&#32;=&#32;0;&#32;i&#32;&lt;&#32;MAX_MMSYS;&#32;i++)
+&gt;&#32;&gt;&#32;+if&#32;(mtk_crtc-&gt;exist[i])
+&gt;&#32;&gt;&#32;+mtk_mmsys_default_config(mtk_crtc-
+&gt;&#32;&gt;&#32;&gt;mmsys_dev[i]);
+&gt;&#32;&gt;&#32;+
+&gt;&#32;&gt;&#32;&#160;for&#32;(i&#32;=&#32;0;&#32;i&#32;&lt;&#32;mtk_crtc-&gt;ddp_comp_nr&#32;-&#32;1;&#32;i++)&#32;{
+&gt;&#32;&gt;&#32;-if&#32;(!mtk_ddp_comp_connect(mtk_crtc-&gt;ddp_comp[i],
+&gt;&#32;&gt;&#32;mtk_crtc-&gt;mmsys_dev,
+&gt;&#32;&gt;&#32;+mmsys&#32;=&#32;mtk_crtc-&gt;ddp_comp_sys[i];
+&gt;&#32;&gt;&#32;+if&#32;(!mtk_ddp_comp_connect(mtk_crtc-&gt;ddp_comp[i],
+&gt;&#32;&gt;&#32;mtk_crtc-&gt;mmsys_dev[mmsys],
+&gt;&#32;&gt;&#32;&#160;&#160;&#32;mtk_crtc-&gt;ddp_comp[i&#32;+
+&gt;&#32;&gt;&#32;1]-&gt;id))
+&gt;&#32;&gt;&#32;-mtk_mmsys_ddp_connect(mtk_crtc-&gt;mmsys_dev,
+&gt;&#32;&gt;&#32;+mtk_mmsys_ddp_connect(mtk_crtc-
+&gt;&#32;&gt;&#32;&gt;mmsys_dev[mmsys],
+&gt;&#32;&gt;&#32;&#160;&#160;&#160;&#160;&#160;&#160;&#32;mtk_crtc-
+&gt;&#32;&gt;&#32;&gt;ddp_comp[i]-&gt;id,
+&gt;&#32;&gt;&#32;&#160;&#160;&#160;&#160;&#160;&#160;&#32;mtk_crtc-&gt;ddp_comp[i
+&gt;&#32;&gt;&#32;+&#32;1]-&gt;id);
+&gt;&#32;&gt;&#32;-if&#32;(!mtk_ddp_comp_add(mtk_crtc-&gt;ddp_comp[i],
+&gt;&#32;&gt;&#32;mtk_crtc-&gt;mutex))
+&gt;&#32;&gt;&#32;-mtk_mutex_add_comp(mtk_crtc-&gt;mutex,
+&gt;&#32;&gt;&#32;+if&#32;(!mtk_ddp_comp_add(mtk_crtc-&gt;ddp_comp[i],
+&gt;&#32;&gt;&#32;mtk_crtc-&gt;mutex[mmsys]))
+&gt;&#32;&gt;&#32;+mtk_mutex_add_comp(mtk_crtc-&gt;mutex[mmsys],
+&gt;&#32;&gt;&#32;&#160;&#160;&#160;&#32;mtk_crtc-&gt;ddp_comp[i]-
+&gt;&#32;&gt;&#32;&gt;id);
+&gt;&#32;&gt;&#32;&#160;}
+&gt;&#32;&gt;&#32;-if&#32;(!mtk_ddp_comp_add(mtk_crtc-&gt;ddp_comp[i],&#32;mtk_crtc-
+&gt;&#32;&gt;&#32;&gt;mutex))
+&gt;&#32;&gt;&#32;-mtk_mutex_add_comp(mtk_crtc-&gt;mutex,&#32;mtk_crtc-
+&gt;&#32;&gt;&#32;&gt;ddp_comp[i]-&gt;id);
+&gt;&#32;&gt;&#32;-mtk_mutex_enable(mtk_crtc-&gt;mutex);
+&gt;&#32;&gt;&#32;+mmsys&#32;=&#32;mtk_crtc-&gt;ddp_comp_sys[i];
+&gt;&#32;&gt;&#32;+if&#32;(!mtk_ddp_comp_add(mtk_crtc-&gt;ddp_comp[i],&#32;mtk_crtc-
+&gt;&#32;&gt;&#32;&gt;mutex[mmsys]))
+&gt;&#32;&gt;&#32;+mtk_mutex_add_comp(mtk_crtc-&gt;mutex[mmsys],
+&gt;&#32;&gt;&#32;mtk_crtc-&gt;ddp_comp[i]-&gt;id);
+&gt;&#32;&gt;&#32;+
+&gt;&#32;&gt;&#32;+/*&#32;Need&#32;to&#32;set&#32;sof&#32;source&#32;for&#32;all&#32;mmsys&#32;mutexs&#32;in&#32;this
+&gt;&#32;&gt;&#32;crtc&#32;*/
+&gt;&#32;&gt;&#32;+for&#32;(j&#32;=&#32;0;&#32;j&#32;&lt;&#32;MAX_MMSYS;&#32;j++)
+&gt;&#32;&gt;&#32;+if&#32;(mtk_crtc-&gt;exist[j]&#32;&amp;&amp;&#32;mtk_crtc-&gt;mutex[j])
+&gt;&#32;&gt;&#32;+mtk_mutex_write_comp_sof(mtk_crtc-
+&gt;&#32;&gt;&#32;&gt;mutex[j],&#32;mtk_crtc-&gt;ddp_comp[i]-&gt;id);
+&gt;&#32;&gt;&#32;+
+&gt;&#32;&gt;&#32;+for&#32;(i&#32;=&#32;0;&#32;i&#32;&lt;&#32;MAX_MMSYS;&#32;i++)
+&gt;&#32;&gt;&#32;+if&#32;(mtk_crtc-&gt;exist[i]&#32;&amp;&amp;&#32;mtk_crtc-&gt;mutex[i])
+&gt;&#32;&gt;&#32;+mtk_mutex_enable(mtk_crtc-&gt;mutex[i]);
+&gt;&#32;&gt;&#32;&#160;
+&gt;&#32;&gt;&#32;&#160;for&#32;(i&#32;=&#32;0;&#32;i&#32;&lt;&#32;mtk_crtc-&gt;ddp_comp_nr;&#32;i++)&#32;{
+&gt;&#32;&gt;&#32;&#160;struct&#32;mtk_ddp_comp&#32;*comp&#32;=&#32;mtk_crtc-&gt;ddp_comp[i];
+&gt;&#32;&gt;&#32;@@&#32;-394,7&#32;+449,11&#32;@@&#32;static&#32;int&#32;mtk_crtc_ddp_hw_init(struct
+&gt;&#32;&gt;&#32;mtk_crtc&#32;*mtk_crtc)
+&gt;&#32;&gt;&#32;&#160;if&#32;(i&#32;==&#32;1)
+&gt;&#32;&gt;&#32;&#160;mtk_ddp_comp_bgclr_in_on(comp);
+&gt;&#32;&gt;&#32;&#160;
+&gt;&#32;&gt;&#32;-mtk_ddp_comp_config(comp,&#32;width,&#32;height,&#32;vrefresh,
+&gt;&#32;&gt;&#32;bpc,&#32;NULL);
+&gt;&#32;&gt;&#32;+if&#32;(mtk_ddp_comp_get_type(comp-&gt;id)&#32;==
+&gt;&#32;&gt;&#32;MTK_DISP_VIRTUAL)
+&gt;&#32;&gt;&#32;+mtk_mmsys_ddp_config(mtk_crtc-
+&gt;&#32;&gt;&#32;&gt;mmsys_dev[mtk_crtc-&gt;ddp_comp_sys[i]],
+&gt;&#32;&gt;&#32;+&#160;&#160;&#160;&#160;&#32;comp-&gt;id,&#32;width,
+&gt;&#32;&gt;&#32;height,&#32;NULL);
+&gt;&#32;&gt;&#32;+else
+&gt;&#32;&gt;&#32;+mtk_ddp_comp_config(comp,&#32;width,&#32;height,
+&gt;&#32;&gt;&#32;vrefresh,&#32;bpc,&#32;NULL);
+&gt;&#32;&gt;&#32;&#160;mtk_ddp_comp_start(comp);
+&gt;&#32;&gt;&#32;&#160;}
+&gt;&#32;&gt;&#32;&#160;
+&gt;&#32;&gt;&#32;@@&#32;-418,7&#32;+477,10&#32;@@&#32;static&#32;int&#32;mtk_crtc_ddp_hw_init(struct
+&gt;&#32;&gt;&#32;mtk_crtc&#32;*mtk_crtc)
+&gt;&#32;&gt;&#32;&#160;return&#32;0;
+&gt;&#32;&gt;&#32;&#160;
+&gt;&#32;&gt;&#32;&#160;err_mutex_unprepare:
+&gt;&#32;&gt;&#32;-mtk_mutex_unprepare(mtk_crtc-&gt;mutex);
+&gt;&#32;&gt;&#32;+for&#32;(i&#32;=&#32;0;&#32;i&#32;&lt;&#32;MAX_MMSYS;&#32;i++)
+&gt;&#32;&gt;&#32;+if&#32;(mtk_crtc-&gt;exist[i]&#32;&amp;&amp;&#32;mtk_crtc-&gt;mutex[i])
+&gt;&#32;&gt;&#32;+mtk_mutex_unprepare(mtk_crtc-&gt;mutex[i]);
+&gt;&#32;&gt;&#32;+
+&gt;&#32;&gt;&#32;&#160;err_pm_runtime_put:
+&gt;&#32;&gt;&#32;&#160;pm_runtime_put(crtc-&gt;dev-&gt;dev);
+&gt;&#32;&gt;&#32;&#160;return&#32;ret;
+&gt;&#32;&gt;&#32;@@&#32;-430,6&#32;+492,7&#32;@@&#32;static&#32;void&#32;mtk_crtc_ddp_hw_fini(struct
+&gt;&#32;&gt;&#32;mtk_crtc&#32;*mtk_crtc)
+&gt;&#32;&gt;&#32;&#160;struct&#32;drm_crtc&#32;*crtc&#32;=&#32;&amp;mtk_crtc-&gt;base;
+&gt;&#32;&gt;&#32;&#160;unsigned&#32;long&#32;flags;
+&gt;&#32;&gt;&#32;&#160;int&#32;i;
+&gt;&#32;&gt;&#32;+enum&#32;mtk_drm_mmsys&#32;mmsys;
+&gt;&#32;&gt;&#32;&#160;
+&gt;&#32;&gt;&#32;&#160;for&#32;(i&#32;=&#32;0;&#32;i&#32;&lt;&#32;mtk_crtc-&gt;ddp_comp_nr;&#32;i++)&#32;{
+&gt;&#32;&gt;&#32;&#160;mtk_ddp_comp_stop(mtk_crtc-&gt;ddp_comp[i]);
+&gt;&#32;&gt;&#32;@@&#32;-437,27&#32;+500,46&#32;@@&#32;static&#32;void&#32;mtk_crtc_ddp_hw_fini(struct
+&gt;&#32;&gt;&#32;mtk_crtc&#32;*mtk_crtc)
+&gt;&#32;&gt;&#32;&#160;mtk_ddp_comp_bgclr_in_off(mtk_crtc-
+&gt;&#32;&gt;&#32;&gt;ddp_comp[i]);
+&gt;&#32;&gt;&#32;&#160;}
+&gt;&#32;&gt;&#32;&#160;
+&gt;&#32;&gt;&#32;-for&#32;(i&#32;=&#32;0;&#32;i&#32;&lt;&#32;mtk_crtc-&gt;ddp_comp_nr;&#32;i++)
+&gt;&#32;&gt;&#32;-if&#32;(!mtk_ddp_comp_remove(mtk_crtc-&gt;ddp_comp[i],
+&gt;&#32;&gt;&#32;mtk_crtc-&gt;mutex))
+&gt;&#32;&gt;&#32;-mtk_mutex_remove_comp(mtk_crtc-&gt;mutex,
+&gt;&#32;&gt;&#32;+for&#32;(i&#32;=&#32;0;&#32;i&#32;&lt;&#32;mtk_crtc-&gt;ddp_comp_nr;&#32;i++)&#32;{
+&gt;&#32;&gt;&#32;+mmsys&#32;=&#32;mtk_crtc-&gt;ddp_comp_sys[i];
+&gt;&#32;&gt;&#32;+if&#32;(!mtk_ddp_comp_remove(mtk_crtc-&gt;ddp_comp[i],
+&gt;&#32;&gt;&#32;mtk_crtc-&gt;mutex[mmsys]))
+&gt;&#32;&gt;&#32;+mtk_mutex_remove_comp(mtk_crtc-
+&gt;&#32;&gt;&#32;&gt;mutex[mtk_crtc-&gt;ddp_comp_sys[i]],
+&gt;&#32;&gt;&#32;&#160;&#160;&#160;&#160;&#160;&#160;&#32;mtk_crtc-
+&gt;&#32;&gt;&#32;&gt;ddp_comp[i]-&gt;id);
+&gt;&#32;&gt;&#32;-mtk_mutex_disable(mtk_crtc-&gt;mutex);
+&gt;&#32;&gt;&#32;+}
+&gt;&#32;&gt;&#32;+for&#32;(i&#32;=&#32;0;&#32;i&#32;&lt;&#32;MAX_MMSYS;&#32;i++)
+&gt;&#32;&gt;&#32;+if&#32;(mtk_crtc-&gt;exist[i]&#32;&amp;&amp;&#32;mtk_crtc-&gt;mutex[i])
+&gt;&#32;&gt;&#32;+mtk_mutex_disable(mtk_crtc-&gt;mutex[i]);
+&gt;&#32;&gt;&#32;+
+&gt;&#32;&gt;&#32;&#160;for&#32;(i&#32;=&#32;0;&#32;i&#32;&lt;&#32;mtk_crtc-&gt;ddp_comp_nr&#32;-&#32;1;&#32;i++)&#32;{
+&gt;&#32;&gt;&#32;-if&#32;(!mtk_ddp_comp_disconnect(mtk_crtc-
+&gt;&#32;&gt;&#32;&gt;ddp_comp[i],&#32;mtk_crtc-&gt;mmsys_dev,
+&gt;&#32;&gt;&#32;-&#160;&#160;&#160;&#160;&#32;mtk_crtc-&gt;ddp_comp[i
+&gt;&#32;&gt;&#32;+&#32;1]-&gt;id))
+&gt;&#32;&gt;&#32;-mtk_mmsys_ddp_disconnect(mtk_crtc-
+&gt;&#32;&gt;&#32;&gt;mmsys_dev,
+&gt;&#32;&gt;&#32;-&#32;mtk_crtc-
+&gt;&#32;&gt;&#32;&gt;ddp_comp[i]-&gt;id,
+&gt;&#32;&gt;&#32;-&#32;mtk_crtc-
+&gt;&#32;&gt;&#32;&gt;ddp_comp[i&#32;+&#32;1]-&gt;id);
+&gt;&#32;&gt;&#32;-if&#32;(!mtk_ddp_comp_remove(mtk_crtc-&gt;ddp_comp[i],
+&gt;&#32;&gt;&#32;mtk_crtc-&gt;mutex))
+&gt;&#32;&gt;&#32;-mtk_mutex_remove_comp(mtk_crtc-&gt;mutex,
+&gt;&#32;&gt;&#32;+struct&#32;mtk_ddp_comp&#32;*comp;
+&gt;&#32;&gt;&#32;+unsigned&#32;int&#32;curr,&#32;next;
+&gt;&#32;&gt;&#32;+
+&gt;&#32;&gt;&#32;+comp&#32;=&#32;mtk_crtc-&gt;ddp_comp[i];
+&gt;&#32;&gt;&#32;+curr&#32;=&#32;mtk_crtc-&gt;ddp_comp[i]-&gt;id;
+&gt;&#32;&gt;&#32;+next&#32;=&#32;mtk_crtc-&gt;ddp_comp[i&#32;+&#32;1]-&gt;id;
+&gt;&#32;&gt;&#32;+mmsys&#32;=&#32;mtk_crtc-&gt;ddp_comp_sys[i];
+&gt;&#32;&gt;&#32;+if&#32;(!mtk_ddp_comp_disconnect(comp,&#32;mtk_crtc-
+&gt;&#32;&gt;&#32;&gt;mmsys_dev[mmsys],&#32;next))
+&gt;&#32;&gt;&#32;+mtk_mmsys_ddp_disconnect(mtk_crtc-
+&gt;&#32;&gt;&#32;&gt;mmsys_dev[mmsys],&#32;curr,&#32;next);
+&gt;&#32;&gt;&#32;+if&#32;(!mtk_ddp_comp_remove(comp,&#32;mtk_crtc-
+&gt;&#32;&gt;&#32;&gt;mutex[mmsys]))
+&gt;&#32;&gt;&#32;+mtk_mutex_remove_comp(mtk_crtc-
+&gt;&#32;&gt;&#32;&gt;mutex[mtk_crtc-&gt;ddp_comp_sys[i]],
+&gt;&#32;&gt;&#32;&#160;&#160;&#160;&#160;&#160;&#160;&#32;mtk_crtc-
+&gt;&#32;&gt;&#32;&gt;ddp_comp[i]-&gt;id);
+&gt;&#32;&gt;&#32;&#160;}
+&gt;&#32;&gt;&#32;-if&#32;(!mtk_ddp_comp_remove(mtk_crtc-&gt;ddp_comp[i],&#32;mtk_crtc-
+&gt;&#32;&gt;&#32;&gt;mutex))
+&gt;&#32;&gt;&#32;-mtk_mutex_remove_comp(mtk_crtc-&gt;mutex,&#32;mtk_crtc-
+&gt;&#32;&gt;&#32;&gt;ddp_comp[i]-&gt;id);
+&gt;&#32;&gt;&#32;+
+&gt;&#32;&gt;&#32;+mmsys&#32;=&#32;mtk_crtc-&gt;ddp_comp_sys[i];
+&gt;&#32;&gt;&#32;+if&#32;(!mtk_ddp_comp_remove(mtk_crtc-&gt;ddp_comp[i],&#32;mtk_crtc-
+&gt;&#32;&gt;&#32;&gt;mutex[mmsys]))
+&gt;&#32;&gt;&#32;+mtk_mutex_remove_comp(mtk_crtc-&gt;mutex[mmsys],
+&gt;&#32;&gt;&#32;mtk_crtc-&gt;ddp_comp[i]-&gt;id);
+&gt;&#32;&gt;&#32;+
+&gt;&#32;&gt;&#32;&#160;mtk_crtc_ddp_clk_disable(mtk_crtc);
+&gt;&#32;&gt;&#32;-mtk_mutex_unprepare(mtk_crtc-&gt;mutex);
+&gt;&#32;&gt;&#32;&#160;
+&gt;&#32;&gt;&#32;-pm_runtime_put(drm-&gt;dev);
+&gt;&#32;&gt;&#32;+for&#32;(i&#32;=&#32;0;&#32;i&#32;&lt;&#32;MAX_MMSYS;&#32;i++)
+&gt;&#32;&gt;&#32;+if&#32;(mtk_crtc-&gt;exist[i]&#32;&amp;&amp;&#32;mtk_crtc-&gt;mutex[i])
+&gt;&#32;&gt;&#32;+mtk_mutex_unprepare(mtk_crtc-&gt;mutex[i]);
+&gt;&#32;&gt;&#32;+
+&gt;&#32;&gt;&#32;+for&#32;(i&#32;=&#32;0;&#32;i&#32;&lt;&#32;MAX_MMSYS;&#32;i++)
+&gt;&#32;&gt;&#32;+if&#32;(mtk_crtc-&gt;exist[i])
+&gt;&#32;&gt;&#32;+mtk_mmsys_top_clk_disable(mtk_crtc-
+&gt;&#32;&gt;&#32;&gt;mmsys_dev[i]);
+&gt;&#32;&gt;&#32;+
+&gt;&#32;&gt;&#32;+pm_runtime_put_sync(drm-&gt;dev);
+&gt;&#32;&gt;&#32;&#160;
+&gt;&#32;&gt;&#32;&#160;if&#32;(crtc-&gt;state-&gt;event&#32;&amp;&amp;&#32;!crtc-&gt;state-&gt;active)&#32;{
+&gt;&#32;&gt;&#32;&#160;spin_lock_irqsave(&amp;crtc-&gt;dev-&gt;event_lock,&#32;flags);
+&gt;&#32;&gt;&#32;@@&#32;-581,9&#32;+663,15&#32;@@&#32;static&#32;void&#32;mtk_crtc_update_config(struct
+&gt;&#32;&gt;&#32;mtk_crtc&#32;*mtk_crtc,&#32;bool&#32;needs_vblank)
+&gt;&#32;&gt;&#32;&#160;mtk_crtc-&gt;pending_async_planes&#32;=&#32;true;
+&gt;&#32;&gt;&#32;&#160;
+&gt;&#32;&gt;&#32;&#160;if&#32;(priv-&gt;data-&gt;shadow_register)&#32;{
+&gt;&#32;&gt;&#32;-mtk_mutex_acquire(mtk_crtc-&gt;mutex);
+&gt;&#32;&gt;&#32;+for&#32;(i&#32;=&#32;0;&#32;i&#32;&lt;&#32;MAX_MMSYS;&#32;i++)
+&gt;&#32;&gt;&#32;+if&#32;(mtk_crtc-&gt;exist[i]&#32;&amp;&amp;&#32;mtk_crtc-
+&gt;&#32;&gt;&#32;&gt;mutex[i])
+&gt;&#32;&gt;&#32;+mtk_mutex_acquire(mtk_crtc-
+&gt;&#32;&gt;&#32;&gt;mutex[i]);
+&gt;&#32;&gt;&#32;+
+&gt;&#32;&gt;&#32;&#160;mtk_crtc_ddp_config(crtc,&#32;NULL);
+&gt;&#32;&gt;&#32;-mtk_mutex_release(mtk_crtc-&gt;mutex);
+&gt;&#32;&gt;&#32;+
+&gt;&#32;&gt;&#32;+for&#32;(i&#32;=&#32;0;&#32;i&#32;&lt;&#32;MAX_MMSYS;&#32;i++)
+&gt;&#32;&gt;&#32;+if&#32;(mtk_crtc-&gt;exist[i]&#32;&amp;&amp;&#32;mtk_crtc-
+&gt;&#32;&gt;&#32;&gt;mutex[i])
+&gt;&#32;&gt;&#32;+mtk_mutex_release(mtk_crtc-
+&gt;&#32;&gt;&#32;&gt;mutex[i]);
+&gt;&#32;&gt;&#32;&#160;}
+&gt;&#32;&gt;&#32;&#160;#if&#32;IS_REACHABLE(CONFIG_MTK_CMDQ)
+&gt;&#32;&gt;&#32;&#160;if&#32;(mtk_crtc-&gt;cmdq_client.chan)&#32;{
+&gt;&#32;&gt;&#32;@@&#32;-659,6&#32;+747,7&#32;@@&#32;static&#32;void&#32;mtk_crtc_update_output(struct
+&gt;&#32;&gt;&#32;drm_crtc&#32;*crtc,
+&gt;&#32;&gt;&#32;&#160;{
+&gt;&#32;&gt;&#32;&#160;int&#32;crtc_index&#32;=&#32;drm_crtc_index(crtc);
+&gt;&#32;&gt;&#32;&#160;int&#32;i;
+&gt;&#32;&gt;&#32;+unsigned&#32;int&#32;mmsys;
+&gt;&#32;&gt;&#32;&#160;struct&#32;device&#32;*dev;
+&gt;&#32;&gt;&#32;&#160;struct&#32;drm_crtc_state&#32;*crtc_state&#32;=&#32;state-
+&gt;&#32;&gt;&#32;&gt;crtcs[crtc_index].new_state;
+&gt;&#32;&gt;&#32;&#160;struct&#32;mtk_crtc&#32;*mtk_crtc&#32;=&#32;to_mtk_crtc(crtc);
+&gt;&#32;&gt;&#32;@@&#32;-671,7&#32;+760,8&#32;@@&#32;static&#32;void&#32;mtk_crtc_update_output(struct
+&gt;&#32;&gt;&#32;drm_crtc&#32;*crtc,
+&gt;&#32;&gt;&#32;&#160;if&#32;(!mtk_crtc-&gt;num_conn_routes)
+&gt;&#32;&gt;&#32;&#160;return;
+&gt;&#32;&gt;&#32;&#160;
+&gt;&#32;&gt;&#32;-priv&#32;=&#32;((struct&#32;mtk_drm_private&#32;*)crtc-&gt;dev-&gt;dev_private)-
+&gt;&#32;&gt;&#32;&gt;all_drm_private[crtc_index];
+&gt;&#32;&gt;&#32;+mmsys&#32;=&#32;mtk_crtc-&gt;conn_routes_sys;
+&gt;&#32;&gt;&#32;+priv&#32;=&#32;((struct&#32;mtk_drm_private&#32;*)crtc-&gt;dev-&gt;dev_private)-
+&gt;&#32;&gt;&#32;&gt;all_drm_private[mmsys];
+&gt;&#32;&gt;&#32;&#160;dev&#32;=&#32;priv-&gt;dev;
+&gt;&#32;&gt;&#32;&#160;
+&gt;&#32;&gt;&#32;&#160;dev_dbg(dev,&#32;&quot;connector&#32;change:%d,&#32;encoder&#32;mask:0x%x&#32;for
+&gt;&#32;&gt;&#32;crtc:%d&#92;n&quot;,
+&gt;&#32;&gt;&#32;@@&#32;-684,6&#32;+774,8&#32;@@&#32;static&#32;void&#32;mtk_crtc_update_output(struct
+&gt;&#32;&gt;&#32;drm_crtc&#32;*crtc,
+&gt;&#32;&gt;&#32;&#160;if&#32;(comp-&gt;encoder_index&#32;&gt;=&#32;0&#32;&amp;&amp;
+&gt;&#32;&gt;&#32;&#160;&#160;&#160;&#160;&#32;(encoder_mask&#32;&amp;&#32;BIT(comp-&gt;encoder_index)))&#32;{
+&gt;&#32;&gt;&#32;&#160;mtk_crtc-&gt;ddp_comp[mtk_crtc-&gt;ddp_comp_nr&#32;-
+&gt;&#32;&gt;&#32;1]&#32;=&#32;comp;
+&gt;&#32;&gt;&#32;+mtk_crtc-&gt;ddp_comp_sys[mtk_crtc-
+&gt;&#32;&gt;&#32;&gt;ddp_comp_nr&#32;-&#32;1]&#32;=&#32;mmsys;
+&gt;&#32;&gt;&#32;+mtk_crtc-&gt;exist[mmsys]&#32;=&#32;true;
+&gt;&#32;&gt;&#32;&#160;dev_dbg(dev,&#32;&quot;Add&#32;comp_id:&#32;%d&#32;at&#32;path
+&gt;&#32;&gt;&#32;index&#32;%d&#92;n&quot;,
+&gt;&#32;&gt;&#32;&#160;comp-&gt;id,&#32;mtk_crtc-&gt;ddp_comp_nr&#32;-
+&gt;&#32;&gt;&#32;1);
+&gt;&#32;&gt;&#32;&#160;break;
+&gt;&#32;&gt;&#32;@@&#32;-720,13&#32;+812,35&#32;@@&#32;static&#32;void&#32;mtk_crtc_atomic_enable(struct
+&gt;&#32;&gt;&#32;drm_crtc&#32;*crtc,
+&gt;&#32;&gt;&#32;&#160;struct&#32;mtk_crtc&#32;*mtk_crtc&#32;=&#32;to_mtk_crtc(crtc);
+&gt;&#32;&gt;&#32;&#160;struct&#32;mtk_ddp_comp&#32;*comp&#32;=&#32;mtk_crtc-&gt;ddp_comp[0];
+&gt;&#32;&gt;&#32;&#160;int&#32;ret;
+&gt;&#32;&gt;&#32;+int&#32;i,&#32;j;
+&gt;&#32;&gt;&#32;+int&#32;mmsys_cnt&#32;=&#32;0;
+&gt;&#32;&gt;&#32;&#160;
+&gt;&#32;&gt;&#32;&#160;DRM_DEBUG_DRIVER(&quot;%s&#32;%d&#92;n&quot;,&#32;__func__,&#32;crtc-&gt;base.id);
+&gt;&#32;&gt;&#32;&#160;
+&gt;&#32;&gt;&#32;-ret&#32;=&#32;mtk_ddp_comp_power_on(comp);
+&gt;&#32;&gt;&#32;-if&#32;(ret&#32;&lt;&#32;0)&#32;{
+&gt;&#32;&gt;&#32;-DRM_DEV_ERROR(comp-&gt;dev,&#32;&quot;Failed&#32;to&#32;enable&#32;power
+&gt;&#32;&gt;&#32;domain:&#32;%d&#92;n&quot;,&#32;ret);
+&gt;&#32;&gt;&#32;-return;
+&gt;&#32;&gt;&#32;+for&#32;(i&#32;=&#32;0;&#32;i&#32;&lt;&#32;MAX_MMSYS;&#32;i++)
+&gt;&#32;&gt;&#32;+if&#32;(mtk_crtc-&gt;exist[i])
+&gt;&#32;&gt;&#32;+mmsys_cnt++;
+&gt;&#32;&gt;&#32;+
+&gt;&#32;&gt;&#32;+if&#32;(mmsys_cnt&#32;==&#32;1)&#32;{
+&gt;&#32;&gt;&#32;+ret&#32;=&#32;pm_runtime_resume_and_get(comp-&gt;dev);
+&gt;&#32;&gt;&#32;+if&#32;(ret&#32;&lt;&#32;0)&#32;{
+&gt;&#32;&gt;&#32;+DRM_DEV_ERROR(comp-&gt;dev,&#32;&quot;Failed&#32;to&#32;enable
+&gt;&#32;&gt;&#32;power&#32;domain:&#32;%d&#92;n&quot;,&#32;ret);
+&gt;&#32;&gt;&#32;+return;
+&gt;&#32;&gt;&#32;+}
+&gt;&#32;&gt;&#32;+}&#32;else&#32;{
+&gt;&#32;&gt;&#32;+for&#32;(i&#32;=&#32;0;&#32;i&#32;&lt;&#32;MAX_MMSYS;&#32;i++)&#32;{
+&gt;&#32;&gt;&#32;+if&#32;(!mtk_crtc-&gt;exist[i])
+&gt;&#32;&gt;&#32;+continue;
+&gt;&#32;&gt;&#32;+ret&#32;=&#32;pm_runtime_resume_and_get(mtk_crtc-
+&gt;&#32;&gt;&#32;&gt;mmsys_dev[i]);
+&gt;&#32;&gt;&#32;+if&#32;(ret&#32;&lt;&#32;0)&#32;{
+&gt;&#32;&gt;&#32;+DRM_DEV_ERROR(mtk_crtc-
+&gt;&#32;&gt;&#32;&gt;mmsys_dev[i],
+&gt;&#32;&gt;&#32;+&#160;&#160;&#160;&#160;&#160;&#32;&quot;Failed&#32;to&#32;enable
+&gt;&#32;&gt;&#32;power&#32;domain:&#32;%d&#92;n&quot;,&#32;ret);
+&gt;&#32;&gt;&#32;+for&#32;(j&#32;=&#32;i&#32;-&#32;1;&#32;j&#32;&gt;=&#32;0;&#32;j--)
+&gt;&#32;&gt;&#32;+if&#32;(mtk_crtc-&gt;exist[i])
+&gt;&#32;&gt;&#32;+pm_runtime_put(com
+&gt;&#32;&gt;&#32;p-&gt;dev);
+&gt;&#32;&gt;&#32;+return;
+&gt;&#32;&gt;&#32;+}
+&gt;&#32;&gt;&#32;+}
+&gt;&#32;&gt;&#32;&#160;}
+&gt;&#32;&gt;&#32;&#160;
+&gt;&#32;&gt;&#32;&#160;mtk_crtc_update_output(crtc,&#32;state);
+&gt;&#32;&gt;&#32;@@&#32;-746,12&#32;+860,17&#32;@@&#32;static&#32;void&#32;mtk_crtc_atomic_disable(struct
+&gt;&#32;&gt;&#32;drm_crtc&#32;*crtc,
+&gt;&#32;&gt;&#32;&#160;{
+&gt;&#32;&gt;&#32;&#160;struct&#32;mtk_crtc&#32;*mtk_crtc&#32;=&#32;to_mtk_crtc(crtc);
+&gt;&#32;&gt;&#32;&#160;struct&#32;mtk_ddp_comp&#32;*comp&#32;=&#32;mtk_crtc-&gt;ddp_comp[0];
+&gt;&#32;&gt;&#32;-int&#32;i;
+&gt;&#32;&gt;&#32;+int&#32;i,&#32;ret;
+&gt;&#32;&gt;&#32;+int&#32;mmsys_cnt&#32;=&#32;0;
+&gt;&#32;&gt;&#32;&#160;
+&gt;&#32;&gt;&#32;&#160;DRM_DEBUG_DRIVER(&quot;%s&#32;%d&#92;n&quot;,&#32;__func__,&#32;crtc-&gt;base.id);
+&gt;&#32;&gt;&#32;&#160;if&#32;(!mtk_crtc-&gt;enabled)
+&gt;&#32;&gt;&#32;&#160;return;
+&gt;&#32;&gt;&#32;&#160;
+&gt;&#32;&gt;&#32;+for&#32;(i&#32;=&#32;0;&#32;i&#32;&lt;&#32;MAX_MMSYS;&#32;i++)
+&gt;&#32;&gt;&#32;+if&#32;(mtk_crtc-&gt;exist[i])
+&gt;&#32;&gt;&#32;+mmsys_cnt++;
+&gt;&#32;&gt;&#32;+
+&gt;&#32;&gt;&#32;&#160;/*&#32;Set&#32;all&#32;pending&#32;plane&#32;state&#32;to&#32;disabled&#32;*/
+&gt;&#32;&gt;&#32;&#160;for&#32;(i&#32;=&#32;0;&#32;i&#32;&lt;&#32;mtk_crtc-&gt;layer_nr;&#32;i++)&#32;{
+&gt;&#32;&gt;&#32;&#160;struct&#32;drm_plane&#32;*plane&#32;=&#32;&amp;mtk_crtc-&gt;planes[i];
+&gt;&#32;&gt;&#32;@@&#32;-776,7&#32;+895,21&#32;@@&#32;static&#32;void&#32;mtk_crtc_atomic_disable(struct
+&gt;&#32;&gt;&#32;drm_crtc&#32;*crtc,
+&gt;&#32;&gt;&#32;&#160;
+&gt;&#32;&gt;&#32;&#160;drm_crtc_vblank_off(crtc);
+&gt;&#32;&gt;&#32;&#160;mtk_crtc_ddp_hw_fini(mtk_crtc);
+&gt;&#32;&gt;&#32;-mtk_ddp_comp_power_off(comp);
+&gt;&#32;&gt;&#32;+
+&gt;&#32;&gt;&#32;+if&#32;(mmsys_cnt&#32;&gt;&#32;1)&#32;{
+&gt;&#32;&gt;&#32;+for&#32;(i&#32;=&#32;0;&#32;i&#32;&lt;&#32;MAX_MMSYS;&#32;i++)&#32;{
+&gt;&#32;&gt;&#32;+if&#32;(mtk_crtc-&gt;exist[i])&#32;{
+&gt;&#32;&gt;&#32;+ret&#32;=&#32;pm_runtime_put(mtk_crtc-
+&gt;&#32;&gt;&#32;&gt;mmsys_dev[i]);
+&gt;&#32;&gt;&#32;+if&#32;(ret&#32;&lt;&#32;0)
+&gt;&#32;&gt;&#32;+DRM_DEV_ERROR(mtk_crtc-
+&gt;&#32;&gt;&#32;&gt;mmsys_dev[i],
+&gt;&#32;&gt;&#32;+&#160;&#160;&#160;&#160;&#160;&#32;&quot;Failed&#32;to
+&gt;&#32;&gt;&#32;disable&#32;power&#32;domain:&#32;%d&#92;n&quot;,&#32;ret);
+&gt;&#32;&gt;&#32;+}
+&gt;&#32;&gt;&#32;+}
+&gt;&#32;&gt;&#32;+}&#32;else&#32;{
+&gt;&#32;&gt;&#32;+ret&#32;=&#32;pm_runtime_put(comp-&gt;dev);
+&gt;&#32;&gt;&#32;+if&#32;(ret&#32;&lt;&#32;0)
+&gt;&#32;&gt;&#32;+DRM_DEV_ERROR(comp-&gt;dev,&#32;&quot;Failed&#32;to
+&gt;&#32;&gt;&#32;disable&#32;power&#32;domain:&#32;%d&#92;n&quot;,&#32;ret);
+&gt;&#32;&gt;&#32;+}
+&gt;&#32;&gt;&#32;&#160;
+&gt;&#32;&gt;&#32;&#160;mtk_crtc-&gt;enabled&#32;=&#32;false;
+&gt;&#32;&gt;&#32;&#160;}
+&gt;&#32;&gt;&#32;@@&#32;-937,49&#32;+1070,108&#32;@@&#32;struct&#32;device&#32;*mtk_crtc_dma_dev_get(struct
+&gt;&#32;&gt;&#32;drm_crtc&#32;*crtc)
+&gt;&#32;&gt;&#32;&#160;return&#32;mtk_crtc-&gt;dma_dev;
+&gt;&#32;&gt;&#32;&#160;}
+&gt;&#32;&gt;&#32;&#160;
+&gt;&#32;&gt;&#32;-int&#32;mtk_crtc_create(struct&#32;drm_device&#32;*drm_dev,&#32;const&#32;unsigned&#32;int
+&gt;&#32;&gt;&#32;*path,
+&gt;&#32;&gt;&#32;-&#160;&#160;&#160;&#32;unsigned&#32;int&#32;path_len,&#32;int&#32;priv_data_index,
+&gt;&#32;&gt;&#32;-&#160;&#160;&#160;&#32;const&#32;struct&#32;mtk_drm_route&#32;*conn_routes,
+&gt;&#32;&gt;&#32;-&#160;&#160;&#160;&#32;unsigned&#32;int&#32;num_conn_routes)
+&gt;&#32;&gt;&#32;+int&#32;mtk_crtc_create(struct&#32;drm_device&#32;*drm_dev,&#32;enum&#32;mtk_crtc_path
+&gt;&#32;&gt;&#32;path_sel)
+&gt;&#32;&gt;&#32;&#160;{
+&gt;&#32;&gt;&#32;&#160;struct&#32;mtk_drm_private&#32;*priv&#32;=&#32;drm_dev-&gt;dev_private;
+&gt;&#32;&gt;&#32;&#160;struct&#32;device&#32;*dev&#32;=&#32;drm_dev-&gt;dev;
+&gt;&#32;&gt;&#32;&#160;struct&#32;mtk_crtc&#32;*mtk_crtc;
+&gt;&#32;&gt;&#32;&#160;unsigned&#32;int&#32;num_comp_planes&#32;=&#32;0;
+&gt;&#32;&gt;&#32;&#160;int&#32;ret;
+&gt;&#32;&gt;&#32;-int&#32;i;
+&gt;&#32;&gt;&#32;+int&#32;i,&#32;j,&#32;k;
+&gt;&#32;&gt;&#32;&#160;bool&#32;has_ctm&#32;=&#32;false;
+&gt;&#32;&gt;&#32;&#160;uint&#32;gamma_lut_size&#32;=&#32;0;
+&gt;&#32;&gt;&#32;&#160;struct&#32;drm_crtc&#32;*tmp;
+&gt;&#32;&gt;&#32;&#160;int&#32;crtc_i&#32;=&#32;0;
+&gt;&#32;&gt;&#32;-
+&gt;&#32;&gt;&#32;-if&#32;(!path)
+&gt;&#32;&gt;&#32;-return&#32;0;
+&gt;&#32;&gt;&#32;-
+&gt;&#32;&gt;&#32;-priv&#32;=&#32;priv-&gt;all_drm_private[priv_data_index];
+&gt;&#32;&gt;&#32;+struct&#32;mtk_drm_private&#32;*subsys_priv;
+&gt;&#32;&gt;&#32;+struct&#32;mtk_crtc_comp_info&#32;path[DDP_COMPONENT_ID_MAX];
+&gt;&#32;&gt;&#32;+unsigned&#32;int&#32;path_len&#32;=&#32;0;
+&gt;&#32;&gt;&#32;+const&#32;struct&#32;mtk_drm_route&#32;*conn_routes&#32;=&#32;NULL;
+&gt;&#32;&gt;&#32;+unsigned&#32;int&#32;num_conn_routes&#32;=&#32;0;
+&gt;&#32;&gt;&#32;+enum&#32;mtk_drm_mmsys&#32;conn_mmsys;
+&gt;&#32;&gt;&#32;&#160;
+&gt;&#32;&gt;&#32;&#160;drm_for_each_crtc(tmp,&#32;drm_dev)
+&gt;&#32;&gt;&#32;&#160;crtc_i++;
+&gt;&#32;&gt;&#32;&#160;
+&gt;&#32;&gt;&#32;+for&#32;(j&#32;=&#32;0;&#32;j&#32;&lt;&#32;priv-&gt;data-&gt;mmsys_dev_num;&#32;j++)&#32;{
+&gt;&#32;&gt;&#32;+for&#32;(k&#32;=&#32;0;&#32;k&#32;&lt;&#32;MAX_MMSYS;&#32;k++)&#32;{
+&gt;&#32;&gt;&#32;+const&#32;unsigned&#32;int&#32;*subsys_path;
+&gt;&#32;&gt;&#32;+unsigned&#32;int&#32;subsys_path_len;
+&gt;&#32;&gt;&#32;+unsigned&#32;int&#32;order&#32;=&#32;0;
+&gt;&#32;&gt;&#32;+
+&gt;&#32;&gt;&#32;+subsys_priv&#32;=&#32;priv-&gt;all_drm_private[k];
+&gt;&#32;&gt;&#32;+if&#32;(!subsys_priv)
+&gt;&#32;&gt;&#32;+continue;
+&gt;&#32;&gt;&#32;+
+&gt;&#32;&gt;&#32;+if&#32;(path_sel&#32;==&#32;CRTC_MAIN)&#32;{
+&gt;&#32;&gt;&#32;+subsys_path&#32;=&#32;subsys_priv-&gt;data-
+&gt;&#32;&gt;&#32;&gt;main_path;
+&gt;&#32;&gt;&#32;+subsys_path_len&#32;=&#32;subsys_priv-
+&gt;&#32;&gt;&#32;&gt;data-&gt;main_len;
+&gt;&#32;&gt;&#32;+order&#32;=&#32;subsys_priv-&gt;data-
+&gt;&#32;&gt;&#32;&gt;main_order;
+&gt;&#32;&gt;&#32;+}&#32;else&#32;if&#32;(path_sel&#32;==&#32;CRTC_EXT)&#32;{
+&gt;&#32;&gt;&#32;+subsys_path&#32;=&#32;subsys_priv-&gt;data-
+&gt;&#32;&gt;&#32;&gt;ext_path;
+&gt;&#32;&gt;&#32;+subsys_path_len&#32;=&#32;subsys_priv-
+&gt;&#32;&gt;&#32;&gt;data-&gt;ext_len;
+&gt;&#32;&gt;&#32;+order&#32;=&#32;subsys_priv-&gt;data-
+&gt;&#32;&gt;&#32;&gt;ext_order;
+&gt;&#32;&gt;&#32;+}&#32;else&#32;if&#32;(path_sel&#32;==&#32;CRTC_THIRD)&#32;{
+&gt;&#32;&gt;&#32;+subsys_path&#32;=&#32;subsys_priv-&gt;data-
+&gt;&#32;&gt;&#32;&gt;third_path;
+&gt;&#32;&gt;&#32;+subsys_path_len&#32;=&#32;subsys_priv-
+&gt;&#32;&gt;&#32;&gt;data-&gt;third_len;
+&gt;&#32;&gt;&#32;+order&#32;=&#32;subsys_priv-&gt;data-
+&gt;&#32;&gt;&#32;&gt;third_order;
+&gt;&#32;&gt;&#32;+}
+&gt;&#32;&gt;&#32;+
+&gt;&#32;&gt;&#32;+if&#32;(subsys_priv-&gt;data-&gt;num_conn_routes)&#32;{
+&gt;&#32;&gt;&#32;+conn_routes&#32;=&#32;subsys_priv-&gt;data-
+&gt;&#32;&gt;&#32;&gt;conn_routes;
+&gt;&#32;&gt;&#32;+num_conn_routes&#32;=&#32;subsys_priv-
+&gt;&#32;&gt;&#32;&gt;data-&gt;num_conn_routes;
+&gt;&#32;&gt;&#32;+conn_mmsys&#32;=&#32;subsys_priv-&gt;data-
+&gt;&#32;&gt;&#32;&gt;mmsys_id;
+&gt;&#32;&gt;&#32;+}
+&gt;&#32;&gt;&#32;+
+&gt;&#32;&gt;&#32;+if&#32;(j&#32;!=&#32;order)
+&gt;&#32;&gt;&#32;+continue;
+&gt;&#32;&gt;&#32;+if&#32;(!subsys_path_len)
+&gt;&#32;&gt;&#32;+continue;
+&gt;&#32;&gt;&#32;+
+&gt;&#32;&gt;&#32;+for&#32;(i&#32;=&#32;0;&#32;i&#32;&lt;&#32;subsys_path_len;&#32;i++)&#32;{
+&gt;&#32;&gt;&#32;+path[path_len].sys&#32;=&#32;subsys_priv-
+&gt;&#32;&gt;&#32;&gt;data-&gt;mmsys_id;
+&gt;&#32;&gt;&#32;+path[path_len].comp_id&#32;=
+&gt;&#32;&gt;&#32;subsys_path[i];
+&gt;&#32;&gt;&#32;+path_len++;
+&gt;&#32;&gt;&#32;+}
+&gt;&#32;&gt;&#32;+}
+&gt;&#32;&gt;&#32;+}
+&gt;&#32;&gt;&#32;+
+&gt;&#32;&gt;&#32;+if&#32;(!path_len)
+&gt;&#32;&gt;&#32;+return&#32;0;
+&gt;&#32;&gt;&#32;+
+&gt;&#32;&gt;&#32;+if&#32;(num_conn_routes)&#32;{
+&gt;&#32;&gt;&#32;+for&#32;(i&#32;=&#32;0;&#32;i&#32;&lt;&#32;num_conn_routes;&#32;i++)
+&gt;&#32;&gt;&#32;+if&#32;(conn_routes-&gt;crtc_id&#32;==&#32;crtc_i)
+&gt;&#32;&gt;&#32;+break;
+&gt;&#32;&gt;&#32;+if&#32;(i&#32;==&#32;num_conn_routes)&#32;{
+&gt;&#32;&gt;&#32;+num_conn_routes&#32;=&#32;0;
+&gt;&#32;&gt;&#32;+conn_routes&#32;=&#32;NULL;
+&gt;&#32;&gt;&#32;+}
+&gt;&#32;&gt;&#32;+}
+&gt;&#32;&gt;&#32;+
+&gt;&#32;&gt;&#32;&#160;for&#32;(i&#32;=&#32;0;&#32;i&#32;&lt;&#32;path_len;&#32;i++)&#32;{
+&gt;&#32;&gt;&#32;-enum&#32;mtk_ddp_comp_id&#32;comp_id&#32;=&#32;path[i];
+&gt;&#32;&gt;&#32;+enum&#32;mtk_ddp_comp_id&#32;comp_id&#32;=&#32;path[i].comp_id;
+&gt;&#32;&gt;&#32;&#160;struct&#32;device_node&#32;*node;
+&gt;&#32;&gt;&#32;&#160;struct&#32;mtk_ddp_comp&#32;*comp;
+&gt;&#32;&gt;&#32;&#160;
+&gt;&#32;&gt;&#32;+priv&#32;=&#32;priv-&gt;all_drm_private[path[i].sys];
+&gt;&#32;&gt;&#32;&#160;node&#32;=&#32;priv-&gt;comp_node[comp_id];
+&gt;&#32;&gt;&#32;&#160;comp&#32;=&#32;&amp;priv-&gt;ddp_comp[comp_id];
+&gt;&#32;&gt;&#32;&#160;
+&gt;&#32;&gt;&#32;&#160;/*&#32;Not&#32;all&#32;drm&#32;components&#32;have&#32;a&#32;DTS&#32;device&#32;node,
+&gt;&#32;&gt;&#32;such&#32;as&#32;ovl_adaptor,
+&gt;&#32;&gt;&#32;&#160;&#32;*&#32;which&#32;is&#32;the&#32;drm&#32;bring&#32;up&#32;sub&#32;driver
+&gt;&#32;&gt;&#32;&#160;&#32;*/
+&gt;&#32;&gt;&#32;-if&#32;(!node&#32;&amp;&amp;&#32;comp_id&#32;!=
+&gt;&#32;&gt;&#32;DDP_COMPONENT_DRM_OVL_ADAPTOR)&#32;{
+&gt;&#32;&gt;&#32;+if&#32;(!node&#32;&amp;&amp;&#32;comp_id&#32;!=
+&gt;&#32;&gt;&#32;DDP_COMPONENT_DRM_OVL_ADAPTOR&#32;&amp;&amp;
+&gt;&#32;&gt;&#32;+&#160;&#160;&#160;&#32;comp_id&#32;!=&#32;DDP_COMPONENT_DRM_OVLSYS_ADAPTOR0
+&gt;&#32;&gt;&#32;&amp;&amp;
+&gt;&#32;&gt;&#32;+&#160;&#160;&#160;&#32;comp_id&#32;!=&#32;DDP_COMPONENT_DRM_OVLSYS_ADAPTOR1
+&gt;&#32;&gt;&#32;&amp;&amp;
+&gt;&#32;&gt;&#32;+&#160;&#160;&#160;&#32;comp_id&#32;!=&#32;DDP_COMPONENT_DRM_OVLSYS_ADAPTOR2
+&gt;&#32;&gt;&#32;&amp;&amp;
+&gt;&#32;&gt;&#32;+&#160;&#160;&#160;&#32;mtk_ddp_comp_get_type(comp_id)&#32;!=
+&gt;&#32;&gt;&#32;MTK_DISP_VIRTUAL)&#32;{
+&gt;&#32;&gt;&#32;&#160;dev_info(dev,
+&gt;&#32;&gt;&#32;&#160;&quot;Not&#32;creating&#32;crtc&#32;%d&#32;because
+&gt;&#32;&gt;&#32;component&#32;%d&#32;is&#32;disabled&#32;or&#32;missing&#92;n&quot;,
+&gt;&#32;&gt;&#32;&#160;crtc_i,&#32;comp_id);
+&gt;&#32;&gt;&#32;&#160;return&#32;0;
+&gt;&#32;&gt;&#32;&#160;}
+&gt;&#32;&gt;&#32;&#160;
+&gt;&#32;&gt;&#32;-if&#32;(!comp-&gt;dev)&#32;{
+&gt;&#32;&gt;&#32;+if&#32;(!comp-&gt;dev&#32;&amp;&amp;&#32;mtk_ddp_comp_get_type(comp_id)
+&gt;&#32;&gt;&#32;!=&#32;MTK_DISP_VIRTUAL)&#32;{
+&gt;&#32;&gt;&#32;&#160;dev_err(dev,&#32;&quot;Component&#32;%pOF&#32;not
+&gt;&#32;&gt;&#32;initialized&#92;n&quot;,&#32;node);
+&gt;&#32;&gt;&#32;&#160;return&#32;-ENODEV;
+&gt;&#32;&gt;&#32;&#160;}
+&gt;&#32;&gt;&#32;@@&#32;-989,7&#32;+1181,9&#32;@@&#32;int&#32;mtk_crtc_create(struct&#32;drm_device
+&gt;&#32;&gt;&#32;*drm_dev,&#32;const&#32;unsigned&#32;int&#32;*path,
+&gt;&#32;&gt;&#32;&#160;if&#32;(!mtk_crtc)
+&gt;&#32;&gt;&#32;&#160;return&#32;-ENOMEM;
+&gt;&#32;&gt;&#32;&#160;
+&gt;&#32;&gt;&#32;-mtk_crtc-&gt;mmsys_dev&#32;=&#32;priv-&gt;mmsys_dev;
+&gt;&#32;&gt;&#32;+for&#32;(i&#32;=&#32;0;&#32;i&#32;&lt;&#32;MAX_MMSYS;&#32;i++)
+&gt;&#32;&gt;&#32;+if&#32;(priv-&gt;all_drm_private[i])
+&gt;&#32;&gt;&#32;+mtk_crtc-&gt;mmsys_dev[i]&#32;=&#32;priv-
+&gt;&#32;&gt;&#32;&gt;all_drm_private[i]-&gt;mmsys_dev;
+&gt;&#32;&gt;&#32;&#160;mtk_crtc-&gt;ddp_comp_nr&#32;=&#32;path_len;
+&gt;&#32;&gt;&#32;&#160;mtk_crtc-&gt;ddp_comp&#32;=&#32;devm_kcalloc(dev,
+&gt;&#32;&gt;&#32;&#160;&#160;&#32;mtk_crtc-&gt;ddp_comp_nr&#32;+
+&gt;&#32;&gt;&#32;(conn_routes&#32;&#63;&#32;1&#32;:&#32;0),
+&gt;&#32;&gt;&#32;@@&#32;-998,19&#32;+1192,36&#32;@@&#32;int&#32;mtk_crtc_create(struct&#32;drm_device
+&gt;&#32;&gt;&#32;*drm_dev,&#32;const&#32;unsigned&#32;int&#32;*path,
+&gt;&#32;&gt;&#32;&#160;if&#32;(!mtk_crtc-&gt;ddp_comp)
+&gt;&#32;&gt;&#32;&#160;return&#32;-ENOMEM;
+&gt;&#32;&gt;&#32;&#160;
+&gt;&#32;&gt;&#32;-mtk_crtc-&gt;mutex&#32;=&#32;mtk_mutex_get(priv-&gt;mutex_dev);
+&gt;&#32;&gt;&#32;-if&#32;(IS_ERR(mtk_crtc-&gt;mutex))&#32;{
+&gt;&#32;&gt;&#32;-ret&#32;=&#32;PTR_ERR(mtk_crtc-&gt;mutex);
+&gt;&#32;&gt;&#32;-dev_err(dev,&#32;&quot;Failed&#32;to&#32;get&#32;mutex:&#32;%d&#92;n&quot;,&#32;ret);
+&gt;&#32;&gt;&#32;-return&#32;ret;
+&gt;&#32;&gt;&#32;+mtk_crtc-&gt;ddp_comp_sys&#32;=&#32;devm_kmalloc_array(dev,&#32;mtk_crtc-
+&gt;&#32;&gt;&#32;&gt;ddp_comp_nr&#32;+
+&gt;&#32;&gt;&#32;+&#160;&#160;&#160;&#32;(conn_routes&#32;&#63;
+&gt;&#32;&gt;&#32;1&#32;:&#32;0),
+&gt;&#32;&gt;&#32;+&#160;&#160;&#160;
+&gt;&#32;&gt;&#32;sizeof(mtk_crtc-&gt;ddp_comp_sys),&#32;GFP_KERNEL);
+&gt;&#32;&gt;&#32;+if&#32;(!mtk_crtc-&gt;ddp_comp_sys)
+&gt;&#32;&gt;&#32;+return&#32;-ENOMEM;
+&gt;&#32;&gt;&#32;+
+&gt;&#32;&gt;&#32;+for&#32;(i&#32;=&#32;0;&#32;i&#32;&lt;&#32;MAX_MMSYS;&#32;i++)&#32;{
+&gt;&#32;&gt;&#32;+if&#32;(!priv-&gt;all_drm_private[i])
+&gt;&#32;&gt;&#32;+continue;
+&gt;&#32;&gt;&#32;+
+&gt;&#32;&gt;&#32;+priv&#32;=&#32;priv-&gt;all_drm_private[i];
+&gt;&#32;&gt;&#32;+mtk_crtc-&gt;mutex[i]&#32;=&#32;mtk_mutex_get(priv-
+&gt;&#32;&gt;&#32;&gt;mutex_dev);
+&gt;&#32;&gt;&#32;+if&#32;(IS_ERR(mtk_crtc-&gt;mutex[i]))&#32;{
+&gt;&#32;&gt;&#32;+ret&#32;=&#32;PTR_ERR(mtk_crtc-&gt;mutex[i]);
+&gt;&#32;&gt;&#32;+dev_err(dev,&#32;&quot;Failed&#32;to&#32;get&#32;mutex:&#32;%d&#92;n&quot;,
+&gt;&#32;&gt;&#32;ret);
+&gt;&#32;&gt;&#32;+return&#32;ret;
+&gt;&#32;&gt;&#32;+}
+&gt;&#32;&gt;&#32;&#160;}
+&gt;&#32;&gt;&#32;&#160;
+&gt;&#32;&gt;&#32;&#160;for&#32;(i&#32;=&#32;0;&#32;i&#32;&lt;&#32;mtk_crtc-&gt;ddp_comp_nr;&#32;i++)&#32;{
+&gt;&#32;&gt;&#32;-unsigned&#32;int&#32;comp_id&#32;=&#32;path[i];
+&gt;&#32;&gt;&#32;+unsigned&#32;int&#32;comp_id&#32;=&#32;path[i].comp_id;
+&gt;&#32;&gt;&#32;&#160;struct&#32;mtk_ddp_comp&#32;*comp;
+&gt;&#32;&gt;&#32;&#160;
+&gt;&#32;&gt;&#32;+priv&#32;=&#32;priv-&gt;all_drm_private[path[i].sys];
+&gt;&#32;&gt;&#32;&#160;comp&#32;=&#32;&amp;priv-&gt;ddp_comp[comp_id];
+&gt;&#32;&gt;&#32;+if&#32;(mtk_ddp_comp_get_type(comp_id)&#32;==
+&gt;&#32;&gt;&#32;MTK_DISP_VIRTUAL)
+&gt;&#32;&gt;&#32;+comp-&gt;id&#32;=&#32;comp_id;
+&gt;&#32;&gt;&#32;&#160;mtk_crtc-&gt;ddp_comp[i]&#32;=&#32;comp;
+&gt;&#32;&gt;&#32;+mtk_crtc-&gt;ddp_comp_sys[i]&#32;=&#32;path[i].sys;
+&gt;&#32;&gt;&#32;+mtk_crtc-&gt;exist[path[i].sys]&#32;=&#32;true;
+&gt;&#32;&gt;&#32;&#160;
+&gt;&#32;&gt;&#32;&#160;if&#32;(comp-&gt;funcs)&#32;{
+&gt;&#32;&gt;&#32;&#160;if&#32;(comp-&gt;funcs-&gt;gamma_set&#32;&amp;&amp;&#32;comp-&gt;funcs-
+&gt;&#32;&gt;&#32;&gt;gamma_get_lut_size)&#32;{
+&gt;&#32;&gt;&#32;@@&#32;-1047,8&#32;+1258,10&#32;@@&#32;int&#32;mtk_crtc_create(struct&#32;drm_device
+&gt;&#32;&gt;&#32;*drm_dev,&#32;const&#32;unsigned&#32;int&#32;*path,
+&gt;&#32;&gt;&#32;&#160;&#32;*&#32;In&#32;the&#32;case&#32;of&#32;ovl_adaptor&#32;sub&#32;driver,&#32;it&#32;needs&#32;to&#32;use
+&gt;&#32;&gt;&#32;the
+&gt;&#32;&gt;&#32;&#160;&#32;*&#32;dma_dev_get&#32;function&#32;to&#32;get&#32;representative&#32;dma&#32;dev.
+&gt;&#32;&gt;&#32;&#160;&#32;*/
+&gt;&#32;&gt;&#32;-mtk_crtc-&gt;dma_dev&#32;=&#32;mtk_ddp_comp_dma_dev_get(&amp;priv-
+&gt;&#32;&gt;&#32;&gt;ddp_comp[path[0]]);
+&gt;&#32;&gt;&#32;+priv&#32;=&#32;priv-&gt;all_drm_private[path[0].sys];
+&gt;&#32;&gt;&#32;+mtk_crtc-&gt;dma_dev&#32;=&#32;mtk_ddp_comp_dma_dev_get(&amp;priv-
+&gt;&#32;&gt;&#32;&gt;ddp_comp[path[0].comp_id]);
+&gt;&#32;&gt;&#32;&#160;
+&gt;&#32;&gt;&#32;+mtk_crtc-&gt;vdisp_ao_dev&#32;=&#32;priv-&gt;vdisp_ao_dev;
+&gt;&#32;&gt;&#32;&#160;ret&#32;=&#32;mtk_crtc_init(drm_dev,&#32;mtk_crtc,&#32;crtc_i);
+&gt;&#32;&gt;&#32;&#160;if&#32;(ret&#32;&lt;&#32;0)
+&gt;&#32;&gt;&#32;&#160;return&#32;ret;
+&gt;&#32;&gt;&#32;@@&#32;-1061,7&#32;+1274,7&#32;@@&#32;int&#32;mtk_crtc_create(struct&#32;drm_device
+&gt;&#32;&gt;&#32;*drm_dev,&#32;const&#32;unsigned&#32;int&#32;*path,
+&gt;&#32;&gt;&#32;&#160;
+&gt;&#32;&gt;&#32;&#160;#if&#32;IS_REACHABLE(CONFIG_MTK_CMDQ)
+&gt;&#32;&gt;&#32;&#160;i&#32;=&#32;priv-&gt;mbox_index++;
+&gt;&#32;&gt;&#32;-mtk_crtc-&gt;cmdq_client.client.dev&#32;=&#32;mtk_crtc-&gt;mmsys_dev;
+&gt;&#32;&gt;&#32;+mtk_crtc-&gt;cmdq_client.client.dev&#32;=&#32;mtk_crtc-
+&gt;&#32;&gt;&#32;&gt;mmsys_dev[priv-&gt;data-&gt;mmsys_id];
+&gt;&#32;&gt;&#32;&#160;mtk_crtc-&gt;cmdq_client.client.tx_block&#32;=&#32;false;
+&gt;&#32;&gt;&#32;&#160;mtk_crtc-&gt;cmdq_client.client.knows_txdone&#32;=&#32;true;
+&gt;&#32;&gt;&#32;&#160;mtk_crtc-&gt;cmdq_client.client.rx_callback&#32;=&#32;ddp_cmdq_cb;
+&gt;&#32;&gt;&#32;@@&#32;-1101,6&#32;+1314,7&#32;@@&#32;int&#32;mtk_crtc_create(struct&#32;drm_device
+&gt;&#32;&gt;&#32;*drm_dev,&#32;const&#32;unsigned&#32;int&#32;*path,
+&gt;&#32;&gt;&#32;&#160;#endif
+&gt;&#32;&gt;&#32;&#160;
+&gt;&#32;&gt;&#32;&#160;if&#32;(conn_routes)&#32;{
+&gt;&#32;&gt;&#32;+priv&#32;=&#32;priv-&gt;all_drm_private[conn_mmsys];
+&gt;&#32;&gt;&#32;&#160;for&#32;(i&#32;=&#32;0;&#32;i&#32;&lt;&#32;num_conn_routes;&#32;i++)&#32;{
+&gt;&#32;&gt;&#32;&#160;unsigned&#32;int&#32;comp_id&#32;=
+&gt;&#32;&gt;&#32;conn_routes[i].route_ddp;
+&gt;&#32;&gt;&#32;&#160;struct&#32;device_node&#32;*node&#32;=&#32;priv-
+&gt;&#32;&gt;&#32;&gt;comp_node[comp_id];
+&gt;&#32;&gt;&#32;@@&#32;-1117,6&#32;+1331,7&#32;@@&#32;int&#32;mtk_crtc_create(struct&#32;drm_device
+&gt;&#32;&gt;&#32;*drm_dev,&#32;const&#32;unsigned&#32;int&#32;*path,
+&gt;&#32;&gt;&#32;&#160;mtk_ddp_comp_encoder_index_set(&amp;priv-
+&gt;&#32;&gt;&#32;&gt;ddp_comp[comp_id]);
+&gt;&#32;&gt;&#32;&#160;}
+&gt;&#32;&gt;&#32;&#160;
+&gt;&#32;&gt;&#32;+mtk_crtc-&gt;conn_routes_sys&#32;=&#32;conn_mmsys;
+&gt;&#32;&gt;&#32;&#160;mtk_crtc-&gt;num_conn_routes&#32;=&#32;num_conn_routes;
+&gt;&#32;&gt;&#32;&#160;mtk_crtc-&gt;conn_routes&#32;=&#32;conn_routes;
+&gt;&#32;&gt;&#32;&#160;
+&gt;&#32;&gt;&#32;@@&#32;-1124,5&#32;+1339,10&#32;@@&#32;int&#32;mtk_crtc_create(struct&#32;drm_device
+&gt;&#32;&gt;&#32;*drm_dev,&#32;const&#32;unsigned&#32;int&#32;*path,
+&gt;&#32;&gt;&#32;&#160;mtk_crtc-&gt;ddp_comp_nr++;
+&gt;&#32;&gt;&#32;&#160;}
+&gt;&#32;&gt;&#32;&#160;
+&gt;&#32;&gt;&#32;+for&#32;(i&#32;=&#32;0;&#32;i&#32;&lt;&#32;MAX_MMSYS;&#32;i++)
+&gt;&#32;&gt;&#32;+if&#32;(mtk_crtc-&gt;exist[i])
+&gt;&#32;&gt;&#32;+device_link_add(mtk_crtc-&gt;base.dev-&gt;dev,
+&gt;&#32;&gt;&#32;+priv-&gt;all_drm_private[i]-
+&gt;&#32;&gt;&#32;&gt;mutex_dev,&#32;0);
+&gt;&#32;&gt;&#32;+
+&gt;&#32;&gt;&#32;&#160;return&#32;0;
+&gt;&#32;&gt;&#32;&#160;}
+&gt;&#32;&gt;&#32;diff&#32;--git&#32;a/drivers/gpu/drm/mediatek/mtk_crtc.h
+&gt;&#32;&gt;&#32;b/drivers/gpu/drm/mediatek/mtk_crtc.h
+&gt;&#32;&gt;&#32;index&#32;388e900b6f4d..255f2823d17a&#32;100644
+&gt;&#32;&gt;&#32;---&#32;a/drivers/gpu/drm/mediatek/mtk_crtc.h
+&gt;&#32;&gt;&#32;+++&#32;b/drivers/gpu/drm/mediatek/mtk_crtc.h
+&gt;&#32;&gt;&#32;@@&#32;-15,10&#32;+15,8&#32;@@
+&gt;&#32;&gt;&#32;&#160;#define&#32;MTK_MIN_BPC3
+&gt;&#32;&gt;&#32;&#160;
+&gt;&#32;&gt;&#32;&#160;void&#32;mtk_crtc_commit(struct&#32;drm_crtc&#32;*crtc);
+&gt;&#32;&gt;&#32;-int&#32;mtk_crtc_create(struct&#32;drm_device&#32;*drm_dev,&#32;const&#32;unsigned&#32;int
+&gt;&#32;&gt;&#32;*path,
+&gt;&#32;&gt;&#32;-&#160;&#160;&#160;&#32;unsigned&#32;int&#32;path_len,&#32;int&#32;priv_data_index,
+&gt;&#32;&gt;&#32;-&#160;&#160;&#160;&#32;const&#32;struct&#32;mtk_drm_route&#32;*conn_routes,
+&gt;&#32;&gt;&#32;-&#160;&#160;&#160;&#32;unsigned&#32;int&#32;num_conn_routes);
+&gt;&#32;&gt;&#32;+int&#32;mtk_crtc_create(struct&#32;drm_device&#32;*drm_dev,
+&gt;&#32;&gt;&#32;+&#160;&#160;&#160;&#32;enum&#32;mtk_crtc_path&#32;path_sel);
+&gt;&#32;&gt;&#32;&#160;int&#32;mtk_crtc_plane_check(struct&#32;drm_crtc&#32;*crtc,&#32;struct&#32;drm_plane
+&gt;&#32;&gt;&#32;*plane,
+&gt;&#32;&gt;&#32;&#160;&#32;struct&#32;mtk_plane_state&#32;*state);
+&gt;&#32;&gt;&#32;&#160;void&#32;mtk_crtc_async_update(struct&#32;drm_crtc&#32;*crtc,&#32;struct&#32;drm_plane
+&gt;&#32;&gt;&#32;*plane,
+&gt;&#32;&gt;&#32;diff&#32;--git&#32;a/drivers/gpu/drm/mediatek/mtk_ddp_comp.c
+&gt;&#32;&gt;&#32;b/drivers/gpu/drm/mediatek/mtk_ddp_comp.c
+&gt;&#32;&gt;&#32;index&#32;492b8d965309..f841184d1e06&#32;100644
+&gt;&#32;&gt;&#32;---&#32;a/drivers/gpu/drm/mediatek/mtk_ddp_comp.c
+&gt;&#32;&gt;&#32;+++&#32;b/drivers/gpu/drm/mediatek/mtk_ddp_comp.c
+&gt;&#32;&gt;&#32;@@&#32;-464,6&#32;+464,7&#32;@@&#32;static&#32;const&#32;char&#32;*&#32;const
+&gt;&#32;&gt;&#32;mtk_ddp_comp_stem[MTK_DDP_COMP_TYPE_MAX]&#32;=&#32;{
+&gt;&#32;&gt;&#32;&#160;[MTK_DISP_PWM]&#32;=&#32;&quot;pwm&quot;,
+&gt;&#32;&gt;&#32;&#160;[MTK_DISP_RDMA]&#32;=&#32;&quot;rdma&quot;,
+&gt;&#32;&gt;&#32;&#160;[MTK_DISP_UFOE]&#32;=&#32;&quot;ufoe&quot;,
+&gt;&#32;&gt;&#32;+[MTK_DISP_VIRTUAL]&#32;=&#32;&quot;virtual&quot;,
+&gt;&#32;&gt;&#32;&#160;[MTK_DISP_WDMA]&#32;=&#32;&quot;wdma&quot;,
+&gt;&#32;&gt;&#32;&#160;[MTK_DP_INTF]&#32;=&#32;&quot;dp-intf&quot;,
+&gt;&#32;&gt;&#32;&#160;[MTK_DPI]&#32;=&#32;&quot;dpi&quot;,
+&gt;&#32;&gt;&#32;@@&#32;-487,6&#32;+488,15&#32;@@&#32;static&#32;const&#32;struct&#32;mtk_ddp_comp_match
+&gt;&#32;&gt;&#32;mtk_ddp_matches[DDP_COMPONENT_DRM_ID_MAX]
+&gt;&#32;&gt;&#32;&#160;[DDP_COMPONENT_COLOR0]=&#32;{
+&gt;&#32;&gt;&#32;MTK_DISP_COLOR,0,&#32;&amp;ddp_color&#32;},
+&gt;&#32;&gt;&#32;&#160;[DDP_COMPONENT_COLOR1]=&#32;{
+&gt;&#32;&gt;&#32;MTK_DISP_COLOR,1,&#32;&amp;ddp_color&#32;},
+&gt;&#32;&gt;&#32;&#160;[DDP_COMPONENT_DITHER0]=&#32;{
+&gt;&#32;&gt;&#32;MTK_DISP_DITHER,0,&#32;&amp;ddp_dither&#32;},
+&gt;&#32;&gt;&#32;+[DDP_COMPONENT_DLI_ASYNC0]&#160;&#160;&#160;&#160;&#160;&#32;=&#32;{
+&gt;&#32;&gt;&#32;MTK_DISP_VIRTUAL,&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#32;-1,&#32;NULL&#32;},
+&gt;&#32;&gt;&#32;+[DDP_COMPONENT_DLI_ASYNC1]&#160;&#160;&#160;&#160;&#160;&#32;=&#32;{
+&gt;&#32;&gt;&#32;MTK_DISP_VIRTUAL,&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#32;-1,&#32;NULL&#32;},
+&gt;&#32;&gt;&#32;+[DDP_COMPONENT_DLI_ASYNC8]&#160;&#160;&#160;&#160;&#160;&#32;=&#32;{
+&gt;&#32;&gt;&#32;MTK_DISP_VIRTUAL,&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#32;-1,&#32;NULL&#32;},
+&gt;&#32;&gt;&#32;+[DDP_COMPONENT_DLI_ASYNC21]&#160;&#160;&#160;&#160;&#32;=&#32;{
+&gt;&#32;&gt;&#32;MTK_DISP_VIRTUAL,&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#32;-1,&#32;NULL&#32;},
+&gt;&#32;&gt;&#32;+[DDP_COMPONENT_DLI_ASYNC22]&#160;&#160;&#160;&#160;&#32;=&#32;{
+&gt;&#32;&gt;&#32;MTK_DISP_VIRTUAL,&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#32;-1,&#32;NULL&#32;},
+&gt;&#32;&gt;&#32;+[DDP_COMPONENT_DLI_ASYNC23]&#160;&#160;&#160;&#160;&#32;=&#32;{
+&gt;&#32;&gt;&#32;MTK_DISP_VIRTUAL,&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#32;-1,&#32;NULL&#32;},
+&gt;&#32;&gt;&#32;+[DDP_COMPONENT_DLO_ASYNC1]&#160;&#160;&#160;&#160;&#160;&#32;=&#32;{
+&gt;&#32;&gt;&#32;MTK_DISP_VIRTUAL,&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#32;-1,&#32;NULL&#32;},
+&gt;&#32;&gt;&#32;+[DDP_COMPONENT_DLO_ASYNC2]&#160;&#160;&#160;&#160;&#160;&#32;=&#32;{
+&gt;&#32;&gt;&#32;MTK_DISP_VIRTUAL,&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#32;-1,&#32;NULL&#32;},
+&gt;&#32;&gt;&#32;+[DDP_COMPONENT_DLO_ASYNC3]&#160;&#160;&#160;&#160;&#160;&#32;=&#32;{
+&gt;&#32;&gt;&#32;MTK_DISP_VIRTUAL,&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#32;-1,&#32;NULL&#32;},
+&gt;&#32;&gt;&#32;&#160;[DDP_COMPONENT_DP_INTF0]=&#32;{
+&gt;&#32;&gt;&#32;MTK_DP_INTF,0,&#32;&amp;ddp_dpi&#32;},
+&gt;&#32;&gt;&#32;&#160;[DDP_COMPONENT_DP_INTF1]=&#32;{
+&gt;&#32;&gt;&#32;MTK_DP_INTF,1,&#32;&amp;ddp_dpi&#32;},
+&gt;&#32;&gt;&#32;&#160;[DDP_COMPONENT_DPI0]=&#32;{
+&gt;&#32;&gt;&#32;MTK_DPI,0,&#32;&amp;ddp_dpi&#32;},
+&gt;&#32;&gt;&#32;@@&#32;-494,6&#32;+504,9&#32;@@&#32;static&#32;const&#32;struct&#32;mtk_ddp_comp_match
+&gt;&#32;&gt;&#32;mtk_ddp_matches[DDP_COMPONENT_DRM_ID_MAX]
+&gt;&#32;&gt;&#32;&#160;[DDP_COMPONENT_DRM_OVL_ADAPTOR]=&#32;{
+&gt;&#32;&gt;&#32;MTK_DISP_OVL_ADAPTOR,0,&#32;&amp;ddp_ovl_adaptor&#32;},
+&gt;&#32;&gt;&#32;&#160;[DDP_COMPONENT_DRM_OVLSYS_ADAPTOR0]&#32;=&#32;{
+&gt;&#32;&gt;&#32;MTK_DISP_OVLSYS_ADAPTOR,&#32;0,&#32;&amp;ddp_ovlsys_adaptor},
+&gt;&#32;&gt;&#32;&#160;[DDP_COMPONENT_DRM_OVLSYS_ADAPTOR1]&#32;=&#32;{
+&gt;&#32;&gt;&#32;MTK_DISP_OVLSYS_ADAPTOR,&#32;1,&#32;&amp;ddp_ovlsys_adaptor},
+&gt;&#32;&gt;&#32;+[DDP_COMPONENT_DRM_OVLSYS_ADAPTOR0]&#32;=&#32;{
+&gt;&#32;&gt;&#32;MTK_DISP_OVLSYS_ADAPTOR,&#32;0,&#32;&amp;ddp_ovlsys_adaptor},
+&gt;&#32;&gt;&#32;+[DDP_COMPONENT_DRM_OVLSYS_ADAPTOR1]&#32;=&#32;{
+&gt;&#32;&gt;&#32;MTK_DISP_OVLSYS_ADAPTOR,&#32;1,&#32;&amp;ddp_ovlsys_adaptor},
+&gt;&#32;&gt;&#32;+[DDP_COMPONENT_DRM_OVLSYS_ADAPTOR2]&#32;=&#32;{
+&gt;&#32;&gt;&#32;MTK_DISP_OVLSYS_ADAPTOR,&#32;2,&#32;&amp;ddp_ovlsys_adaptor},
+&gt;&#32;&gt;&#32;&#160;[DDP_COMPONENT_DSC0]=&#32;{
+&gt;&#32;&gt;&#32;MTK_DISP_DSC,0,&#32;&amp;ddp_dsc&#32;},
+&gt;&#32;&gt;&#32;&#160;[DDP_COMPONENT_DSC1]=&#32;{
+&gt;&#32;&gt;&#32;MTK_DISP_DSC,1,&#32;&amp;ddp_dsc&#32;},
+&gt;&#32;&gt;&#32;&#160;[DDP_COMPONENT_DSI0]=&#32;{
+&gt;&#32;&gt;&#32;MTK_DSI,0,&#32;&amp;ddp_dsi&#32;},
+&gt;&#32;&gt;&#32;@@&#32;-510,7&#32;+523,10&#32;@@&#32;static&#32;const&#32;struct&#32;mtk_ddp_comp_match
+&gt;&#32;&gt;&#32;mtk_ddp_matches[DDP_COMPONENT_DRM_ID_MAX]
+&gt;&#32;&gt;&#32;&#160;[DDP_COMPONENT_OD0]=&#32;{
+&gt;&#32;&gt;&#32;MTK_DISP_OD,0,&#32;&amp;ddp_od&#32;},
+&gt;&#32;&gt;&#32;&#160;[DDP_COMPONENT_OD1]=&#32;{
+&gt;&#32;&gt;&#32;MTK_DISP_OD,1,&#32;&amp;ddp_od&#32;},
+&gt;&#32;&gt;&#32;&#160;[DDP_COMPONENT_OVL0]=&#32;{
+&gt;&#32;&gt;&#32;MTK_DISP_OVL,0,&#32;&amp;ddp_ovl&#32;},
+&gt;&#32;&gt;&#32;+[DDP_COMPONENT_OVL0_DLO_ASYNC5]&#32;=&#32;{
+&gt;&#32;&gt;&#32;MTK_DISP_VIRTUAL,&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#32;-1,&#32;NULL&#32;},
+&gt;&#32;&gt;&#32;+[DDP_COMPONENT_OVL0_DLO_ASYNC6]&#32;=&#32;{
+&gt;&#32;&gt;&#32;MTK_DISP_VIRTUAL,&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#32;-1,&#32;NULL&#32;},
+&gt;&#32;&gt;&#32;&#160;[DDP_COMPONENT_OVL1]=&#32;{
+&gt;&#32;&gt;&#32;MTK_DISP_OVL,1,&#32;&amp;ddp_ovl&#32;},
+&gt;&#32;&gt;&#32;+[DDP_COMPONENT_OVL1_DLO_ASYNC5]&#32;=&#32;{
+&gt;&#32;&gt;&#32;MTK_DISP_VIRTUAL,&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#32;-1,&#32;NULL&#32;},
+&gt;&#32;&gt;&#32;&#160;[DDP_COMPONENT_OVL_2L0]=&#32;{
+&gt;&#32;&gt;&#32;MTK_DISP_OVL_2L,0,&#32;&amp;ddp_ovl&#32;},
+&gt;&#32;&gt;&#32;&#160;[DDP_COMPONENT_OVL_2L1]=&#32;{
+&gt;&#32;&gt;&#32;MTK_DISP_OVL_2L,1,&#32;&amp;ddp_ovl&#32;},
+&gt;&#32;&gt;&#32;&#160;[DDP_COMPONENT_OVL_2L2]=&#32;{
+&gt;&#32;&gt;&#32;MTK_DISP_OVL_2L,2,&#32;&amp;ddp_ovl&#32;},
+&gt;&#32;&gt;&#32;@@&#32;-567,12&#32;+583,19&#32;@@&#32;static&#32;bool&#32;mtk_ddp_path_available(const
+&gt;&#32;&gt;&#32;unsigned&#32;int&#32;*path,
+&gt;&#32;&gt;&#32;&#160;{
+&gt;&#32;&gt;&#32;&#160;unsigned&#32;int&#32;i;
+&gt;&#32;&gt;&#32;&#160;
+&gt;&#32;&gt;&#32;+if&#32;(!path_len)
+&gt;&#32;&gt;&#32;+return&#32;true;
+&gt;&#32;&gt;&#32;+
+&gt;&#32;&gt;&#32;&#160;if&#32;(!path&#32;||&#32;!path_len)
+&gt;&#32;&gt;&#32;&#160;return&#32;false;
+&gt;&#32;&gt;&#32;&#160;
+&gt;&#32;&gt;&#32;&#160;for&#32;(i&#32;=&#32;0U;&#32;i&#32;&lt;&#32;path_len;&#32;i++)&#32;{
+&gt;&#32;&gt;&#32;&#160;/*&#32;OVL_ADAPTOR&#32;doesn&#39;t&#32;have&#32;a&#32;device&#32;node&#32;*/
+&gt;&#32;&gt;&#32;-if&#32;(path[i]&#32;==&#32;DDP_COMPONENT_DRM_OVL_ADAPTOR)
+&gt;&#32;&gt;&#32;+if&#32;(path[i]&#32;==&#32;DDP_COMPONENT_DRM_OVL_ADAPTOR&#32;||
+&gt;&#32;&gt;&#32;+&#160;&#160;&#160;&#32;path[i]&#32;==&#32;DDP_COMPONENT_DRM_OVLSYS_ADAPTOR0
+&gt;&#32;&gt;&#32;||
+&gt;&#32;&gt;&#32;+path[i]&#32;==
+&gt;&#32;&gt;&#32;DDP_COMPONENT_DRM_OVLSYS_ADAPTOR1&#32;||
+&gt;&#32;&gt;&#32;+path[i]&#32;==
+&gt;&#32;&gt;&#32;DDP_COMPONENT_DRM_OVLSYS_ADAPTOR2&#32;||
+&gt;&#32;&gt;&#32;+mtk_ddp_comp_get_type(path[i])&#32;==
+&gt;&#32;&gt;&#32;MTK_DISP_VIRTUAL)
+&gt;&#32;&gt;&#32;&#160;continue;
+&gt;&#32;&gt;&#32;&#160;
+&gt;&#32;&gt;&#32;&#160;if&#32;(!comp_node[path[i]])
+&gt;&#32;&gt;&#32;@@&#32;-597,44&#32;+620,81&#32;@@&#32;int&#32;mtk_ddp_comp_get_id(struct&#32;device_node
+&gt;&#32;&gt;&#32;*node,
+&gt;&#32;&gt;&#32;&#160;return&#32;-EINVAL;
+&gt;&#32;&gt;&#32;&#160;}
+&gt;&#32;&gt;&#32;&#160;
+&gt;&#32;&gt;&#32;+enum&#32;mtk_ddp_comp_type&#32;mtk_ddp_comp_get_type(unsigned&#32;int&#32;comp_id)
+&gt;&#32;&gt;&#32;+{
+&gt;&#32;&gt;&#32;+return&#32;mtk_ddp_matches[comp_id].type;
+&gt;&#32;&gt;&#32;+}
+&gt;&#32;&gt;&#32;+
+&gt;&#32;&gt;&#32;&#160;int&#32;mtk_find_possible_crtcs(struct&#32;drm_device&#32;*drm,&#32;struct&#32;device
+&gt;&#32;&gt;&#32;*dev)
+&gt;&#32;&gt;&#32;&#160;{
+&gt;&#32;&gt;&#32;&#160;struct&#32;mtk_drm_private&#32;*private&#32;=&#32;drm-&gt;dev_private;
+&gt;&#32;&gt;&#32;&#160;const&#32;struct&#32;mtk_mmsys_driver_data&#32;*data;
+&gt;&#32;&gt;&#32;&#160;struct&#32;mtk_drm_private&#32;*priv_n;
+&gt;&#32;&gt;&#32;-int&#32;i&#32;=&#32;0,&#32;j;
+&gt;&#32;&gt;&#32;&#160;int&#32;ret;
+&gt;&#32;&gt;&#32;+int&#32;i&#32;=&#32;0,&#32;j,&#32;count&#32;=&#32;0;
+&gt;&#32;&gt;&#32;+bool&#32;found&#32;=&#32;false;
+&gt;&#32;&gt;&#32;&#160;
+&gt;&#32;&gt;&#32;&#160;for&#32;(j&#32;=&#32;0;&#32;j&#32;&lt;&#32;private-&gt;data-&gt;mmsys_dev_num;&#32;j++)&#32;{
+&gt;&#32;&gt;&#32;&#160;priv_n&#32;=&#32;private-&gt;all_drm_private[j];
+&gt;&#32;&gt;&#32;&#160;data&#32;=&#32;priv_n-&gt;data;
+&gt;&#32;&gt;&#32;&#160;
+&gt;&#32;&gt;&#32;&#160;if&#32;(mtk_ddp_path_available(data-&gt;main_path,&#32;data-
+&gt;&#32;&gt;&#32;&gt;main_len,
+&gt;&#32;&gt;&#32;-&#160;&#160;&#32;priv_n-&gt;comp_node))&#32;{
+&gt;&#32;&gt;&#32;-if&#32;(mtk_ddp_comp_find(dev,&#32;data-
+&gt;&#32;&gt;&#32;&gt;main_path,
+&gt;&#32;&gt;&#32;-&#160;&#160;&#160;&#160;&#160;&#32;data-&gt;main_len,
+&gt;&#32;&gt;&#32;-&#160;&#160;&#160;&#160;&#160;&#32;priv_n-&gt;ddp_comp))
+&gt;&#32;&gt;&#32;-return&#32;BIT(i);
+&gt;&#32;&gt;&#32;-i++;
+&gt;&#32;&gt;&#32;-}
+&gt;&#32;&gt;&#32;+&#160;&#160;&#32;priv_n-&gt;comp_node))
+&gt;&#32;&gt;&#32;+count++;
+&gt;&#32;&gt;&#32;+
+&gt;&#32;&gt;&#32;+if&#32;(mtk_ddp_comp_find(dev,&#32;data-&gt;main_path,&#32;data-
+&gt;&#32;&gt;&#32;&gt;main_len,
+&gt;&#32;&gt;&#32;+&#160;&#160;&#160;&#160;&#160;&#32;priv_n-&gt;ddp_comp))
+&gt;&#32;&gt;&#32;+found&#32;=&#32;true;
+&gt;&#32;&gt;&#32;+}
+&gt;&#32;&gt;&#32;+
+&gt;&#32;&gt;&#32;+if&#32;(count&#32;==&#32;private-&gt;data-&gt;mmsys_dev_num)&#32;{
+&gt;&#32;&gt;&#32;+if&#32;(found)
+&gt;&#32;&gt;&#32;+return&#32;BIT(i);
+&gt;&#32;&gt;&#32;+i++;
+&gt;&#32;&gt;&#32;+}
+&gt;&#32;&gt;&#32;+
+&gt;&#32;&gt;&#32;+count&#32;=&#32;0;
+&gt;&#32;&gt;&#32;+found&#32;=&#32;false;
+&gt;&#32;&gt;&#32;+
+&gt;&#32;&gt;&#32;+for&#32;(j&#32;=&#32;0;&#32;j&#32;&lt;&#32;private-&gt;data-&gt;mmsys_dev_num;&#32;j++)&#32;{
+&gt;&#32;&gt;&#32;+priv_n&#32;=&#32;private-&gt;all_drm_private[j];
+&gt;&#32;&gt;&#32;+data&#32;=&#32;priv_n-&gt;data;
+&gt;&#32;&gt;&#32;&#160;
+&gt;&#32;&gt;&#32;&#160;if&#32;(mtk_ddp_path_available(data-&gt;ext_path,&#32;data-
+&gt;&#32;&gt;&#32;&gt;ext_len,
+&gt;&#32;&gt;&#32;-&#160;&#160;&#32;priv_n-&gt;comp_node))&#32;{
+&gt;&#32;&gt;&#32;-if&#32;(mtk_ddp_comp_find(dev,&#32;data-&gt;ext_path,
+&gt;&#32;&gt;&#32;-&#160;&#160;&#160;&#160;&#160;&#32;data-&gt;ext_len,
+&gt;&#32;&gt;&#32;-&#160;&#160;&#160;&#160;&#160;&#32;priv_n-&gt;ddp_comp))
+&gt;&#32;&gt;&#32;-return&#32;BIT(i);
+&gt;&#32;&gt;&#32;-i++;
+&gt;&#32;&gt;&#32;-}
+&gt;&#32;&gt;&#32;+&#160;&#160;&#32;priv_n-&gt;comp_node))
+&gt;&#32;&gt;&#32;+count++;
+&gt;&#32;&gt;&#32;+
+&gt;&#32;&gt;&#32;+if&#32;(mtk_ddp_comp_find(dev,&#32;data-&gt;ext_path,&#32;data-
+&gt;&#32;&gt;&#32;&gt;ext_len,
+&gt;&#32;&gt;&#32;+&#160;&#160;&#160;&#160;&#160;&#32;priv_n-&gt;ddp_comp))
+&gt;&#32;&gt;&#32;+found&#32;=&#32;true;
+&gt;&#32;&gt;&#32;+}
+&gt;&#32;&gt;&#32;+
+&gt;&#32;&gt;&#32;+if&#32;(count&#32;==&#32;private-&gt;data-&gt;mmsys_dev_num)&#32;{
+&gt;&#32;&gt;&#32;+if&#32;(found)
+&gt;&#32;&gt;&#32;+return&#32;BIT(i);
+&gt;&#32;&gt;&#32;+i++;
+&gt;&#32;&gt;&#32;+}
+&gt;&#32;&gt;&#32;+
+&gt;&#32;&gt;&#32;+count&#32;=&#32;0;
+&gt;&#32;&gt;&#32;+found&#32;=&#32;false;
+&gt;&#32;&gt;&#32;+
+&gt;&#32;&gt;&#32;+for&#32;(j&#32;=&#32;0;&#32;j&#32;&lt;&#32;private-&gt;data-&gt;mmsys_dev_num;&#32;j++)&#32;{
+&gt;&#32;&gt;&#32;+priv_n&#32;=&#32;private-&gt;all_drm_private[j];
+&gt;&#32;&gt;&#32;+data&#32;=&#32;priv_n-&gt;data;
+&gt;&#32;&gt;&#32;&#160;
+&gt;&#32;&gt;&#32;&#160;if&#32;(mtk_ddp_path_available(data-&gt;third_path,&#32;data-
+&gt;&#32;&gt;&#32;&gt;third_len,
+&gt;&#32;&gt;&#32;-&#160;&#160;&#32;priv_n-&gt;comp_node))&#32;{
+&gt;&#32;&gt;&#32;-if&#32;(mtk_ddp_comp_find(dev,&#32;data-
+&gt;&#32;&gt;&#32;&gt;third_path,
+&gt;&#32;&gt;&#32;-&#160;&#160;&#160;&#160;&#160;&#32;data-&gt;third_len,
+&gt;&#32;&gt;&#32;-&#160;&#160;&#160;&#160;&#160;&#32;priv_n-&gt;ddp_comp))
+&gt;&#32;&gt;&#32;-return&#32;BIT(i);
+&gt;&#32;&gt;&#32;-i++;
+&gt;&#32;&gt;&#32;-}
+&gt;&#32;&gt;&#32;+priv_n-&gt;comp_node))
+&gt;&#32;&gt;&#32;+count++;
+&gt;&#32;&gt;&#32;+
+&gt;&#32;&gt;&#32;+if&#32;(mtk_ddp_comp_find(dev,&#32;data-&gt;third_path,&#32;data-
+&gt;&#32;&gt;&#32;&gt;third_len,
+&gt;&#32;&gt;&#32;+&#160;&#160;&#160;&#160;&#160;&#32;priv_n-&gt;ddp_comp))
+&gt;&#32;&gt;&#32;+found&#32;=&#32;true;
+&gt;&#32;&gt;&#32;+}
+&gt;&#32;&gt;&#32;+
+&gt;&#32;&gt;&#32;+if&#32;(count&#32;==&#32;private-&gt;data-&gt;mmsys_dev_num)&#32;{
+&gt;&#32;&gt;&#32;+if&#32;(found)
+&gt;&#32;&gt;&#32;+return&#32;BIT(i);
+&gt;&#32;&gt;&#32;+i++;
+&gt;&#32;&gt;&#32;&#160;}
+&gt;&#32;&gt;&#32;&#160;
+&gt;&#32;&gt;&#32;&#160;ret&#32;=&#32;mtk_ddp_comp_find_in_route(dev,
+&gt;&#32;&gt;&#32;diff&#32;--git&#32;a/drivers/gpu/drm/mediatek/mtk_ddp_comp.h
+&gt;&#32;&gt;&#32;b/drivers/gpu/drm/mediatek/mtk_ddp_comp.h
+&gt;&#32;&gt;&#32;index&#32;ef64ce7a071f..badb42bd4f7c&#32;100644
+&gt;&#32;&gt;&#32;---&#32;a/drivers/gpu/drm/mediatek/mtk_ddp_comp.h
+&gt;&#32;&gt;&#32;+++&#32;b/drivers/gpu/drm/mediatek/mtk_ddp_comp.h
+&gt;&#32;&gt;&#32;@@&#32;-40,6&#32;+40,7&#32;@@&#32;enum&#32;mtk_ddp_comp_type&#32;{
+&gt;&#32;&gt;&#32;&#160;MTK_DISP_PWM,
+&gt;&#32;&gt;&#32;&#160;MTK_DISP_RDMA,
+&gt;&#32;&gt;&#32;&#160;MTK_DISP_UFOE,
+&gt;&#32;&gt;&#32;+MTK_DISP_VIRTUAL,
+&gt;&#32;&gt;&#32;&#160;MTK_DISP_WDMA,
+&gt;&#32;&gt;&#32;&#160;MTK_DPI,
+&gt;&#32;&gt;&#32;&#160;MTK_DP_INTF,
+&gt;&#32;&gt;&#32;@@&#32;-47,6&#32;+48,7&#32;@@&#32;enum&#32;mtk_ddp_comp_type&#32;{
+&gt;&#32;&gt;&#32;&#160;MTK_OVL_BLENDER,
+&gt;&#32;&gt;&#32;&#160;MTK_OVL_EXDMA,
+&gt;&#32;&gt;&#32;&#160;MTK_OVL_OUTPROC,
+&gt;&#32;&gt;&#32;+MTK_VDISP_AO,
+&gt;&#32;&gt;&#32;&#160;MTK_DDP_COMP_TYPE_MAX,
+&gt;&#32;&gt;&#32;&#160;};
+&gt;&#32;&gt;&#32;&#160;
+&gt;&#32;&gt;&#32;diff&#32;--git&#32;a/drivers/gpu/drm/mediatek/mtk_drm_drv.c
+&gt;&#32;&gt;&#32;b/drivers/gpu/drm/mediatek/mtk_drm_drv.c
+&gt;&#32;&gt;&#32;index&#32;7526bc38bcc7..0665a6feb546&#32;100644
+&gt;&#32;&gt;&#32;---&#32;a/drivers/gpu/drm/mediatek/mtk_drm_drv.c
+&gt;&#32;&gt;&#32;+++&#32;b/drivers/gpu/drm/mediatek/mtk_drm_drv.c
+&gt;&#32;&gt;&#32;@@&#32;-193,6&#32;+193,10&#32;@@&#32;static&#32;const&#32;struct&#32;mtk_drm_route
+&gt;&#32;&gt;&#32;mt8188_mtk_ddp_main_routes[]&#32;=&#32;{
+&gt;&#32;&gt;&#32;&#160;{0,&#32;DDP_COMPONENT_DSI0},
+&gt;&#32;&gt;&#32;&#160;};
+&gt;&#32;&gt;&#32;&#160;
+&gt;&#32;&gt;&#32;+static&#32;const&#32;struct&#32;mtk_drm_route&#32;mt8196_mtk_ddp_routes[]&#32;=&#32;{
+&gt;&#32;&gt;&#32;+{2,&#32;DDP_COMPONENT_DSI0},
+&gt;&#32;&gt;&#32;+};
+&gt;&#32;&gt;&#32;+
+&gt;&#32;&gt;&#32;&#160;static&#32;const&#32;unsigned&#32;int&#32;mt8192_mtk_ddp_main[]&#32;=&#32;{
+&gt;&#32;&gt;&#32;&#160;DDP_COMPONENT_OVL0,
+&gt;&#32;&gt;&#32;&#160;DDP_COMPONENT_OVL_2L0,
+&gt;&#32;&gt;&#32;@@&#32;-231,6&#32;+235,50&#32;@@&#32;static&#32;const&#32;unsigned&#32;int&#32;mt8195_mtk_ddp_ext[]
+&gt;&#32;&gt;&#32;=&#32;{
+&gt;&#32;&gt;&#32;&#160;DDP_COMPONENT_DP_INTF1,
+&gt;&#32;&gt;&#32;&#160;};
+&gt;&#32;&gt;&#32;&#160;
+&gt;&#32;&gt;&#32;+static&#32;const&#32;unsigned&#32;int&#32;mt8196_mtk_ddp_ovl0_main[]&#32;=&#32;{
+&gt;&#32;&gt;&#32;+DDP_COMPONENT_DRM_OVLSYS_ADAPTOR0,
+&gt;&#32;&gt;&#32;+DDP_COMPONENT_OVL0_DLO_ASYNC5,
+&gt;&#32;&gt;&#32;+};
+&gt;&#32;
+&gt;&#32;Separate&#32;MT8196&#32;part&#32;to&#32;another&#32;patch&#32;which&#32;add&#32;support&#32;MT8196.
+&gt;&#32;Let&#32;this&#32;patch&#32;not&#32;related&#32;to&#32;specific&#32;SoC.
+&gt;&#32;
+&gt;&#32;Regards,
+&gt;&#32;CK
+
+Sure,&#32;I&#32;will&#32;separate&#32;this&#32;patch&#32;to&#32;2&#32;part,&#32;first&#32;patch&#32;is&#32;to&#32;supprt
+the&#32;multiple&#32;MMSYS&#32;for&#32;mediatek&#32;drm&#32;driver.&#32;Second&#32;patch&#32;is&#32;to&#32;support
+MT8196&#32;SOC.
+
+Best,&#32;
+Paul&#32;&#32;
+
+</pre>
+</p></body></html><!--type:text--><!--{--><pre>************* MEDIATEK Confidentiality Notice ********************
+The information contained in this e-mail message (including any 
+attachments) may be confidential, proprietary, privileged, or otherwise
+exempt from disclosure under applicable laws. It is intended to be 
+conveyed only to the designated recipient(s). Any use, dissemination, 
+distribution, printing, retaining or copying of this e-mail (including its 
+attachments) by unintended recipient(s) is strictly prohibited and may 
+be unlawful. If you are not an intended recipient of this e-mail, or believe 
+that you have received this e-mail in error, please notify the sender 
+immediately (by replying to this e-mail), delete any and all copies of 
+this e-mail (including any attachments) from your system, and do not
+disclose the content of this e-mail to any other person. Thank you!
+</pre><!--}-->
diff --git a/N1/2.hdr b/N1/2.hdr
new file mode 100644
index 0000000..da1f671
--- /dev/null
+++ b/N1/2.hdr
@@ -0,0 +1,3 @@
+Content-Type: text/html;
+	charset="utf-8"
+Content-Transfer-Encoding: base64
diff --git a/a/content_digest b/N1/content_digest
index 73ec481..40b371e 100644
--- a/a/content_digest
+++ b/N1/content_digest
@@ -25,7 +25,7 @@
   p.zabel@pengutronix.de <p.zabel@pengutronix.de>
  " Sirius Wang (\347\216\213\347\232\223\346\230\261) <Sirius.Wang@mediatek.com>"
  " linux-arm-kernel@lists.infradead.org <linux-arm-kernel@lists.infradead.org>\0"
- "\00:1\0"
+ "\01:1\0"
  "b\0"
  "On Wed, 2025-02-12 at 09:30 +0000, CK Hu (\350\203\241\344\277\212\345\205\211) wrote:\n"
  "> Hi, Paul:\n"
@@ -1142,5 +1142,1139 @@
  "\n"
  "Best, \n"
  Paul
+ "\01:2\0"
+ "b\0"
+ "<html><body><p>\r\n"
+ "<pre>\r\n"
+ "On&#32;Wed,&#32;2025-02-12&#32;at&#32;09:30&#32;+0000,&#32;CK&#32;Hu&#32;(&#32993;&#20426;&#20809;)&#32;wrote:\r\n"
+ "&gt;&#32;Hi,&#32;Paul:\r\n"
+ "&gt;&#32;\r\n"
+ "&gt;&#32;On&#32;Fri,&#32;2025-01-10&#32;at&#32;20:34&#32;+0800,&#32;paul-pl.chen&#32;wrote:\r\n"
+ "&gt;&#32;&gt;&#32;From:&#32;&quot;Nancy.Lin&quot;&#32;&lt;nancy.lin@mediatek.com&gt;\r\n"
+ "&gt;&#32;&gt;&#32;\r\n"
+ "&gt;&#32;&gt;&#32;To&#32;support&#32;multiple&#32;mmsys&#32;instances&#32;in&#32;the&#32;one&#32;mediatek-drm\r\n"
+ "&gt;&#32;&gt;&#32;instance,\r\n"
+ "&gt;&#32;&gt;&#32;providing&#32;improved&#32;flexibility&#32;and&#32;scalability&#32;by&#32;the&#32;following\r\n"
+ "&gt;&#32;&gt;&#32;changes:\r\n"
+ "&gt;&#32;&gt;&#32;\r\n"
+ "&gt;&#32;&gt;&#32;1.&#32;Defined&#32;new&#32;DRM&#32;component&#32;IDs&#32;DDP_COMPONENT_DRM_OVLSYS_ADAPTOR*\r\n"
+ "&gt;&#32;&gt;&#32;&#160;&#32;to&#32;support&#32;different&#32;mmsys&#32;composition.\r\n"
+ "&gt;&#32;&gt;&#32;2.&#32;Added&#32;new&#32;component&#32;types&#32;MTK_DISP_VIRTUAL&#32;to&#32;support&#32;the\r\n"
+ "&gt;&#32;&gt;&#32;&#160;&#32;routing&#32;to&#32;virtual&#32;display&#32;components.\r\n"
+ "&gt;&#32;&gt;&#32;3.&#32;Added&#32;and&#32;adjusted&#32;the&#32;existed&#32;structure&#32;or&#32;interface&#32;to&#32;extend\r\n"
+ "&gt;&#32;&gt;&#32;&#160;&#32;the&#32;support&#32;of&#32;multiple&#32;mmsys&#32;instances.\r\n"
+ "&gt;&#32;&gt;&#32;4.&#32;Modified&#32;the&#32;component&#32;matching&#32;and&#32;binding&#32;logic&#32;to&#32;support\r\n"
+ "&gt;&#32;&gt;&#32;&#160;&#32;multiple&#32;mmsys&#32;instances.\r\n"
+ "&gt;&#32;\r\n"
+ "&gt;&#32;I&#32;think&#32;the&#32;title&#32;would&#32;confuse&#32;me.\r\n"
+ "&gt;&#32;Original&#32;mediatek-drm&#32;driver&#32;already&#32;support&#32;multiple&#32;mmsys.\r\n"
+ "&gt;&#32;I&#32;try&#32;to&#32;understand&#32;MT8196&#32;display.\r\n"
+ "&gt;&#32;Is&#32;one&#32;display&#32;pipeline&#32;separated&#32;into&#32;two&#32;mmsys&#63;\r\n"
+ "&gt;&#32;The&#32;first&#32;is&#32;ovlsys&#32;and&#32;the&#32;second&#32;is&#32;dispsys&#63;\r\n"
+ "&gt;&#32;If&#32;so,&#32;I&#32;would&#32;like&#32;mediatek-drm&#32;driver&#32;see&#32;only&#32;mmsys&#32;(dispsys),\r\n"
+ "&gt;&#32;and&#32;let&#32;ovlsys&#32;control&#32;is&#32;hidden&#32;in&#32;ovlsys&#32;sub&#32;driver,&#32;so&#32;mediatek-\r\n"
+ "&gt;&#32;drm&#32;driver&#32;would&#32;not&#32;change&#32;so&#32;much.\r\n"
+ "&gt;&#32;\r\n"
+ "&gt;&#32;&gt;&#32;\r\n"
+ "&gt;&#32;&gt;&#32;Signed-off-by:&#32;Nancy.Lin&#32;&lt;nancy.lin@mediatek.com&gt;\r\n"
+ "&gt;&#32;&gt;&#32;Signed-off-by:&#32;Paul-pl.Chen&#32;&lt;paul-pl.chen@mediatek.com&gt;\r\n"
+ "&gt;&#32;&gt;&#32;---\r\n"
+ "&gt;&#32;&gt;&#32;&#160;drivers/gpu/drm/mediatek/mtk_crtc.c&#160;&#160;&#160;&#160;&#32;|&#32;350&#32;+++++++++++++++++++-\r\n"
+ "&gt;&#32;&gt;&#32;----\r\n"
+ "&gt;&#32;&gt;&#32;&#160;drivers/gpu/drm/mediatek/mtk_crtc.h&#160;&#160;&#160;&#160;&#32;|&#160;&#160;&#32;6&#32;+-\r\n"
+ "&gt;&#32;&gt;&#32;&#160;drivers/gpu/drm/mediatek/mtk_ddp_comp.c&#32;|&#32;106&#32;+++++--\r\n"
+ "&gt;&#32;&gt;&#32;&#160;drivers/gpu/drm/mediatek/mtk_ddp_comp.h&#32;|&#160;&#160;&#32;2&#32;+\r\n"
+ "&gt;&#32;&gt;&#32;&#160;drivers/gpu/drm/mediatek/mtk_drm_drv.c&#160;&#32;|&#32;223&#32;++++++++++++---\r\n"
+ "&gt;&#32;&gt;&#32;&#160;drivers/gpu/drm/mediatek/mtk_drm_drv.h&#160;&#32;|&#160;&#32;16&#32;+-\r\n"
+ "&gt;&#32;&gt;&#32;&#160;6&#32;files&#32;changed,&#32;578&#32;insertions(+),&#32;125&#32;deletions(-)\r\n"
+ "&gt;&#32;&gt;&#32;\r\n"
+ "&gt;&#32;&gt;&#32;diff&#32;--git&#32;a/drivers/gpu/drm/mediatek/mtk_crtc.c\r\n"
+ "&gt;&#32;&gt;&#32;b/drivers/gpu/drm/mediatek/mtk_crtc.c\r\n"
+ "&gt;&#32;&gt;&#32;index&#32;eb0e1233ad04..eca6941bfaa2&#32;100644\r\n"
+ "&gt;&#32;&gt;&#32;---&#32;a/drivers/gpu/drm/mediatek/mtk_crtc.c\r\n"
+ "&gt;&#32;&gt;&#32;+++&#32;b/drivers/gpu/drm/mediatek/mtk_crtc.c\r\n"
+ "&gt;&#32;&gt;&#32;@@&#32;-58,13&#32;+58,17&#32;@@&#32;struct&#32;mtk_crtc&#32;{\r\n"
+ "&gt;&#32;&gt;&#32;&#160;wait_queue_head_tcb_blocking_queue;\r\n"
+ "&gt;&#32;&gt;&#32;&#160;#endif\r\n"
+ "&gt;&#32;&gt;&#32;&#160;\r\n"
+ "&gt;&#32;&gt;&#32;-struct&#32;device*mmsys_dev;\r\n"
+ "&gt;&#32;&gt;&#32;+struct&#32;device*mmsys_dev[MAX_MMSYS];\r\n"
+ "&gt;&#32;&gt;&#32;&#160;struct&#32;device*dma_dev;\r\n"
+ "&gt;&#32;&gt;&#32;-struct&#32;mtk_mutex*mutex;\r\n"
+ "&gt;&#32;&gt;&#32;+struct&#32;device*vdisp_ao_dev;\r\n"
+ "&gt;&#32;&gt;&#32;+struct&#32;mtk_mutex*mutex[MAX_MMSYS];\r\n"
+ "&gt;&#32;&gt;&#32;&#160;unsigned&#32;intddp_comp_nr;\r\n"
+ "&gt;&#32;&gt;&#32;&#160;struct&#32;mtk_ddp_comp**ddp_comp;\r\n"
+ "&gt;&#32;&gt;&#32;+enum&#32;mtk_drm_mmsys*ddp_comp_sys;\r\n"
+ "&gt;&#32;&gt;&#32;+boolexist[MAX_MMSYS];\r\n"
+ "&gt;&#32;&gt;&#32;&#160;unsigned&#32;intnum_conn_routes;\r\n"
+ "&gt;&#32;&gt;&#32;&#160;const&#32;struct&#32;mtk_drm_route*conn_routes;\r\n"
+ "&gt;&#32;&gt;&#32;+enum&#32;mtk_drm_mmsysconn_routes_sys;\r\n"
+ "&gt;&#32;&gt;&#32;&#160;\r\n"
+ "&gt;&#32;&gt;&#32;&#160;/*&#32;lock&#32;for&#32;display&#32;hardware&#32;access&#32;*/\r\n"
+ "&gt;&#32;&gt;&#32;&#160;struct&#32;mutexhw_lock;\r\n"
+ "&gt;&#32;&gt;&#32;@@&#32;-82,6&#32;+86,11&#32;@@&#32;struct&#32;mtk_crtc_state&#32;{\r\n"
+ "&gt;&#32;&gt;&#32;&#160;unsigned&#32;intpending_vrefresh;\r\n"
+ "&gt;&#32;&gt;&#32;&#160;};\r\n"
+ "&gt;&#32;&gt;&#32;&#160;\r\n"
+ "&gt;&#32;&gt;&#32;+struct&#32;mtk_crtc_comp_info&#32;{\r\n"
+ "&gt;&#32;&gt;&#32;+enum&#32;mtk_drm_mmsys&#32;sys;\r\n"
+ "&gt;&#32;&gt;&#32;+unsigned&#32;int&#32;comp_id;\r\n"
+ "&gt;&#32;&gt;&#32;+};\r\n"
+ "&gt;&#32;&gt;&#32;+\r\n"
+ "&gt;&#32;&gt;&#32;&#160;static&#32;inline&#32;struct&#32;mtk_crtc&#32;*to_mtk_crtc(struct&#32;drm_crtc&#32;*c)\r\n"
+ "&gt;&#32;&gt;&#32;&#160;{\r\n"
+ "&gt;&#32;&gt;&#32;&#160;return&#32;container_of(c,&#32;struct&#32;mtk_crtc,&#32;base);\r\n"
+ "&gt;&#32;&gt;&#32;@@&#32;-125,7&#32;+134,9&#32;@@&#32;static&#32;void&#32;mtk_crtc_destroy(struct&#32;drm_crtc\r\n"
+ "&gt;&#32;&gt;&#32;*crtc)\r\n"
+ "&gt;&#32;&gt;&#32;&#160;struct&#32;mtk_crtc&#32;*mtk_crtc&#32;=&#32;to_mtk_crtc(crtc);\r\n"
+ "&gt;&#32;&gt;&#32;&#160;int&#32;i;\r\n"
+ "&gt;&#32;&gt;&#32;&#160;\r\n"
+ "&gt;&#32;&gt;&#32;-mtk_mutex_put(mtk_crtc-&gt;mutex);\r\n"
+ "&gt;&#32;&gt;&#32;+for&#32;(i&#32;=&#32;0;&#32;i&#32;&lt;&#32;MAX_MMSYS;&#32;i++)\r\n"
+ "&gt;&#32;&gt;&#32;+if&#32;(mtk_crtc-&gt;mutex[i])\r\n"
+ "&gt;&#32;&gt;&#32;+mtk_mutex_put(mtk_crtc-&gt;mutex[i]);\r\n"
+ "&gt;&#32;&gt;&#32;&#160;#if&#32;IS_REACHABLE(CONFIG_MTK_CMDQ)\r\n"
+ "&gt;&#32;&gt;&#32;&#160;if&#32;(mtk_crtc-&gt;cmdq_client.chan)&#32;{\r\n"
+ "&gt;&#32;&gt;&#32;&#160;cmdq_pkt_destroy(&amp;mtk_crtc-&gt;cmdq_client,\r\n"
+ "&gt;&#32;&gt;&#32;&amp;mtk_crtc-&gt;cmdq_handle);\r\n"
+ "&gt;&#32;&gt;&#32;@@&#32;-223,7&#32;+234,14&#32;@@&#32;static&#32;int&#32;mtk_crtc_ddp_clk_enable(struct\r\n"
+ "&gt;&#32;&gt;&#32;mtk_crtc&#32;*mtk_crtc)\r\n"
+ "&gt;&#32;&gt;&#32;&#160;int&#32;i;\r\n"
+ "&gt;&#32;&gt;&#32;&#160;\r\n"
+ "&gt;&#32;&gt;&#32;&#160;for&#32;(i&#32;=&#32;0;&#32;i&#32;&lt;&#32;mtk_crtc-&gt;ddp_comp_nr;&#32;i++)&#32;{\r\n"
+ "&gt;&#32;&gt;&#32;+enum&#32;mtk_drm_mmsys&#32;mmsys;\r\n"
+ "&gt;&#32;&gt;&#32;+\r\n"
+ "&gt;&#32;&gt;&#32;&#160;ret&#32;=&#32;mtk_ddp_comp_clk_enable(mtk_crtc-\r\n"
+ "&gt;&#32;&gt;&#32;&gt;ddp_comp[i]);\r\n"
+ "&gt;&#32;&gt;&#32;+if&#32;(mtk_ddp_comp_get_type(mtk_crtc-&gt;ddp_comp[i]-\r\n"
+ "&gt;&#32;&gt;&#32;&gt;id)&#32;==&#32;MTK_DISP_VIRTUAL)&#32;{\r\n"
+ "&gt;&#32;&gt;&#32;+mmsys&#32;=&#32;mtk_crtc-&gt;ddp_comp_sys[i];\r\n"
+ "&gt;&#32;&gt;&#32;+ret&#32;=&#32;mtk_mmsys_ddp_clk_enable(mtk_crtc-\r\n"
+ "&gt;&#32;&gt;&#32;&gt;mmsys_dev[mmsys],\r\n"
+ "&gt;&#32;&gt;&#32;+&#160;&#160;&#160;&#160;&#160;&#160;&#32;mtk_crtc-\r\n"
+ "&gt;&#32;&gt;&#32;&gt;ddp_comp[i]-&gt;id);\r\n"
+ "&gt;&#32;&gt;&#32;+}\r\n"
+ "&gt;&#32;&gt;&#32;&#160;if&#32;(ret)&#32;{\r\n"
+ "&gt;&#32;&gt;&#32;&#160;DRM_ERROR(&quot;Failed&#32;to&#32;enable&#32;clock&#32;%d:\r\n"
+ "&gt;&#32;&gt;&#32;%d&#92;n&quot;,&#32;i,&#32;ret);\r\n"
+ "&gt;&#32;&gt;&#32;&#160;goto&#32;err;\r\n"
+ "&gt;&#32;&gt;&#32;@@&#32;-232,17&#32;+250,28&#32;@@&#32;static&#32;int&#32;mtk_crtc_ddp_clk_enable(struct\r\n"
+ "&gt;&#32;&gt;&#32;mtk_crtc&#32;*mtk_crtc)\r\n"
+ "&gt;&#32;&gt;&#32;&#160;\r\n"
+ "&gt;&#32;&gt;&#32;&#160;return&#32;0;\r\n"
+ "&gt;&#32;&gt;&#32;&#160;err:\r\n"
+ "&gt;&#32;&gt;&#32;-while&#32;(--i&#32;&gt;=&#32;0)\r\n"
+ "&gt;&#32;&gt;&#32;+while&#32;(--i&#32;&gt;=&#32;0)&#32;{\r\n"
+ "&gt;&#32;&gt;&#32;&#160;mtk_ddp_comp_clk_disable(mtk_crtc-&gt;ddp_comp[i]);\r\n"
+ "&gt;&#32;&gt;&#32;+if&#32;(mtk_ddp_comp_get_type(mtk_crtc-&gt;ddp_comp[i]-\r\n"
+ "&gt;&#32;&gt;&#32;&gt;id)&#32;==&#32;MTK_DISP_VIRTUAL)\r\n"
+ "&gt;&#32;&gt;&#32;+mtk_mmsys_ddp_clk_disable(mtk_crtc-\r\n"
+ "&gt;&#32;&gt;&#32;&gt;mmsys_dev[mtk_crtc-&gt;ddp_comp_sys[i]],\r\n"
+ "&gt;&#32;&gt;&#32;+&#160;&#32;mtk_crtc-\r\n"
+ "&gt;&#32;&gt;&#32;&gt;ddp_comp[i]-&gt;id);\r\n"
+ "&gt;&#32;&gt;&#32;+}\r\n"
+ "&gt;&#32;&gt;&#32;&#160;return&#32;ret;\r\n"
+ "&gt;&#32;&gt;&#32;&#160;}\r\n"
+ "&gt;&#32;&gt;&#32;&#160;\r\n"
+ "&gt;&#32;&gt;&#32;&#160;static&#32;void&#32;mtk_crtc_ddp_clk_disable(struct&#32;mtk_crtc&#32;*mtk_crtc)\r\n"
+ "&gt;&#32;&gt;&#32;&#160;{\r\n"
+ "&gt;&#32;&gt;&#32;&#160;int&#32;i;\r\n"
+ "&gt;&#32;&gt;&#32;+enum&#32;mtk_drm_mmsys&#32;mmsys;\r\n"
+ "&gt;&#32;&gt;&#32;&#160;\r\n"
+ "&gt;&#32;&gt;&#32;-for&#32;(i&#32;=&#32;0;&#32;i&#32;&lt;&#32;mtk_crtc-&gt;ddp_comp_nr;&#32;i++)\r\n"
+ "&gt;&#32;&gt;&#32;+for&#32;(i&#32;=&#32;0;&#32;i&#32;&lt;&#32;mtk_crtc-&gt;ddp_comp_nr;&#32;i++)&#32;{\r\n"
+ "&gt;&#32;&gt;&#32;&#160;mtk_ddp_comp_clk_disable(mtk_crtc-&gt;ddp_comp[i]);\r\n"
+ "&gt;&#32;&gt;&#32;+if&#32;(mtk_ddp_comp_get_type(mtk_crtc-&gt;ddp_comp[i]-\r\n"
+ "&gt;&#32;&gt;&#32;&gt;id)&#32;==&#32;MTK_DISP_VIRTUAL)&#32;{\r\n"
+ "&gt;&#32;&gt;&#32;+mmsys&#32;=&#32;mtk_crtc-&gt;ddp_comp_sys[i];\r\n"
+ "&gt;&#32;&gt;&#32;+mtk_mmsys_ddp_clk_disable(mtk_crtc-\r\n"
+ "&gt;&#32;&gt;&#32;&gt;mmsys_dev[mmsys],\r\n"
+ "&gt;&#32;&gt;&#32;+&#160;&#32;mtk_crtc-\r\n"
+ "&gt;&#32;&gt;&#32;&gt;ddp_comp[i]-&gt;id);\r\n"
+ "&gt;&#32;&gt;&#32;+}\r\n"
+ "&gt;&#32;&gt;&#32;+}\r\n"
+ "&gt;&#32;&gt;&#32;&#160;}\r\n"
+ "&gt;&#32;&gt;&#32;&#160;\r\n"
+ "&gt;&#32;&gt;&#32;&#160;static\r\n"
+ "&gt;&#32;&gt;&#32;@@&#32;-332,7&#32;+361,8&#32;@@&#32;static&#32;int&#32;mtk_crtc_ddp_hw_init(struct&#32;mtk_crtc\r\n"
+ "&gt;&#32;&gt;&#32;*mtk_crtc)\r\n"
+ "&gt;&#32;&gt;&#32;&#160;struct&#32;drm_connector_list_iter&#32;conn_iter;\r\n"
+ "&gt;&#32;&gt;&#32;&#160;unsigned&#32;int&#32;width,&#32;height,&#32;vrefresh,&#32;bpc&#32;=&#32;MTK_MAX_BPC;\r\n"
+ "&gt;&#32;&gt;&#32;&#160;int&#32;ret;\r\n"
+ "&gt;&#32;&gt;&#32;-int&#32;i;\r\n"
+ "&gt;&#32;&gt;&#32;+int&#32;i,&#32;j;\r\n"
+ "&gt;&#32;&gt;&#32;+enum&#32;mtk_drm_mmsys&#32;mmsys;\r\n"
+ "&gt;&#32;&gt;&#32;&#160;\r\n"
+ "&gt;&#32;&gt;&#32;&#160;if&#32;(WARN_ON(!crtc-&gt;state))\r\n"
+ "&gt;&#32;&gt;&#32;&#160;return&#32;-EINVAL;\r\n"
+ "&gt;&#32;&gt;&#32;@@&#32;-362,10&#32;+392,18&#32;@@&#32;static&#32;int&#32;mtk_crtc_ddp_hw_init(struct\r\n"
+ "&gt;&#32;&gt;&#32;mtk_crtc&#32;*mtk_crtc)\r\n"
+ "&gt;&#32;&gt;&#32;&#160;return&#32;ret;\r\n"
+ "&gt;&#32;&gt;&#32;&#160;}\r\n"
+ "&gt;&#32;&gt;&#32;&#160;\r\n"
+ "&gt;&#32;&gt;&#32;-ret&#32;=&#32;mtk_mutex_prepare(mtk_crtc-&gt;mutex);\r\n"
+ "&gt;&#32;&gt;&#32;-if&#32;(ret&#32;&lt;&#32;0)&#32;{\r\n"
+ "&gt;&#32;&gt;&#32;-DRM_ERROR(&quot;Failed&#32;to&#32;enable&#32;mutex&#32;clock:&#32;%d&#92;n&quot;,\r\n"
+ "&gt;&#32;&gt;&#32;ret);\r\n"
+ "&gt;&#32;&gt;&#32;-goto&#32;err_pm_runtime_put;\r\n"
+ "&gt;&#32;&gt;&#32;+for&#32;(i&#32;=&#32;0;&#32;i&#32;&lt;&#32;MAX_MMSYS;&#32;i++)\r\n"
+ "&gt;&#32;&gt;&#32;+if&#32;(mtk_crtc-&gt;exist[i])\r\n"
+ "&gt;&#32;&gt;&#32;+mtk_mmsys_top_clk_enable(mtk_crtc-\r\n"
+ "&gt;&#32;&gt;&#32;&gt;mmsys_dev[i]);\r\n"
+ "&gt;&#32;&gt;&#32;+\r\n"
+ "&gt;&#32;&gt;&#32;+for&#32;(i&#32;=&#32;0;&#32;i&#32;&lt;&#32;MAX_MMSYS;&#32;i++)&#32;{\r\n"
+ "&gt;&#32;&gt;&#32;+if&#32;(!mtk_crtc-&gt;mutex[i]&#32;||&#32;!mtk_crtc-&gt;exist[i])\r\n"
+ "&gt;&#32;&gt;&#32;+continue;\r\n"
+ "&gt;&#32;&gt;&#32;+ret&#32;=&#32;mtk_mutex_prepare(mtk_crtc-&gt;mutex[i]);\r\n"
+ "&gt;&#32;&gt;&#32;+if&#32;(ret&#32;&lt;&#32;0)&#32;{\r\n"
+ "&gt;&#32;&gt;&#32;+DRM_ERROR(&quot;Failed&#32;to&#32;enable&#32;mmsys%d&#32;mutex\r\n"
+ "&gt;&#32;&gt;&#32;clock:&#32;%d&#92;n&quot;,&#32;i,&#32;ret);\r\n"
+ "&gt;&#32;&gt;&#32;+goto&#32;err_pm_runtime_put;\r\n"
+ "&gt;&#32;&gt;&#32;+}\r\n"
+ "&gt;&#32;&gt;&#32;&#160;}\r\n"
+ "&gt;&#32;&gt;&#32;&#160;\r\n"
+ "&gt;&#32;&gt;&#32;&#160;ret&#32;=&#32;mtk_crtc_ddp_clk_enable(mtk_crtc);\r\n"
+ "&gt;&#32;&gt;&#32;@@&#32;-374,19&#32;+412,36&#32;@@&#32;static&#32;int&#32;mtk_crtc_ddp_hw_init(struct\r\n"
+ "&gt;&#32;&gt;&#32;mtk_crtc&#32;*mtk_crtc)\r\n"
+ "&gt;&#32;&gt;&#32;&#160;goto&#32;err_mutex_unprepare;\r\n"
+ "&gt;&#32;&gt;&#32;&#160;}\r\n"
+ "&gt;&#32;&gt;&#32;&#160;\r\n"
+ "&gt;&#32;&gt;&#32;+if&#32;(mtk_crtc-&gt;vdisp_ao_dev)\r\n"
+ "&gt;&#32;&gt;&#32;+mtk_mmsys_default_config(mtk_crtc-&gt;vdisp_ao_dev);\r\n"
+ "&gt;&#32;&gt;&#32;+\r\n"
+ "&gt;&#32;&gt;&#32;+for&#32;(i&#32;=&#32;0;&#32;i&#32;&lt;&#32;MAX_MMSYS;&#32;i++)\r\n"
+ "&gt;&#32;&gt;&#32;+if&#32;(mtk_crtc-&gt;exist[i])\r\n"
+ "&gt;&#32;&gt;&#32;+mtk_mmsys_default_config(mtk_crtc-\r\n"
+ "&gt;&#32;&gt;&#32;&gt;mmsys_dev[i]);\r\n"
+ "&gt;&#32;&gt;&#32;+\r\n"
+ "&gt;&#32;&gt;&#32;&#160;for&#32;(i&#32;=&#32;0;&#32;i&#32;&lt;&#32;mtk_crtc-&gt;ddp_comp_nr&#32;-&#32;1;&#32;i++)&#32;{\r\n"
+ "&gt;&#32;&gt;&#32;-if&#32;(!mtk_ddp_comp_connect(mtk_crtc-&gt;ddp_comp[i],\r\n"
+ "&gt;&#32;&gt;&#32;mtk_crtc-&gt;mmsys_dev,\r\n"
+ "&gt;&#32;&gt;&#32;+mmsys&#32;=&#32;mtk_crtc-&gt;ddp_comp_sys[i];\r\n"
+ "&gt;&#32;&gt;&#32;+if&#32;(!mtk_ddp_comp_connect(mtk_crtc-&gt;ddp_comp[i],\r\n"
+ "&gt;&#32;&gt;&#32;mtk_crtc-&gt;mmsys_dev[mmsys],\r\n"
+ "&gt;&#32;&gt;&#32;&#160;&#160;&#32;mtk_crtc-&gt;ddp_comp[i&#32;+\r\n"
+ "&gt;&#32;&gt;&#32;1]-&gt;id))\r\n"
+ "&gt;&#32;&gt;&#32;-mtk_mmsys_ddp_connect(mtk_crtc-&gt;mmsys_dev,\r\n"
+ "&gt;&#32;&gt;&#32;+mtk_mmsys_ddp_connect(mtk_crtc-\r\n"
+ "&gt;&#32;&gt;&#32;&gt;mmsys_dev[mmsys],\r\n"
+ "&gt;&#32;&gt;&#32;&#160;&#160;&#160;&#160;&#160;&#160;&#32;mtk_crtc-\r\n"
+ "&gt;&#32;&gt;&#32;&gt;ddp_comp[i]-&gt;id,\r\n"
+ "&gt;&#32;&gt;&#32;&#160;&#160;&#160;&#160;&#160;&#160;&#32;mtk_crtc-&gt;ddp_comp[i\r\n"
+ "&gt;&#32;&gt;&#32;+&#32;1]-&gt;id);\r\n"
+ "&gt;&#32;&gt;&#32;-if&#32;(!mtk_ddp_comp_add(mtk_crtc-&gt;ddp_comp[i],\r\n"
+ "&gt;&#32;&gt;&#32;mtk_crtc-&gt;mutex))\r\n"
+ "&gt;&#32;&gt;&#32;-mtk_mutex_add_comp(mtk_crtc-&gt;mutex,\r\n"
+ "&gt;&#32;&gt;&#32;+if&#32;(!mtk_ddp_comp_add(mtk_crtc-&gt;ddp_comp[i],\r\n"
+ "&gt;&#32;&gt;&#32;mtk_crtc-&gt;mutex[mmsys]))\r\n"
+ "&gt;&#32;&gt;&#32;+mtk_mutex_add_comp(mtk_crtc-&gt;mutex[mmsys],\r\n"
+ "&gt;&#32;&gt;&#32;&#160;&#160;&#160;&#32;mtk_crtc-&gt;ddp_comp[i]-\r\n"
+ "&gt;&#32;&gt;&#32;&gt;id);\r\n"
+ "&gt;&#32;&gt;&#32;&#160;}\r\n"
+ "&gt;&#32;&gt;&#32;-if&#32;(!mtk_ddp_comp_add(mtk_crtc-&gt;ddp_comp[i],&#32;mtk_crtc-\r\n"
+ "&gt;&#32;&gt;&#32;&gt;mutex))\r\n"
+ "&gt;&#32;&gt;&#32;-mtk_mutex_add_comp(mtk_crtc-&gt;mutex,&#32;mtk_crtc-\r\n"
+ "&gt;&#32;&gt;&#32;&gt;ddp_comp[i]-&gt;id);\r\n"
+ "&gt;&#32;&gt;&#32;-mtk_mutex_enable(mtk_crtc-&gt;mutex);\r\n"
+ "&gt;&#32;&gt;&#32;+mmsys&#32;=&#32;mtk_crtc-&gt;ddp_comp_sys[i];\r\n"
+ "&gt;&#32;&gt;&#32;+if&#32;(!mtk_ddp_comp_add(mtk_crtc-&gt;ddp_comp[i],&#32;mtk_crtc-\r\n"
+ "&gt;&#32;&gt;&#32;&gt;mutex[mmsys]))\r\n"
+ "&gt;&#32;&gt;&#32;+mtk_mutex_add_comp(mtk_crtc-&gt;mutex[mmsys],\r\n"
+ "&gt;&#32;&gt;&#32;mtk_crtc-&gt;ddp_comp[i]-&gt;id);\r\n"
+ "&gt;&#32;&gt;&#32;+\r\n"
+ "&gt;&#32;&gt;&#32;+/*&#32;Need&#32;to&#32;set&#32;sof&#32;source&#32;for&#32;all&#32;mmsys&#32;mutexs&#32;in&#32;this\r\n"
+ "&gt;&#32;&gt;&#32;crtc&#32;*/\r\n"
+ "&gt;&#32;&gt;&#32;+for&#32;(j&#32;=&#32;0;&#32;j&#32;&lt;&#32;MAX_MMSYS;&#32;j++)\r\n"
+ "&gt;&#32;&gt;&#32;+if&#32;(mtk_crtc-&gt;exist[j]&#32;&amp;&amp;&#32;mtk_crtc-&gt;mutex[j])\r\n"
+ "&gt;&#32;&gt;&#32;+mtk_mutex_write_comp_sof(mtk_crtc-\r\n"
+ "&gt;&#32;&gt;&#32;&gt;mutex[j],&#32;mtk_crtc-&gt;ddp_comp[i]-&gt;id);\r\n"
+ "&gt;&#32;&gt;&#32;+\r\n"
+ "&gt;&#32;&gt;&#32;+for&#32;(i&#32;=&#32;0;&#32;i&#32;&lt;&#32;MAX_MMSYS;&#32;i++)\r\n"
+ "&gt;&#32;&gt;&#32;+if&#32;(mtk_crtc-&gt;exist[i]&#32;&amp;&amp;&#32;mtk_crtc-&gt;mutex[i])\r\n"
+ "&gt;&#32;&gt;&#32;+mtk_mutex_enable(mtk_crtc-&gt;mutex[i]);\r\n"
+ "&gt;&#32;&gt;&#32;&#160;\r\n"
+ "&gt;&#32;&gt;&#32;&#160;for&#32;(i&#32;=&#32;0;&#32;i&#32;&lt;&#32;mtk_crtc-&gt;ddp_comp_nr;&#32;i++)&#32;{\r\n"
+ "&gt;&#32;&gt;&#32;&#160;struct&#32;mtk_ddp_comp&#32;*comp&#32;=&#32;mtk_crtc-&gt;ddp_comp[i];\r\n"
+ "&gt;&#32;&gt;&#32;@@&#32;-394,7&#32;+449,11&#32;@@&#32;static&#32;int&#32;mtk_crtc_ddp_hw_init(struct\r\n"
+ "&gt;&#32;&gt;&#32;mtk_crtc&#32;*mtk_crtc)\r\n"
+ "&gt;&#32;&gt;&#32;&#160;if&#32;(i&#32;==&#32;1)\r\n"
+ "&gt;&#32;&gt;&#32;&#160;mtk_ddp_comp_bgclr_in_on(comp);\r\n"
+ "&gt;&#32;&gt;&#32;&#160;\r\n"
+ "&gt;&#32;&gt;&#32;-mtk_ddp_comp_config(comp,&#32;width,&#32;height,&#32;vrefresh,\r\n"
+ "&gt;&#32;&gt;&#32;bpc,&#32;NULL);\r\n"
+ "&gt;&#32;&gt;&#32;+if&#32;(mtk_ddp_comp_get_type(comp-&gt;id)&#32;==\r\n"
+ "&gt;&#32;&gt;&#32;MTK_DISP_VIRTUAL)\r\n"
+ "&gt;&#32;&gt;&#32;+mtk_mmsys_ddp_config(mtk_crtc-\r\n"
+ "&gt;&#32;&gt;&#32;&gt;mmsys_dev[mtk_crtc-&gt;ddp_comp_sys[i]],\r\n"
+ "&gt;&#32;&gt;&#32;+&#160;&#160;&#160;&#160;&#32;comp-&gt;id,&#32;width,\r\n"
+ "&gt;&#32;&gt;&#32;height,&#32;NULL);\r\n"
+ "&gt;&#32;&gt;&#32;+else\r\n"
+ "&gt;&#32;&gt;&#32;+mtk_ddp_comp_config(comp,&#32;width,&#32;height,\r\n"
+ "&gt;&#32;&gt;&#32;vrefresh,&#32;bpc,&#32;NULL);\r\n"
+ "&gt;&#32;&gt;&#32;&#160;mtk_ddp_comp_start(comp);\r\n"
+ "&gt;&#32;&gt;&#32;&#160;}\r\n"
+ "&gt;&#32;&gt;&#32;&#160;\r\n"
+ "&gt;&#32;&gt;&#32;@@&#32;-418,7&#32;+477,10&#32;@@&#32;static&#32;int&#32;mtk_crtc_ddp_hw_init(struct\r\n"
+ "&gt;&#32;&gt;&#32;mtk_crtc&#32;*mtk_crtc)\r\n"
+ "&gt;&#32;&gt;&#32;&#160;return&#32;0;\r\n"
+ "&gt;&#32;&gt;&#32;&#160;\r\n"
+ "&gt;&#32;&gt;&#32;&#160;err_mutex_unprepare:\r\n"
+ "&gt;&#32;&gt;&#32;-mtk_mutex_unprepare(mtk_crtc-&gt;mutex);\r\n"
+ "&gt;&#32;&gt;&#32;+for&#32;(i&#32;=&#32;0;&#32;i&#32;&lt;&#32;MAX_MMSYS;&#32;i++)\r\n"
+ "&gt;&#32;&gt;&#32;+if&#32;(mtk_crtc-&gt;exist[i]&#32;&amp;&amp;&#32;mtk_crtc-&gt;mutex[i])\r\n"
+ "&gt;&#32;&gt;&#32;+mtk_mutex_unprepare(mtk_crtc-&gt;mutex[i]);\r\n"
+ "&gt;&#32;&gt;&#32;+\r\n"
+ "&gt;&#32;&gt;&#32;&#160;err_pm_runtime_put:\r\n"
+ "&gt;&#32;&gt;&#32;&#160;pm_runtime_put(crtc-&gt;dev-&gt;dev);\r\n"
+ "&gt;&#32;&gt;&#32;&#160;return&#32;ret;\r\n"
+ "&gt;&#32;&gt;&#32;@@&#32;-430,6&#32;+492,7&#32;@@&#32;static&#32;void&#32;mtk_crtc_ddp_hw_fini(struct\r\n"
+ "&gt;&#32;&gt;&#32;mtk_crtc&#32;*mtk_crtc)\r\n"
+ "&gt;&#32;&gt;&#32;&#160;struct&#32;drm_crtc&#32;*crtc&#32;=&#32;&amp;mtk_crtc-&gt;base;\r\n"
+ "&gt;&#32;&gt;&#32;&#160;unsigned&#32;long&#32;flags;\r\n"
+ "&gt;&#32;&gt;&#32;&#160;int&#32;i;\r\n"
+ "&gt;&#32;&gt;&#32;+enum&#32;mtk_drm_mmsys&#32;mmsys;\r\n"
+ "&gt;&#32;&gt;&#32;&#160;\r\n"
+ "&gt;&#32;&gt;&#32;&#160;for&#32;(i&#32;=&#32;0;&#32;i&#32;&lt;&#32;mtk_crtc-&gt;ddp_comp_nr;&#32;i++)&#32;{\r\n"
+ "&gt;&#32;&gt;&#32;&#160;mtk_ddp_comp_stop(mtk_crtc-&gt;ddp_comp[i]);\r\n"
+ "&gt;&#32;&gt;&#32;@@&#32;-437,27&#32;+500,46&#32;@@&#32;static&#32;void&#32;mtk_crtc_ddp_hw_fini(struct\r\n"
+ "&gt;&#32;&gt;&#32;mtk_crtc&#32;*mtk_crtc)\r\n"
+ "&gt;&#32;&gt;&#32;&#160;mtk_ddp_comp_bgclr_in_off(mtk_crtc-\r\n"
+ "&gt;&#32;&gt;&#32;&gt;ddp_comp[i]);\r\n"
+ "&gt;&#32;&gt;&#32;&#160;}\r\n"
+ "&gt;&#32;&gt;&#32;&#160;\r\n"
+ "&gt;&#32;&gt;&#32;-for&#32;(i&#32;=&#32;0;&#32;i&#32;&lt;&#32;mtk_crtc-&gt;ddp_comp_nr;&#32;i++)\r\n"
+ "&gt;&#32;&gt;&#32;-if&#32;(!mtk_ddp_comp_remove(mtk_crtc-&gt;ddp_comp[i],\r\n"
+ "&gt;&#32;&gt;&#32;mtk_crtc-&gt;mutex))\r\n"
+ "&gt;&#32;&gt;&#32;-mtk_mutex_remove_comp(mtk_crtc-&gt;mutex,\r\n"
+ "&gt;&#32;&gt;&#32;+for&#32;(i&#32;=&#32;0;&#32;i&#32;&lt;&#32;mtk_crtc-&gt;ddp_comp_nr;&#32;i++)&#32;{\r\n"
+ "&gt;&#32;&gt;&#32;+mmsys&#32;=&#32;mtk_crtc-&gt;ddp_comp_sys[i];\r\n"
+ "&gt;&#32;&gt;&#32;+if&#32;(!mtk_ddp_comp_remove(mtk_crtc-&gt;ddp_comp[i],\r\n"
+ "&gt;&#32;&gt;&#32;mtk_crtc-&gt;mutex[mmsys]))\r\n"
+ "&gt;&#32;&gt;&#32;+mtk_mutex_remove_comp(mtk_crtc-\r\n"
+ "&gt;&#32;&gt;&#32;&gt;mutex[mtk_crtc-&gt;ddp_comp_sys[i]],\r\n"
+ "&gt;&#32;&gt;&#32;&#160;&#160;&#160;&#160;&#160;&#160;&#32;mtk_crtc-\r\n"
+ "&gt;&#32;&gt;&#32;&gt;ddp_comp[i]-&gt;id);\r\n"
+ "&gt;&#32;&gt;&#32;-mtk_mutex_disable(mtk_crtc-&gt;mutex);\r\n"
+ "&gt;&#32;&gt;&#32;+}\r\n"
+ "&gt;&#32;&gt;&#32;+for&#32;(i&#32;=&#32;0;&#32;i&#32;&lt;&#32;MAX_MMSYS;&#32;i++)\r\n"
+ "&gt;&#32;&gt;&#32;+if&#32;(mtk_crtc-&gt;exist[i]&#32;&amp;&amp;&#32;mtk_crtc-&gt;mutex[i])\r\n"
+ "&gt;&#32;&gt;&#32;+mtk_mutex_disable(mtk_crtc-&gt;mutex[i]);\r\n"
+ "&gt;&#32;&gt;&#32;+\r\n"
+ "&gt;&#32;&gt;&#32;&#160;for&#32;(i&#32;=&#32;0;&#32;i&#32;&lt;&#32;mtk_crtc-&gt;ddp_comp_nr&#32;-&#32;1;&#32;i++)&#32;{\r\n"
+ "&gt;&#32;&gt;&#32;-if&#32;(!mtk_ddp_comp_disconnect(mtk_crtc-\r\n"
+ "&gt;&#32;&gt;&#32;&gt;ddp_comp[i],&#32;mtk_crtc-&gt;mmsys_dev,\r\n"
+ "&gt;&#32;&gt;&#32;-&#160;&#160;&#160;&#160;&#32;mtk_crtc-&gt;ddp_comp[i\r\n"
+ "&gt;&#32;&gt;&#32;+&#32;1]-&gt;id))\r\n"
+ "&gt;&#32;&gt;&#32;-mtk_mmsys_ddp_disconnect(mtk_crtc-\r\n"
+ "&gt;&#32;&gt;&#32;&gt;mmsys_dev,\r\n"
+ "&gt;&#32;&gt;&#32;-&#32;mtk_crtc-\r\n"
+ "&gt;&#32;&gt;&#32;&gt;ddp_comp[i]-&gt;id,\r\n"
+ "&gt;&#32;&gt;&#32;-&#32;mtk_crtc-\r\n"
+ "&gt;&#32;&gt;&#32;&gt;ddp_comp[i&#32;+&#32;1]-&gt;id);\r\n"
+ "&gt;&#32;&gt;&#32;-if&#32;(!mtk_ddp_comp_remove(mtk_crtc-&gt;ddp_comp[i],\r\n"
+ "&gt;&#32;&gt;&#32;mtk_crtc-&gt;mutex))\r\n"
+ "&gt;&#32;&gt;&#32;-mtk_mutex_remove_comp(mtk_crtc-&gt;mutex,\r\n"
+ "&gt;&#32;&gt;&#32;+struct&#32;mtk_ddp_comp&#32;*comp;\r\n"
+ "&gt;&#32;&gt;&#32;+unsigned&#32;int&#32;curr,&#32;next;\r\n"
+ "&gt;&#32;&gt;&#32;+\r\n"
+ "&gt;&#32;&gt;&#32;+comp&#32;=&#32;mtk_crtc-&gt;ddp_comp[i];\r\n"
+ "&gt;&#32;&gt;&#32;+curr&#32;=&#32;mtk_crtc-&gt;ddp_comp[i]-&gt;id;\r\n"
+ "&gt;&#32;&gt;&#32;+next&#32;=&#32;mtk_crtc-&gt;ddp_comp[i&#32;+&#32;1]-&gt;id;\r\n"
+ "&gt;&#32;&gt;&#32;+mmsys&#32;=&#32;mtk_crtc-&gt;ddp_comp_sys[i];\r\n"
+ "&gt;&#32;&gt;&#32;+if&#32;(!mtk_ddp_comp_disconnect(comp,&#32;mtk_crtc-\r\n"
+ "&gt;&#32;&gt;&#32;&gt;mmsys_dev[mmsys],&#32;next))\r\n"
+ "&gt;&#32;&gt;&#32;+mtk_mmsys_ddp_disconnect(mtk_crtc-\r\n"
+ "&gt;&#32;&gt;&#32;&gt;mmsys_dev[mmsys],&#32;curr,&#32;next);\r\n"
+ "&gt;&#32;&gt;&#32;+if&#32;(!mtk_ddp_comp_remove(comp,&#32;mtk_crtc-\r\n"
+ "&gt;&#32;&gt;&#32;&gt;mutex[mmsys]))\r\n"
+ "&gt;&#32;&gt;&#32;+mtk_mutex_remove_comp(mtk_crtc-\r\n"
+ "&gt;&#32;&gt;&#32;&gt;mutex[mtk_crtc-&gt;ddp_comp_sys[i]],\r\n"
+ "&gt;&#32;&gt;&#32;&#160;&#160;&#160;&#160;&#160;&#160;&#32;mtk_crtc-\r\n"
+ "&gt;&#32;&gt;&#32;&gt;ddp_comp[i]-&gt;id);\r\n"
+ "&gt;&#32;&gt;&#32;&#160;}\r\n"
+ "&gt;&#32;&gt;&#32;-if&#32;(!mtk_ddp_comp_remove(mtk_crtc-&gt;ddp_comp[i],&#32;mtk_crtc-\r\n"
+ "&gt;&#32;&gt;&#32;&gt;mutex))\r\n"
+ "&gt;&#32;&gt;&#32;-mtk_mutex_remove_comp(mtk_crtc-&gt;mutex,&#32;mtk_crtc-\r\n"
+ "&gt;&#32;&gt;&#32;&gt;ddp_comp[i]-&gt;id);\r\n"
+ "&gt;&#32;&gt;&#32;+\r\n"
+ "&gt;&#32;&gt;&#32;+mmsys&#32;=&#32;mtk_crtc-&gt;ddp_comp_sys[i];\r\n"
+ "&gt;&#32;&gt;&#32;+if&#32;(!mtk_ddp_comp_remove(mtk_crtc-&gt;ddp_comp[i],&#32;mtk_crtc-\r\n"
+ "&gt;&#32;&gt;&#32;&gt;mutex[mmsys]))\r\n"
+ "&gt;&#32;&gt;&#32;+mtk_mutex_remove_comp(mtk_crtc-&gt;mutex[mmsys],\r\n"
+ "&gt;&#32;&gt;&#32;mtk_crtc-&gt;ddp_comp[i]-&gt;id);\r\n"
+ "&gt;&#32;&gt;&#32;+\r\n"
+ "&gt;&#32;&gt;&#32;&#160;mtk_crtc_ddp_clk_disable(mtk_crtc);\r\n"
+ "&gt;&#32;&gt;&#32;-mtk_mutex_unprepare(mtk_crtc-&gt;mutex);\r\n"
+ "&gt;&#32;&gt;&#32;&#160;\r\n"
+ "&gt;&#32;&gt;&#32;-pm_runtime_put(drm-&gt;dev);\r\n"
+ "&gt;&#32;&gt;&#32;+for&#32;(i&#32;=&#32;0;&#32;i&#32;&lt;&#32;MAX_MMSYS;&#32;i++)\r\n"
+ "&gt;&#32;&gt;&#32;+if&#32;(mtk_crtc-&gt;exist[i]&#32;&amp;&amp;&#32;mtk_crtc-&gt;mutex[i])\r\n"
+ "&gt;&#32;&gt;&#32;+mtk_mutex_unprepare(mtk_crtc-&gt;mutex[i]);\r\n"
+ "&gt;&#32;&gt;&#32;+\r\n"
+ "&gt;&#32;&gt;&#32;+for&#32;(i&#32;=&#32;0;&#32;i&#32;&lt;&#32;MAX_MMSYS;&#32;i++)\r\n"
+ "&gt;&#32;&gt;&#32;+if&#32;(mtk_crtc-&gt;exist[i])\r\n"
+ "&gt;&#32;&gt;&#32;+mtk_mmsys_top_clk_disable(mtk_crtc-\r\n"
+ "&gt;&#32;&gt;&#32;&gt;mmsys_dev[i]);\r\n"
+ "&gt;&#32;&gt;&#32;+\r\n"
+ "&gt;&#32;&gt;&#32;+pm_runtime_put_sync(drm-&gt;dev);\r\n"
+ "&gt;&#32;&gt;&#32;&#160;\r\n"
+ "&gt;&#32;&gt;&#32;&#160;if&#32;(crtc-&gt;state-&gt;event&#32;&amp;&amp;&#32;!crtc-&gt;state-&gt;active)&#32;{\r\n"
+ "&gt;&#32;&gt;&#32;&#160;spin_lock_irqsave(&amp;crtc-&gt;dev-&gt;event_lock,&#32;flags);\r\n"
+ "&gt;&#32;&gt;&#32;@@&#32;-581,9&#32;+663,15&#32;@@&#32;static&#32;void&#32;mtk_crtc_update_config(struct\r\n"
+ "&gt;&#32;&gt;&#32;mtk_crtc&#32;*mtk_crtc,&#32;bool&#32;needs_vblank)\r\n"
+ "&gt;&#32;&gt;&#32;&#160;mtk_crtc-&gt;pending_async_planes&#32;=&#32;true;\r\n"
+ "&gt;&#32;&gt;&#32;&#160;\r\n"
+ "&gt;&#32;&gt;&#32;&#160;if&#32;(priv-&gt;data-&gt;shadow_register)&#32;{\r\n"
+ "&gt;&#32;&gt;&#32;-mtk_mutex_acquire(mtk_crtc-&gt;mutex);\r\n"
+ "&gt;&#32;&gt;&#32;+for&#32;(i&#32;=&#32;0;&#32;i&#32;&lt;&#32;MAX_MMSYS;&#32;i++)\r\n"
+ "&gt;&#32;&gt;&#32;+if&#32;(mtk_crtc-&gt;exist[i]&#32;&amp;&amp;&#32;mtk_crtc-\r\n"
+ "&gt;&#32;&gt;&#32;&gt;mutex[i])\r\n"
+ "&gt;&#32;&gt;&#32;+mtk_mutex_acquire(mtk_crtc-\r\n"
+ "&gt;&#32;&gt;&#32;&gt;mutex[i]);\r\n"
+ "&gt;&#32;&gt;&#32;+\r\n"
+ "&gt;&#32;&gt;&#32;&#160;mtk_crtc_ddp_config(crtc,&#32;NULL);\r\n"
+ "&gt;&#32;&gt;&#32;-mtk_mutex_release(mtk_crtc-&gt;mutex);\r\n"
+ "&gt;&#32;&gt;&#32;+\r\n"
+ "&gt;&#32;&gt;&#32;+for&#32;(i&#32;=&#32;0;&#32;i&#32;&lt;&#32;MAX_MMSYS;&#32;i++)\r\n"
+ "&gt;&#32;&gt;&#32;+if&#32;(mtk_crtc-&gt;exist[i]&#32;&amp;&amp;&#32;mtk_crtc-\r\n"
+ "&gt;&#32;&gt;&#32;&gt;mutex[i])\r\n"
+ "&gt;&#32;&gt;&#32;+mtk_mutex_release(mtk_crtc-\r\n"
+ "&gt;&#32;&gt;&#32;&gt;mutex[i]);\r\n"
+ "&gt;&#32;&gt;&#32;&#160;}\r\n"
+ "&gt;&#32;&gt;&#32;&#160;#if&#32;IS_REACHABLE(CONFIG_MTK_CMDQ)\r\n"
+ "&gt;&#32;&gt;&#32;&#160;if&#32;(mtk_crtc-&gt;cmdq_client.chan)&#32;{\r\n"
+ "&gt;&#32;&gt;&#32;@@&#32;-659,6&#32;+747,7&#32;@@&#32;static&#32;void&#32;mtk_crtc_update_output(struct\r\n"
+ "&gt;&#32;&gt;&#32;drm_crtc&#32;*crtc,\r\n"
+ "&gt;&#32;&gt;&#32;&#160;{\r\n"
+ "&gt;&#32;&gt;&#32;&#160;int&#32;crtc_index&#32;=&#32;drm_crtc_index(crtc);\r\n"
+ "&gt;&#32;&gt;&#32;&#160;int&#32;i;\r\n"
+ "&gt;&#32;&gt;&#32;+unsigned&#32;int&#32;mmsys;\r\n"
+ "&gt;&#32;&gt;&#32;&#160;struct&#32;device&#32;*dev;\r\n"
+ "&gt;&#32;&gt;&#32;&#160;struct&#32;drm_crtc_state&#32;*crtc_state&#32;=&#32;state-\r\n"
+ "&gt;&#32;&gt;&#32;&gt;crtcs[crtc_index].new_state;\r\n"
+ "&gt;&#32;&gt;&#32;&#160;struct&#32;mtk_crtc&#32;*mtk_crtc&#32;=&#32;to_mtk_crtc(crtc);\r\n"
+ "&gt;&#32;&gt;&#32;@@&#32;-671,7&#32;+760,8&#32;@@&#32;static&#32;void&#32;mtk_crtc_update_output(struct\r\n"
+ "&gt;&#32;&gt;&#32;drm_crtc&#32;*crtc,\r\n"
+ "&gt;&#32;&gt;&#32;&#160;if&#32;(!mtk_crtc-&gt;num_conn_routes)\r\n"
+ "&gt;&#32;&gt;&#32;&#160;return;\r\n"
+ "&gt;&#32;&gt;&#32;&#160;\r\n"
+ "&gt;&#32;&gt;&#32;-priv&#32;=&#32;((struct&#32;mtk_drm_private&#32;*)crtc-&gt;dev-&gt;dev_private)-\r\n"
+ "&gt;&#32;&gt;&#32;&gt;all_drm_private[crtc_index];\r\n"
+ "&gt;&#32;&gt;&#32;+mmsys&#32;=&#32;mtk_crtc-&gt;conn_routes_sys;\r\n"
+ "&gt;&#32;&gt;&#32;+priv&#32;=&#32;((struct&#32;mtk_drm_private&#32;*)crtc-&gt;dev-&gt;dev_private)-\r\n"
+ "&gt;&#32;&gt;&#32;&gt;all_drm_private[mmsys];\r\n"
+ "&gt;&#32;&gt;&#32;&#160;dev&#32;=&#32;priv-&gt;dev;\r\n"
+ "&gt;&#32;&gt;&#32;&#160;\r\n"
+ "&gt;&#32;&gt;&#32;&#160;dev_dbg(dev,&#32;&quot;connector&#32;change:%d,&#32;encoder&#32;mask:0x%x&#32;for\r\n"
+ "&gt;&#32;&gt;&#32;crtc:%d&#92;n&quot;,\r\n"
+ "&gt;&#32;&gt;&#32;@@&#32;-684,6&#32;+774,8&#32;@@&#32;static&#32;void&#32;mtk_crtc_update_output(struct\r\n"
+ "&gt;&#32;&gt;&#32;drm_crtc&#32;*crtc,\r\n"
+ "&gt;&#32;&gt;&#32;&#160;if&#32;(comp-&gt;encoder_index&#32;&gt;=&#32;0&#32;&amp;&amp;\r\n"
+ "&gt;&#32;&gt;&#32;&#160;&#160;&#160;&#160;&#32;(encoder_mask&#32;&amp;&#32;BIT(comp-&gt;encoder_index)))&#32;{\r\n"
+ "&gt;&#32;&gt;&#32;&#160;mtk_crtc-&gt;ddp_comp[mtk_crtc-&gt;ddp_comp_nr&#32;-\r\n"
+ "&gt;&#32;&gt;&#32;1]&#32;=&#32;comp;\r\n"
+ "&gt;&#32;&gt;&#32;+mtk_crtc-&gt;ddp_comp_sys[mtk_crtc-\r\n"
+ "&gt;&#32;&gt;&#32;&gt;ddp_comp_nr&#32;-&#32;1]&#32;=&#32;mmsys;\r\n"
+ "&gt;&#32;&gt;&#32;+mtk_crtc-&gt;exist[mmsys]&#32;=&#32;true;\r\n"
+ "&gt;&#32;&gt;&#32;&#160;dev_dbg(dev,&#32;&quot;Add&#32;comp_id:&#32;%d&#32;at&#32;path\r\n"
+ "&gt;&#32;&gt;&#32;index&#32;%d&#92;n&quot;,\r\n"
+ "&gt;&#32;&gt;&#32;&#160;comp-&gt;id,&#32;mtk_crtc-&gt;ddp_comp_nr&#32;-\r\n"
+ "&gt;&#32;&gt;&#32;1);\r\n"
+ "&gt;&#32;&gt;&#32;&#160;break;\r\n"
+ "&gt;&#32;&gt;&#32;@@&#32;-720,13&#32;+812,35&#32;@@&#32;static&#32;void&#32;mtk_crtc_atomic_enable(struct\r\n"
+ "&gt;&#32;&gt;&#32;drm_crtc&#32;*crtc,\r\n"
+ "&gt;&#32;&gt;&#32;&#160;struct&#32;mtk_crtc&#32;*mtk_crtc&#32;=&#32;to_mtk_crtc(crtc);\r\n"
+ "&gt;&#32;&gt;&#32;&#160;struct&#32;mtk_ddp_comp&#32;*comp&#32;=&#32;mtk_crtc-&gt;ddp_comp[0];\r\n"
+ "&gt;&#32;&gt;&#32;&#160;int&#32;ret;\r\n"
+ "&gt;&#32;&gt;&#32;+int&#32;i,&#32;j;\r\n"
+ "&gt;&#32;&gt;&#32;+int&#32;mmsys_cnt&#32;=&#32;0;\r\n"
+ "&gt;&#32;&gt;&#32;&#160;\r\n"
+ "&gt;&#32;&gt;&#32;&#160;DRM_DEBUG_DRIVER(&quot;%s&#32;%d&#92;n&quot;,&#32;__func__,&#32;crtc-&gt;base.id);\r\n"
+ "&gt;&#32;&gt;&#32;&#160;\r\n"
+ "&gt;&#32;&gt;&#32;-ret&#32;=&#32;mtk_ddp_comp_power_on(comp);\r\n"
+ "&gt;&#32;&gt;&#32;-if&#32;(ret&#32;&lt;&#32;0)&#32;{\r\n"
+ "&gt;&#32;&gt;&#32;-DRM_DEV_ERROR(comp-&gt;dev,&#32;&quot;Failed&#32;to&#32;enable&#32;power\r\n"
+ "&gt;&#32;&gt;&#32;domain:&#32;%d&#92;n&quot;,&#32;ret);\r\n"
+ "&gt;&#32;&gt;&#32;-return;\r\n"
+ "&gt;&#32;&gt;&#32;+for&#32;(i&#32;=&#32;0;&#32;i&#32;&lt;&#32;MAX_MMSYS;&#32;i++)\r\n"
+ "&gt;&#32;&gt;&#32;+if&#32;(mtk_crtc-&gt;exist[i])\r\n"
+ "&gt;&#32;&gt;&#32;+mmsys_cnt++;\r\n"
+ "&gt;&#32;&gt;&#32;+\r\n"
+ "&gt;&#32;&gt;&#32;+if&#32;(mmsys_cnt&#32;==&#32;1)&#32;{\r\n"
+ "&gt;&#32;&gt;&#32;+ret&#32;=&#32;pm_runtime_resume_and_get(comp-&gt;dev);\r\n"
+ "&gt;&#32;&gt;&#32;+if&#32;(ret&#32;&lt;&#32;0)&#32;{\r\n"
+ "&gt;&#32;&gt;&#32;+DRM_DEV_ERROR(comp-&gt;dev,&#32;&quot;Failed&#32;to&#32;enable\r\n"
+ "&gt;&#32;&gt;&#32;power&#32;domain:&#32;%d&#92;n&quot;,&#32;ret);\r\n"
+ "&gt;&#32;&gt;&#32;+return;\r\n"
+ "&gt;&#32;&gt;&#32;+}\r\n"
+ "&gt;&#32;&gt;&#32;+}&#32;else&#32;{\r\n"
+ "&gt;&#32;&gt;&#32;+for&#32;(i&#32;=&#32;0;&#32;i&#32;&lt;&#32;MAX_MMSYS;&#32;i++)&#32;{\r\n"
+ "&gt;&#32;&gt;&#32;+if&#32;(!mtk_crtc-&gt;exist[i])\r\n"
+ "&gt;&#32;&gt;&#32;+continue;\r\n"
+ "&gt;&#32;&gt;&#32;+ret&#32;=&#32;pm_runtime_resume_and_get(mtk_crtc-\r\n"
+ "&gt;&#32;&gt;&#32;&gt;mmsys_dev[i]);\r\n"
+ "&gt;&#32;&gt;&#32;+if&#32;(ret&#32;&lt;&#32;0)&#32;{\r\n"
+ "&gt;&#32;&gt;&#32;+DRM_DEV_ERROR(mtk_crtc-\r\n"
+ "&gt;&#32;&gt;&#32;&gt;mmsys_dev[i],\r\n"
+ "&gt;&#32;&gt;&#32;+&#160;&#160;&#160;&#160;&#160;&#32;&quot;Failed&#32;to&#32;enable\r\n"
+ "&gt;&#32;&gt;&#32;power&#32;domain:&#32;%d&#92;n&quot;,&#32;ret);\r\n"
+ "&gt;&#32;&gt;&#32;+for&#32;(j&#32;=&#32;i&#32;-&#32;1;&#32;j&#32;&gt;=&#32;0;&#32;j--)\r\n"
+ "&gt;&#32;&gt;&#32;+if&#32;(mtk_crtc-&gt;exist[i])\r\n"
+ "&gt;&#32;&gt;&#32;+pm_runtime_put(com\r\n"
+ "&gt;&#32;&gt;&#32;p-&gt;dev);\r\n"
+ "&gt;&#32;&gt;&#32;+return;\r\n"
+ "&gt;&#32;&gt;&#32;+}\r\n"
+ "&gt;&#32;&gt;&#32;+}\r\n"
+ "&gt;&#32;&gt;&#32;&#160;}\r\n"
+ "&gt;&#32;&gt;&#32;&#160;\r\n"
+ "&gt;&#32;&gt;&#32;&#160;mtk_crtc_update_output(crtc,&#32;state);\r\n"
+ "&gt;&#32;&gt;&#32;@@&#32;-746,12&#32;+860,17&#32;@@&#32;static&#32;void&#32;mtk_crtc_atomic_disable(struct\r\n"
+ "&gt;&#32;&gt;&#32;drm_crtc&#32;*crtc,\r\n"
+ "&gt;&#32;&gt;&#32;&#160;{\r\n"
+ "&gt;&#32;&gt;&#32;&#160;struct&#32;mtk_crtc&#32;*mtk_crtc&#32;=&#32;to_mtk_crtc(crtc);\r\n"
+ "&gt;&#32;&gt;&#32;&#160;struct&#32;mtk_ddp_comp&#32;*comp&#32;=&#32;mtk_crtc-&gt;ddp_comp[0];\r\n"
+ "&gt;&#32;&gt;&#32;-int&#32;i;\r\n"
+ "&gt;&#32;&gt;&#32;+int&#32;i,&#32;ret;\r\n"
+ "&gt;&#32;&gt;&#32;+int&#32;mmsys_cnt&#32;=&#32;0;\r\n"
+ "&gt;&#32;&gt;&#32;&#160;\r\n"
+ "&gt;&#32;&gt;&#32;&#160;DRM_DEBUG_DRIVER(&quot;%s&#32;%d&#92;n&quot;,&#32;__func__,&#32;crtc-&gt;base.id);\r\n"
+ "&gt;&#32;&gt;&#32;&#160;if&#32;(!mtk_crtc-&gt;enabled)\r\n"
+ "&gt;&#32;&gt;&#32;&#160;return;\r\n"
+ "&gt;&#32;&gt;&#32;&#160;\r\n"
+ "&gt;&#32;&gt;&#32;+for&#32;(i&#32;=&#32;0;&#32;i&#32;&lt;&#32;MAX_MMSYS;&#32;i++)\r\n"
+ "&gt;&#32;&gt;&#32;+if&#32;(mtk_crtc-&gt;exist[i])\r\n"
+ "&gt;&#32;&gt;&#32;+mmsys_cnt++;\r\n"
+ "&gt;&#32;&gt;&#32;+\r\n"
+ "&gt;&#32;&gt;&#32;&#160;/*&#32;Set&#32;all&#32;pending&#32;plane&#32;state&#32;to&#32;disabled&#32;*/\r\n"
+ "&gt;&#32;&gt;&#32;&#160;for&#32;(i&#32;=&#32;0;&#32;i&#32;&lt;&#32;mtk_crtc-&gt;layer_nr;&#32;i++)&#32;{\r\n"
+ "&gt;&#32;&gt;&#32;&#160;struct&#32;drm_plane&#32;*plane&#32;=&#32;&amp;mtk_crtc-&gt;planes[i];\r\n"
+ "&gt;&#32;&gt;&#32;@@&#32;-776,7&#32;+895,21&#32;@@&#32;static&#32;void&#32;mtk_crtc_atomic_disable(struct\r\n"
+ "&gt;&#32;&gt;&#32;drm_crtc&#32;*crtc,\r\n"
+ "&gt;&#32;&gt;&#32;&#160;\r\n"
+ "&gt;&#32;&gt;&#32;&#160;drm_crtc_vblank_off(crtc);\r\n"
+ "&gt;&#32;&gt;&#32;&#160;mtk_crtc_ddp_hw_fini(mtk_crtc);\r\n"
+ "&gt;&#32;&gt;&#32;-mtk_ddp_comp_power_off(comp);\r\n"
+ "&gt;&#32;&gt;&#32;+\r\n"
+ "&gt;&#32;&gt;&#32;+if&#32;(mmsys_cnt&#32;&gt;&#32;1)&#32;{\r\n"
+ "&gt;&#32;&gt;&#32;+for&#32;(i&#32;=&#32;0;&#32;i&#32;&lt;&#32;MAX_MMSYS;&#32;i++)&#32;{\r\n"
+ "&gt;&#32;&gt;&#32;+if&#32;(mtk_crtc-&gt;exist[i])&#32;{\r\n"
+ "&gt;&#32;&gt;&#32;+ret&#32;=&#32;pm_runtime_put(mtk_crtc-\r\n"
+ "&gt;&#32;&gt;&#32;&gt;mmsys_dev[i]);\r\n"
+ "&gt;&#32;&gt;&#32;+if&#32;(ret&#32;&lt;&#32;0)\r\n"
+ "&gt;&#32;&gt;&#32;+DRM_DEV_ERROR(mtk_crtc-\r\n"
+ "&gt;&#32;&gt;&#32;&gt;mmsys_dev[i],\r\n"
+ "&gt;&#32;&gt;&#32;+&#160;&#160;&#160;&#160;&#160;&#32;&quot;Failed&#32;to\r\n"
+ "&gt;&#32;&gt;&#32;disable&#32;power&#32;domain:&#32;%d&#92;n&quot;,&#32;ret);\r\n"
+ "&gt;&#32;&gt;&#32;+}\r\n"
+ "&gt;&#32;&gt;&#32;+}\r\n"
+ "&gt;&#32;&gt;&#32;+}&#32;else&#32;{\r\n"
+ "&gt;&#32;&gt;&#32;+ret&#32;=&#32;pm_runtime_put(comp-&gt;dev);\r\n"
+ "&gt;&#32;&gt;&#32;+if&#32;(ret&#32;&lt;&#32;0)\r\n"
+ "&gt;&#32;&gt;&#32;+DRM_DEV_ERROR(comp-&gt;dev,&#32;&quot;Failed&#32;to\r\n"
+ "&gt;&#32;&gt;&#32;disable&#32;power&#32;domain:&#32;%d&#92;n&quot;,&#32;ret);\r\n"
+ "&gt;&#32;&gt;&#32;+}\r\n"
+ "&gt;&#32;&gt;&#32;&#160;\r\n"
+ "&gt;&#32;&gt;&#32;&#160;mtk_crtc-&gt;enabled&#32;=&#32;false;\r\n"
+ "&gt;&#32;&gt;&#32;&#160;}\r\n"
+ "&gt;&#32;&gt;&#32;@@&#32;-937,49&#32;+1070,108&#32;@@&#32;struct&#32;device&#32;*mtk_crtc_dma_dev_get(struct\r\n"
+ "&gt;&#32;&gt;&#32;drm_crtc&#32;*crtc)\r\n"
+ "&gt;&#32;&gt;&#32;&#160;return&#32;mtk_crtc-&gt;dma_dev;\r\n"
+ "&gt;&#32;&gt;&#32;&#160;}\r\n"
+ "&gt;&#32;&gt;&#32;&#160;\r\n"
+ "&gt;&#32;&gt;&#32;-int&#32;mtk_crtc_create(struct&#32;drm_device&#32;*drm_dev,&#32;const&#32;unsigned&#32;int\r\n"
+ "&gt;&#32;&gt;&#32;*path,\r\n"
+ "&gt;&#32;&gt;&#32;-&#160;&#160;&#160;&#32;unsigned&#32;int&#32;path_len,&#32;int&#32;priv_data_index,\r\n"
+ "&gt;&#32;&gt;&#32;-&#160;&#160;&#160;&#32;const&#32;struct&#32;mtk_drm_route&#32;*conn_routes,\r\n"
+ "&gt;&#32;&gt;&#32;-&#160;&#160;&#160;&#32;unsigned&#32;int&#32;num_conn_routes)\r\n"
+ "&gt;&#32;&gt;&#32;+int&#32;mtk_crtc_create(struct&#32;drm_device&#32;*drm_dev,&#32;enum&#32;mtk_crtc_path\r\n"
+ "&gt;&#32;&gt;&#32;path_sel)\r\n"
+ "&gt;&#32;&gt;&#32;&#160;{\r\n"
+ "&gt;&#32;&gt;&#32;&#160;struct&#32;mtk_drm_private&#32;*priv&#32;=&#32;drm_dev-&gt;dev_private;\r\n"
+ "&gt;&#32;&gt;&#32;&#160;struct&#32;device&#32;*dev&#32;=&#32;drm_dev-&gt;dev;\r\n"
+ "&gt;&#32;&gt;&#32;&#160;struct&#32;mtk_crtc&#32;*mtk_crtc;\r\n"
+ "&gt;&#32;&gt;&#32;&#160;unsigned&#32;int&#32;num_comp_planes&#32;=&#32;0;\r\n"
+ "&gt;&#32;&gt;&#32;&#160;int&#32;ret;\r\n"
+ "&gt;&#32;&gt;&#32;-int&#32;i;\r\n"
+ "&gt;&#32;&gt;&#32;+int&#32;i,&#32;j,&#32;k;\r\n"
+ "&gt;&#32;&gt;&#32;&#160;bool&#32;has_ctm&#32;=&#32;false;\r\n"
+ "&gt;&#32;&gt;&#32;&#160;uint&#32;gamma_lut_size&#32;=&#32;0;\r\n"
+ "&gt;&#32;&gt;&#32;&#160;struct&#32;drm_crtc&#32;*tmp;\r\n"
+ "&gt;&#32;&gt;&#32;&#160;int&#32;crtc_i&#32;=&#32;0;\r\n"
+ "&gt;&#32;&gt;&#32;-\r\n"
+ "&gt;&#32;&gt;&#32;-if&#32;(!path)\r\n"
+ "&gt;&#32;&gt;&#32;-return&#32;0;\r\n"
+ "&gt;&#32;&gt;&#32;-\r\n"
+ "&gt;&#32;&gt;&#32;-priv&#32;=&#32;priv-&gt;all_drm_private[priv_data_index];\r\n"
+ "&gt;&#32;&gt;&#32;+struct&#32;mtk_drm_private&#32;*subsys_priv;\r\n"
+ "&gt;&#32;&gt;&#32;+struct&#32;mtk_crtc_comp_info&#32;path[DDP_COMPONENT_ID_MAX];\r\n"
+ "&gt;&#32;&gt;&#32;+unsigned&#32;int&#32;path_len&#32;=&#32;0;\r\n"
+ "&gt;&#32;&gt;&#32;+const&#32;struct&#32;mtk_drm_route&#32;*conn_routes&#32;=&#32;NULL;\r\n"
+ "&gt;&#32;&gt;&#32;+unsigned&#32;int&#32;num_conn_routes&#32;=&#32;0;\r\n"
+ "&gt;&#32;&gt;&#32;+enum&#32;mtk_drm_mmsys&#32;conn_mmsys;\r\n"
+ "&gt;&#32;&gt;&#32;&#160;\r\n"
+ "&gt;&#32;&gt;&#32;&#160;drm_for_each_crtc(tmp,&#32;drm_dev)\r\n"
+ "&gt;&#32;&gt;&#32;&#160;crtc_i++;\r\n"
+ "&gt;&#32;&gt;&#32;&#160;\r\n"
+ "&gt;&#32;&gt;&#32;+for&#32;(j&#32;=&#32;0;&#32;j&#32;&lt;&#32;priv-&gt;data-&gt;mmsys_dev_num;&#32;j++)&#32;{\r\n"
+ "&gt;&#32;&gt;&#32;+for&#32;(k&#32;=&#32;0;&#32;k&#32;&lt;&#32;MAX_MMSYS;&#32;k++)&#32;{\r\n"
+ "&gt;&#32;&gt;&#32;+const&#32;unsigned&#32;int&#32;*subsys_path;\r\n"
+ "&gt;&#32;&gt;&#32;+unsigned&#32;int&#32;subsys_path_len;\r\n"
+ "&gt;&#32;&gt;&#32;+unsigned&#32;int&#32;order&#32;=&#32;0;\r\n"
+ "&gt;&#32;&gt;&#32;+\r\n"
+ "&gt;&#32;&gt;&#32;+subsys_priv&#32;=&#32;priv-&gt;all_drm_private[k];\r\n"
+ "&gt;&#32;&gt;&#32;+if&#32;(!subsys_priv)\r\n"
+ "&gt;&#32;&gt;&#32;+continue;\r\n"
+ "&gt;&#32;&gt;&#32;+\r\n"
+ "&gt;&#32;&gt;&#32;+if&#32;(path_sel&#32;==&#32;CRTC_MAIN)&#32;{\r\n"
+ "&gt;&#32;&gt;&#32;+subsys_path&#32;=&#32;subsys_priv-&gt;data-\r\n"
+ "&gt;&#32;&gt;&#32;&gt;main_path;\r\n"
+ "&gt;&#32;&gt;&#32;+subsys_path_len&#32;=&#32;subsys_priv-\r\n"
+ "&gt;&#32;&gt;&#32;&gt;data-&gt;main_len;\r\n"
+ "&gt;&#32;&gt;&#32;+order&#32;=&#32;subsys_priv-&gt;data-\r\n"
+ "&gt;&#32;&gt;&#32;&gt;main_order;\r\n"
+ "&gt;&#32;&gt;&#32;+}&#32;else&#32;if&#32;(path_sel&#32;==&#32;CRTC_EXT)&#32;{\r\n"
+ "&gt;&#32;&gt;&#32;+subsys_path&#32;=&#32;subsys_priv-&gt;data-\r\n"
+ "&gt;&#32;&gt;&#32;&gt;ext_path;\r\n"
+ "&gt;&#32;&gt;&#32;+subsys_path_len&#32;=&#32;subsys_priv-\r\n"
+ "&gt;&#32;&gt;&#32;&gt;data-&gt;ext_len;\r\n"
+ "&gt;&#32;&gt;&#32;+order&#32;=&#32;subsys_priv-&gt;data-\r\n"
+ "&gt;&#32;&gt;&#32;&gt;ext_order;\r\n"
+ "&gt;&#32;&gt;&#32;+}&#32;else&#32;if&#32;(path_sel&#32;==&#32;CRTC_THIRD)&#32;{\r\n"
+ "&gt;&#32;&gt;&#32;+subsys_path&#32;=&#32;subsys_priv-&gt;data-\r\n"
+ "&gt;&#32;&gt;&#32;&gt;third_path;\r\n"
+ "&gt;&#32;&gt;&#32;+subsys_path_len&#32;=&#32;subsys_priv-\r\n"
+ "&gt;&#32;&gt;&#32;&gt;data-&gt;third_len;\r\n"
+ "&gt;&#32;&gt;&#32;+order&#32;=&#32;subsys_priv-&gt;data-\r\n"
+ "&gt;&#32;&gt;&#32;&gt;third_order;\r\n"
+ "&gt;&#32;&gt;&#32;+}\r\n"
+ "&gt;&#32;&gt;&#32;+\r\n"
+ "&gt;&#32;&gt;&#32;+if&#32;(subsys_priv-&gt;data-&gt;num_conn_routes)&#32;{\r\n"
+ "&gt;&#32;&gt;&#32;+conn_routes&#32;=&#32;subsys_priv-&gt;data-\r\n"
+ "&gt;&#32;&gt;&#32;&gt;conn_routes;\r\n"
+ "&gt;&#32;&gt;&#32;+num_conn_routes&#32;=&#32;subsys_priv-\r\n"
+ "&gt;&#32;&gt;&#32;&gt;data-&gt;num_conn_routes;\r\n"
+ "&gt;&#32;&gt;&#32;+conn_mmsys&#32;=&#32;subsys_priv-&gt;data-\r\n"
+ "&gt;&#32;&gt;&#32;&gt;mmsys_id;\r\n"
+ "&gt;&#32;&gt;&#32;+}\r\n"
+ "&gt;&#32;&gt;&#32;+\r\n"
+ "&gt;&#32;&gt;&#32;+if&#32;(j&#32;!=&#32;order)\r\n"
+ "&gt;&#32;&gt;&#32;+continue;\r\n"
+ "&gt;&#32;&gt;&#32;+if&#32;(!subsys_path_len)\r\n"
+ "&gt;&#32;&gt;&#32;+continue;\r\n"
+ "&gt;&#32;&gt;&#32;+\r\n"
+ "&gt;&#32;&gt;&#32;+for&#32;(i&#32;=&#32;0;&#32;i&#32;&lt;&#32;subsys_path_len;&#32;i++)&#32;{\r\n"
+ "&gt;&#32;&gt;&#32;+path[path_len].sys&#32;=&#32;subsys_priv-\r\n"
+ "&gt;&#32;&gt;&#32;&gt;data-&gt;mmsys_id;\r\n"
+ "&gt;&#32;&gt;&#32;+path[path_len].comp_id&#32;=\r\n"
+ "&gt;&#32;&gt;&#32;subsys_path[i];\r\n"
+ "&gt;&#32;&gt;&#32;+path_len++;\r\n"
+ "&gt;&#32;&gt;&#32;+}\r\n"
+ "&gt;&#32;&gt;&#32;+}\r\n"
+ "&gt;&#32;&gt;&#32;+}\r\n"
+ "&gt;&#32;&gt;&#32;+\r\n"
+ "&gt;&#32;&gt;&#32;+if&#32;(!path_len)\r\n"
+ "&gt;&#32;&gt;&#32;+return&#32;0;\r\n"
+ "&gt;&#32;&gt;&#32;+\r\n"
+ "&gt;&#32;&gt;&#32;+if&#32;(num_conn_routes)&#32;{\r\n"
+ "&gt;&#32;&gt;&#32;+for&#32;(i&#32;=&#32;0;&#32;i&#32;&lt;&#32;num_conn_routes;&#32;i++)\r\n"
+ "&gt;&#32;&gt;&#32;+if&#32;(conn_routes-&gt;crtc_id&#32;==&#32;crtc_i)\r\n"
+ "&gt;&#32;&gt;&#32;+break;\r\n"
+ "&gt;&#32;&gt;&#32;+if&#32;(i&#32;==&#32;num_conn_routes)&#32;{\r\n"
+ "&gt;&#32;&gt;&#32;+num_conn_routes&#32;=&#32;0;\r\n"
+ "&gt;&#32;&gt;&#32;+conn_routes&#32;=&#32;NULL;\r\n"
+ "&gt;&#32;&gt;&#32;+}\r\n"
+ "&gt;&#32;&gt;&#32;+}\r\n"
+ "&gt;&#32;&gt;&#32;+\r\n"
+ "&gt;&#32;&gt;&#32;&#160;for&#32;(i&#32;=&#32;0;&#32;i&#32;&lt;&#32;path_len;&#32;i++)&#32;{\r\n"
+ "&gt;&#32;&gt;&#32;-enum&#32;mtk_ddp_comp_id&#32;comp_id&#32;=&#32;path[i];\r\n"
+ "&gt;&#32;&gt;&#32;+enum&#32;mtk_ddp_comp_id&#32;comp_id&#32;=&#32;path[i].comp_id;\r\n"
+ "&gt;&#32;&gt;&#32;&#160;struct&#32;device_node&#32;*node;\r\n"
+ "&gt;&#32;&gt;&#32;&#160;struct&#32;mtk_ddp_comp&#32;*comp;\r\n"
+ "&gt;&#32;&gt;&#32;&#160;\r\n"
+ "&gt;&#32;&gt;&#32;+priv&#32;=&#32;priv-&gt;all_drm_private[path[i].sys];\r\n"
+ "&gt;&#32;&gt;&#32;&#160;node&#32;=&#32;priv-&gt;comp_node[comp_id];\r\n"
+ "&gt;&#32;&gt;&#32;&#160;comp&#32;=&#32;&amp;priv-&gt;ddp_comp[comp_id];\r\n"
+ "&gt;&#32;&gt;&#32;&#160;\r\n"
+ "&gt;&#32;&gt;&#32;&#160;/*&#32;Not&#32;all&#32;drm&#32;components&#32;have&#32;a&#32;DTS&#32;device&#32;node,\r\n"
+ "&gt;&#32;&gt;&#32;such&#32;as&#32;ovl_adaptor,\r\n"
+ "&gt;&#32;&gt;&#32;&#160;&#32;*&#32;which&#32;is&#32;the&#32;drm&#32;bring&#32;up&#32;sub&#32;driver\r\n"
+ "&gt;&#32;&gt;&#32;&#160;&#32;*/\r\n"
+ "&gt;&#32;&gt;&#32;-if&#32;(!node&#32;&amp;&amp;&#32;comp_id&#32;!=\r\n"
+ "&gt;&#32;&gt;&#32;DDP_COMPONENT_DRM_OVL_ADAPTOR)&#32;{\r\n"
+ "&gt;&#32;&gt;&#32;+if&#32;(!node&#32;&amp;&amp;&#32;comp_id&#32;!=\r\n"
+ "&gt;&#32;&gt;&#32;DDP_COMPONENT_DRM_OVL_ADAPTOR&#32;&amp;&amp;\r\n"
+ "&gt;&#32;&gt;&#32;+&#160;&#160;&#160;&#32;comp_id&#32;!=&#32;DDP_COMPONENT_DRM_OVLSYS_ADAPTOR0\r\n"
+ "&gt;&#32;&gt;&#32;&amp;&amp;\r\n"
+ "&gt;&#32;&gt;&#32;+&#160;&#160;&#160;&#32;comp_id&#32;!=&#32;DDP_COMPONENT_DRM_OVLSYS_ADAPTOR1\r\n"
+ "&gt;&#32;&gt;&#32;&amp;&amp;\r\n"
+ "&gt;&#32;&gt;&#32;+&#160;&#160;&#160;&#32;comp_id&#32;!=&#32;DDP_COMPONENT_DRM_OVLSYS_ADAPTOR2\r\n"
+ "&gt;&#32;&gt;&#32;&amp;&amp;\r\n"
+ "&gt;&#32;&gt;&#32;+&#160;&#160;&#160;&#32;mtk_ddp_comp_get_type(comp_id)&#32;!=\r\n"
+ "&gt;&#32;&gt;&#32;MTK_DISP_VIRTUAL)&#32;{\r\n"
+ "&gt;&#32;&gt;&#32;&#160;dev_info(dev,\r\n"
+ "&gt;&#32;&gt;&#32;&#160;&quot;Not&#32;creating&#32;crtc&#32;%d&#32;because\r\n"
+ "&gt;&#32;&gt;&#32;component&#32;%d&#32;is&#32;disabled&#32;or&#32;missing&#92;n&quot;,\r\n"
+ "&gt;&#32;&gt;&#32;&#160;crtc_i,&#32;comp_id);\r\n"
+ "&gt;&#32;&gt;&#32;&#160;return&#32;0;\r\n"
+ "&gt;&#32;&gt;&#32;&#160;}\r\n"
+ "&gt;&#32;&gt;&#32;&#160;\r\n"
+ "&gt;&#32;&gt;&#32;-if&#32;(!comp-&gt;dev)&#32;{\r\n"
+ "&gt;&#32;&gt;&#32;+if&#32;(!comp-&gt;dev&#32;&amp;&amp;&#32;mtk_ddp_comp_get_type(comp_id)\r\n"
+ "&gt;&#32;&gt;&#32;!=&#32;MTK_DISP_VIRTUAL)&#32;{\r\n"
+ "&gt;&#32;&gt;&#32;&#160;dev_err(dev,&#32;&quot;Component&#32;%pOF&#32;not\r\n"
+ "&gt;&#32;&gt;&#32;initialized&#92;n&quot;,&#32;node);\r\n"
+ "&gt;&#32;&gt;&#32;&#160;return&#32;-ENODEV;\r\n"
+ "&gt;&#32;&gt;&#32;&#160;}\r\n"
+ "&gt;&#32;&gt;&#32;@@&#32;-989,7&#32;+1181,9&#32;@@&#32;int&#32;mtk_crtc_create(struct&#32;drm_device\r\n"
+ "&gt;&#32;&gt;&#32;*drm_dev,&#32;const&#32;unsigned&#32;int&#32;*path,\r\n"
+ "&gt;&#32;&gt;&#32;&#160;if&#32;(!mtk_crtc)\r\n"
+ "&gt;&#32;&gt;&#32;&#160;return&#32;-ENOMEM;\r\n"
+ "&gt;&#32;&gt;&#32;&#160;\r\n"
+ "&gt;&#32;&gt;&#32;-mtk_crtc-&gt;mmsys_dev&#32;=&#32;priv-&gt;mmsys_dev;\r\n"
+ "&gt;&#32;&gt;&#32;+for&#32;(i&#32;=&#32;0;&#32;i&#32;&lt;&#32;MAX_MMSYS;&#32;i++)\r\n"
+ "&gt;&#32;&gt;&#32;+if&#32;(priv-&gt;all_drm_private[i])\r\n"
+ "&gt;&#32;&gt;&#32;+mtk_crtc-&gt;mmsys_dev[i]&#32;=&#32;priv-\r\n"
+ "&gt;&#32;&gt;&#32;&gt;all_drm_private[i]-&gt;mmsys_dev;\r\n"
+ "&gt;&#32;&gt;&#32;&#160;mtk_crtc-&gt;ddp_comp_nr&#32;=&#32;path_len;\r\n"
+ "&gt;&#32;&gt;&#32;&#160;mtk_crtc-&gt;ddp_comp&#32;=&#32;devm_kcalloc(dev,\r\n"
+ "&gt;&#32;&gt;&#32;&#160;&#160;&#32;mtk_crtc-&gt;ddp_comp_nr&#32;+\r\n"
+ "&gt;&#32;&gt;&#32;(conn_routes&#32;&#63;&#32;1&#32;:&#32;0),\r\n"
+ "&gt;&#32;&gt;&#32;@@&#32;-998,19&#32;+1192,36&#32;@@&#32;int&#32;mtk_crtc_create(struct&#32;drm_device\r\n"
+ "&gt;&#32;&gt;&#32;*drm_dev,&#32;const&#32;unsigned&#32;int&#32;*path,\r\n"
+ "&gt;&#32;&gt;&#32;&#160;if&#32;(!mtk_crtc-&gt;ddp_comp)\r\n"
+ "&gt;&#32;&gt;&#32;&#160;return&#32;-ENOMEM;\r\n"
+ "&gt;&#32;&gt;&#32;&#160;\r\n"
+ "&gt;&#32;&gt;&#32;-mtk_crtc-&gt;mutex&#32;=&#32;mtk_mutex_get(priv-&gt;mutex_dev);\r\n"
+ "&gt;&#32;&gt;&#32;-if&#32;(IS_ERR(mtk_crtc-&gt;mutex))&#32;{\r\n"
+ "&gt;&#32;&gt;&#32;-ret&#32;=&#32;PTR_ERR(mtk_crtc-&gt;mutex);\r\n"
+ "&gt;&#32;&gt;&#32;-dev_err(dev,&#32;&quot;Failed&#32;to&#32;get&#32;mutex:&#32;%d&#92;n&quot;,&#32;ret);\r\n"
+ "&gt;&#32;&gt;&#32;-return&#32;ret;\r\n"
+ "&gt;&#32;&gt;&#32;+mtk_crtc-&gt;ddp_comp_sys&#32;=&#32;devm_kmalloc_array(dev,&#32;mtk_crtc-\r\n"
+ "&gt;&#32;&gt;&#32;&gt;ddp_comp_nr&#32;+\r\n"
+ "&gt;&#32;&gt;&#32;+&#160;&#160;&#160;&#32;(conn_routes&#32;&#63;\r\n"
+ "&gt;&#32;&gt;&#32;1&#32;:&#32;0),\r\n"
+ "&gt;&#32;&gt;&#32;+&#160;&#160;&#160;\r\n"
+ "&gt;&#32;&gt;&#32;sizeof(mtk_crtc-&gt;ddp_comp_sys),&#32;GFP_KERNEL);\r\n"
+ "&gt;&#32;&gt;&#32;+if&#32;(!mtk_crtc-&gt;ddp_comp_sys)\r\n"
+ "&gt;&#32;&gt;&#32;+return&#32;-ENOMEM;\r\n"
+ "&gt;&#32;&gt;&#32;+\r\n"
+ "&gt;&#32;&gt;&#32;+for&#32;(i&#32;=&#32;0;&#32;i&#32;&lt;&#32;MAX_MMSYS;&#32;i++)&#32;{\r\n"
+ "&gt;&#32;&gt;&#32;+if&#32;(!priv-&gt;all_drm_private[i])\r\n"
+ "&gt;&#32;&gt;&#32;+continue;\r\n"
+ "&gt;&#32;&gt;&#32;+\r\n"
+ "&gt;&#32;&gt;&#32;+priv&#32;=&#32;priv-&gt;all_drm_private[i];\r\n"
+ "&gt;&#32;&gt;&#32;+mtk_crtc-&gt;mutex[i]&#32;=&#32;mtk_mutex_get(priv-\r\n"
+ "&gt;&#32;&gt;&#32;&gt;mutex_dev);\r\n"
+ "&gt;&#32;&gt;&#32;+if&#32;(IS_ERR(mtk_crtc-&gt;mutex[i]))&#32;{\r\n"
+ "&gt;&#32;&gt;&#32;+ret&#32;=&#32;PTR_ERR(mtk_crtc-&gt;mutex[i]);\r\n"
+ "&gt;&#32;&gt;&#32;+dev_err(dev,&#32;&quot;Failed&#32;to&#32;get&#32;mutex:&#32;%d&#92;n&quot;,\r\n"
+ "&gt;&#32;&gt;&#32;ret);\r\n"
+ "&gt;&#32;&gt;&#32;+return&#32;ret;\r\n"
+ "&gt;&#32;&gt;&#32;+}\r\n"
+ "&gt;&#32;&gt;&#32;&#160;}\r\n"
+ "&gt;&#32;&gt;&#32;&#160;\r\n"
+ "&gt;&#32;&gt;&#32;&#160;for&#32;(i&#32;=&#32;0;&#32;i&#32;&lt;&#32;mtk_crtc-&gt;ddp_comp_nr;&#32;i++)&#32;{\r\n"
+ "&gt;&#32;&gt;&#32;-unsigned&#32;int&#32;comp_id&#32;=&#32;path[i];\r\n"
+ "&gt;&#32;&gt;&#32;+unsigned&#32;int&#32;comp_id&#32;=&#32;path[i].comp_id;\r\n"
+ "&gt;&#32;&gt;&#32;&#160;struct&#32;mtk_ddp_comp&#32;*comp;\r\n"
+ "&gt;&#32;&gt;&#32;&#160;\r\n"
+ "&gt;&#32;&gt;&#32;+priv&#32;=&#32;priv-&gt;all_drm_private[path[i].sys];\r\n"
+ "&gt;&#32;&gt;&#32;&#160;comp&#32;=&#32;&amp;priv-&gt;ddp_comp[comp_id];\r\n"
+ "&gt;&#32;&gt;&#32;+if&#32;(mtk_ddp_comp_get_type(comp_id)&#32;==\r\n"
+ "&gt;&#32;&gt;&#32;MTK_DISP_VIRTUAL)\r\n"
+ "&gt;&#32;&gt;&#32;+comp-&gt;id&#32;=&#32;comp_id;\r\n"
+ "&gt;&#32;&gt;&#32;&#160;mtk_crtc-&gt;ddp_comp[i]&#32;=&#32;comp;\r\n"
+ "&gt;&#32;&gt;&#32;+mtk_crtc-&gt;ddp_comp_sys[i]&#32;=&#32;path[i].sys;\r\n"
+ "&gt;&#32;&gt;&#32;+mtk_crtc-&gt;exist[path[i].sys]&#32;=&#32;true;\r\n"
+ "&gt;&#32;&gt;&#32;&#160;\r\n"
+ "&gt;&#32;&gt;&#32;&#160;if&#32;(comp-&gt;funcs)&#32;{\r\n"
+ "&gt;&#32;&gt;&#32;&#160;if&#32;(comp-&gt;funcs-&gt;gamma_set&#32;&amp;&amp;&#32;comp-&gt;funcs-\r\n"
+ "&gt;&#32;&gt;&#32;&gt;gamma_get_lut_size)&#32;{\r\n"
+ "&gt;&#32;&gt;&#32;@@&#32;-1047,8&#32;+1258,10&#32;@@&#32;int&#32;mtk_crtc_create(struct&#32;drm_device\r\n"
+ "&gt;&#32;&gt;&#32;*drm_dev,&#32;const&#32;unsigned&#32;int&#32;*path,\r\n"
+ "&gt;&#32;&gt;&#32;&#160;&#32;*&#32;In&#32;the&#32;case&#32;of&#32;ovl_adaptor&#32;sub&#32;driver,&#32;it&#32;needs&#32;to&#32;use\r\n"
+ "&gt;&#32;&gt;&#32;the\r\n"
+ "&gt;&#32;&gt;&#32;&#160;&#32;*&#32;dma_dev_get&#32;function&#32;to&#32;get&#32;representative&#32;dma&#32;dev.\r\n"
+ "&gt;&#32;&gt;&#32;&#160;&#32;*/\r\n"
+ "&gt;&#32;&gt;&#32;-mtk_crtc-&gt;dma_dev&#32;=&#32;mtk_ddp_comp_dma_dev_get(&amp;priv-\r\n"
+ "&gt;&#32;&gt;&#32;&gt;ddp_comp[path[0]]);\r\n"
+ "&gt;&#32;&gt;&#32;+priv&#32;=&#32;priv-&gt;all_drm_private[path[0].sys];\r\n"
+ "&gt;&#32;&gt;&#32;+mtk_crtc-&gt;dma_dev&#32;=&#32;mtk_ddp_comp_dma_dev_get(&amp;priv-\r\n"
+ "&gt;&#32;&gt;&#32;&gt;ddp_comp[path[0].comp_id]);\r\n"
+ "&gt;&#32;&gt;&#32;&#160;\r\n"
+ "&gt;&#32;&gt;&#32;+mtk_crtc-&gt;vdisp_ao_dev&#32;=&#32;priv-&gt;vdisp_ao_dev;\r\n"
+ "&gt;&#32;&gt;&#32;&#160;ret&#32;=&#32;mtk_crtc_init(drm_dev,&#32;mtk_crtc,&#32;crtc_i);\r\n"
+ "&gt;&#32;&gt;&#32;&#160;if&#32;(ret&#32;&lt;&#32;0)\r\n"
+ "&gt;&#32;&gt;&#32;&#160;return&#32;ret;\r\n"
+ "&gt;&#32;&gt;&#32;@@&#32;-1061,7&#32;+1274,7&#32;@@&#32;int&#32;mtk_crtc_create(struct&#32;drm_device\r\n"
+ "&gt;&#32;&gt;&#32;*drm_dev,&#32;const&#32;unsigned&#32;int&#32;*path,\r\n"
+ "&gt;&#32;&gt;&#32;&#160;\r\n"
+ "&gt;&#32;&gt;&#32;&#160;#if&#32;IS_REACHABLE(CONFIG_MTK_CMDQ)\r\n"
+ "&gt;&#32;&gt;&#32;&#160;i&#32;=&#32;priv-&gt;mbox_index++;\r\n"
+ "&gt;&#32;&gt;&#32;-mtk_crtc-&gt;cmdq_client.client.dev&#32;=&#32;mtk_crtc-&gt;mmsys_dev;\r\n"
+ "&gt;&#32;&gt;&#32;+mtk_crtc-&gt;cmdq_client.client.dev&#32;=&#32;mtk_crtc-\r\n"
+ "&gt;&#32;&gt;&#32;&gt;mmsys_dev[priv-&gt;data-&gt;mmsys_id];\r\n"
+ "&gt;&#32;&gt;&#32;&#160;mtk_crtc-&gt;cmdq_client.client.tx_block&#32;=&#32;false;\r\n"
+ "&gt;&#32;&gt;&#32;&#160;mtk_crtc-&gt;cmdq_client.client.knows_txdone&#32;=&#32;true;\r\n"
+ "&gt;&#32;&gt;&#32;&#160;mtk_crtc-&gt;cmdq_client.client.rx_callback&#32;=&#32;ddp_cmdq_cb;\r\n"
+ "&gt;&#32;&gt;&#32;@@&#32;-1101,6&#32;+1314,7&#32;@@&#32;int&#32;mtk_crtc_create(struct&#32;drm_device\r\n"
+ "&gt;&#32;&gt;&#32;*drm_dev,&#32;const&#32;unsigned&#32;int&#32;*path,\r\n"
+ "&gt;&#32;&gt;&#32;&#160;#endif\r\n"
+ "&gt;&#32;&gt;&#32;&#160;\r\n"
+ "&gt;&#32;&gt;&#32;&#160;if&#32;(conn_routes)&#32;{\r\n"
+ "&gt;&#32;&gt;&#32;+priv&#32;=&#32;priv-&gt;all_drm_private[conn_mmsys];\r\n"
+ "&gt;&#32;&gt;&#32;&#160;for&#32;(i&#32;=&#32;0;&#32;i&#32;&lt;&#32;num_conn_routes;&#32;i++)&#32;{\r\n"
+ "&gt;&#32;&gt;&#32;&#160;unsigned&#32;int&#32;comp_id&#32;=\r\n"
+ "&gt;&#32;&gt;&#32;conn_routes[i].route_ddp;\r\n"
+ "&gt;&#32;&gt;&#32;&#160;struct&#32;device_node&#32;*node&#32;=&#32;priv-\r\n"
+ "&gt;&#32;&gt;&#32;&gt;comp_node[comp_id];\r\n"
+ "&gt;&#32;&gt;&#32;@@&#32;-1117,6&#32;+1331,7&#32;@@&#32;int&#32;mtk_crtc_create(struct&#32;drm_device\r\n"
+ "&gt;&#32;&gt;&#32;*drm_dev,&#32;const&#32;unsigned&#32;int&#32;*path,\r\n"
+ "&gt;&#32;&gt;&#32;&#160;mtk_ddp_comp_encoder_index_set(&amp;priv-\r\n"
+ "&gt;&#32;&gt;&#32;&gt;ddp_comp[comp_id]);\r\n"
+ "&gt;&#32;&gt;&#32;&#160;}\r\n"
+ "&gt;&#32;&gt;&#32;&#160;\r\n"
+ "&gt;&#32;&gt;&#32;+mtk_crtc-&gt;conn_routes_sys&#32;=&#32;conn_mmsys;\r\n"
+ "&gt;&#32;&gt;&#32;&#160;mtk_crtc-&gt;num_conn_routes&#32;=&#32;num_conn_routes;\r\n"
+ "&gt;&#32;&gt;&#32;&#160;mtk_crtc-&gt;conn_routes&#32;=&#32;conn_routes;\r\n"
+ "&gt;&#32;&gt;&#32;&#160;\r\n"
+ "&gt;&#32;&gt;&#32;@@&#32;-1124,5&#32;+1339,10&#32;@@&#32;int&#32;mtk_crtc_create(struct&#32;drm_device\r\n"
+ "&gt;&#32;&gt;&#32;*drm_dev,&#32;const&#32;unsigned&#32;int&#32;*path,\r\n"
+ "&gt;&#32;&gt;&#32;&#160;mtk_crtc-&gt;ddp_comp_nr++;\r\n"
+ "&gt;&#32;&gt;&#32;&#160;}\r\n"
+ "&gt;&#32;&gt;&#32;&#160;\r\n"
+ "&gt;&#32;&gt;&#32;+for&#32;(i&#32;=&#32;0;&#32;i&#32;&lt;&#32;MAX_MMSYS;&#32;i++)\r\n"
+ "&gt;&#32;&gt;&#32;+if&#32;(mtk_crtc-&gt;exist[i])\r\n"
+ "&gt;&#32;&gt;&#32;+device_link_add(mtk_crtc-&gt;base.dev-&gt;dev,\r\n"
+ "&gt;&#32;&gt;&#32;+priv-&gt;all_drm_private[i]-\r\n"
+ "&gt;&#32;&gt;&#32;&gt;mutex_dev,&#32;0);\r\n"
+ "&gt;&#32;&gt;&#32;+\r\n"
+ "&gt;&#32;&gt;&#32;&#160;return&#32;0;\r\n"
+ "&gt;&#32;&gt;&#32;&#160;}\r\n"
+ "&gt;&#32;&gt;&#32;diff&#32;--git&#32;a/drivers/gpu/drm/mediatek/mtk_crtc.h\r\n"
+ "&gt;&#32;&gt;&#32;b/drivers/gpu/drm/mediatek/mtk_crtc.h\r\n"
+ "&gt;&#32;&gt;&#32;index&#32;388e900b6f4d..255f2823d17a&#32;100644\r\n"
+ "&gt;&#32;&gt;&#32;---&#32;a/drivers/gpu/drm/mediatek/mtk_crtc.h\r\n"
+ "&gt;&#32;&gt;&#32;+++&#32;b/drivers/gpu/drm/mediatek/mtk_crtc.h\r\n"
+ "&gt;&#32;&gt;&#32;@@&#32;-15,10&#32;+15,8&#32;@@\r\n"
+ "&gt;&#32;&gt;&#32;&#160;#define&#32;MTK_MIN_BPC3\r\n"
+ "&gt;&#32;&gt;&#32;&#160;\r\n"
+ "&gt;&#32;&gt;&#32;&#160;void&#32;mtk_crtc_commit(struct&#32;drm_crtc&#32;*crtc);\r\n"
+ "&gt;&#32;&gt;&#32;-int&#32;mtk_crtc_create(struct&#32;drm_device&#32;*drm_dev,&#32;const&#32;unsigned&#32;int\r\n"
+ "&gt;&#32;&gt;&#32;*path,\r\n"
+ "&gt;&#32;&gt;&#32;-&#160;&#160;&#160;&#32;unsigned&#32;int&#32;path_len,&#32;int&#32;priv_data_index,\r\n"
+ "&gt;&#32;&gt;&#32;-&#160;&#160;&#160;&#32;const&#32;struct&#32;mtk_drm_route&#32;*conn_routes,\r\n"
+ "&gt;&#32;&gt;&#32;-&#160;&#160;&#160;&#32;unsigned&#32;int&#32;num_conn_routes);\r\n"
+ "&gt;&#32;&gt;&#32;+int&#32;mtk_crtc_create(struct&#32;drm_device&#32;*drm_dev,\r\n"
+ "&gt;&#32;&gt;&#32;+&#160;&#160;&#160;&#32;enum&#32;mtk_crtc_path&#32;path_sel);\r\n"
+ "&gt;&#32;&gt;&#32;&#160;int&#32;mtk_crtc_plane_check(struct&#32;drm_crtc&#32;*crtc,&#32;struct&#32;drm_plane\r\n"
+ "&gt;&#32;&gt;&#32;*plane,\r\n"
+ "&gt;&#32;&gt;&#32;&#160;&#32;struct&#32;mtk_plane_state&#32;*state);\r\n"
+ "&gt;&#32;&gt;&#32;&#160;void&#32;mtk_crtc_async_update(struct&#32;drm_crtc&#32;*crtc,&#32;struct&#32;drm_plane\r\n"
+ "&gt;&#32;&gt;&#32;*plane,\r\n"
+ "&gt;&#32;&gt;&#32;diff&#32;--git&#32;a/drivers/gpu/drm/mediatek/mtk_ddp_comp.c\r\n"
+ "&gt;&#32;&gt;&#32;b/drivers/gpu/drm/mediatek/mtk_ddp_comp.c\r\n"
+ "&gt;&#32;&gt;&#32;index&#32;492b8d965309..f841184d1e06&#32;100644\r\n"
+ "&gt;&#32;&gt;&#32;---&#32;a/drivers/gpu/drm/mediatek/mtk_ddp_comp.c\r\n"
+ "&gt;&#32;&gt;&#32;+++&#32;b/drivers/gpu/drm/mediatek/mtk_ddp_comp.c\r\n"
+ "&gt;&#32;&gt;&#32;@@&#32;-464,6&#32;+464,7&#32;@@&#32;static&#32;const&#32;char&#32;*&#32;const\r\n"
+ "&gt;&#32;&gt;&#32;mtk_ddp_comp_stem[MTK_DDP_COMP_TYPE_MAX]&#32;=&#32;{\r\n"
+ "&gt;&#32;&gt;&#32;&#160;[MTK_DISP_PWM]&#32;=&#32;&quot;pwm&quot;,\r\n"
+ "&gt;&#32;&gt;&#32;&#160;[MTK_DISP_RDMA]&#32;=&#32;&quot;rdma&quot;,\r\n"
+ "&gt;&#32;&gt;&#32;&#160;[MTK_DISP_UFOE]&#32;=&#32;&quot;ufoe&quot;,\r\n"
+ "&gt;&#32;&gt;&#32;+[MTK_DISP_VIRTUAL]&#32;=&#32;&quot;virtual&quot;,\r\n"
+ "&gt;&#32;&gt;&#32;&#160;[MTK_DISP_WDMA]&#32;=&#32;&quot;wdma&quot;,\r\n"
+ "&gt;&#32;&gt;&#32;&#160;[MTK_DP_INTF]&#32;=&#32;&quot;dp-intf&quot;,\r\n"
+ "&gt;&#32;&gt;&#32;&#160;[MTK_DPI]&#32;=&#32;&quot;dpi&quot;,\r\n"
+ "&gt;&#32;&gt;&#32;@@&#32;-487,6&#32;+488,15&#32;@@&#32;static&#32;const&#32;struct&#32;mtk_ddp_comp_match\r\n"
+ "&gt;&#32;&gt;&#32;mtk_ddp_matches[DDP_COMPONENT_DRM_ID_MAX]\r\n"
+ "&gt;&#32;&gt;&#32;&#160;[DDP_COMPONENT_COLOR0]=&#32;{\r\n"
+ "&gt;&#32;&gt;&#32;MTK_DISP_COLOR,0,&#32;&amp;ddp_color&#32;},\r\n"
+ "&gt;&#32;&gt;&#32;&#160;[DDP_COMPONENT_COLOR1]=&#32;{\r\n"
+ "&gt;&#32;&gt;&#32;MTK_DISP_COLOR,1,&#32;&amp;ddp_color&#32;},\r\n"
+ "&gt;&#32;&gt;&#32;&#160;[DDP_COMPONENT_DITHER0]=&#32;{\r\n"
+ "&gt;&#32;&gt;&#32;MTK_DISP_DITHER,0,&#32;&amp;ddp_dither&#32;},\r\n"
+ "&gt;&#32;&gt;&#32;+[DDP_COMPONENT_DLI_ASYNC0]&#160;&#160;&#160;&#160;&#160;&#32;=&#32;{\r\n"
+ "&gt;&#32;&gt;&#32;MTK_DISP_VIRTUAL,&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#32;-1,&#32;NULL&#32;},\r\n"
+ "&gt;&#32;&gt;&#32;+[DDP_COMPONENT_DLI_ASYNC1]&#160;&#160;&#160;&#160;&#160;&#32;=&#32;{\r\n"
+ "&gt;&#32;&gt;&#32;MTK_DISP_VIRTUAL,&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#32;-1,&#32;NULL&#32;},\r\n"
+ "&gt;&#32;&gt;&#32;+[DDP_COMPONENT_DLI_ASYNC8]&#160;&#160;&#160;&#160;&#160;&#32;=&#32;{\r\n"
+ "&gt;&#32;&gt;&#32;MTK_DISP_VIRTUAL,&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#32;-1,&#32;NULL&#32;},\r\n"
+ "&gt;&#32;&gt;&#32;+[DDP_COMPONENT_DLI_ASYNC21]&#160;&#160;&#160;&#160;&#32;=&#32;{\r\n"
+ "&gt;&#32;&gt;&#32;MTK_DISP_VIRTUAL,&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#32;-1,&#32;NULL&#32;},\r\n"
+ "&gt;&#32;&gt;&#32;+[DDP_COMPONENT_DLI_ASYNC22]&#160;&#160;&#160;&#160;&#32;=&#32;{\r\n"
+ "&gt;&#32;&gt;&#32;MTK_DISP_VIRTUAL,&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#32;-1,&#32;NULL&#32;},\r\n"
+ "&gt;&#32;&gt;&#32;+[DDP_COMPONENT_DLI_ASYNC23]&#160;&#160;&#160;&#160;&#32;=&#32;{\r\n"
+ "&gt;&#32;&gt;&#32;MTK_DISP_VIRTUAL,&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#32;-1,&#32;NULL&#32;},\r\n"
+ "&gt;&#32;&gt;&#32;+[DDP_COMPONENT_DLO_ASYNC1]&#160;&#160;&#160;&#160;&#160;&#32;=&#32;{\r\n"
+ "&gt;&#32;&gt;&#32;MTK_DISP_VIRTUAL,&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#32;-1,&#32;NULL&#32;},\r\n"
+ "&gt;&#32;&gt;&#32;+[DDP_COMPONENT_DLO_ASYNC2]&#160;&#160;&#160;&#160;&#160;&#32;=&#32;{\r\n"
+ "&gt;&#32;&gt;&#32;MTK_DISP_VIRTUAL,&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#32;-1,&#32;NULL&#32;},\r\n"
+ "&gt;&#32;&gt;&#32;+[DDP_COMPONENT_DLO_ASYNC3]&#160;&#160;&#160;&#160;&#160;&#32;=&#32;{\r\n"
+ "&gt;&#32;&gt;&#32;MTK_DISP_VIRTUAL,&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#32;-1,&#32;NULL&#32;},\r\n"
+ "&gt;&#32;&gt;&#32;&#160;[DDP_COMPONENT_DP_INTF0]=&#32;{\r\n"
+ "&gt;&#32;&gt;&#32;MTK_DP_INTF,0,&#32;&amp;ddp_dpi&#32;},\r\n"
+ "&gt;&#32;&gt;&#32;&#160;[DDP_COMPONENT_DP_INTF1]=&#32;{\r\n"
+ "&gt;&#32;&gt;&#32;MTK_DP_INTF,1,&#32;&amp;ddp_dpi&#32;},\r\n"
+ "&gt;&#32;&gt;&#32;&#160;[DDP_COMPONENT_DPI0]=&#32;{\r\n"
+ "&gt;&#32;&gt;&#32;MTK_DPI,0,&#32;&amp;ddp_dpi&#32;},\r\n"
+ "&gt;&#32;&gt;&#32;@@&#32;-494,6&#32;+504,9&#32;@@&#32;static&#32;const&#32;struct&#32;mtk_ddp_comp_match\r\n"
+ "&gt;&#32;&gt;&#32;mtk_ddp_matches[DDP_COMPONENT_DRM_ID_MAX]\r\n"
+ "&gt;&#32;&gt;&#32;&#160;[DDP_COMPONENT_DRM_OVL_ADAPTOR]=&#32;{\r\n"
+ "&gt;&#32;&gt;&#32;MTK_DISP_OVL_ADAPTOR,0,&#32;&amp;ddp_ovl_adaptor&#32;},\r\n"
+ "&gt;&#32;&gt;&#32;&#160;[DDP_COMPONENT_DRM_OVLSYS_ADAPTOR0]&#32;=&#32;{\r\n"
+ "&gt;&#32;&gt;&#32;MTK_DISP_OVLSYS_ADAPTOR,&#32;0,&#32;&amp;ddp_ovlsys_adaptor},\r\n"
+ "&gt;&#32;&gt;&#32;&#160;[DDP_COMPONENT_DRM_OVLSYS_ADAPTOR1]&#32;=&#32;{\r\n"
+ "&gt;&#32;&gt;&#32;MTK_DISP_OVLSYS_ADAPTOR,&#32;1,&#32;&amp;ddp_ovlsys_adaptor},\r\n"
+ "&gt;&#32;&gt;&#32;+[DDP_COMPONENT_DRM_OVLSYS_ADAPTOR0]&#32;=&#32;{\r\n"
+ "&gt;&#32;&gt;&#32;MTK_DISP_OVLSYS_ADAPTOR,&#32;0,&#32;&amp;ddp_ovlsys_adaptor},\r\n"
+ "&gt;&#32;&gt;&#32;+[DDP_COMPONENT_DRM_OVLSYS_ADAPTOR1]&#32;=&#32;{\r\n"
+ "&gt;&#32;&gt;&#32;MTK_DISP_OVLSYS_ADAPTOR,&#32;1,&#32;&amp;ddp_ovlsys_adaptor},\r\n"
+ "&gt;&#32;&gt;&#32;+[DDP_COMPONENT_DRM_OVLSYS_ADAPTOR2]&#32;=&#32;{\r\n"
+ "&gt;&#32;&gt;&#32;MTK_DISP_OVLSYS_ADAPTOR,&#32;2,&#32;&amp;ddp_ovlsys_adaptor},\r\n"
+ "&gt;&#32;&gt;&#32;&#160;[DDP_COMPONENT_DSC0]=&#32;{\r\n"
+ "&gt;&#32;&gt;&#32;MTK_DISP_DSC,0,&#32;&amp;ddp_dsc&#32;},\r\n"
+ "&gt;&#32;&gt;&#32;&#160;[DDP_COMPONENT_DSC1]=&#32;{\r\n"
+ "&gt;&#32;&gt;&#32;MTK_DISP_DSC,1,&#32;&amp;ddp_dsc&#32;},\r\n"
+ "&gt;&#32;&gt;&#32;&#160;[DDP_COMPONENT_DSI0]=&#32;{\r\n"
+ "&gt;&#32;&gt;&#32;MTK_DSI,0,&#32;&amp;ddp_dsi&#32;},\r\n"
+ "&gt;&#32;&gt;&#32;@@&#32;-510,7&#32;+523,10&#32;@@&#32;static&#32;const&#32;struct&#32;mtk_ddp_comp_match\r\n"
+ "&gt;&#32;&gt;&#32;mtk_ddp_matches[DDP_COMPONENT_DRM_ID_MAX]\r\n"
+ "&gt;&#32;&gt;&#32;&#160;[DDP_COMPONENT_OD0]=&#32;{\r\n"
+ "&gt;&#32;&gt;&#32;MTK_DISP_OD,0,&#32;&amp;ddp_od&#32;},\r\n"
+ "&gt;&#32;&gt;&#32;&#160;[DDP_COMPONENT_OD1]=&#32;{\r\n"
+ "&gt;&#32;&gt;&#32;MTK_DISP_OD,1,&#32;&amp;ddp_od&#32;},\r\n"
+ "&gt;&#32;&gt;&#32;&#160;[DDP_COMPONENT_OVL0]=&#32;{\r\n"
+ "&gt;&#32;&gt;&#32;MTK_DISP_OVL,0,&#32;&amp;ddp_ovl&#32;},\r\n"
+ "&gt;&#32;&gt;&#32;+[DDP_COMPONENT_OVL0_DLO_ASYNC5]&#32;=&#32;{\r\n"
+ "&gt;&#32;&gt;&#32;MTK_DISP_VIRTUAL,&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#32;-1,&#32;NULL&#32;},\r\n"
+ "&gt;&#32;&gt;&#32;+[DDP_COMPONENT_OVL0_DLO_ASYNC6]&#32;=&#32;{\r\n"
+ "&gt;&#32;&gt;&#32;MTK_DISP_VIRTUAL,&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#32;-1,&#32;NULL&#32;},\r\n"
+ "&gt;&#32;&gt;&#32;&#160;[DDP_COMPONENT_OVL1]=&#32;{\r\n"
+ "&gt;&#32;&gt;&#32;MTK_DISP_OVL,1,&#32;&amp;ddp_ovl&#32;},\r\n"
+ "&gt;&#32;&gt;&#32;+[DDP_COMPONENT_OVL1_DLO_ASYNC5]&#32;=&#32;{\r\n"
+ "&gt;&#32;&gt;&#32;MTK_DISP_VIRTUAL,&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#32;-1,&#32;NULL&#32;},\r\n"
+ "&gt;&#32;&gt;&#32;&#160;[DDP_COMPONENT_OVL_2L0]=&#32;{\r\n"
+ "&gt;&#32;&gt;&#32;MTK_DISP_OVL_2L,0,&#32;&amp;ddp_ovl&#32;},\r\n"
+ "&gt;&#32;&gt;&#32;&#160;[DDP_COMPONENT_OVL_2L1]=&#32;{\r\n"
+ "&gt;&#32;&gt;&#32;MTK_DISP_OVL_2L,1,&#32;&amp;ddp_ovl&#32;},\r\n"
+ "&gt;&#32;&gt;&#32;&#160;[DDP_COMPONENT_OVL_2L2]=&#32;{\r\n"
+ "&gt;&#32;&gt;&#32;MTK_DISP_OVL_2L,2,&#32;&amp;ddp_ovl&#32;},\r\n"
+ "&gt;&#32;&gt;&#32;@@&#32;-567,12&#32;+583,19&#32;@@&#32;static&#32;bool&#32;mtk_ddp_path_available(const\r\n"
+ "&gt;&#32;&gt;&#32;unsigned&#32;int&#32;*path,\r\n"
+ "&gt;&#32;&gt;&#32;&#160;{\r\n"
+ "&gt;&#32;&gt;&#32;&#160;unsigned&#32;int&#32;i;\r\n"
+ "&gt;&#32;&gt;&#32;&#160;\r\n"
+ "&gt;&#32;&gt;&#32;+if&#32;(!path_len)\r\n"
+ "&gt;&#32;&gt;&#32;+return&#32;true;\r\n"
+ "&gt;&#32;&gt;&#32;+\r\n"
+ "&gt;&#32;&gt;&#32;&#160;if&#32;(!path&#32;||&#32;!path_len)\r\n"
+ "&gt;&#32;&gt;&#32;&#160;return&#32;false;\r\n"
+ "&gt;&#32;&gt;&#32;&#160;\r\n"
+ "&gt;&#32;&gt;&#32;&#160;for&#32;(i&#32;=&#32;0U;&#32;i&#32;&lt;&#32;path_len;&#32;i++)&#32;{\r\n"
+ "&gt;&#32;&gt;&#32;&#160;/*&#32;OVL_ADAPTOR&#32;doesn&#39;t&#32;have&#32;a&#32;device&#32;node&#32;*/\r\n"
+ "&gt;&#32;&gt;&#32;-if&#32;(path[i]&#32;==&#32;DDP_COMPONENT_DRM_OVL_ADAPTOR)\r\n"
+ "&gt;&#32;&gt;&#32;+if&#32;(path[i]&#32;==&#32;DDP_COMPONENT_DRM_OVL_ADAPTOR&#32;||\r\n"
+ "&gt;&#32;&gt;&#32;+&#160;&#160;&#160;&#32;path[i]&#32;==&#32;DDP_COMPONENT_DRM_OVLSYS_ADAPTOR0\r\n"
+ "&gt;&#32;&gt;&#32;||\r\n"
+ "&gt;&#32;&gt;&#32;+path[i]&#32;==\r\n"
+ "&gt;&#32;&gt;&#32;DDP_COMPONENT_DRM_OVLSYS_ADAPTOR1&#32;||\r\n"
+ "&gt;&#32;&gt;&#32;+path[i]&#32;==\r\n"
+ "&gt;&#32;&gt;&#32;DDP_COMPONENT_DRM_OVLSYS_ADAPTOR2&#32;||\r\n"
+ "&gt;&#32;&gt;&#32;+mtk_ddp_comp_get_type(path[i])&#32;==\r\n"
+ "&gt;&#32;&gt;&#32;MTK_DISP_VIRTUAL)\r\n"
+ "&gt;&#32;&gt;&#32;&#160;continue;\r\n"
+ "&gt;&#32;&gt;&#32;&#160;\r\n"
+ "&gt;&#32;&gt;&#32;&#160;if&#32;(!comp_node[path[i]])\r\n"
+ "&gt;&#32;&gt;&#32;@@&#32;-597,44&#32;+620,81&#32;@@&#32;int&#32;mtk_ddp_comp_get_id(struct&#32;device_node\r\n"
+ "&gt;&#32;&gt;&#32;*node,\r\n"
+ "&gt;&#32;&gt;&#32;&#160;return&#32;-EINVAL;\r\n"
+ "&gt;&#32;&gt;&#32;&#160;}\r\n"
+ "&gt;&#32;&gt;&#32;&#160;\r\n"
+ "&gt;&#32;&gt;&#32;+enum&#32;mtk_ddp_comp_type&#32;mtk_ddp_comp_get_type(unsigned&#32;int&#32;comp_id)\r\n"
+ "&gt;&#32;&gt;&#32;+{\r\n"
+ "&gt;&#32;&gt;&#32;+return&#32;mtk_ddp_matches[comp_id].type;\r\n"
+ "&gt;&#32;&gt;&#32;+}\r\n"
+ "&gt;&#32;&gt;&#32;+\r\n"
+ "&gt;&#32;&gt;&#32;&#160;int&#32;mtk_find_possible_crtcs(struct&#32;drm_device&#32;*drm,&#32;struct&#32;device\r\n"
+ "&gt;&#32;&gt;&#32;*dev)\r\n"
+ "&gt;&#32;&gt;&#32;&#160;{\r\n"
+ "&gt;&#32;&gt;&#32;&#160;struct&#32;mtk_drm_private&#32;*private&#32;=&#32;drm-&gt;dev_private;\r\n"
+ "&gt;&#32;&gt;&#32;&#160;const&#32;struct&#32;mtk_mmsys_driver_data&#32;*data;\r\n"
+ "&gt;&#32;&gt;&#32;&#160;struct&#32;mtk_drm_private&#32;*priv_n;\r\n"
+ "&gt;&#32;&gt;&#32;-int&#32;i&#32;=&#32;0,&#32;j;\r\n"
+ "&gt;&#32;&gt;&#32;&#160;int&#32;ret;\r\n"
+ "&gt;&#32;&gt;&#32;+int&#32;i&#32;=&#32;0,&#32;j,&#32;count&#32;=&#32;0;\r\n"
+ "&gt;&#32;&gt;&#32;+bool&#32;found&#32;=&#32;false;\r\n"
+ "&gt;&#32;&gt;&#32;&#160;\r\n"
+ "&gt;&#32;&gt;&#32;&#160;for&#32;(j&#32;=&#32;0;&#32;j&#32;&lt;&#32;private-&gt;data-&gt;mmsys_dev_num;&#32;j++)&#32;{\r\n"
+ "&gt;&#32;&gt;&#32;&#160;priv_n&#32;=&#32;private-&gt;all_drm_private[j];\r\n"
+ "&gt;&#32;&gt;&#32;&#160;data&#32;=&#32;priv_n-&gt;data;\r\n"
+ "&gt;&#32;&gt;&#32;&#160;\r\n"
+ "&gt;&#32;&gt;&#32;&#160;if&#32;(mtk_ddp_path_available(data-&gt;main_path,&#32;data-\r\n"
+ "&gt;&#32;&gt;&#32;&gt;main_len,\r\n"
+ "&gt;&#32;&gt;&#32;-&#160;&#160;&#32;priv_n-&gt;comp_node))&#32;{\r\n"
+ "&gt;&#32;&gt;&#32;-if&#32;(mtk_ddp_comp_find(dev,&#32;data-\r\n"
+ "&gt;&#32;&gt;&#32;&gt;main_path,\r\n"
+ "&gt;&#32;&gt;&#32;-&#160;&#160;&#160;&#160;&#160;&#32;data-&gt;main_len,\r\n"
+ "&gt;&#32;&gt;&#32;-&#160;&#160;&#160;&#160;&#160;&#32;priv_n-&gt;ddp_comp))\r\n"
+ "&gt;&#32;&gt;&#32;-return&#32;BIT(i);\r\n"
+ "&gt;&#32;&gt;&#32;-i++;\r\n"
+ "&gt;&#32;&gt;&#32;-}\r\n"
+ "&gt;&#32;&gt;&#32;+&#160;&#160;&#32;priv_n-&gt;comp_node))\r\n"
+ "&gt;&#32;&gt;&#32;+count++;\r\n"
+ "&gt;&#32;&gt;&#32;+\r\n"
+ "&gt;&#32;&gt;&#32;+if&#32;(mtk_ddp_comp_find(dev,&#32;data-&gt;main_path,&#32;data-\r\n"
+ "&gt;&#32;&gt;&#32;&gt;main_len,\r\n"
+ "&gt;&#32;&gt;&#32;+&#160;&#160;&#160;&#160;&#160;&#32;priv_n-&gt;ddp_comp))\r\n"
+ "&gt;&#32;&gt;&#32;+found&#32;=&#32;true;\r\n"
+ "&gt;&#32;&gt;&#32;+}\r\n"
+ "&gt;&#32;&gt;&#32;+\r\n"
+ "&gt;&#32;&gt;&#32;+if&#32;(count&#32;==&#32;private-&gt;data-&gt;mmsys_dev_num)&#32;{\r\n"
+ "&gt;&#32;&gt;&#32;+if&#32;(found)\r\n"
+ "&gt;&#32;&gt;&#32;+return&#32;BIT(i);\r\n"
+ "&gt;&#32;&gt;&#32;+i++;\r\n"
+ "&gt;&#32;&gt;&#32;+}\r\n"
+ "&gt;&#32;&gt;&#32;+\r\n"
+ "&gt;&#32;&gt;&#32;+count&#32;=&#32;0;\r\n"
+ "&gt;&#32;&gt;&#32;+found&#32;=&#32;false;\r\n"
+ "&gt;&#32;&gt;&#32;+\r\n"
+ "&gt;&#32;&gt;&#32;+for&#32;(j&#32;=&#32;0;&#32;j&#32;&lt;&#32;private-&gt;data-&gt;mmsys_dev_num;&#32;j++)&#32;{\r\n"
+ "&gt;&#32;&gt;&#32;+priv_n&#32;=&#32;private-&gt;all_drm_private[j];\r\n"
+ "&gt;&#32;&gt;&#32;+data&#32;=&#32;priv_n-&gt;data;\r\n"
+ "&gt;&#32;&gt;&#32;&#160;\r\n"
+ "&gt;&#32;&gt;&#32;&#160;if&#32;(mtk_ddp_path_available(data-&gt;ext_path,&#32;data-\r\n"
+ "&gt;&#32;&gt;&#32;&gt;ext_len,\r\n"
+ "&gt;&#32;&gt;&#32;-&#160;&#160;&#32;priv_n-&gt;comp_node))&#32;{\r\n"
+ "&gt;&#32;&gt;&#32;-if&#32;(mtk_ddp_comp_find(dev,&#32;data-&gt;ext_path,\r\n"
+ "&gt;&#32;&gt;&#32;-&#160;&#160;&#160;&#160;&#160;&#32;data-&gt;ext_len,\r\n"
+ "&gt;&#32;&gt;&#32;-&#160;&#160;&#160;&#160;&#160;&#32;priv_n-&gt;ddp_comp))\r\n"
+ "&gt;&#32;&gt;&#32;-return&#32;BIT(i);\r\n"
+ "&gt;&#32;&gt;&#32;-i++;\r\n"
+ "&gt;&#32;&gt;&#32;-}\r\n"
+ "&gt;&#32;&gt;&#32;+&#160;&#160;&#32;priv_n-&gt;comp_node))\r\n"
+ "&gt;&#32;&gt;&#32;+count++;\r\n"
+ "&gt;&#32;&gt;&#32;+\r\n"
+ "&gt;&#32;&gt;&#32;+if&#32;(mtk_ddp_comp_find(dev,&#32;data-&gt;ext_path,&#32;data-\r\n"
+ "&gt;&#32;&gt;&#32;&gt;ext_len,\r\n"
+ "&gt;&#32;&gt;&#32;+&#160;&#160;&#160;&#160;&#160;&#32;priv_n-&gt;ddp_comp))\r\n"
+ "&gt;&#32;&gt;&#32;+found&#32;=&#32;true;\r\n"
+ "&gt;&#32;&gt;&#32;+}\r\n"
+ "&gt;&#32;&gt;&#32;+\r\n"
+ "&gt;&#32;&gt;&#32;+if&#32;(count&#32;==&#32;private-&gt;data-&gt;mmsys_dev_num)&#32;{\r\n"
+ "&gt;&#32;&gt;&#32;+if&#32;(found)\r\n"
+ "&gt;&#32;&gt;&#32;+return&#32;BIT(i);\r\n"
+ "&gt;&#32;&gt;&#32;+i++;\r\n"
+ "&gt;&#32;&gt;&#32;+}\r\n"
+ "&gt;&#32;&gt;&#32;+\r\n"
+ "&gt;&#32;&gt;&#32;+count&#32;=&#32;0;\r\n"
+ "&gt;&#32;&gt;&#32;+found&#32;=&#32;false;\r\n"
+ "&gt;&#32;&gt;&#32;+\r\n"
+ "&gt;&#32;&gt;&#32;+for&#32;(j&#32;=&#32;0;&#32;j&#32;&lt;&#32;private-&gt;data-&gt;mmsys_dev_num;&#32;j++)&#32;{\r\n"
+ "&gt;&#32;&gt;&#32;+priv_n&#32;=&#32;private-&gt;all_drm_private[j];\r\n"
+ "&gt;&#32;&gt;&#32;+data&#32;=&#32;priv_n-&gt;data;\r\n"
+ "&gt;&#32;&gt;&#32;&#160;\r\n"
+ "&gt;&#32;&gt;&#32;&#160;if&#32;(mtk_ddp_path_available(data-&gt;third_path,&#32;data-\r\n"
+ "&gt;&#32;&gt;&#32;&gt;third_len,\r\n"
+ "&gt;&#32;&gt;&#32;-&#160;&#160;&#32;priv_n-&gt;comp_node))&#32;{\r\n"
+ "&gt;&#32;&gt;&#32;-if&#32;(mtk_ddp_comp_find(dev,&#32;data-\r\n"
+ "&gt;&#32;&gt;&#32;&gt;third_path,\r\n"
+ "&gt;&#32;&gt;&#32;-&#160;&#160;&#160;&#160;&#160;&#32;data-&gt;third_len,\r\n"
+ "&gt;&#32;&gt;&#32;-&#160;&#160;&#160;&#160;&#160;&#32;priv_n-&gt;ddp_comp))\r\n"
+ "&gt;&#32;&gt;&#32;-return&#32;BIT(i);\r\n"
+ "&gt;&#32;&gt;&#32;-i++;\r\n"
+ "&gt;&#32;&gt;&#32;-}\r\n"
+ "&gt;&#32;&gt;&#32;+priv_n-&gt;comp_node))\r\n"
+ "&gt;&#32;&gt;&#32;+count++;\r\n"
+ "&gt;&#32;&gt;&#32;+\r\n"
+ "&gt;&#32;&gt;&#32;+if&#32;(mtk_ddp_comp_find(dev,&#32;data-&gt;third_path,&#32;data-\r\n"
+ "&gt;&#32;&gt;&#32;&gt;third_len,\r\n"
+ "&gt;&#32;&gt;&#32;+&#160;&#160;&#160;&#160;&#160;&#32;priv_n-&gt;ddp_comp))\r\n"
+ "&gt;&#32;&gt;&#32;+found&#32;=&#32;true;\r\n"
+ "&gt;&#32;&gt;&#32;+}\r\n"
+ "&gt;&#32;&gt;&#32;+\r\n"
+ "&gt;&#32;&gt;&#32;+if&#32;(count&#32;==&#32;private-&gt;data-&gt;mmsys_dev_num)&#32;{\r\n"
+ "&gt;&#32;&gt;&#32;+if&#32;(found)\r\n"
+ "&gt;&#32;&gt;&#32;+return&#32;BIT(i);\r\n"
+ "&gt;&#32;&gt;&#32;+i++;\r\n"
+ "&gt;&#32;&gt;&#32;&#160;}\r\n"
+ "&gt;&#32;&gt;&#32;&#160;\r\n"
+ "&gt;&#32;&gt;&#32;&#160;ret&#32;=&#32;mtk_ddp_comp_find_in_route(dev,\r\n"
+ "&gt;&#32;&gt;&#32;diff&#32;--git&#32;a/drivers/gpu/drm/mediatek/mtk_ddp_comp.h\r\n"
+ "&gt;&#32;&gt;&#32;b/drivers/gpu/drm/mediatek/mtk_ddp_comp.h\r\n"
+ "&gt;&#32;&gt;&#32;index&#32;ef64ce7a071f..badb42bd4f7c&#32;100644\r\n"
+ "&gt;&#32;&gt;&#32;---&#32;a/drivers/gpu/drm/mediatek/mtk_ddp_comp.h\r\n"
+ "&gt;&#32;&gt;&#32;+++&#32;b/drivers/gpu/drm/mediatek/mtk_ddp_comp.h\r\n"
+ "&gt;&#32;&gt;&#32;@@&#32;-40,6&#32;+40,7&#32;@@&#32;enum&#32;mtk_ddp_comp_type&#32;{\r\n"
+ "&gt;&#32;&gt;&#32;&#160;MTK_DISP_PWM,\r\n"
+ "&gt;&#32;&gt;&#32;&#160;MTK_DISP_RDMA,\r\n"
+ "&gt;&#32;&gt;&#32;&#160;MTK_DISP_UFOE,\r\n"
+ "&gt;&#32;&gt;&#32;+MTK_DISP_VIRTUAL,\r\n"
+ "&gt;&#32;&gt;&#32;&#160;MTK_DISP_WDMA,\r\n"
+ "&gt;&#32;&gt;&#32;&#160;MTK_DPI,\r\n"
+ "&gt;&#32;&gt;&#32;&#160;MTK_DP_INTF,\r\n"
+ "&gt;&#32;&gt;&#32;@@&#32;-47,6&#32;+48,7&#32;@@&#32;enum&#32;mtk_ddp_comp_type&#32;{\r\n"
+ "&gt;&#32;&gt;&#32;&#160;MTK_OVL_BLENDER,\r\n"
+ "&gt;&#32;&gt;&#32;&#160;MTK_OVL_EXDMA,\r\n"
+ "&gt;&#32;&gt;&#32;&#160;MTK_OVL_OUTPROC,\r\n"
+ "&gt;&#32;&gt;&#32;+MTK_VDISP_AO,\r\n"
+ "&gt;&#32;&gt;&#32;&#160;MTK_DDP_COMP_TYPE_MAX,\r\n"
+ "&gt;&#32;&gt;&#32;&#160;};\r\n"
+ "&gt;&#32;&gt;&#32;&#160;\r\n"
+ "&gt;&#32;&gt;&#32;diff&#32;--git&#32;a/drivers/gpu/drm/mediatek/mtk_drm_drv.c\r\n"
+ "&gt;&#32;&gt;&#32;b/drivers/gpu/drm/mediatek/mtk_drm_drv.c\r\n"
+ "&gt;&#32;&gt;&#32;index&#32;7526bc38bcc7..0665a6feb546&#32;100644\r\n"
+ "&gt;&#32;&gt;&#32;---&#32;a/drivers/gpu/drm/mediatek/mtk_drm_drv.c\r\n"
+ "&gt;&#32;&gt;&#32;+++&#32;b/drivers/gpu/drm/mediatek/mtk_drm_drv.c\r\n"
+ "&gt;&#32;&gt;&#32;@@&#32;-193,6&#32;+193,10&#32;@@&#32;static&#32;const&#32;struct&#32;mtk_drm_route\r\n"
+ "&gt;&#32;&gt;&#32;mt8188_mtk_ddp_main_routes[]&#32;=&#32;{\r\n"
+ "&gt;&#32;&gt;&#32;&#160;{0,&#32;DDP_COMPONENT_DSI0},\r\n"
+ "&gt;&#32;&gt;&#32;&#160;};\r\n"
+ "&gt;&#32;&gt;&#32;&#160;\r\n"
+ "&gt;&#32;&gt;&#32;+static&#32;const&#32;struct&#32;mtk_drm_route&#32;mt8196_mtk_ddp_routes[]&#32;=&#32;{\r\n"
+ "&gt;&#32;&gt;&#32;+{2,&#32;DDP_COMPONENT_DSI0},\r\n"
+ "&gt;&#32;&gt;&#32;+};\r\n"
+ "&gt;&#32;&gt;&#32;+\r\n"
+ "&gt;&#32;&gt;&#32;&#160;static&#32;const&#32;unsigned&#32;int&#32;mt8192_mtk_ddp_main[]&#32;=&#32;{\r\n"
+ "&gt;&#32;&gt;&#32;&#160;DDP_COMPONENT_OVL0,\r\n"
+ "&gt;&#32;&gt;&#32;&#160;DDP_COMPONENT_OVL_2L0,\r\n"
+ "&gt;&#32;&gt;&#32;@@&#32;-231,6&#32;+235,50&#32;@@&#32;static&#32;const&#32;unsigned&#32;int&#32;mt8195_mtk_ddp_ext[]\r\n"
+ "&gt;&#32;&gt;&#32;=&#32;{\r\n"
+ "&gt;&#32;&gt;&#32;&#160;DDP_COMPONENT_DP_INTF1,\r\n"
+ "&gt;&#32;&gt;&#32;&#160;};\r\n"
+ "&gt;&#32;&gt;&#32;&#160;\r\n"
+ "&gt;&#32;&gt;&#32;+static&#32;const&#32;unsigned&#32;int&#32;mt8196_mtk_ddp_ovl0_main[]&#32;=&#32;{\r\n"
+ "&gt;&#32;&gt;&#32;+DDP_COMPONENT_DRM_OVLSYS_ADAPTOR0,\r\n"
+ "&gt;&#32;&gt;&#32;+DDP_COMPONENT_OVL0_DLO_ASYNC5,\r\n"
+ "&gt;&#32;&gt;&#32;+};\r\n"
+ "&gt;&#32;\r\n"
+ "&gt;&#32;Separate&#32;MT8196&#32;part&#32;to&#32;another&#32;patch&#32;which&#32;add&#32;support&#32;MT8196.\r\n"
+ "&gt;&#32;Let&#32;this&#32;patch&#32;not&#32;related&#32;to&#32;specific&#32;SoC.\r\n"
+ "&gt;&#32;\r\n"
+ "&gt;&#32;Regards,\r\n"
+ "&gt;&#32;CK\r\n"
+ "\r\n"
+ "Sure,&#32;I&#32;will&#32;separate&#32;this&#32;patch&#32;to&#32;2&#32;part,&#32;first&#32;patch&#32;is&#32;to&#32;supprt\r\n"
+ "the&#32;multiple&#32;MMSYS&#32;for&#32;mediatek&#32;drm&#32;driver.&#32;Second&#32;patch&#32;is&#32;to&#32;support\r\n"
+ "MT8196&#32;SOC.\r\n"
+ "\r\n"
+ "Best,&#32;\r\n"
+ "Paul&#32;&#32;\r\n"
+ "\r\n"
+ "</pre>\r\n"
+ "</p></body></html><!--type:text--><!--{--><pre>************* MEDIATEK Confidentiality Notice ********************\r\n"
+ "The information contained in this e-mail message (including any \r\n"
+ "attachments) may be confidential, proprietary, privileged, or otherwise\r\n"
+ "exempt from disclosure under applicable laws. It is intended to be \r\n"
+ "conveyed only to the designated recipient(s). Any use, dissemination, \r\n"
+ "distribution, printing, retaining or copying of this e-mail (including its \r\n"
+ "attachments) by unintended recipient(s) is strictly prohibited and may \r\n"
+ "be unlawful. If you are not an intended recipient of this e-mail, or believe \r\n"
+ "that you have received this e-mail in error, please notify the sender \r\n"
+ "immediately (by replying to this e-mail), delete any and all copies of \r\n"
+ "this e-mail (including any attachments) from your system, and do not\r\n"
+ "disclose the content of this e-mail to any other person. Thank you!\r\n"
+ </pre><!--}-->
 
-746bff33f8e31e6e49d8aeed8c53b426f999fbfc4fbb0629fc4deae5b2ff8e51
+b11ddc2e0e6ed46d4c762eb4a60d5a9a1ff059061a23038555ee10a0e4312ef4

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.