[RFC][PATCH 00/11] DRM driver for fbdev devices

Daniel Vetter daniel at ffwll.ch
Wed Mar 27 17:05:05 UTC 2019


On Wed, Mar 27, 2019 at 3:46 PM Thomas Zimmermann <tzimmermann at suse.de> wrote:
>
> Hi
>
> Am 27.03.19 um 10:41 schrieb Daniel Vetter:
> >> I use the current approach because it does not require modifications to
> >> DRM or fbdev. Not copying the fbdev driver code has the advantage that
> >> any fix that goes into fbdev is also used by fbdevdrm.
> >>
> >> OTOH, that has some problems. At least the event-reporting hooks appear
> >> to be fragile. You mentioned that you have patches for replacing it. I'd
> >> be happy to use something else. Filtering out generic and DRM-based
> >> drivers is also not optimal.
> >>
> >> Instead of adding the porting helpers to the DRM core, I'd suggest to
> >> add them to fbdevdrm. Fbdevdrm would have to duplicate some of the fbdev
> >> functionality and provide a replacement for register_framebuffer.
> >>
> >> Porting would then mean to
> >>
> >>  1) create a new DRM driver by copying fbdevdrm, and
> >>  2) copy the fbdev driver code to the new DRM driver and rename the
> >> function calls accordingly. At this point the new driver should already
> >> work to some extend.
> >>  3) Finally, do the refactoring and get it out of staging.
> >
> > Maybe the idea behind helpers isn't fully clear:
> >
> > https://blog.ffwll.ch/2016/12/midlayers-once-more-with-feeling.html
> >
> > The idea with helpers is essentially to have all the flexibility of
> > copypasting (you can refactor as you see fit), without having to
> > actually copypaste a lot of the code. That's why I think an fbdevdrm
> > helper suits, at least as long as we're actively transitioning. Worked
> > fairly well for the atomic transition at least.
>
> That's not really a problem from my side, but maybe we misunderstood
> each other.
>
> Modeling fbdevdrm after CMA helpers or simple drm would put it next to
> central DRM core and helper modules. That seems like an odd place for
> transitional helper functions that are supposed to be replaced by the
> actual DRM helpers.

That's exactly what we've done with the transitional atomic helpers
too. I think that's perfectly fine, as long as we put a solid
explanation next to the code what it is all about and how to use it.

> I don't want some kind of abstraction layer. I'm proposing a design like
> tinydrm, where a separate module offers helpers for fbdev drivers that
> are about to be converted.

We merged tinydrm because reworking it all into proper helpers took a
bit longer than what's reasonable to do out-of-tree. But it's
disappearing (the very last patch series is pending merge I think
now). It worked out well in the end, but I don't think it's a good
model to emulate. There's even a patch to rename the directory to make
it clear they're full drm drivers, just small one-file ones.

Having an entire driver sit in between the actual driver and drm core
feels a lot like a midlayer, and we try very hard to avoid those.
-Daniel

> The difference might not be that significant, but just a question of
> were the code is located.
>
>
> >>> - Improve the other helpers we have as needed - there's probably room for
> >>>   a simple ttm version, inspired by all these simple display chips (e.g.
> >>>   ast/cirrus/bochs/mga all solve similar problems like this).
> >>
> >> Makes sense, but appears to be unrelated.
> >
> > It's the main reason to have drivers in upstream - sharing code and
> > infrastructure.
>
> I meant that creating 'simple TTM' is unrelated to fbdevdrm. It would
> make sense in any case.
>
> Best regards
> Thomas
>
> At least for me the main benefit in porting a bunch
> > more fbdev drivers over isn't the old hw support (that hw is quietly
> > dying anyway, we just have to wait). But improving support for new hw
> > that fills similar niches, and making it easier for everyone else. Ofc
> > I'm not going to stop anyone who's going to do all the porting work,
> > but we can't realistically require it (e.g. legacy kms drivers also
> > don't support atomic, since simply not possible without rewriting the
> > driver).
> >
> > Cheers, Daniel
> >>
> >> Best regards
> >> Thomas
> >>
> >>> - Treat any such drivers as CONFIG_STAGING until they've become fully
> >>>   native, i.e. if no one bothers to convert them, we'll drop them again.
> >>>
> >>> The above is kinda similar in spirit to the transitional helpers we've
> >>> used to upgrade the big drivers from legacy kms to atomic.
> >>>
> >>> Thoughts?
> >>>
> >>> Cheers, Daniel
> >>>
> >>>>
> >>>>  drivers/gpu/drm/Kconfig                     |   2 +
> >>>>  drivers/gpu/drm/Makefile                    |   1 +
> >>>>  drivers/gpu/drm/fbdevdrm/Kconfig            |  13 +
> >>>>  drivers/gpu/drm/fbdevdrm/Makefile           |  11 +
> >>>>  drivers/gpu/drm/fbdevdrm/fbdevdrm_bo.c      | 276 ++++++++
> >>>>  drivers/gpu/drm/fbdevdrm/fbdevdrm_bo.h      |  58 ++
> >>>>  drivers/gpu/drm/fbdevdrm/fbdevdrm_device.c  |  96 +++
> >>>>  drivers/gpu/drm/fbdevdrm/fbdevdrm_device.h  |  55 ++
> >>>>  drivers/gpu/drm/fbdevdrm/fbdevdrm_drv.c     | 347 +++++++++
> >>>>  drivers/gpu/drm/fbdevdrm/fbdevdrm_format.c  | 441 ++++++++++++
> >>>>  drivers/gpu/drm/fbdevdrm/fbdevdrm_format.h  |  26 +
> >>>>  drivers/gpu/drm/fbdevdrm/fbdevdrm_modes.c   | 195 +++++
> >>>>  drivers/gpu/drm/fbdevdrm/fbdevdrm_modes.h   |  53 ++
> >>>>  drivers/gpu/drm/fbdevdrm/fbdevdrm_modeset.c | 746 ++++++++++++++++++++
> >>>>  drivers/gpu/drm/fbdevdrm/fbdevdrm_modeset.h |  38 +
> >>>>  drivers/gpu/drm/fbdevdrm/fbdevdrm_primary.c | 498 +++++++++++++
> >>>>  drivers/gpu/drm/fbdevdrm/fbdevdrm_primary.h |  27 +
> >>>>  drivers/gpu/drm/fbdevdrm/fbdevdrm_ttm.c     | 202 ++++++
> >>>>  drivers/gpu/drm/fbdevdrm/fbdevdrm_ttm.h     |  35 +
> >>>>  19 files changed, 3120 insertions(+)
> >>>>  create mode 100644 drivers/gpu/drm/fbdevdrm/Kconfig
> >>>>  create mode 100644 drivers/gpu/drm/fbdevdrm/Makefile
> >>>>  create mode 100644 drivers/gpu/drm/fbdevdrm/fbdevdrm_bo.c
> >>>>  create mode 100644 drivers/gpu/drm/fbdevdrm/fbdevdrm_bo.h
> >>>>  create mode 100644 drivers/gpu/drm/fbdevdrm/fbdevdrm_device.c
> >>>>  create mode 100644 drivers/gpu/drm/fbdevdrm/fbdevdrm_device.h
> >>>>  create mode 100644 drivers/gpu/drm/fbdevdrm/fbdevdrm_drv.c
> >>>>  create mode 100644 drivers/gpu/drm/fbdevdrm/fbdevdrm_format.c
> >>>>  create mode 100644 drivers/gpu/drm/fbdevdrm/fbdevdrm_format.h
> >>>>  create mode 100644 drivers/gpu/drm/fbdevdrm/fbdevdrm_modes.c
> >>>>  create mode 100644 drivers/gpu/drm/fbdevdrm/fbdevdrm_modes.h
> >>>>  create mode 100644 drivers/gpu/drm/fbdevdrm/fbdevdrm_modeset.c
> >>>>  create mode 100644 drivers/gpu/drm/fbdevdrm/fbdevdrm_modeset.h
> >>>>  create mode 100644 drivers/gpu/drm/fbdevdrm/fbdevdrm_primary.c
> >>>>  create mode 100644 drivers/gpu/drm/fbdevdrm/fbdevdrm_primary.h
> >>>>  create mode 100644 drivers/gpu/drm/fbdevdrm/fbdevdrm_ttm.c
> >>>>  create mode 100644 drivers/gpu/drm/fbdevdrm/fbdevdrm_ttm.h
> >>>>
> >>>> --
> >>>> 2.21.0
> >>>>
> >>>
> >>
> >> --
> >> Thomas Zimmermann
> >> Graphics Driver Developer
> >> SUSE Linux GmbH, Maxfeldstrasse 5, 90409 Nuernberg, Germany
> >> GF: Felix Imendörffer, Mary Higgins, Sri Rasiah
> >> HRB 21284 (AG Nürnberg)
> >>
> >
> >
>
> --
> Thomas Zimmermann
> Graphics Driver Developer
> SUSE Linux GmbH, Maxfeldstrasse 5, 90409 Nuernberg, Germany
> GF: Felix Imendörffer, Mary Higgins, Sri Rasiah
> HRB 21284 (AG Nürnberg)
>


-- 
Daniel Vetter
Software Engineer, Intel Corporation
+41 (0) 79 365 57 48 - http://blog.ffwll.ch


More information about the dri-devel mailing list