| From 8a35201dace6851c7b10fabda1c660c4762e1ecf Mon Sep 17 00:00:00 2001 |
| From: Sasha Levin <sashal@kernel.org> |
| Date: Fri, 13 Jun 2025 14:28:38 +0200 |
| Subject: drm/fbdev-client: Skip DRM clients if modesetting is absent |
| |
| From: Thierry Reding <treding@nvidia.com> |
| |
| [ Upstream commit cce91f29c088ba902dd2abfc9c3216ba9a2fb2fe ] |
| |
| Recent generations of Tegra have moved the display components outside of |
| host1x, leading to a device that has no CRTCs attached and hence doesn't |
| support any of the modesetting functionality. When this is detected, the |
| driver clears the DRIVER_MODESET and DRIVER_ATOMIC flags for the device. |
| |
| Unfortunately, this causes the following errors during boot: |
| |
| [ 15.418958] ERR KERN drm drm: [drm] *ERROR* Failed to register client: -95 |
| [ 15.425311] WARNING KERN drm drm: [drm] Failed to set up DRM client; error -95 |
| |
| These originate from the fbdev client checking for the presence of the |
| DRIVER_MODESET flag and returning -EOPNOTSUPP. However, if a driver does |
| not support DRIVER_MODESET this is entirely expected and the error isn't |
| helpful. |
| |
| Prevent this misleading error message by setting up the DRM clients only |
| if modesetting is enabled. |
| |
| Changes in v2: |
| - use DRIVER_MODESET check to avoid registering any clients |
| |
| Reported-by: Jonathan Hunter <jonathanh@nvidia.com> |
| Signed-off-by: Thierry Reding <treding@nvidia.com> |
| Acked-by: Jon Hunter <jonathanh@nvidia.com> |
| Tested-by: Jon Hunter <jonathanh@nvidia.com> |
| Reviewed-by: Thomas Zimmermann <tzimmermann@suse.de> |
| Link: https://lore.kernel.org/r/20250613122838.2082334-1-thierry.reding@gmail.com |
| Signed-off-by: Dmitry Baryshkov <dmitry.baryshkov@oss.qualcomm.com> |
| Signed-off-by: Sasha Levin <sashal@kernel.org> |
| --- |
| drivers/gpu/drm/clients/drm_client_setup.c | 5 +++++ |
| 1 file changed, 5 insertions(+) |
| |
| diff --git a/drivers/gpu/drm/clients/drm_client_setup.c b/drivers/gpu/drm/clients/drm_client_setup.c |
| index e17265039ca8..e460ad354de2 100644 |
| --- a/drivers/gpu/drm/clients/drm_client_setup.c |
| +++ b/drivers/gpu/drm/clients/drm_client_setup.c |
| @@ -2,6 +2,7 @@ |
| |
| #include <drm/clients/drm_client_setup.h> |
| #include <drm/drm_device.h> |
| +#include <drm/drm_drv.h> |
| #include <drm/drm_fourcc.h> |
| #include <drm/drm_print.h> |
| |
| @@ -31,6 +32,10 @@ MODULE_PARM_DESC(active, |
| */ |
| void drm_client_setup(struct drm_device *dev, const struct drm_format_info *format) |
| { |
| + if (!drm_core_check_feature(dev, DRIVER_MODESET)) { |
| + drm_dbg(dev, "driver does not support mode-setting, skipping DRM clients\n"); |
| + return; |
| + } |
| |
| #ifdef CONFIG_DRM_FBDEV_EMULATION |
| if (!strcmp(drm_client_default, "fbdev")) { |
| -- |
| 2.39.5 |
| |