[Intel-gfx] [PATCH v5 5/7] drm/i915: Initialize fbdev DRM client with callback functions

Thomas Zimmermann tzimmermann at suse.de
Wed Nov 1 08:11:24 UTC 2023


Hi

Am 25.10.23 um 10:36 schrieb Hogander, Jouni:
> Hi Thomas, One minor comment inline below.

Thank you so much for taking the time to review these patches.

> 
> On Wed, 2023-09-27 at 12:26 +0200, Thomas Zimmermann wrote:
>> Initialize i915's fbdev client by giving an instance of struct
>> drm_client_funcs to drm_client_init(). Also clean up with
>> drm_client_release().
>>
>> Doing this in i915 prevents fbdev helpers from initializing and
>> releasing the client internally (see drm_fb_helper_init()). No
>> functional change yet; the client callbacks will be filled later.
>>
>> v2:
>>          * call drm_fb_helper_unprepare() in error handling (Jani)
>>          * fix typo in commit message (Sam)
>>
>> Signed-off-by: Thomas Zimmermann <tzimmermann at suse.de>
>> ---
>>   drivers/gpu/drm/i915/display/intel_fbdev.c | 43
>> ++++++++++++++++++++--
>>   1 file changed, 39 insertions(+), 4 deletions(-)
>>
>> diff --git a/drivers/gpu/drm/i915/display/intel_fbdev.c
>> b/drivers/gpu/drm/i915/display/intel_fbdev.c
>> index 2695c65b55ddc..d9e69471a782a 100644
>> --- a/drivers/gpu/drm/i915/display/intel_fbdev.c
>> +++ b/drivers/gpu/drm/i915/display/intel_fbdev.c
>> @@ -378,6 +378,7 @@ static void intel_fbdev_destroy(struct
>> intel_fbdev *ifbdev)
>>          if (ifbdev->fb)
>>                  drm_framebuffer_remove(&ifbdev->fb->base);
>>   
>> +       drm_client_release(&ifbdev->helper.client);
>>          drm_fb_helper_unprepare(&ifbdev->helper);
>>          kfree(ifbdev);
>>   }
>> @@ -671,6 +672,30 @@ void intel_fbdev_restore_mode(struct
>> drm_i915_private *dev_priv)
>>                  intel_fbdev_invalidate(ifbdev);
>>   }
>>   
>> +/*
>> + * Fbdev client and struct drm_client_funcs
>> + */
>> +
>> +static void intel_fbdev_client_unregister(struct drm_client_dev
>> *client)
>> +{ }
>> +
>> +static int intel_fbdev_client_restore(struct drm_client_dev *client)
>> +{
>> +       return 0;
>> +}
>> +
>> +static int intel_fbdev_client_hotplug(struct drm_client_dev *client)
>> +{
>> +       return 0;
>> +}
>> +
>> +static const struct drm_client_funcs intel_fbdev_client_funcs = {
>> +       .owner          = THIS_MODULE,
>> +       .unregister     = intel_fbdev_client_unregister,
>> +       .restore        = intel_fbdev_client_restore,
>> +       .hotplug        = intel_fbdev_client_hotplug,
>> +};
>> +
>>   int intel_fbdev_init(struct drm_device *dev)
>>   {
>>          struct drm_i915_private *dev_priv = to_i915(dev);
>> @@ -692,16 +717,26 @@ int intel_fbdev_init(struct drm_device *dev)
>>          else
>>                  ifbdev->preferred_bpp = ifbdev->helper.preferred_bpp;
>>   
>> +       ret = drm_client_init(dev, &ifbdev->helper.client, "i915-
>> fbdev",
> 
> We are currently working on new driver named as Xe. Due to this it

I've always thought that it's an entirely new driver. But I'm not really 
up-to-date. So the Xe driver is located under i915/ and also shares code 
with the existing i915 driver?

> might actually make sense to use intel-fbdev here rather than i915-
> fbdev.

That change could break user-space programs. See the comment at [1] and 
the commit 842470c4e211 ("Revert "drm/fb-helper: improve DRM fbdev 
emulation device names"").  I'd rather leave the string as it is.

Best regards
Thomas

[1] 
https://elixir.bootlin.com/linux/v6.6/source/drivers/gpu/drm/drm_fb_helper.c#L1755

> 
> BR,
> 
> Jouni Högander
> 
>> +                             &intel_fbdev_client_funcs);
>> +       if (ret)
>> +               goto err_drm_fb_helper_unprepare;
>> +
>>          ret = drm_fb_helper_init(dev, &ifbdev->helper);
>> -       if (ret) {
>> -               kfree(ifbdev);
>> -               return ret;
>> -       }
>> +       if (ret)
>> +               goto err_drm_client_release;
>>   
>>          dev_priv->display.fbdev.fbdev = ifbdev;
>>          INIT_WORK(&dev_priv->display.fbdev.suspend_work,
>> intel_fbdev_suspend_worker);
>>   
>>          return 0;
>> +
>> +err_drm_client_release:
>> +       drm_client_release(&ifbdev->helper.client);
>> +err_drm_fb_helper_unprepare:
>> +       drm_fb_helper_unprepare(&ifbdev->helper);
>> +       kfree(ifbdev);
>> +       return ret;
>>   }
>>   
>>   static void intel_fbdev_initial_config(void *data, async_cookie_t
>> cookie)
> 

-- 
Thomas Zimmermann
Graphics Driver Developer
SUSE Software Solutions Germany GmbH
Frankenstrasse 146, 90461 Nuernberg, Germany
GF: Ivo Totev, Andrew Myers, Andrew McDonald, Boudien Moerman
HRB 36809 (AG Nuernberg)
-------------- next part --------------
A non-text attachment was scrubbed...
Name: OpenPGP_signature.asc
Type: application/pgp-signature
Size: 840 bytes
Desc: OpenPGP digital signature
URL: <https://lists.freedesktop.org/archives/dri-devel/attachments/20231101/657a9ac6/attachment.sig>


More information about the dri-devel mailing list