[PATCH v2 5/5] drm/omapdrm: Implement fbdev emulation as in-kernel client

Thomas Zimmermann tzimmermann at suse.de
Mon Apr 3 14:50:38 UTC 2023


Hi

Am 03.04.23 um 16:27 schrieb Emil Velikov:
> On Mon, 3 Apr 2023 at 11:41, Thomas Zimmermann <tzimmermann at suse.de> wrote:
>>
>> Move code from ad-hoc fbdev callbacks into DRM client functions
>> and remove the old callbacks. The functions instruct the client
>> to poll for changed output or restore the display. The DRM core
>> calls both, the old callbacks and the new client helpers, from
>> the same places. The new functions perform the same operation as
>> before, so there's no change in functionality.
>>
>> Replace all code that initializes or releases fbdev emulation
>> throughout the driver. Instead initialize the fbdev client by a
>> single call to omapdrm_fbdev_setup() after omapdrm has registered
>> its DRM device. As in most drivers, omapdrm's fbdev emulation now
>> acts like a regular DRM client.
>>
>> The fbdev client setup consists of the initial preparation and the
>> hot-plugging of the display. The latter creates the fbdev device
>> and sets up the fbdev framebuffer. The setup performs display
>> hot-plugging once. If no display can be detected, DRM probe helpers
>> re-run the detection on each hotplug event.
>>
>> A call to drm_dev_unregister() releases the client automatically.
>> No further action is required within omapdrm. If the fbdev
>> framebuffer has been fully set up, struct fb_ops.fb_destroy
>> implements the release. For partially initialized emulation, the
>> fbdev client reverts the initial setup.
>>
>> v2:
>>          * init drm_client in this patch (Tomi)
>>          * don't handle non-atomic modesetting (Tomi)
>>
>> Signed-off-by: Thomas Zimmermann <tzimmermann at suse.de>
>> Reviewed-by: Tomi Valkeinen <tomi.valkeinen at ideasonboard.com>
>> ---
>>   drivers/gpu/drm/omapdrm/omap_drv.c   |  11 +--
>>   drivers/gpu/drm/omapdrm/omap_fbdev.c | 132 +++++++++++++++++----------
>>   drivers/gpu/drm/omapdrm/omap_fbdev.h |   9 +-
>>   3 files changed, 90 insertions(+), 62 deletions(-)
>>
> 
>> +static void omap_fbdev_fb_destroy(struct fb_info *info)
>> +{
>> +       struct drm_fb_helper *helper = info->par;
>> +       struct drm_framebuffer *fb = helper->fb;
>> +       struct drm_gem_object *bo = drm_gem_fb_get_obj(fb, 0);
>> +       struct omap_fbdev *fbdev = to_omap_fbdev(helper);
>> +
>> +       DBG();
>> +
> 
> What a lovely little surprise. It's a pre-existing "feature", so let's
> ignore that for now ;-)

I have no idea what you're talking about. This code was in the original 
clean-up function. If it is not supposed to be here, I can remove it.

> 
>> +       drm_fb_helper_fini(helper);
>> +
>> +       omap_gem_unpin(bo);
>> +       drm_framebuffer_remove(fb);
>> +
>> +       drm_client_release(&helper->client);
>> +       drm_fb_helper_unprepare(helper);
>> +       kfree(fbdev);
>> +}
> 
> 
>> -void omap_fbdev_fini(struct drm_device *dev)
>> +static const struct drm_client_funcs omap_fbdev_client_funcs = {
>> +       .owner          = THIS_MODULE,
>> +       .unregister     = omap_fbdev_client_unregister,
>> +       .restore        = omap_fbdev_client_restore,
>> +       .hotplug        = omap_fbdev_client_hotplug,
> 
> AFAICT the fbdev client helpers above are identical to the generic
> ones in drm_fbdev_generic.c. Why aren't we reusing those but
> copy/pasting them in the driver?

The code in drm_fbdev_generic.c (and other fbdev files) might be 
shareable at some point when I know what exactly I need.  I already plan 
to move some of the damage handling from drm_fb_helper.c to 
drm_fbdev_generic.c and that will affect the helpers that are currently 
identical. There's little point in code sharing right now.

I know that the fbdev emulation is convoluted and confusing at times. 
It's the result of various redesigns and false starts. Things are 
getting better, though.

Best regards
Thomas

> 
> Thanks
> Emil

-- 
Thomas Zimmermann
Graphics Driver Developer
SUSE Software Solutions Germany GmbH
Maxfeldstr. 5, 90409 Nürnberg, Germany
(HRB 36809, AG Nürnberg)
Geschäftsführer: Ivo Totev
-------------- next part --------------
A non-text attachment was scrubbed...
Name: OpenPGP_signature
Type: application/pgp-signature
Size: 840 bytes
Desc: OpenPGP digital signature
URL: <https://lists.freedesktop.org/archives/dri-devel/attachments/20230403/146cea3c/attachment-0001.sig>


More information about the dri-devel mailing list