• David Herrmann's avatar
    x86: provide platform-devices for boot-framebuffers · e3263ab3
    David Herrmann authored
    The current situation regarding boot-framebuffers (VGA, VESA/VBE, EFI) on
    x86 causes troubles when loading multiple fbdev drivers. The global
    "struct screen_info" does not provide any state-tracking about which
    drivers use the FBs. request_mem_region() theoretically works, but
    unfortunately vesafb/efifb ignore it due to quirks for broken boards.
    
    Avoid this by creating a platform framebuffer devices with a pointer
    to the "struct screen_info" as platform-data. Drivers can now create
    platform-drivers and the driver-core will refuse multiple drivers being
    active simultaneously.
    
    We keep the screen_info available for backwards-compatibility. Drivers
    can be converted in follow-up patches.
    
    Different devices are created for VGA/VESA/EFI FBs to allow multiple
    drivers to be loaded on distro kernels. We create:
     - "vesa-framebuffer" for VBE/VESA graphics FBs
     - "efi-framebuffer" for EFI FBs
     - "platform-framebuffer" for everything else
    This allows to load vesafb, efifb and others simultaneously and each
    picks up only the supported FB types.
    
    Apart from platform-framebuffer devices, this also introduces a
    compatibility option for "simple-framebuffer" drivers which recently got
    introduced for OF based systems. If CONFIG_X86_SYSFB is selected, we
    try to match the screen_info against a simple-framebuffer supported
    format. If we succeed, we create a "simple-framebuffer" device instead
    of a platform-framebuffer.
    This allows to reuse the simplefb.c driver across architectures and also
    to introduce a SimpleDRM driver. There is no need to have vesafb.c,
    efifb.c, simplefb.c and more just to have architecture specific quirks
    in their setup-routines.
    
    Instead, we now move the architecture specific quirks into x86-setup and
    provide a generic simple-framebuffer. For backwards-compatibility (if
    strange formats are used), we still allow vesafb/efifb to be loaded
    simultaneously and pick up all remaining devices.
    Signed-off-by: default avatarDavid Herrmann <dh.herrmann@gmail.com>
    Link: http://lkml.kernel.org/r/1375445127-15480-4-git-send-email-dh.herrmann@gmail.comTested-by: default avatarStephen Warren <swarren@nvidia.com>
    Signed-off-by: default avatarH. Peter Anvin <hpa@linux.intel.com>
    e3263ab3
sysfb.c 2.38 KB