From: Greg Kroah-Hartman Date: Thu, 5 Dec 2024 09:23:20 +0000 (+0100) Subject: drop a bunch of drm imx patches X-Git-Tag: v4.19.325~3 X-Git-Url: http://git.ipfire.org/gitweb.cgi?a=commitdiff_plain;h=279c489443ba11d16abde1a20eeb4e12ea280193;p=thirdparty%2Fkernel%2Fstable-queue.git drop a bunch of drm imx patches They were there for a Kconfig change, which if needed, can come back on its own. --- diff --git a/queue-6.11/drm-imx-add-missing-drm_bridge_connector-dependency.patch b/queue-6.11/drm-imx-add-missing-drm_bridge_connector-dependency.patch deleted file mode 100644 index 9ee1062cc26..00000000000 --- a/queue-6.11/drm-imx-add-missing-drm_bridge_connector-dependency.patch +++ /dev/null @@ -1,46 +0,0 @@ -From 5fe1fd91a3d857c6dc833234974e2b3405f8959f Mon Sep 17 00:00:00 2001 -From: Sasha Levin -Date: Fri, 6 Sep 2024 08:38:56 +0200 -Subject: drm/imx: Add missing DRM_BRIDGE_CONNECTOR dependency - -From: Alexander Stein - -[ Upstream commit f673055a46784ccea04465b9213e999f7bc5187e ] - -When drm/bridge-connector was moved to DRM_DISPLAY_HELPER not all -users were updated. Add missing Kconfig selections. - -Fixes: 9da7ec9b19d8 ("drm/bridge-connector: move to DRM_DISPLAY_HELPER module") -Signed-off-by: Alexander Stein -Reviewed-by: Dmitry Baryshkov -Acked-by: Philipp Zabel -Link: https://patchwork.freedesktop.org/patch/msgid/20240906063857.2223442-1-alexander.stein@ew.tq-group.com -Signed-off-by: Dmitry Baryshkov -Signed-off-by: Sasha Levin ---- - drivers/gpu/drm/imx/ipuv3/Kconfig | 2 ++ - 1 file changed, 2 insertions(+) - -diff --git a/drivers/gpu/drm/imx/ipuv3/Kconfig b/drivers/gpu/drm/imx/ipuv3/Kconfig -index f083d313d1d3a..7a427551f4341 100644 ---- a/drivers/gpu/drm/imx/ipuv3/Kconfig -+++ b/drivers/gpu/drm/imx/ipuv3/Kconfig -@@ -13,6 +13,7 @@ config DRM_IMX_PARALLEL_DISPLAY - tristate "Support for parallel displays" - depends on DRM_IMX - select DRM_BRIDGE -+ select DRM_BRIDGE_CONNECTOR - select DRM_PANEL_BRIDGE - select VIDEOMODE_HELPERS - -@@ -31,6 +32,7 @@ config DRM_IMX_LDB - depends on COMMON_CLK - select MFD_SYSCON - select DRM_BRIDGE -+ select DRM_BRIDGE_CONNECTOR - select DRM_PANEL_BRIDGE - help - Choose this to enable the internal LVDS Display Bridge (LDB) --- -2.43.0 - diff --git a/queue-6.11/drm-imx-ldb-drop-custom-ddc-bus-support.patch b/queue-6.11/drm-imx-ldb-drop-custom-ddc-bus-support.patch deleted file mode 100644 index 955fa4eb8a1..00000000000 --- a/queue-6.11/drm-imx-ldb-drop-custom-ddc-bus-support.patch +++ /dev/null @@ -1,156 +0,0 @@ -From fa50925e7146fa5eb1dc6b9c17bd5f84536e855f Mon Sep 17 00:00:00 2001 -From: Sasha Levin -Date: Sun, 2 Jun 2024 15:04:46 +0300 -Subject: drm/imx: ldb: drop custom DDC bus support - -From: Dmitry Baryshkov - -[ Upstream commit b2f3418b516e3485a14f10bfc09f20211dedc156 ] - -None of the boards ever supported by the upstream kernel used the custom -DDC bus support with the LDB connector. If a need arises to do so, one -should use panel-simple and its DDC bus code. Drop ddc-i2c-bus support -from the imx-ldb driver. - -Reviewed-by: Philipp Zabel -Tested-by: Chris Healy -Tested-by: Philipp Zabel # on imx6q-nitrogen6x -Link: https://patchwork.freedesktop.org/patch/msgid/20240602-drm-imx-cleanup-v3-6-e549e2a43100@linaro.org -Signed-off-by: Dmitry Baryshkov -Stable-dep-of: f673055a4678 ("drm/imx: Add missing DRM_BRIDGE_CONNECTOR dependency") -Signed-off-by: Sasha Levin ---- - drivers/gpu/drm/imx/ipuv3/imx-ldb.c | 73 ++++------------------------- - 1 file changed, 10 insertions(+), 63 deletions(-) - -diff --git a/drivers/gpu/drm/imx/ipuv3/imx-ldb.c b/drivers/gpu/drm/imx/ipuv3/imx-ldb.c -index 1924d8921c620..3f669604377e7 100644 ---- a/drivers/gpu/drm/imx/ipuv3/imx-ldb.c -+++ b/drivers/gpu/drm/imx/ipuv3/imx-ldb.c -@@ -25,7 +25,6 @@ - #include - #include - #include --#include - #include - #include - #include -@@ -70,7 +69,6 @@ struct imx_ldb_channel { - struct drm_bridge *bridge; - - struct device_node *child; -- struct i2c_adapter *ddc; - int chno; - struct drm_display_mode mode; - int mode_valid; -@@ -141,18 +139,6 @@ static int imx_ldb_connector_get_modes(struct drm_connector *connector) - if (num_modes > 0) - return num_modes; - -- if (imx_ldb_ch->ddc) { -- const struct drm_edid *edid = drm_edid_read_ddc(connector, -- imx_ldb_ch->ddc); -- -- if (edid) { -- drm_edid_connector_update(connector, edid); -- drm_edid_free(edid); -- -- return drm_edid_connector_add_modes(connector); -- } -- } -- - if (imx_ldb_ch->mode_valid) { - struct drm_display_mode *mode; - -@@ -481,10 +467,9 @@ static int imx_ldb_register(struct drm_device *drm, - */ - drm_connector_helper_add(connector, - &imx_ldb_connector_helper_funcs); -- drm_connector_init_with_ddc(drm, connector, -- &imx_ldb_connector_funcs, -- DRM_MODE_CONNECTOR_LVDS, -- imx_ldb_ch->ddc); -+ drm_connector_init(drm, connector, -+ &imx_ldb_connector_funcs, -+ DRM_MODE_CONNECTOR_LVDS); - drm_connector_attach_encoder(connector, encoder); - } - -@@ -551,39 +536,6 @@ static const struct of_device_id imx_ldb_dt_ids[] = { - }; - MODULE_DEVICE_TABLE(of, imx_ldb_dt_ids); - --static int imx_ldb_panel_ddc(struct device *dev, -- struct imx_ldb_channel *channel, struct device_node *child) --{ -- struct device_node *ddc_node; -- int ret; -- -- ddc_node = of_parse_phandle(child, "ddc-i2c-bus", 0); -- if (ddc_node) { -- channel->ddc = of_find_i2c_adapter_by_node(ddc_node); -- of_node_put(ddc_node); -- if (!channel->ddc) { -- dev_warn(dev, "failed to get ddc i2c adapter\n"); -- return -EPROBE_DEFER; -- } -- } -- -- if (!channel->ddc) { -- /* if no DDC available, fallback to hardcoded EDID */ -- dev_dbg(dev, "no ddc available\n"); -- -- if (!channel->panel) { -- /* fallback to display-timings node */ -- ret = of_get_drm_display_mode(child, -- &channel->mode, -- &channel->bus_flags, -- OF_USE_NATIVE_MODE); -- if (!ret) -- channel->mode_valid = 1; -- } -- } -- return 0; --} -- - static int imx_ldb_bind(struct device *dev, struct device *master, void *data) - { - struct drm_device *drm = data; -@@ -694,11 +646,15 @@ static int imx_ldb_probe(struct platform_device *pdev) - if (ret && ret != -ENODEV) - goto free_child; - -- /* panel ddc only if there is no bridge */ -- if (!channel->bridge) { -- ret = imx_ldb_panel_ddc(dev, channel, child); -+ if (!channel->bridge && !channel->panel) { -+ ret = of_get_drm_display_mode(child, -+ &channel->mode, -+ &channel->bus_flags, -+ OF_USE_NATIVE_MODE); - if (ret) - goto free_child; -+ -+ channel->mode_valid = 1; - } - - bus_format = of_get_bus_format(dev, child); -@@ -732,15 +688,6 @@ static int imx_ldb_probe(struct platform_device *pdev) - - static void imx_ldb_remove(struct platform_device *pdev) - { -- struct imx_ldb *imx_ldb = platform_get_drvdata(pdev); -- int i; -- -- for (i = 0; i < 2; i++) { -- struct imx_ldb_channel *channel = &imx_ldb->channel[i]; -- -- i2c_put_adapter(channel->ddc); -- } -- - component_del(&pdev->dev, &imx_ldb_ops); - } - --- -2.43.0 - diff --git a/queue-6.11/drm-imx-ldb-drop-custom-edid-support.patch b/queue-6.11/drm-imx-ldb-drop-custom-edid-support.patch deleted file mode 100644 index 8a2f616d208..00000000000 --- a/queue-6.11/drm-imx-ldb-drop-custom-edid-support.patch +++ /dev/null @@ -1,92 +0,0 @@ -From f1406791ede0f09f4623afbe1b68902b3e490aea Mon Sep 17 00:00:00 2001 -From: Sasha Levin -Date: Sun, 2 Jun 2024 15:04:45 +0300 -Subject: drm/imx: ldb: drop custom EDID support - -From: Dmitry Baryshkov - -[ Upstream commit aed7b500315004a917463d571fa9cd12e0e94370 ] - -Bindings for the imx-ldb never allowed specifying the EDID in DT. None -of the existing DT files use it. Drop it now in favour of using debugfs -overrides or the drm.edid_firmware support. - -Reviewed-by: Philipp Zabel -Tested-by: Chris Healy -Tested-by: Philipp Zabel # on imx6q-nitrogen6x -Link: https://patchwork.freedesktop.org/patch/msgid/20240602-drm-imx-cleanup-v3-5-e549e2a43100@linaro.org -Signed-off-by: Dmitry Baryshkov -Stable-dep-of: f673055a4678 ("drm/imx: Add missing DRM_BRIDGE_CONNECTOR dependency") -Signed-off-by: Sasha Levin ---- - drivers/gpu/drm/imx/ipuv3/imx-ldb.c | 29 +++++++++++------------------ - 1 file changed, 11 insertions(+), 18 deletions(-) - -diff --git a/drivers/gpu/drm/imx/ipuv3/imx-ldb.c b/drivers/gpu/drm/imx/ipuv3/imx-ldb.c -index 793dfb1a3ed00..1924d8921c620 100644 ---- a/drivers/gpu/drm/imx/ipuv3/imx-ldb.c -+++ b/drivers/gpu/drm/imx/ipuv3/imx-ldb.c -@@ -72,7 +72,6 @@ struct imx_ldb_channel { - struct device_node *child; - struct i2c_adapter *ddc; - int chno; -- const struct drm_edid *drm_edid; - struct drm_display_mode mode; - int mode_valid; - u32 bus_format; -@@ -142,14 +141,17 @@ static int imx_ldb_connector_get_modes(struct drm_connector *connector) - if (num_modes > 0) - return num_modes; - -- if (!imx_ldb_ch->drm_edid && imx_ldb_ch->ddc) { -- imx_ldb_ch->drm_edid = drm_edid_read_ddc(connector, -- imx_ldb_ch->ddc); -- drm_edid_connector_update(connector, imx_ldb_ch->drm_edid); -- } -+ if (imx_ldb_ch->ddc) { -+ const struct drm_edid *edid = drm_edid_read_ddc(connector, -+ imx_ldb_ch->ddc); - -- if (imx_ldb_ch->drm_edid) -- num_modes = drm_edid_connector_add_modes(connector); -+ if (edid) { -+ drm_edid_connector_update(connector, edid); -+ drm_edid_free(edid); -+ -+ return drm_edid_connector_add_modes(connector); -+ } -+ } - - if (imx_ldb_ch->mode_valid) { - struct drm_display_mode *mode; -@@ -566,18 +568,10 @@ static int imx_ldb_panel_ddc(struct device *dev, - } - - if (!channel->ddc) { -- const void *edidp; -- int edid_len; -- - /* if no DDC available, fallback to hardcoded EDID */ - dev_dbg(dev, "no ddc available\n"); - -- edidp = of_get_property(child, "edid", &edid_len); -- if (edidp) { -- channel->drm_edid = drm_edid_alloc(edidp, edid_len); -- if (!channel->drm_edid) -- return -ENOMEM; -- } else if (!channel->panel) { -+ if (!channel->panel) { - /* fallback to display-timings node */ - ret = of_get_drm_display_mode(child, - &channel->mode, -@@ -744,7 +738,6 @@ static void imx_ldb_remove(struct platform_device *pdev) - for (i = 0; i < 2; i++) { - struct imx_ldb_channel *channel = &imx_ldb->channel[i]; - -- drm_edid_free(channel->drm_edid); - i2c_put_adapter(channel->ddc); - } - --- -2.43.0 - diff --git a/queue-6.11/drm-imx-ldb-switch-to-drm_panel_bridge.patch b/queue-6.11/drm-imx-ldb-switch-to-drm_panel_bridge.patch deleted file mode 100644 index 5a2624903ba..00000000000 --- a/queue-6.11/drm-imx-ldb-switch-to-drm_panel_bridge.patch +++ /dev/null @@ -1,158 +0,0 @@ -From 46a3e7a41f394e5fb9357f7ae5994cfa79cba8d0 Mon Sep 17 00:00:00 2001 -From: Sasha Levin -Date: Sun, 2 Jun 2024 15:04:47 +0300 -Subject: drm/imx: ldb: switch to drm_panel_bridge - -From: Dmitry Baryshkov - -[ Upstream commit 5c5843b20bbb1e4b4de2359573c20e416b41cb48 ] - -Defer panel handling to drm_panel_bridge, unifying codepaths for the -panel and bridge cases. The MFD_SYSCON symbol is moved to select to -prevent Kconfig symbol loops. - -Reviewed-by: Philipp Zabel -Tested-by: Chris Healy -Tested-by: Philipp Zabel # on imx6q-nitrogen6x -Link: https://patchwork.freedesktop.org/patch/msgid/20240602-drm-imx-cleanup-v3-7-e549e2a43100@linaro.org -Signed-off-by: Dmitry Baryshkov -Stable-dep-of: f673055a4678 ("drm/imx: Add missing DRM_BRIDGE_CONNECTOR dependency") -Signed-off-by: Sasha Levin ---- - drivers/gpu/drm/imx/ipuv3/Kconfig | 6 ++-- - drivers/gpu/drm/imx/ipuv3/imx-ldb.c | 44 +++++++++-------------------- - 2 files changed, 18 insertions(+), 32 deletions(-) - -diff --git a/drivers/gpu/drm/imx/ipuv3/Kconfig b/drivers/gpu/drm/imx/ipuv3/Kconfig -index bacf0655ebaf3..6abcf9c833d44 100644 ---- a/drivers/gpu/drm/imx/ipuv3/Kconfig -+++ b/drivers/gpu/drm/imx/ipuv3/Kconfig -@@ -26,9 +26,11 @@ config DRM_IMX_TVE - - config DRM_IMX_LDB - tristate "Support for LVDS displays" -- depends on DRM_IMX && MFD_SYSCON -+ depends on DRM_IMX - depends on COMMON_CLK -- select DRM_PANEL -+ select MFD_SYSCON -+ select DRM_BRIDGE -+ select DRM_PANEL_BRIDGE - help - Choose this to enable the internal LVDS Display Bridge (LDB) - found on i.MX53 and i.MX6 processors. -diff --git a/drivers/gpu/drm/imx/ipuv3/imx-ldb.c b/drivers/gpu/drm/imx/ipuv3/imx-ldb.c -index 3f669604377e7..bc7ad96971308 100644 ---- a/drivers/gpu/drm/imx/ipuv3/imx-ldb.c -+++ b/drivers/gpu/drm/imx/ipuv3/imx-ldb.c -@@ -27,7 +27,6 @@ - #include - #include - #include --#include - #include - #include - #include -@@ -64,8 +63,6 @@ struct imx_ldb; - struct imx_ldb_channel { - struct imx_ldb *ldb; - -- /* Defines what is connected to the ldb, only one at a time */ -- struct drm_panel *panel; - struct drm_bridge *bridge; - - struct device_node *child; -@@ -135,10 +132,6 @@ static int imx_ldb_connector_get_modes(struct drm_connector *connector) - struct imx_ldb_channel *imx_ldb_ch = con_to_imx_ldb_ch(connector); - int num_modes; - -- num_modes = drm_panel_get_modes(imx_ldb_ch->panel, connector); -- if (num_modes > 0) -- return num_modes; -- - if (imx_ldb_ch->mode_valid) { - struct drm_display_mode *mode; - -@@ -193,8 +186,6 @@ static void imx_ldb_encoder_enable(struct drm_encoder *encoder) - return; - } - -- drm_panel_prepare(imx_ldb_ch->panel); -- - if (dual) { - clk_set_parent(ldb->clk_sel[mux], ldb->clk[0]); - clk_set_parent(ldb->clk_sel[mux], ldb->clk[1]); -@@ -233,8 +224,6 @@ static void imx_ldb_encoder_enable(struct drm_encoder *encoder) - } - - regmap_write(ldb->regmap, IOMUXC_GPR2, ldb->ldb_ctrl); -- -- drm_panel_enable(imx_ldb_ch->panel); - } - - static void -@@ -311,8 +300,6 @@ static void imx_ldb_encoder_disable(struct drm_encoder *encoder) - int dual = ldb->ldb_ctrl & LDB_SPLIT_MODE_EN; - int mux, ret; - -- drm_panel_disable(imx_ldb_ch->panel); -- - if (imx_ldb_ch == &ldb->channel[0] || dual) - ldb->ldb_ctrl &= ~LDB_CH0_MODE_EN_MASK; - if (imx_ldb_ch == &ldb->channel[1] || dual) -@@ -346,8 +333,6 @@ static void imx_ldb_encoder_disable(struct drm_encoder *encoder) - dev_err(ldb->dev, - "unable to set di%d parent clock to original parent\n", - mux); -- -- drm_panel_unprepare(imx_ldb_ch->panel); - } - - static int imx_ldb_encoder_atomic_check(struct drm_encoder *encoder, -@@ -640,13 +625,15 @@ static int imx_ldb_probe(struct platform_device *pdev) - * The output port is port@4 with an external 4-port mux or - * port@2 with the internal 2-port mux. - */ -- ret = drm_of_find_panel_or_bridge(child, -- imx_ldb->lvds_mux ? 4 : 2, 0, -- &channel->panel, &channel->bridge); -- if (ret && ret != -ENODEV) -- goto free_child; -+ channel->bridge = devm_drm_of_get_bridge(dev, child, -+ imx_ldb->lvds_mux ? 4 : 2, 0); -+ if (IS_ERR(channel->bridge)) { -+ ret = PTR_ERR(channel->bridge); -+ if (ret != -ENODEV) -+ goto free_child; -+ -+ channel->bridge = NULL; - -- if (!channel->bridge && !channel->panel) { - ret = of_get_drm_display_mode(child, - &channel->mode, - &channel->bus_flags, -@@ -658,15 +645,12 @@ static int imx_ldb_probe(struct platform_device *pdev) - } - - bus_format = of_get_bus_format(dev, child); -- if (bus_format == -EINVAL) { -- /* -- * If no bus format was specified in the device tree, -- * we can still get it from the connected panel later. -- */ -- if (channel->panel && channel->panel->funcs && -- channel->panel->funcs->get_modes) -- bus_format = 0; -- } -+ /* -+ * If no bus format was specified in the device tree, -+ * we can still get it from the connected panel later. -+ */ -+ if (bus_format == -EINVAL && channel->bridge) -+ bus_format = 0; - if (bus_format < 0) { - dev_err(dev, "could not determine data mapping: %d\n", - bus_format); --- -2.43.0 - diff --git a/queue-6.11/drm-imx-parallel-display-drop-edid-override-support.patch b/queue-6.11/drm-imx-parallel-display-drop-edid-override-support.patch deleted file mode 100644 index 32393ce5464..00000000000 --- a/queue-6.11/drm-imx-parallel-display-drop-edid-override-support.patch +++ /dev/null @@ -1,97 +0,0 @@ -From ac5b9f2d40acf8ae5f84ea69d2c3d866a4763567 Mon Sep 17 00:00:00 2001 -From: Sasha Levin -Date: Sun, 2 Jun 2024 15:04:44 +0300 -Subject: drm/imx: parallel-display: drop edid override support - -From: Dmitry Baryshkov - -[ Upstream commit fe30fabf229f7542a10dd249079fdb83844a7dba ] - -None of the in-kernel DT files ever used edid override with the -fsl-imx-drm driver. In case the EDID needs to be specified manually, DRM -core allows one to either override it via the debugfs or to load it via -request_firmware by using DRM_LOAD_EDID_FIRMWARE. In all other cases -EDID and/or modes are to be provided as a part of the panel driver. - -Drop support for the edid property. - -Reviewed-by: Philipp Zabel -Acked-by: Rob Herring -Tested-by: Chris Healy -Tested-by: Philipp Zabel # on imx6q-nitrogen6x -Link: https://patchwork.freedesktop.org/patch/msgid/20240602-drm-imx-cleanup-v3-4-e549e2a43100@linaro.org -Signed-off-by: Dmitry Baryshkov -Stable-dep-of: f673055a4678 ("drm/imx: Add missing DRM_BRIDGE_CONNECTOR dependency") -Signed-off-by: Sasha Levin ---- - drivers/gpu/drm/imx/ipuv3/parallel-display.c | 17 ----------------- - 1 file changed, 17 deletions(-) - -diff --git a/drivers/gpu/drm/imx/ipuv3/parallel-display.c b/drivers/gpu/drm/imx/ipuv3/parallel-display.c -index 91d7808a2d8d3..4d17fb96e77c5 100644 ---- a/drivers/gpu/drm/imx/ipuv3/parallel-display.c -+++ b/drivers/gpu/drm/imx/ipuv3/parallel-display.c -@@ -16,7 +16,6 @@ - - #include - #include --#include - #include - #include - #include -@@ -34,7 +33,6 @@ struct imx_parallel_display_encoder { - - struct imx_parallel_display { - struct device *dev; -- const struct drm_edid *drm_edid; - u32 bus_format; - u32 bus_flags; - struct drm_display_mode mode; -@@ -62,11 +60,6 @@ static int imx_pd_connector_get_modes(struct drm_connector *connector) - if (num_modes > 0) - return num_modes; - -- if (imxpd->drm_edid) { -- drm_edid_connector_update(connector, imxpd->drm_edid); -- num_modes = drm_edid_connector_add_modes(connector); -- } -- - if (np) { - struct drm_display_mode *mode = drm_mode_create(connector->dev); - int ret; -@@ -312,9 +305,7 @@ static int imx_pd_probe(struct platform_device *pdev) - { - struct device *dev = &pdev->dev; - struct device_node *np = dev->of_node; -- const u8 *edidp; - struct imx_parallel_display *imxpd; -- int edid_len; - int ret; - u32 bus_format = 0; - const char *fmt; -@@ -329,10 +320,6 @@ static int imx_pd_probe(struct platform_device *pdev) - if (ret && ret != -ENODEV) - return ret; - -- edidp = of_get_property(np, "edid", &edid_len); -- if (edidp) -- imxpd->drm_edid = drm_edid_alloc(edidp, edid_len); -- - ret = of_property_read_string(np, "interface-pix-fmt", &fmt); - if (!ret) { - if (!strcmp(fmt, "rgb24")) -@@ -355,11 +342,7 @@ static int imx_pd_probe(struct platform_device *pdev) - - static void imx_pd_remove(struct platform_device *pdev) - { -- struct imx_parallel_display *imxpd = platform_get_drvdata(pdev); -- - component_del(&pdev->dev, &imx_pd_ops); -- -- drm_edid_free(imxpd->drm_edid); - } - - static const struct of_device_id imx_pd_dt_ids[] = { --- -2.43.0 - diff --git a/queue-6.11/drm-imx-parallel-display-switch-to-drm_panel_bridge.patch b/queue-6.11/drm-imx-parallel-display-switch-to-drm_panel_bridge.patch deleted file mode 100644 index 433eb24e377..00000000000 --- a/queue-6.11/drm-imx-parallel-display-switch-to-drm_panel_bridge.patch +++ /dev/null @@ -1,124 +0,0 @@ -From cfabc9ef646af77071a2c28f4a2a089519b6c385 Mon Sep 17 00:00:00 2001 -From: Sasha Levin -Date: Sun, 2 Jun 2024 15:04:48 +0300 -Subject: drm/imx: parallel-display: switch to drm_panel_bridge - -From: Dmitry Baryshkov - -[ Upstream commit 5f6e56d3319d2fd20d4c81b4f0212f4d09d7c1f1 ] - -Defer panel handling to drm_panel_bridge, unifying codepaths for the -panel and bridge cases. - -Reviewed-by: Philipp Zabel -Tested-by: Chris Healy -Tested-by: Philipp Zabel # on imx6q-nitrogen6x -Link: https://patchwork.freedesktop.org/patch/msgid/20240602-drm-imx-cleanup-v3-8-e549e2a43100@linaro.org -Signed-off-by: Dmitry Baryshkov -Stable-dep-of: f673055a4678 ("drm/imx: Add missing DRM_BRIDGE_CONNECTOR dependency") -Signed-off-by: Sasha Levin ---- - drivers/gpu/drm/imx/ipuv3/Kconfig | 3 +- - drivers/gpu/drm/imx/ipuv3/parallel-display.c | 36 +++++--------------- - 2 files changed, 10 insertions(+), 29 deletions(-) - -diff --git a/drivers/gpu/drm/imx/ipuv3/Kconfig b/drivers/gpu/drm/imx/ipuv3/Kconfig -index 6abcf9c833d44..f083d313d1d3a 100644 ---- a/drivers/gpu/drm/imx/ipuv3/Kconfig -+++ b/drivers/gpu/drm/imx/ipuv3/Kconfig -@@ -11,8 +11,9 @@ config DRM_IMX - - config DRM_IMX_PARALLEL_DISPLAY - tristate "Support for parallel displays" -- select DRM_PANEL - depends on DRM_IMX -+ select DRM_BRIDGE -+ select DRM_PANEL_BRIDGE - select VIDEOMODE_HELPERS - - config DRM_IMX_TVE -diff --git a/drivers/gpu/drm/imx/ipuv3/parallel-display.c b/drivers/gpu/drm/imx/ipuv3/parallel-display.c -index 4d17fb96e77c5..9ac2a94fa62be 100644 ---- a/drivers/gpu/drm/imx/ipuv3/parallel-display.c -+++ b/drivers/gpu/drm/imx/ipuv3/parallel-display.c -@@ -18,7 +18,6 @@ - #include - #include - #include --#include - #include - #include - -@@ -36,7 +35,6 @@ struct imx_parallel_display { - u32 bus_format; - u32 bus_flags; - struct drm_display_mode mode; -- struct drm_panel *panel; - struct drm_bridge *next_bridge; - }; - -@@ -56,10 +54,6 @@ static int imx_pd_connector_get_modes(struct drm_connector *connector) - struct device_node *np = imxpd->dev->of_node; - int num_modes; - -- num_modes = drm_panel_get_modes(imxpd->panel, connector); -- if (num_modes > 0) -- return num_modes; -- - if (np) { - struct drm_display_mode *mode = drm_mode_create(connector->dev); - int ret; -@@ -84,22 +78,6 @@ static int imx_pd_connector_get_modes(struct drm_connector *connector) - return num_modes; - } - --static void imx_pd_bridge_enable(struct drm_bridge *bridge) --{ -- struct imx_parallel_display *imxpd = bridge_to_imxpd(bridge); -- -- drm_panel_prepare(imxpd->panel); -- drm_panel_enable(imxpd->panel); --} -- --static void imx_pd_bridge_disable(struct drm_bridge *bridge) --{ -- struct imx_parallel_display *imxpd = bridge_to_imxpd(bridge); -- -- drm_panel_disable(imxpd->panel); -- drm_panel_unprepare(imxpd->panel); --} -- - static const u32 imx_pd_bus_fmts[] = { - MEDIA_BUS_FMT_RGB888_1X24, - MEDIA_BUS_FMT_BGR888_1X24, -@@ -237,8 +215,6 @@ static const struct drm_connector_helper_funcs imx_pd_connector_helper_funcs = { - }; - - static const struct drm_bridge_funcs imx_pd_bridge_funcs = { -- .enable = imx_pd_bridge_enable, -- .disable = imx_pd_bridge_disable, - .atomic_reset = drm_atomic_helper_bridge_reset, - .atomic_duplicate_state = drm_atomic_helper_bridge_duplicate_state, - .atomic_destroy_state = drm_atomic_helper_bridge_destroy_state, -@@ -315,10 +291,14 @@ static int imx_pd_probe(struct platform_device *pdev) - return -ENOMEM; - - /* port@1 is the output port */ -- ret = drm_of_find_panel_or_bridge(np, 1, 0, &imxpd->panel, -- &imxpd->next_bridge); -- if (ret && ret != -ENODEV) -- return ret; -+ imxpd->next_bridge = devm_drm_of_get_bridge(dev, np, 1, 0); -+ if (IS_ERR(imxpd->next_bridge)) { -+ ret = PTR_ERR(imxpd->next_bridge); -+ if (ret != -ENODEV) -+ return ret; -+ -+ imxpd->next_bridge = NULL; -+ } - - ret = of_property_read_string(np, "interface-pix-fmt", &fmt); - if (!ret) { --- -2.43.0 - diff --git a/queue-6.11/drm-ipuv3-parallel-convert-to-struct-drm_edid.patch b/queue-6.11/drm-ipuv3-parallel-convert-to-struct-drm_edid.patch deleted file mode 100644 index cf944f30487..00000000000 --- a/queue-6.11/drm-ipuv3-parallel-convert-to-struct-drm_edid.patch +++ /dev/null @@ -1,71 +0,0 @@ -From 10938cfb9b39cc1e591f1ac2b90297a4305f6d53 Mon Sep 17 00:00:00 2001 -From: Sasha Levin -Date: Thu, 22 Aug 2024 20:42:51 +0300 -Subject: drm/ipuv3/parallel: convert to struct drm_edid - -From: Jani Nikula - -[ Upstream commit 42e08287a3185409a7a1923374a557e04fc36e48 ] - -Prefer the struct drm_edid based functions for storing the EDID and -updating the connector. - -Reviewed-by: Daniel Vetter -Link: https://patchwork.freedesktop.org/patch/msgid/a1698044d556072e79041d69b8702099fd17bd90.1724348429.git.jani.nikula@intel.com -Signed-off-by: Jani Nikula -Stable-dep-of: f673055a4678 ("drm/imx: Add missing DRM_BRIDGE_CONNECTOR dependency") -Signed-off-by: Sasha Levin ---- - drivers/gpu/drm/imx/ipuv3/parallel-display.c | 14 +++++++++----- - 1 file changed, 9 insertions(+), 5 deletions(-) - -diff --git a/drivers/gpu/drm/imx/ipuv3/parallel-display.c b/drivers/gpu/drm/imx/ipuv3/parallel-display.c -index 55dedd73f528c..91d7808a2d8d3 100644 ---- a/drivers/gpu/drm/imx/ipuv3/parallel-display.c -+++ b/drivers/gpu/drm/imx/ipuv3/parallel-display.c -@@ -34,7 +34,7 @@ struct imx_parallel_display_encoder { - - struct imx_parallel_display { - struct device *dev; -- void *edid; -+ const struct drm_edid *drm_edid; - u32 bus_format; - u32 bus_flags; - struct drm_display_mode mode; -@@ -62,9 +62,9 @@ static int imx_pd_connector_get_modes(struct drm_connector *connector) - if (num_modes > 0) - return num_modes; - -- if (imxpd->edid) { -- drm_connector_update_edid_property(connector, imxpd->edid); -- num_modes = drm_add_edid_modes(connector, imxpd->edid); -+ if (imxpd->drm_edid) { -+ drm_edid_connector_update(connector, imxpd->drm_edid); -+ num_modes = drm_edid_connector_add_modes(connector); - } - - if (np) { -@@ -331,7 +331,7 @@ static int imx_pd_probe(struct platform_device *pdev) - - edidp = of_get_property(np, "edid", &edid_len); - if (edidp) -- imxpd->edid = devm_kmemdup(dev, edidp, edid_len, GFP_KERNEL); -+ imxpd->drm_edid = drm_edid_alloc(edidp, edid_len); - - ret = of_property_read_string(np, "interface-pix-fmt", &fmt); - if (!ret) { -@@ -355,7 +355,11 @@ static int imx_pd_probe(struct platform_device *pdev) - - static void imx_pd_remove(struct platform_device *pdev) - { -+ struct imx_parallel_display *imxpd = platform_get_drvdata(pdev); -+ - component_del(&pdev->dev, &imx_pd_ops); -+ -+ drm_edid_free(imxpd->drm_edid); - } - - static const struct of_device_id imx_pd_dt_ids[] = { --- -2.43.0 - diff --git a/queue-6.11/series b/queue-6.11/series index 9670c369fba..38b329a43bb 100644 --- a/queue-6.11/series +++ b/queue-6.11/series @@ -224,13 +224,6 @@ udmabuf-change-folios-array-from-kmalloc-to-kvmalloc.patch udmabuf-fix-vmap_udmabuf-error-page-set.patch drm-imx-dcss-use-irqf_no_autoen-flag-in-request_irq.patch drm-imx-ipuv3-use-irqf_no_autoen-flag-in-request_irq.patch -drm-ipuv3-parallel-convert-to-struct-drm_edid.patch -drm-imx-parallel-display-drop-edid-override-support.patch -drm-imx-ldb-drop-custom-edid-support.patch -drm-imx-ldb-drop-custom-ddc-bus-support.patch -drm-imx-ldb-switch-to-drm_panel_bridge.patch -drm-imx-parallel-display-switch-to-drm_panel_bridge.patch -drm-imx-add-missing-drm_bridge_connector-dependency.patch drm-panel-nt35510-make-new-commands-optional.patch drm-v3d-address-race-condition-in-mmu-flush.patch drm-v3d-flush-the-mmu-before-we-supply-more-memory-t.patch diff --git a/queue-6.12/drm-imx-add-missing-drm_bridge_connector-dependency.patch b/queue-6.12/drm-imx-add-missing-drm_bridge_connector-dependency.patch deleted file mode 100644 index b413a022199..00000000000 --- a/queue-6.12/drm-imx-add-missing-drm_bridge_connector-dependency.patch +++ /dev/null @@ -1,46 +0,0 @@ -From 6e6dc43aa7317c932ac4cf44e9cd58fa8375a6db Mon Sep 17 00:00:00 2001 -From: Sasha Levin -Date: Fri, 6 Sep 2024 08:38:56 +0200 -Subject: drm/imx: Add missing DRM_BRIDGE_CONNECTOR dependency - -From: Alexander Stein - -[ Upstream commit f673055a46784ccea04465b9213e999f7bc5187e ] - -When drm/bridge-connector was moved to DRM_DISPLAY_HELPER not all -users were updated. Add missing Kconfig selections. - -Fixes: 9da7ec9b19d8 ("drm/bridge-connector: move to DRM_DISPLAY_HELPER module") -Signed-off-by: Alexander Stein -Reviewed-by: Dmitry Baryshkov -Acked-by: Philipp Zabel -Link: https://patchwork.freedesktop.org/patch/msgid/20240906063857.2223442-1-alexander.stein@ew.tq-group.com -Signed-off-by: Dmitry Baryshkov -Signed-off-by: Sasha Levin ---- - drivers/gpu/drm/imx/ipuv3/Kconfig | 2 ++ - 1 file changed, 2 insertions(+) - -diff --git a/drivers/gpu/drm/imx/ipuv3/Kconfig b/drivers/gpu/drm/imx/ipuv3/Kconfig -index f083d313d1d3a..7a427551f4341 100644 ---- a/drivers/gpu/drm/imx/ipuv3/Kconfig -+++ b/drivers/gpu/drm/imx/ipuv3/Kconfig -@@ -13,6 +13,7 @@ config DRM_IMX_PARALLEL_DISPLAY - tristate "Support for parallel displays" - depends on DRM_IMX - select DRM_BRIDGE -+ select DRM_BRIDGE_CONNECTOR - select DRM_PANEL_BRIDGE - select VIDEOMODE_HELPERS - -@@ -31,6 +32,7 @@ config DRM_IMX_LDB - depends on COMMON_CLK - select MFD_SYSCON - select DRM_BRIDGE -+ select DRM_BRIDGE_CONNECTOR - select DRM_PANEL_BRIDGE - help - Choose this to enable the internal LVDS Display Bridge (LDB) --- -2.43.0 - diff --git a/queue-6.12/drm-imx-ldb-drop-custom-ddc-bus-support.patch b/queue-6.12/drm-imx-ldb-drop-custom-ddc-bus-support.patch deleted file mode 100644 index f028b65b78a..00000000000 --- a/queue-6.12/drm-imx-ldb-drop-custom-ddc-bus-support.patch +++ /dev/null @@ -1,156 +0,0 @@ -From f8525b6c29db9357ffe2d73533cd0cc66b9deefc Mon Sep 17 00:00:00 2001 -From: Sasha Levin -Date: Sun, 2 Jun 2024 15:04:46 +0300 -Subject: drm/imx: ldb: drop custom DDC bus support - -From: Dmitry Baryshkov - -[ Upstream commit b2f3418b516e3485a14f10bfc09f20211dedc156 ] - -None of the boards ever supported by the upstream kernel used the custom -DDC bus support with the LDB connector. If a need arises to do so, one -should use panel-simple and its DDC bus code. Drop ddc-i2c-bus support -from the imx-ldb driver. - -Reviewed-by: Philipp Zabel -Tested-by: Chris Healy -Tested-by: Philipp Zabel # on imx6q-nitrogen6x -Link: https://patchwork.freedesktop.org/patch/msgid/20240602-drm-imx-cleanup-v3-6-e549e2a43100@linaro.org -Signed-off-by: Dmitry Baryshkov -Stable-dep-of: f673055a4678 ("drm/imx: Add missing DRM_BRIDGE_CONNECTOR dependency") -Signed-off-by: Sasha Levin ---- - drivers/gpu/drm/imx/ipuv3/imx-ldb.c | 73 ++++------------------------- - 1 file changed, 10 insertions(+), 63 deletions(-) - -diff --git a/drivers/gpu/drm/imx/ipuv3/imx-ldb.c b/drivers/gpu/drm/imx/ipuv3/imx-ldb.c -index 1924d8921c620..3f669604377e7 100644 ---- a/drivers/gpu/drm/imx/ipuv3/imx-ldb.c -+++ b/drivers/gpu/drm/imx/ipuv3/imx-ldb.c -@@ -25,7 +25,6 @@ - #include - #include - #include --#include - #include - #include - #include -@@ -70,7 +69,6 @@ struct imx_ldb_channel { - struct drm_bridge *bridge; - - struct device_node *child; -- struct i2c_adapter *ddc; - int chno; - struct drm_display_mode mode; - int mode_valid; -@@ -141,18 +139,6 @@ static int imx_ldb_connector_get_modes(struct drm_connector *connector) - if (num_modes > 0) - return num_modes; - -- if (imx_ldb_ch->ddc) { -- const struct drm_edid *edid = drm_edid_read_ddc(connector, -- imx_ldb_ch->ddc); -- -- if (edid) { -- drm_edid_connector_update(connector, edid); -- drm_edid_free(edid); -- -- return drm_edid_connector_add_modes(connector); -- } -- } -- - if (imx_ldb_ch->mode_valid) { - struct drm_display_mode *mode; - -@@ -481,10 +467,9 @@ static int imx_ldb_register(struct drm_device *drm, - */ - drm_connector_helper_add(connector, - &imx_ldb_connector_helper_funcs); -- drm_connector_init_with_ddc(drm, connector, -- &imx_ldb_connector_funcs, -- DRM_MODE_CONNECTOR_LVDS, -- imx_ldb_ch->ddc); -+ drm_connector_init(drm, connector, -+ &imx_ldb_connector_funcs, -+ DRM_MODE_CONNECTOR_LVDS); - drm_connector_attach_encoder(connector, encoder); - } - -@@ -551,39 +536,6 @@ static const struct of_device_id imx_ldb_dt_ids[] = { - }; - MODULE_DEVICE_TABLE(of, imx_ldb_dt_ids); - --static int imx_ldb_panel_ddc(struct device *dev, -- struct imx_ldb_channel *channel, struct device_node *child) --{ -- struct device_node *ddc_node; -- int ret; -- -- ddc_node = of_parse_phandle(child, "ddc-i2c-bus", 0); -- if (ddc_node) { -- channel->ddc = of_find_i2c_adapter_by_node(ddc_node); -- of_node_put(ddc_node); -- if (!channel->ddc) { -- dev_warn(dev, "failed to get ddc i2c adapter\n"); -- return -EPROBE_DEFER; -- } -- } -- -- if (!channel->ddc) { -- /* if no DDC available, fallback to hardcoded EDID */ -- dev_dbg(dev, "no ddc available\n"); -- -- if (!channel->panel) { -- /* fallback to display-timings node */ -- ret = of_get_drm_display_mode(child, -- &channel->mode, -- &channel->bus_flags, -- OF_USE_NATIVE_MODE); -- if (!ret) -- channel->mode_valid = 1; -- } -- } -- return 0; --} -- - static int imx_ldb_bind(struct device *dev, struct device *master, void *data) - { - struct drm_device *drm = data; -@@ -694,11 +646,15 @@ static int imx_ldb_probe(struct platform_device *pdev) - if (ret && ret != -ENODEV) - goto free_child; - -- /* panel ddc only if there is no bridge */ -- if (!channel->bridge) { -- ret = imx_ldb_panel_ddc(dev, channel, child); -+ if (!channel->bridge && !channel->panel) { -+ ret = of_get_drm_display_mode(child, -+ &channel->mode, -+ &channel->bus_flags, -+ OF_USE_NATIVE_MODE); - if (ret) - goto free_child; -+ -+ channel->mode_valid = 1; - } - - bus_format = of_get_bus_format(dev, child); -@@ -732,15 +688,6 @@ static int imx_ldb_probe(struct platform_device *pdev) - - static void imx_ldb_remove(struct platform_device *pdev) - { -- struct imx_ldb *imx_ldb = platform_get_drvdata(pdev); -- int i; -- -- for (i = 0; i < 2; i++) { -- struct imx_ldb_channel *channel = &imx_ldb->channel[i]; -- -- i2c_put_adapter(channel->ddc); -- } -- - component_del(&pdev->dev, &imx_ldb_ops); - } - --- -2.43.0 - diff --git a/queue-6.12/drm-imx-ldb-drop-custom-edid-support.patch b/queue-6.12/drm-imx-ldb-drop-custom-edid-support.patch deleted file mode 100644 index fe53fc2fb44..00000000000 --- a/queue-6.12/drm-imx-ldb-drop-custom-edid-support.patch +++ /dev/null @@ -1,92 +0,0 @@ -From 88b0e939aca406bfd89f9af70eb1b1d87b6914d6 Mon Sep 17 00:00:00 2001 -From: Sasha Levin -Date: Sun, 2 Jun 2024 15:04:45 +0300 -Subject: drm/imx: ldb: drop custom EDID support - -From: Dmitry Baryshkov - -[ Upstream commit aed7b500315004a917463d571fa9cd12e0e94370 ] - -Bindings for the imx-ldb never allowed specifying the EDID in DT. None -of the existing DT files use it. Drop it now in favour of using debugfs -overrides or the drm.edid_firmware support. - -Reviewed-by: Philipp Zabel -Tested-by: Chris Healy -Tested-by: Philipp Zabel # on imx6q-nitrogen6x -Link: https://patchwork.freedesktop.org/patch/msgid/20240602-drm-imx-cleanup-v3-5-e549e2a43100@linaro.org -Signed-off-by: Dmitry Baryshkov -Stable-dep-of: f673055a4678 ("drm/imx: Add missing DRM_BRIDGE_CONNECTOR dependency") -Signed-off-by: Sasha Levin ---- - drivers/gpu/drm/imx/ipuv3/imx-ldb.c | 29 +++++++++++------------------ - 1 file changed, 11 insertions(+), 18 deletions(-) - -diff --git a/drivers/gpu/drm/imx/ipuv3/imx-ldb.c b/drivers/gpu/drm/imx/ipuv3/imx-ldb.c -index 793dfb1a3ed00..1924d8921c620 100644 ---- a/drivers/gpu/drm/imx/ipuv3/imx-ldb.c -+++ b/drivers/gpu/drm/imx/ipuv3/imx-ldb.c -@@ -72,7 +72,6 @@ struct imx_ldb_channel { - struct device_node *child; - struct i2c_adapter *ddc; - int chno; -- const struct drm_edid *drm_edid; - struct drm_display_mode mode; - int mode_valid; - u32 bus_format; -@@ -142,14 +141,17 @@ static int imx_ldb_connector_get_modes(struct drm_connector *connector) - if (num_modes > 0) - return num_modes; - -- if (!imx_ldb_ch->drm_edid && imx_ldb_ch->ddc) { -- imx_ldb_ch->drm_edid = drm_edid_read_ddc(connector, -- imx_ldb_ch->ddc); -- drm_edid_connector_update(connector, imx_ldb_ch->drm_edid); -- } -+ if (imx_ldb_ch->ddc) { -+ const struct drm_edid *edid = drm_edid_read_ddc(connector, -+ imx_ldb_ch->ddc); - -- if (imx_ldb_ch->drm_edid) -- num_modes = drm_edid_connector_add_modes(connector); -+ if (edid) { -+ drm_edid_connector_update(connector, edid); -+ drm_edid_free(edid); -+ -+ return drm_edid_connector_add_modes(connector); -+ } -+ } - - if (imx_ldb_ch->mode_valid) { - struct drm_display_mode *mode; -@@ -566,18 +568,10 @@ static int imx_ldb_panel_ddc(struct device *dev, - } - - if (!channel->ddc) { -- const void *edidp; -- int edid_len; -- - /* if no DDC available, fallback to hardcoded EDID */ - dev_dbg(dev, "no ddc available\n"); - -- edidp = of_get_property(child, "edid", &edid_len); -- if (edidp) { -- channel->drm_edid = drm_edid_alloc(edidp, edid_len); -- if (!channel->drm_edid) -- return -ENOMEM; -- } else if (!channel->panel) { -+ if (!channel->panel) { - /* fallback to display-timings node */ - ret = of_get_drm_display_mode(child, - &channel->mode, -@@ -744,7 +738,6 @@ static void imx_ldb_remove(struct platform_device *pdev) - for (i = 0; i < 2; i++) { - struct imx_ldb_channel *channel = &imx_ldb->channel[i]; - -- drm_edid_free(channel->drm_edid); - i2c_put_adapter(channel->ddc); - } - --- -2.43.0 - diff --git a/queue-6.12/drm-imx-ldb-switch-to-drm_panel_bridge.patch b/queue-6.12/drm-imx-ldb-switch-to-drm_panel_bridge.patch deleted file mode 100644 index de9f423ec11..00000000000 --- a/queue-6.12/drm-imx-ldb-switch-to-drm_panel_bridge.patch +++ /dev/null @@ -1,158 +0,0 @@ -From 85ce007c2e40611b1823b5e8406c69f97b8d0f9e Mon Sep 17 00:00:00 2001 -From: Sasha Levin -Date: Sun, 2 Jun 2024 15:04:47 +0300 -Subject: drm/imx: ldb: switch to drm_panel_bridge - -From: Dmitry Baryshkov - -[ Upstream commit 5c5843b20bbb1e4b4de2359573c20e416b41cb48 ] - -Defer panel handling to drm_panel_bridge, unifying codepaths for the -panel and bridge cases. The MFD_SYSCON symbol is moved to select to -prevent Kconfig symbol loops. - -Reviewed-by: Philipp Zabel -Tested-by: Chris Healy -Tested-by: Philipp Zabel # on imx6q-nitrogen6x -Link: https://patchwork.freedesktop.org/patch/msgid/20240602-drm-imx-cleanup-v3-7-e549e2a43100@linaro.org -Signed-off-by: Dmitry Baryshkov -Stable-dep-of: f673055a4678 ("drm/imx: Add missing DRM_BRIDGE_CONNECTOR dependency") -Signed-off-by: Sasha Levin ---- - drivers/gpu/drm/imx/ipuv3/Kconfig | 6 ++-- - drivers/gpu/drm/imx/ipuv3/imx-ldb.c | 44 +++++++++-------------------- - 2 files changed, 18 insertions(+), 32 deletions(-) - -diff --git a/drivers/gpu/drm/imx/ipuv3/Kconfig b/drivers/gpu/drm/imx/ipuv3/Kconfig -index bacf0655ebaf3..6abcf9c833d44 100644 ---- a/drivers/gpu/drm/imx/ipuv3/Kconfig -+++ b/drivers/gpu/drm/imx/ipuv3/Kconfig -@@ -26,9 +26,11 @@ config DRM_IMX_TVE - - config DRM_IMX_LDB - tristate "Support for LVDS displays" -- depends on DRM_IMX && MFD_SYSCON -+ depends on DRM_IMX - depends on COMMON_CLK -- select DRM_PANEL -+ select MFD_SYSCON -+ select DRM_BRIDGE -+ select DRM_PANEL_BRIDGE - help - Choose this to enable the internal LVDS Display Bridge (LDB) - found on i.MX53 and i.MX6 processors. -diff --git a/drivers/gpu/drm/imx/ipuv3/imx-ldb.c b/drivers/gpu/drm/imx/ipuv3/imx-ldb.c -index 3f669604377e7..bc7ad96971308 100644 ---- a/drivers/gpu/drm/imx/ipuv3/imx-ldb.c -+++ b/drivers/gpu/drm/imx/ipuv3/imx-ldb.c -@@ -27,7 +27,6 @@ - #include - #include - #include --#include - #include - #include - #include -@@ -64,8 +63,6 @@ struct imx_ldb; - struct imx_ldb_channel { - struct imx_ldb *ldb; - -- /* Defines what is connected to the ldb, only one at a time */ -- struct drm_panel *panel; - struct drm_bridge *bridge; - - struct device_node *child; -@@ -135,10 +132,6 @@ static int imx_ldb_connector_get_modes(struct drm_connector *connector) - struct imx_ldb_channel *imx_ldb_ch = con_to_imx_ldb_ch(connector); - int num_modes; - -- num_modes = drm_panel_get_modes(imx_ldb_ch->panel, connector); -- if (num_modes > 0) -- return num_modes; -- - if (imx_ldb_ch->mode_valid) { - struct drm_display_mode *mode; - -@@ -193,8 +186,6 @@ static void imx_ldb_encoder_enable(struct drm_encoder *encoder) - return; - } - -- drm_panel_prepare(imx_ldb_ch->panel); -- - if (dual) { - clk_set_parent(ldb->clk_sel[mux], ldb->clk[0]); - clk_set_parent(ldb->clk_sel[mux], ldb->clk[1]); -@@ -233,8 +224,6 @@ static void imx_ldb_encoder_enable(struct drm_encoder *encoder) - } - - regmap_write(ldb->regmap, IOMUXC_GPR2, ldb->ldb_ctrl); -- -- drm_panel_enable(imx_ldb_ch->panel); - } - - static void -@@ -311,8 +300,6 @@ static void imx_ldb_encoder_disable(struct drm_encoder *encoder) - int dual = ldb->ldb_ctrl & LDB_SPLIT_MODE_EN; - int mux, ret; - -- drm_panel_disable(imx_ldb_ch->panel); -- - if (imx_ldb_ch == &ldb->channel[0] || dual) - ldb->ldb_ctrl &= ~LDB_CH0_MODE_EN_MASK; - if (imx_ldb_ch == &ldb->channel[1] || dual) -@@ -346,8 +333,6 @@ static void imx_ldb_encoder_disable(struct drm_encoder *encoder) - dev_err(ldb->dev, - "unable to set di%d parent clock to original parent\n", - mux); -- -- drm_panel_unprepare(imx_ldb_ch->panel); - } - - static int imx_ldb_encoder_atomic_check(struct drm_encoder *encoder, -@@ -640,13 +625,15 @@ static int imx_ldb_probe(struct platform_device *pdev) - * The output port is port@4 with an external 4-port mux or - * port@2 with the internal 2-port mux. - */ -- ret = drm_of_find_panel_or_bridge(child, -- imx_ldb->lvds_mux ? 4 : 2, 0, -- &channel->panel, &channel->bridge); -- if (ret && ret != -ENODEV) -- goto free_child; -+ channel->bridge = devm_drm_of_get_bridge(dev, child, -+ imx_ldb->lvds_mux ? 4 : 2, 0); -+ if (IS_ERR(channel->bridge)) { -+ ret = PTR_ERR(channel->bridge); -+ if (ret != -ENODEV) -+ goto free_child; -+ -+ channel->bridge = NULL; - -- if (!channel->bridge && !channel->panel) { - ret = of_get_drm_display_mode(child, - &channel->mode, - &channel->bus_flags, -@@ -658,15 +645,12 @@ static int imx_ldb_probe(struct platform_device *pdev) - } - - bus_format = of_get_bus_format(dev, child); -- if (bus_format == -EINVAL) { -- /* -- * If no bus format was specified in the device tree, -- * we can still get it from the connected panel later. -- */ -- if (channel->panel && channel->panel->funcs && -- channel->panel->funcs->get_modes) -- bus_format = 0; -- } -+ /* -+ * If no bus format was specified in the device tree, -+ * we can still get it from the connected panel later. -+ */ -+ if (bus_format == -EINVAL && channel->bridge) -+ bus_format = 0; - if (bus_format < 0) { - dev_err(dev, "could not determine data mapping: %d\n", - bus_format); --- -2.43.0 - diff --git a/queue-6.12/drm-imx-parallel-display-drop-edid-override-support.patch b/queue-6.12/drm-imx-parallel-display-drop-edid-override-support.patch deleted file mode 100644 index ebf5df31f23..00000000000 --- a/queue-6.12/drm-imx-parallel-display-drop-edid-override-support.patch +++ /dev/null @@ -1,97 +0,0 @@ -From 8446ec5be2445171bb392c4d51ad46e10b17013d Mon Sep 17 00:00:00 2001 -From: Sasha Levin -Date: Sun, 2 Jun 2024 15:04:44 +0300 -Subject: drm/imx: parallel-display: drop edid override support - -From: Dmitry Baryshkov - -[ Upstream commit fe30fabf229f7542a10dd249079fdb83844a7dba ] - -None of the in-kernel DT files ever used edid override with the -fsl-imx-drm driver. In case the EDID needs to be specified manually, DRM -core allows one to either override it via the debugfs or to load it via -request_firmware by using DRM_LOAD_EDID_FIRMWARE. In all other cases -EDID and/or modes are to be provided as a part of the panel driver. - -Drop support for the edid property. - -Reviewed-by: Philipp Zabel -Acked-by: Rob Herring -Tested-by: Chris Healy -Tested-by: Philipp Zabel # on imx6q-nitrogen6x -Link: https://patchwork.freedesktop.org/patch/msgid/20240602-drm-imx-cleanup-v3-4-e549e2a43100@linaro.org -Signed-off-by: Dmitry Baryshkov -Stable-dep-of: f673055a4678 ("drm/imx: Add missing DRM_BRIDGE_CONNECTOR dependency") -Signed-off-by: Sasha Levin ---- - drivers/gpu/drm/imx/ipuv3/parallel-display.c | 17 ----------------- - 1 file changed, 17 deletions(-) - -diff --git a/drivers/gpu/drm/imx/ipuv3/parallel-display.c b/drivers/gpu/drm/imx/ipuv3/parallel-display.c -index 91d7808a2d8d3..4d17fb96e77c5 100644 ---- a/drivers/gpu/drm/imx/ipuv3/parallel-display.c -+++ b/drivers/gpu/drm/imx/ipuv3/parallel-display.c -@@ -16,7 +16,6 @@ - - #include - #include --#include - #include - #include - #include -@@ -34,7 +33,6 @@ struct imx_parallel_display_encoder { - - struct imx_parallel_display { - struct device *dev; -- const struct drm_edid *drm_edid; - u32 bus_format; - u32 bus_flags; - struct drm_display_mode mode; -@@ -62,11 +60,6 @@ static int imx_pd_connector_get_modes(struct drm_connector *connector) - if (num_modes > 0) - return num_modes; - -- if (imxpd->drm_edid) { -- drm_edid_connector_update(connector, imxpd->drm_edid); -- num_modes = drm_edid_connector_add_modes(connector); -- } -- - if (np) { - struct drm_display_mode *mode = drm_mode_create(connector->dev); - int ret; -@@ -312,9 +305,7 @@ static int imx_pd_probe(struct platform_device *pdev) - { - struct device *dev = &pdev->dev; - struct device_node *np = dev->of_node; -- const u8 *edidp; - struct imx_parallel_display *imxpd; -- int edid_len; - int ret; - u32 bus_format = 0; - const char *fmt; -@@ -329,10 +320,6 @@ static int imx_pd_probe(struct platform_device *pdev) - if (ret && ret != -ENODEV) - return ret; - -- edidp = of_get_property(np, "edid", &edid_len); -- if (edidp) -- imxpd->drm_edid = drm_edid_alloc(edidp, edid_len); -- - ret = of_property_read_string(np, "interface-pix-fmt", &fmt); - if (!ret) { - if (!strcmp(fmt, "rgb24")) -@@ -355,11 +342,7 @@ static int imx_pd_probe(struct platform_device *pdev) - - static void imx_pd_remove(struct platform_device *pdev) - { -- struct imx_parallel_display *imxpd = platform_get_drvdata(pdev); -- - component_del(&pdev->dev, &imx_pd_ops); -- -- drm_edid_free(imxpd->drm_edid); - } - - static const struct of_device_id imx_pd_dt_ids[] = { --- -2.43.0 - diff --git a/queue-6.12/drm-imx-parallel-display-switch-to-drm_panel_bridge.patch b/queue-6.12/drm-imx-parallel-display-switch-to-drm_panel_bridge.patch deleted file mode 100644 index d2074aa60c7..00000000000 --- a/queue-6.12/drm-imx-parallel-display-switch-to-drm_panel_bridge.patch +++ /dev/null @@ -1,124 +0,0 @@ -From 5033af6707f6d993fcd65b3b24d84829edc7fb53 Mon Sep 17 00:00:00 2001 -From: Sasha Levin -Date: Sun, 2 Jun 2024 15:04:48 +0300 -Subject: drm/imx: parallel-display: switch to drm_panel_bridge - -From: Dmitry Baryshkov - -[ Upstream commit 5f6e56d3319d2fd20d4c81b4f0212f4d09d7c1f1 ] - -Defer panel handling to drm_panel_bridge, unifying codepaths for the -panel and bridge cases. - -Reviewed-by: Philipp Zabel -Tested-by: Chris Healy -Tested-by: Philipp Zabel # on imx6q-nitrogen6x -Link: https://patchwork.freedesktop.org/patch/msgid/20240602-drm-imx-cleanup-v3-8-e549e2a43100@linaro.org -Signed-off-by: Dmitry Baryshkov -Stable-dep-of: f673055a4678 ("drm/imx: Add missing DRM_BRIDGE_CONNECTOR dependency") -Signed-off-by: Sasha Levin ---- - drivers/gpu/drm/imx/ipuv3/Kconfig | 3 +- - drivers/gpu/drm/imx/ipuv3/parallel-display.c | 36 +++++--------------- - 2 files changed, 10 insertions(+), 29 deletions(-) - -diff --git a/drivers/gpu/drm/imx/ipuv3/Kconfig b/drivers/gpu/drm/imx/ipuv3/Kconfig -index 6abcf9c833d44..f083d313d1d3a 100644 ---- a/drivers/gpu/drm/imx/ipuv3/Kconfig -+++ b/drivers/gpu/drm/imx/ipuv3/Kconfig -@@ -11,8 +11,9 @@ config DRM_IMX - - config DRM_IMX_PARALLEL_DISPLAY - tristate "Support for parallel displays" -- select DRM_PANEL - depends on DRM_IMX -+ select DRM_BRIDGE -+ select DRM_PANEL_BRIDGE - select VIDEOMODE_HELPERS - - config DRM_IMX_TVE -diff --git a/drivers/gpu/drm/imx/ipuv3/parallel-display.c b/drivers/gpu/drm/imx/ipuv3/parallel-display.c -index 4d17fb96e77c5..9ac2a94fa62be 100644 ---- a/drivers/gpu/drm/imx/ipuv3/parallel-display.c -+++ b/drivers/gpu/drm/imx/ipuv3/parallel-display.c -@@ -18,7 +18,6 @@ - #include - #include - #include --#include - #include - #include - -@@ -36,7 +35,6 @@ struct imx_parallel_display { - u32 bus_format; - u32 bus_flags; - struct drm_display_mode mode; -- struct drm_panel *panel; - struct drm_bridge *next_bridge; - }; - -@@ -56,10 +54,6 @@ static int imx_pd_connector_get_modes(struct drm_connector *connector) - struct device_node *np = imxpd->dev->of_node; - int num_modes; - -- num_modes = drm_panel_get_modes(imxpd->panel, connector); -- if (num_modes > 0) -- return num_modes; -- - if (np) { - struct drm_display_mode *mode = drm_mode_create(connector->dev); - int ret; -@@ -84,22 +78,6 @@ static int imx_pd_connector_get_modes(struct drm_connector *connector) - return num_modes; - } - --static void imx_pd_bridge_enable(struct drm_bridge *bridge) --{ -- struct imx_parallel_display *imxpd = bridge_to_imxpd(bridge); -- -- drm_panel_prepare(imxpd->panel); -- drm_panel_enable(imxpd->panel); --} -- --static void imx_pd_bridge_disable(struct drm_bridge *bridge) --{ -- struct imx_parallel_display *imxpd = bridge_to_imxpd(bridge); -- -- drm_panel_disable(imxpd->panel); -- drm_panel_unprepare(imxpd->panel); --} -- - static const u32 imx_pd_bus_fmts[] = { - MEDIA_BUS_FMT_RGB888_1X24, - MEDIA_BUS_FMT_BGR888_1X24, -@@ -237,8 +215,6 @@ static const struct drm_connector_helper_funcs imx_pd_connector_helper_funcs = { - }; - - static const struct drm_bridge_funcs imx_pd_bridge_funcs = { -- .enable = imx_pd_bridge_enable, -- .disable = imx_pd_bridge_disable, - .atomic_reset = drm_atomic_helper_bridge_reset, - .atomic_duplicate_state = drm_atomic_helper_bridge_duplicate_state, - .atomic_destroy_state = drm_atomic_helper_bridge_destroy_state, -@@ -315,10 +291,14 @@ static int imx_pd_probe(struct platform_device *pdev) - return -ENOMEM; - - /* port@1 is the output port */ -- ret = drm_of_find_panel_or_bridge(np, 1, 0, &imxpd->panel, -- &imxpd->next_bridge); -- if (ret && ret != -ENODEV) -- return ret; -+ imxpd->next_bridge = devm_drm_of_get_bridge(dev, np, 1, 0); -+ if (IS_ERR(imxpd->next_bridge)) { -+ ret = PTR_ERR(imxpd->next_bridge); -+ if (ret != -ENODEV) -+ return ret; -+ -+ imxpd->next_bridge = NULL; -+ } - - ret = of_property_read_string(np, "interface-pix-fmt", &fmt); - if (!ret) { --- -2.43.0 - diff --git a/queue-6.12/series b/queue-6.12/series index 21357158968..b342abe9cd3 100644 --- a/queue-6.12/series +++ b/queue-6.12/series @@ -191,12 +191,6 @@ udmabuf-change-folios-array-from-kmalloc-to-kvmalloc.patch udmabuf-fix-vmap_udmabuf-error-page-set.patch drm-imx-dcss-use-irqf_no_autoen-flag-in-request_irq.patch drm-imx-ipuv3-use-irqf_no_autoen-flag-in-request_irq.patch -drm-imx-parallel-display-drop-edid-override-support.patch -drm-imx-ldb-drop-custom-edid-support.patch -drm-imx-ldb-drop-custom-ddc-bus-support.patch -drm-imx-ldb-switch-to-drm_panel_bridge.patch -drm-imx-parallel-display-switch-to-drm_panel_bridge.patch -drm-imx-add-missing-drm_bridge_connector-dependency.patch drm-panel-nt35510-make-new-commands-optional.patch drm-v3d-address-race-condition-in-mmu-flush.patch drm-v3d-flush-the-mmu-before-we-supply-more-memory-t.patch