From: Greg Kroah-Hartman Date: Tue, 20 May 2025 10:33:35 +0000 (+0200) Subject: 6.12-stable patches X-Git-Tag: v5.15.184~25 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=660c4e9b9c9b5f3357d4f68628a2e1a5d168da80;p=thirdparty%2Fkernel%2Fstable-queue.git 6.12-stable patches added patches: drm-fbdev-dma-support-struct-drm_driver.fbdev_probe.patch drm-panel-mipi-dbi-run-drm-default-client-setup.patch drm-tiny-panel-mipi-dbi-use-drm_client_setup_with_fourcc.patch --- diff --git a/queue-6.12/drm-fbdev-dma-support-struct-drm_driver.fbdev_probe.patch b/queue-6.12/drm-fbdev-dma-support-struct-drm_driver.fbdev_probe.patch new file mode 100644 index 0000000000..cb8a678f06 --- /dev/null +++ b/queue-6.12/drm-fbdev-dma-support-struct-drm_driver.fbdev_probe.patch @@ -0,0 +1,140 @@ +From stable+bounces-144883-greg=kroah.com@vger.kernel.org Mon May 19 18:34:21 2025 +From: Fabio Estevam +Date: Mon, 19 May 2025 13:32:28 -0300 +Subject: drm/fbdev-dma: Support struct drm_driver.fbdev_probe +To: stable@vger.kernel.org +Cc: tzimmermann@suse.de, javierm@redhat.com, gregkh@linuxfoundation.org, Fabio Estevam +Message-ID: <20250519163230.1303438-1-festevam@gmail.com> + +From: Thomas Zimmermann + +commit 8998eedda2539d2528cfebdc7c17eed0ad35b714 upstream. + +Rework fbdev probing to support fbdev_probe in struct drm_driver +and reimplement the old fb_probe callback on top of it. Provide an +initializer macro for struct drm_driver that sets the callback +according to the kernel configuration. + +This change allows the common fbdev client to run on top of DMA- +based DRM drivers. + +Signed-off-by: Thomas Zimmermann +Reviewed-by: Javier Martinez Canillas +Link: https://patchwork.freedesktop.org/patch/msgid/20240924071734.98201-6-tzimmermann@suse.de +Signed-off-by: Fabio Estevam +Signed-off-by: Greg Kroah-Hartman +--- + drivers/gpu/drm/drm_fbdev_dma.c | 60 ++++++++++++++++++++++++---------------- + include/drm/drm_fbdev_dma.h | 12 ++++++++ + 2 files changed, 48 insertions(+), 24 deletions(-) + +--- a/drivers/gpu/drm/drm_fbdev_dma.c ++++ b/drivers/gpu/drm/drm_fbdev_dma.c +@@ -106,6 +106,40 @@ static const struct fb_ops drm_fbdev_dma + static int drm_fbdev_dma_helper_fb_probe(struct drm_fb_helper *fb_helper, + struct drm_fb_helper_surface_size *sizes) + { ++ return drm_fbdev_dma_driver_fbdev_probe(fb_helper, sizes); ++} ++ ++static int drm_fbdev_dma_helper_fb_dirty(struct drm_fb_helper *helper, ++ struct drm_clip_rect *clip) ++{ ++ struct drm_device *dev = helper->dev; ++ int ret; ++ ++ /* Call damage handlers only if necessary */ ++ if (!(clip->x1 < clip->x2 && clip->y1 < clip->y2)) ++ return 0; ++ ++ if (helper->fb->funcs->dirty) { ++ ret = helper->fb->funcs->dirty(helper->fb, NULL, 0, 0, clip, 1); ++ if (drm_WARN_ONCE(dev, ret, "Dirty helper failed: ret=%d\n", ret)) ++ return ret; ++ } ++ ++ return 0; ++} ++ ++static const struct drm_fb_helper_funcs drm_fbdev_dma_helper_funcs = { ++ .fb_probe = drm_fbdev_dma_helper_fb_probe, ++ .fb_dirty = drm_fbdev_dma_helper_fb_dirty, ++}; ++ ++/* ++ * struct drm_fb_helper ++ */ ++ ++int drm_fbdev_dma_driver_fbdev_probe(struct drm_fb_helper *fb_helper, ++ struct drm_fb_helper_surface_size *sizes) ++{ + struct drm_client_dev *client = &fb_helper->client; + struct drm_device *dev = fb_helper->dev; + bool use_deferred_io = false; +@@ -148,6 +182,7 @@ static int drm_fbdev_dma_helper_fb_probe + goto err_drm_client_buffer_delete; + } + ++ fb_helper->funcs = &drm_fbdev_dma_helper_funcs; + fb_helper->buffer = buffer; + fb_helper->fb = fb; + +@@ -211,30 +246,7 @@ err_drm_client_buffer_delete: + drm_client_framebuffer_delete(buffer); + return ret; + } +- +-static int drm_fbdev_dma_helper_fb_dirty(struct drm_fb_helper *helper, +- struct drm_clip_rect *clip) +-{ +- struct drm_device *dev = helper->dev; +- int ret; +- +- /* Call damage handlers only if necessary */ +- if (!(clip->x1 < clip->x2 && clip->y1 < clip->y2)) +- return 0; +- +- if (helper->fb->funcs->dirty) { +- ret = helper->fb->funcs->dirty(helper->fb, NULL, 0, 0, clip, 1); +- if (drm_WARN_ONCE(dev, ret, "Dirty helper failed: ret=%d\n", ret)) +- return ret; +- } +- +- return 0; +-} +- +-static const struct drm_fb_helper_funcs drm_fbdev_dma_helper_funcs = { +- .fb_probe = drm_fbdev_dma_helper_fb_probe, +- .fb_dirty = drm_fbdev_dma_helper_fb_dirty, +-}; ++EXPORT_SYMBOL(drm_fbdev_dma_driver_fbdev_probe); + + /* + * struct drm_client_funcs +--- a/include/drm/drm_fbdev_dma.h ++++ b/include/drm/drm_fbdev_dma.h +@@ -4,12 +4,24 @@ + #define DRM_FBDEV_DMA_H + + struct drm_device; ++struct drm_fb_helper; ++struct drm_fb_helper_surface_size; + + #ifdef CONFIG_DRM_FBDEV_EMULATION ++int drm_fbdev_dma_driver_fbdev_probe(struct drm_fb_helper *fb_helper, ++ struct drm_fb_helper_surface_size *sizes); ++ ++#define DRM_FBDEV_DMA_DRIVER_OPS \ ++ .fbdev_probe = drm_fbdev_dma_driver_fbdev_probe ++ + void drm_fbdev_dma_setup(struct drm_device *dev, unsigned int preferred_bpp); + #else + static inline void drm_fbdev_dma_setup(struct drm_device *dev, unsigned int preferred_bpp) + { } ++ ++#define DRM_FBDEV_DMA_DRIVER_OPS \ ++ .fbdev_probe = NULL ++ + #endif + + #endif diff --git a/queue-6.12/drm-panel-mipi-dbi-run-drm-default-client-setup.patch b/queue-6.12/drm-panel-mipi-dbi-run-drm-default-client-setup.patch new file mode 100644 index 0000000000..c28804df42 --- /dev/null +++ b/queue-6.12/drm-panel-mipi-dbi-run-drm-default-client-setup.patch @@ -0,0 +1,67 @@ +From stable+bounces-144884-greg=kroah.com@vger.kernel.org Mon May 19 18:34:15 2025 +From: Fabio Estevam +Date: Mon, 19 May 2025 13:32:29 -0300 +Subject: drm/panel-mipi-dbi: Run DRM default client setup +To: stable@vger.kernel.org +Cc: tzimmermann@suse.de, javierm@redhat.com, gregkh@linuxfoundation.org, "Noralf Trønnes" , "Fabio Estevam" +Message-ID: <20250519163230.1303438-2-festevam@gmail.com> + +From: Thomas Zimmermann + +commit 1b0caa5f5ac20bcaf82fc89a5c849b21ce3bfdf6 uptream. + +Call drm_client_setup() to run the kernel's default client setup +for DRM. Set fbdev_probe in struct drm_driver, so that the client +setup can start the common fbdev client. + +v5: +- select DRM_CLIENT_SELECTION + +Signed-off-by: Thomas Zimmermann +Cc: "Noralf Trønnes" +Acked-by: Noralf Trønnes +Link: https://patchwork.freedesktop.org/patch/msgid/20240924071734.98201-32-tzimmermann@suse.de +Signed-off-by: Fabio Estevam +Signed-off-by: Greg Kroah-Hartman +--- + drivers/gpu/drm/tiny/Kconfig | 1 + + drivers/gpu/drm/tiny/panel-mipi-dbi.c | 4 +++- + 2 files changed, 4 insertions(+), 1 deletion(-) + +--- a/drivers/gpu/drm/tiny/Kconfig ++++ b/drivers/gpu/drm/tiny/Kconfig +@@ -67,6 +67,7 @@ config DRM_OFDRM + config DRM_PANEL_MIPI_DBI + tristate "DRM support for MIPI DBI compatible panels" + depends on DRM && SPI ++ select DRM_CLIENT_SELECTION + select DRM_KMS_HELPER + select DRM_GEM_DMA_HELPER + select DRM_MIPI_DBI +--- a/drivers/gpu/drm/tiny/panel-mipi-dbi.c ++++ b/drivers/gpu/drm/tiny/panel-mipi-dbi.c +@@ -15,6 +15,7 @@ + #include + + #include ++#include + #include + #include + #include +@@ -264,6 +265,7 @@ static const struct drm_driver panel_mip + .driver_features = DRIVER_GEM | DRIVER_MODESET | DRIVER_ATOMIC, + .fops = &panel_mipi_dbi_fops, + DRM_GEM_DMA_DRIVER_OPS_VMAP, ++ DRM_FBDEV_DMA_DRIVER_OPS, + .debugfs_init = mipi_dbi_debugfs_init, + .name = "panel-mipi-dbi", + .desc = "MIPI DBI compatible display panel", +@@ -388,7 +390,7 @@ static int panel_mipi_dbi_spi_probe(stru + + spi_set_drvdata(spi, drm); + +- drm_fbdev_dma_setup(drm, 0); ++ drm_client_setup(drm, NULL); + + return 0; + } diff --git a/queue-6.12/drm-tiny-panel-mipi-dbi-use-drm_client_setup_with_fourcc.patch b/queue-6.12/drm-tiny-panel-mipi-dbi-use-drm_client_setup_with_fourcc.patch new file mode 100644 index 0000000000..9f72f7d0e9 --- /dev/null +++ b/queue-6.12/drm-tiny-panel-mipi-dbi-use-drm_client_setup_with_fourcc.patch @@ -0,0 +1,56 @@ +From stable+bounces-144885-greg=kroah.com@vger.kernel.org Mon May 19 18:34:26 2025 +From: Fabio Estevam +Date: Mon, 19 May 2025 13:32:30 -0300 +Subject: drm/tiny: panel-mipi-dbi: Use drm_client_setup_with_fourcc() +To: stable@vger.kernel.org +Cc: tzimmermann@suse.de, javierm@redhat.com, gregkh@linuxfoundation.org, Fabio Estevam +Message-ID: <20250519163230.1303438-3-festevam@gmail.com> + +From: Fabio Estevam + +commit 9c1798259b9420f38f1fa1b83e3d864c3eb1a83e upstream. + +Since commit 559358282e5b ("drm/fb-helper: Don't use the preferred depth +for the BPP default"), RGB565 displays such as the CFAF240320X no longer +render correctly: colors are distorted and the content is shown twice +horizontally. + +This regression is due to the fbdev emulation layer defaulting to 32 bits +per pixel, whereas the display expects 16 bpp (RGB565). As a result, the +framebuffer data is incorrectly interpreted by the panel. + +Fix the issue by calling drm_client_setup_with_fourcc() with a format +explicitly selected based on the display's bits-per-pixel value. For 16 +bpp, use DRM_FORMAT_RGB565; for other values, fall back to the previous +behavior. This ensures that the allocated framebuffer format matches the +hardware expectations, avoiding color and layout corruption. + +Tested on a CFAF240320X display with an RGB565 configuration, confirming +correct colors and layout after applying this patch. + +Cc: stable@vger.kernel.org +Fixes: 559358282e5b ("drm/fb-helper: Don't use the preferred depth for the BPP default") +Signed-off-by: Fabio Estevam +Reviewed-by: Thomas Zimmermann +Reviewed-by: Javier Martinez Canillas +Signed-off-by: Thomas Zimmermann +Link: https://lore.kernel.org/r/20250417103458.2496790-1-festevam@gmail.com +Signed-off-by: Greg Kroah-Hartman +--- + drivers/gpu/drm/tiny/panel-mipi-dbi.c | 5 ++++- + 1 file changed, 4 insertions(+), 1 deletion(-) + +--- a/drivers/gpu/drm/tiny/panel-mipi-dbi.c ++++ b/drivers/gpu/drm/tiny/panel-mipi-dbi.c +@@ -390,7 +390,10 @@ static int panel_mipi_dbi_spi_probe(stru + + spi_set_drvdata(spi, drm); + +- drm_client_setup(drm, NULL); ++ if (bpp == 16) ++ drm_client_setup_with_fourcc(drm, DRM_FORMAT_RGB565); ++ else ++ drm_client_setup_with_fourcc(drm, DRM_FORMAT_RGB888); + + return 0; + } diff --git a/queue-6.12/series b/queue-6.12/series index f2514c2d95..8fe5755f20 100644 --- a/queue-6.12/series +++ b/queue-6.12/series @@ -141,3 +141,6 @@ accel-ivpu-refactor-functions-in-ivpu_fw_log.c.patch accel-ivpu-fix-fw-log-printing.patch iio-light-opt3001-fix-deadlock-due-to-concurrent-flag-access.patch bluetooth-btnxpuart-fix-kernel-panic-during-fw-release.patch +drm-fbdev-dma-support-struct-drm_driver.fbdev_probe.patch +drm-panel-mipi-dbi-run-drm-default-client-setup.patch +drm-tiny-panel-mipi-dbi-use-drm_client_setup_with_fourcc.patch