summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorLuca Leonardo Scorcia <l.scorcia@gmail.com>2026-02-12 19:22:47 +0000
committerChun-Kuang Hu <chunkuang.hu@kernel.org>2026-03-22 13:03:09 +0000
commit86d5f60dea00a56ed3da9612028f930d78336adf (patch)
treeaae0f74310f183f5717e62e0d571b889f0be0ab9
parent76255024cadbe8c40462953f8193d2d78cd3b0ac (diff)
downloadlinux-86d5f60dea00a56ed3da9612028f930d78336adf.tar.gz
linux-86d5f60dea00a56ed3da9612028f930d78336adf.zip
drm/mediatek: Remove all conflicting aperture devices during probe
If a device has a framebuffer available it might be already used as display by simple-framebuffer or simpledrm when mediatek-drm is probed. This is actually helpful when porting to a new device as framebuffers are simple to setup in device trees and fbcon can be used to monitor the kernel boot process. When drm-mediatek loads a new fb device is initialized, however fbcon remains attached to the initial framebuffer which is no longer connected to the actual display - the early fb is never removed. We can gracefully transition from framebuffer handling to drm-managed display by calling aperture_remove_all_conflicting_devices before registering mediatek-drm. This takes care of unloading other fb devices/drivers and disconnects fbcon which then automatically reconnects to mediatekdrmfb as soon as it's available. The function is invoked just before drm_dev_register() to kick out the existing framebuffer as late as possible to reduce the time the screen is unresponsive. Signed-off-by: Luca Leonardo Scorcia <l.scorcia@gmail.com> Reviewed-by: CK Hu <ck.hu@mediatek.com> Link: https://patchwork.kernel.org/project/dri-devel/patch/20260212192605.263160-1-l.scorcia@gmail.com/ Signed-off-by: Chun-Kuang Hu <chunkuang.hu@kernel.org>
-rw-r--r--drivers/gpu/drm/mediatek/mtk_drm_drv.c5
1 files changed, 5 insertions, 0 deletions
diff --git a/drivers/gpu/drm/mediatek/mtk_drm_drv.c b/drivers/gpu/drm/mediatek/mtk_drm_drv.c
index a94c51a83261..02effd9fc698 100644
--- a/drivers/gpu/drm/mediatek/mtk_drm_drv.c
+++ b/drivers/gpu/drm/mediatek/mtk_drm_drv.c
@@ -4,6 +4,7 @@
* Author: YT SHEN <yt.shen@mediatek.com>
*/
+#include <linux/aperture.h>
#include <linux/component.h>
#include <linux/module.h>
#include <linux/of.h>
@@ -670,6 +671,10 @@ static int mtk_drm_bind(struct device *dev)
if (ret < 0)
goto err_free;
+ ret = aperture_remove_all_conflicting_devices(DRIVER_NAME);
+ if (ret < 0)
+ dev_err(dev, "Error %d while removing conflicting aperture devices", ret);
+
ret = drm_dev_register(drm, 0);
if (ret < 0)
goto err_deinit;