On Sat, Apr 26, 2025 at 08:52:40AM +0300, Dmitry Baryshkov wrote:
> 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) ?

It'd return a bit earlier in that case, so there's that. On the other
hand I think it becomes a little less clear what's going on. In the
above, we already have the appropriate check in a central location and
we reuse that here.

I don't feel very strongly either way, though.

Thierry

> 
> >             goto err_drm_client_init;
> >     }
> >  
> > -- 
> > 2.49.0
> > 
> 
> -- 
> With best wishes
> Dmitry

Attachment: signature.asc
Description: PGP signature

Reply via email to