[PATCH v2 00/14] Platform Framebuffers and SimpleDRM

From: David Herrmann
Date: Thu Jul 04 2013 - 08:26:49 EST


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

--
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at http://vger.kernel.org/majordomo-info.html
Please read the FAQ at http://www.tux.org/lkml/