On Sat, Apr 12, 2025 at 09:00:47AM +0200, Thierry Reding wrote:
> From: Thierry Reding <tred...@nvidia.com>
> 
> 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.
> 
> One solution would have been to conditionally call drm_client_setup()
> only if modesetting is supported. This seems a bit redundant, however,
> and could further complicate things if ever any DRM clients are added
> that do not rely on modesetting.
> 
> Instead, simply add an extra check to ignore this expected error and
> skip the fbdev client registration.
> 
> Reported-by: Jonathan Hunter <jonath...@nvidia.com>
> Signed-off-by: Thierry Reding <tred...@nvidia.com>
> ---
>  drivers/gpu/drm/clients/drm_fbdev_client.c | 6 +++++-
>  1 file changed, 5 insertions(+), 1 deletion(-)
> 
> diff --git a/drivers/gpu/drm/clients/drm_fbdev_client.c 
> b/drivers/gpu/drm/clients/drm_fbdev_client.c
> index f894ba52bdb5..8c8552ed912e 100644
> --- a/drivers/gpu/drm/clients/drm_fbdev_client.c
> +++ b/drivers/gpu/drm/clients/drm_fbdev_client.c
> @@ -152,7 +152,11 @@ int drm_fbdev_client_setup(struct drm_device *dev, const 
> struct drm_format_info
>  
>       ret = drm_client_init(dev, &fb_helper->client, "fbdev", 
> &drm_fbdev_client_funcs);
>       if (ret) {
> -             drm_err(dev, "Failed to register client: %d\n", ret);
> +             if (ret != -EOPNOTSUPP)
> +                     drm_err(dev, "Failed to register client: %d\n", ret);
> +             else
> +                     ret = 0;
> +

Wouldn't it be better to explicitly return 0 in the beginning of the
function if !drm_core_check_feature(dev, DRIVER_MODESET) ?

>               goto err_drm_client_init;
>       }
>  
> -- 
> 2.49.0
> 

-- 
With best wishes
Dmitry

Reply via email to