The i.MX95 does not have CF inputs into ED, it must pull inputs from FU
otherwise the controller crashes into green screen panic mode. Keep the
FU running on i.MX95.

Signed-off-by: Marek Vasut <[email protected]>
---
Cc: Abel Vesa <[email protected]>
Cc: Conor Dooley <[email protected]>
Cc: Fabio Estevam <[email protected]>
Cc: Krzysztof Kozlowski <[email protected]>
Cc: Laurent Pinchart <[email protected]>
Cc: Liu Ying <[email protected]>
Cc: Lucas Stach <[email protected]>
Cc: Peng Fan <[email protected]>
Cc: Pengutronix Kernel Team <[email protected]>
Cc: Rob Herring <[email protected]>
Cc: Shawn Guo <[email protected]>
Cc: Thomas Zimmermann <[email protected]>
Cc: [email protected]
Cc: [email protected]
Cc: [email protected]
Cc: [email protected]
Cc: [email protected]
---
 drivers/gpu/drm/imx/dc/dc-kms.h   |  2 ++
 drivers/gpu/drm/imx/dc/dc-plane.c | 10 +++++++---
 2 files changed, 9 insertions(+), 3 deletions(-)

diff --git a/drivers/gpu/drm/imx/dc/dc-kms.h b/drivers/gpu/drm/imx/dc/dc-kms.h
index 3e61dbb87afe7..af37523ae0be3 100644
--- a/drivers/gpu/drm/imx/dc/dc-kms.h
+++ b/drivers/gpu/drm/imx/dc/dc-kms.h
@@ -130,6 +130,8 @@ struct dc_plane {
        struct dc_lb *lb;
        /** @ed: content stream extdst */
        struct dc_ed *ed;
+       /** @keep_fu: keep FU running on iMX95 */
+       bool keep_fu;
 };
 
 #endif /* __DC_KMS_H__ */
diff --git a/drivers/gpu/drm/imx/dc/dc-plane.c 
b/drivers/gpu/drm/imx/dc/dc-plane.c
index d8b946fb90de6..18010c2b0bd78 100644
--- a/drivers/gpu/drm/imx/dc/dc-plane.c
+++ b/drivers/gpu/drm/imx/dc/dc-plane.c
@@ -4,6 +4,7 @@
  */
 
 #include <linux/container_of.h>
+#include <linux/of.h>
 
 #include <drm/drm_atomic.h>
 #include <drm/drm_atomic_helper.h>
@@ -185,9 +186,11 @@ static void dc_plane_atomic_disable(struct drm_plane 
*plane,
        if (!drm_dev_enter(plane->dev, &idx))
                return;
 
-       /* disable fetchunit in shadow */
-       fu_ops = dc_fu_get_ops(dplane->fu);
-       fu_ops->disable_src_buf(dplane->fu, DC_FETCHUNIT_FRAC0);
+       /* disable fetchunit in shadow on i.MX8QXP */
+       if (!dplane->keep_fu) {
+               fu_ops = dc_fu_get_ops(dplane->fu);
+               fu_ops->disable_src_buf(dplane->fu, DC_FETCHUNIT_FRAC0);
+       }
 
        /* set ExtDst's source to ConstFrame */
        dc_ed_pec_src_sel(dplane->ed, dc_cf_get_link_id(dplane->cf));
@@ -219,6 +222,7 @@ int dc_plane_init(struct dc_drm_device *dc_drm, struct 
dc_plane *dc_plane)
        dc_plane->cf = dc_drm->pe->cf_cont[plane->index];
        dc_plane->lb = dc_drm->pe->lb[plane->index];
        dc_plane->ed = dc_drm->pe->ed_cont[plane->index];
+       dc_plane->keep_fu = of_device_is_compatible(dc_drm->base.dev->of_node, 
"fsl,imx95-dc");
 
        return 0;
 }
-- 
2.51.0

Reply via email to