[PATCH v2 00/14] Platform Framebuffers and SimpleDRM

David Herrmann dh.herrmann at gmail.com
Thu Jul 4 05:25:00 PDT 2013


Hi

This series changes the way we handle firmware framebuffers on x86 systems. On
other architectures the recently introduced "simple-framebuffer"
platform-devices provide a sane and proper way to handle firmware framebuffers.
So why not use it on x86, too?

This series adds x86 setup code to create proper platform-devices for firmware
framebuffers. For backwards compatibility, efi-fb, vesa-fb and platform-fb
devices are created and vesafb.c, efifb.c bind to the right device. We no
longer have vesafb and efifb load unconditionally on "screen_info".
If a fw-FB is compatible to "simple-framebuffer" devices, we create these
instead. We can then use the generic arch-independent simplefb.c on x86 without
any vesafb/efifb conflicts.

Last but not least, the series introduces SimpleDRM, which is basically simplefb
but as DRM driver with all the usual benefits. SimpleDRM is also the motivation
behind this series, but probably only of interest for the dri-devel
mailing-list.

* Patches 1 & 2 modify simplefb.c to accept framebuffer information via plain
  old platform_data and allow real hw drivers to remove simplefb on conflicts.

* Patches 3 & 4 add x86 setup code to create the right platform-device for any
  found firmware framebuffer.

* Patches 5 - 7 modify simplefb.c, vesafb.c, efifb.c to use these new devices
  and support common x86 formats.

* Patch 8 fixes fbcon to require console binding to avoid crashes during
  framebuffer hotplugging

* Patches 9-14: Introduce SimpleDRM

Changes in v2:
 - We now provide efi-framebuffer, vesa-framebuffer or platform-framebuffer
   legacy devices instead of just platform-framebuffer devs. This allows to
   load vesafb, efifb, .. simultaneously instead of only one driver.
 - vesafb and efifb now use the new platform devices
 - simplefb can now be unloaded via remove_conflicting_framebuffers()
 - efifb EFI quirks now moved to x86 setup
 - refactored x86 setup code to avoid #ifdefs
 - Many small fixes (thanks to Stephen and Andy)
 - Adjusted i915 and radeon to use new drm_kick_out_firmware()
 - fbcon now works with SimpleDRM (fixed the palette handling and def-flags)
 - fbdev unloading fixed (Patch #8)

Open issues:
 - How does static platform-device creation conflict with OF support on x86?
   If we want to support "simple-framebuffer" devices via OF, we currently
   require screen_info...isVGA to be 0 so sysfb.c does nothing. Is that
   guaranteed?
 - Should we try to move the offb.c DT parser to sysfb.c, too, so we can
   convert these devices to simple-framebuffers?
 - How can we integrate vga16fb.c into this? Bind to "platform-framebuffer"?
 - Is there any other generic driver that we might want to check? I haven't
   found more (except uvesafb, which always was separate, anyway).
 - What FB formats are common on x86 that we should add to SIMPLEFB_FORMATS?
   (other than ARGB/XRGB32)
 - Should we move default_vga detection from efifb.c to sysfb_efi.c, too? We
   could make the DMI table __init then.

I tested this (including DRM handover) with vesafb, efifb and simpledrm. It all
worked well without problems. More testing is highly welcome! Also feel free
to pickup individual fixes which don't directly depend on the series (eg. #1,
 #2, #7, #8).

Comments welcome!
Cheers
David

David Herrmann (14):
  fbdev: simplefb: add init through platform_data
  fbdev: simplefb: mark as fw and allocate apertures
  x86: provide platform-devices for boot-framebuffers
  x86: sysfb: move EFI quirks from efifb to sysfb
  fbdev: simplefb: add 32bit RGB formats
  fbdev: vesafb: bind to platform-framebuffer device
  fbdev: efifb: bind to efi-framebuffer
  fbdev: fbcon: select VT_HW_CONSOLE_BINDING
  drm: add SimpleDRM driver
  drm: simpledrm: add fbdev fallback support
  drm: add helpers to kick out firmware drivers
  drm: nouveau: kick out firmware drivers during probe
  drm/i915: use new drm_kick_out_firmware()
  drm/radeon: use new drm_kick_out_firmware()

 MAINTAINERS                                 |   8 +
 arch/x86/Kconfig                            |  26 ++
 arch/x86/include/asm/sysfb.h                |  98 ++++++++
 arch/x86/kernel/Makefile                    |   3 +
 arch/x86/kernel/sysfb.c                     |  74 ++++++
 arch/x86/kernel/sysfb_efi.c                 | 214 ++++++++++++++++
 arch/x86/kernel/sysfb_simplefb.c            |  95 ++++++++
 drivers/gpu/drm/Kconfig                     |   2 +
 drivers/gpu/drm/Makefile                    |   1 +
 drivers/gpu/drm/drm_pci.c                   |   1 +
 drivers/gpu/drm/drm_platform.c              |   1 +
 drivers/gpu/drm/drm_stub.c                  | 118 +++++++++
 drivers/gpu/drm/drm_usb.c                   |   1 +
 drivers/gpu/drm/i915/i915_dma.c             |   6 +-
 drivers/gpu/drm/nouveau/nouveau_drm.c       |  29 ++-
 drivers/gpu/drm/radeon/radeon_drv.c         |  28 ---
 drivers/gpu/drm/radeon/radeon_kms.c         |  30 +++
 drivers/gpu/drm/simpledrm/Kconfig           |  29 +++
 drivers/gpu/drm/simpledrm/Makefile          |   6 +
 drivers/gpu/drm/simpledrm/simpledrm.h       | 112 +++++++++
 drivers/gpu/drm/simpledrm/simpledrm_drv.c   | 227 +++++++++++++++++
 drivers/gpu/drm/simpledrm/simpledrm_fbdev.c | 153 ++++++++++++
 drivers/gpu/drm/simpledrm/simpledrm_main.c  | 363 ++++++++++++++++++++++++++++
 drivers/gpu/drm/simpledrm/simpledrm_mem.c   | 252 +++++++++++++++++++
 drivers/video/Kconfig                       |   5 +-
 drivers/video/console/Kconfig               |   3 +-
 drivers/video/efifb.c                       | 302 +++--------------------
 drivers/video/simplefb.c                    |  58 +++--
 drivers/video/vesafb.c                      |  55 ++---
 include/drm/drmP.h                          |  26 ++
 include/linux/platform_data/simplefb.h      |  58 +++++
 31 files changed, 2016 insertions(+), 368 deletions(-)
 create mode 100644 arch/x86/include/asm/sysfb.h
 create mode 100644 arch/x86/kernel/sysfb.c
 create mode 100644 arch/x86/kernel/sysfb_efi.c
 create mode 100644 arch/x86/kernel/sysfb_simplefb.c
 create mode 100644 drivers/gpu/drm/simpledrm/Kconfig
 create mode 100644 drivers/gpu/drm/simpledrm/Makefile
 create mode 100644 drivers/gpu/drm/simpledrm/simpledrm.h
 create mode 100644 drivers/gpu/drm/simpledrm/simpledrm_drv.c
 create mode 100644 drivers/gpu/drm/simpledrm/simpledrm_fbdev.c
 create mode 100644 drivers/gpu/drm/simpledrm/simpledrm_main.c
 create mode 100644 drivers/gpu/drm/simpledrm/simpledrm_mem.c
 create mode 100644 include/linux/platform_data/simplefb.h

-- 
1.8.3.2



More information about the dri-devel mailing list