[PATCH v2 03/14] x86: provide platform-devices for boot-framebuffers
Hi Any comments on this? On Thu, Jul 4, 2013 at 2:25 PM, David Herrmann wrote: > 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: David Herrmann > --- > arch/x86/Kconfig | 26 +++ > arch/x86/include/asm/sysfb.h | 41 + > arch/x86/kernel/Makefile | 2 + > arch/x86/kernel/sysfb.c | 71 ++ > arch/x86/kernel/sysfb_simplefb.c | 95 > > 5 files changed, 235 insertions(+) > create mode 100644 arch/x86/include/asm/sysfb.h > create mode 100644 arch/x86/kernel/sysfb.c > create mode 100644 arch/x86/kernel/sysfb_simplefb.c > > diff --git a/arch/x86/Kconfig b/arch/x86/Kconfig > index fe120da..54a93a5 100644 > --- a/arch/x86/Kconfig > +++ b/arch/x86/Kconfig > @@ -2255,6 +2255,32 @@ config RAPIDIO > > source "drivers/rapidio/Kconfig" > > +config X86_SYSFB > + bool "Mark VGA/VBE/EFI FB as generic system framebuffer" > + help > + Firmwares often provide initial graphics framebuffers so the BIOS, > + bootloader or kernel can show basic video-output during boot for > + user-guidance and debugging. Historically, x86 used the VESA BIOS > + Extensions and EFI-framebuffers for this, which are mostly limited > + to x86. > + This option, if enabled, marks VGA/VBE/EFI framebuffers as generic > + framebuffers so the new generic system-framebuffer drivers can be > + used on x86. If the framebuffer is not compatible with the generic > + modes, it is adverticed as fallback platform framebuffer so legacy > + drivers like efifb, vesafb and uvesafb can pick it up. > + If this option is not selected, all system framebuffers are always > + marked as fallback platform framebuffers as usual. > + > + Note: Legacy fbdev drivers, including vesafb, efifb, uvesafb, will > + not be able to pick up generic system framebuffers if this option > + is selected. You are highly encouraged to enable simplefb as > + replacement if you select this option. simplefb can correctly deal > + with generic system framebuffers. But you should still keep vesafb > + and others enabled as fallback if a system framebuffer is > + incompatible with simplefb. > + > + If unsure, say Y. > + > endmenu > > > diff --git a/arch/x86/include/asm/sysfb.h b/arch/x86/include/asm/sysfb.h > new file mode 100644 > index 000..2395fe0 > --- /dev/null > +++ b/arch/x86/include/asm/sysfb.h > @@ -0,0 +1,41 @@ > +#ifndef _ARCH_X86_KERNEL_SYSFB_H > +#define _ARCH_X86_KERNEL_SYSFB_H > + > +/* > + * Generic System Framebuffers on x86 > + * Copyright (c) 2012-2013 David Herrmann > + * > + * This program is free software; you can redistribute it and/or modify it > + * under the terms of the GNU General Public License as published by the Free > + * Software Foundation; either version 2 of the License, or (at your option) > + * any later version. > + */ > + >
Re: [PATCH v2 03/14] x86: provide platform-devices for boot-framebuffers
Hi Any comments on this? On Thu, Jul 4, 2013 at 2:25 PM, David Herrmann dh.herrm...@gmail.com wrote: 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: David Herrmann dh.herrm...@gmail.com --- arch/x86/Kconfig | 26 +++ arch/x86/include/asm/sysfb.h | 41 + arch/x86/kernel/Makefile | 2 + arch/x86/kernel/sysfb.c | 71 ++ arch/x86/kernel/sysfb_simplefb.c | 95 5 files changed, 235 insertions(+) create mode 100644 arch/x86/include/asm/sysfb.h create mode 100644 arch/x86/kernel/sysfb.c create mode 100644 arch/x86/kernel/sysfb_simplefb.c diff --git a/arch/x86/Kconfig b/arch/x86/Kconfig index fe120da..54a93a5 100644 --- a/arch/x86/Kconfig +++ b/arch/x86/Kconfig @@ -2255,6 +2255,32 @@ config RAPIDIO source drivers/rapidio/Kconfig +config X86_SYSFB + bool Mark VGA/VBE/EFI FB as generic system framebuffer + help + Firmwares often provide initial graphics framebuffers so the BIOS, + bootloader or kernel can show basic video-output during boot for + user-guidance and debugging. Historically, x86 used the VESA BIOS + Extensions and EFI-framebuffers for this, which are mostly limited + to x86. + This option, if enabled, marks VGA/VBE/EFI framebuffers as generic + framebuffers so the new generic system-framebuffer drivers can be + used on x86. If the framebuffer is not compatible with the generic + modes, it is adverticed as fallback platform framebuffer so legacy + drivers like efifb, vesafb and uvesafb can pick it up. + If this option is not selected, all system framebuffers are always + marked as fallback platform framebuffers as usual. + + Note: Legacy fbdev drivers, including vesafb, efifb, uvesafb, will + not be able to pick up generic system framebuffers if this option + is selected. You are highly encouraged to enable simplefb as + replacement if you select this option. simplefb can correctly deal + with generic system framebuffers. But you should still keep vesafb + and others enabled as fallback if a system framebuffer is + incompatible with simplefb. + + If unsure, say Y. + endmenu diff --git a/arch/x86/include/asm/sysfb.h b/arch/x86/include/asm/sysfb.h new file mode 100644 index 000..2395fe0 --- /dev/null +++ b/arch/x86/include/asm/sysfb.h @@ -0,0 +1,41 @@ +#ifndef _ARCH_X86_KERNEL_SYSFB_H +#define _ARCH_X86_KERNEL_SYSFB_H + +/* + * Generic System Framebuffers on x86 + * Copyright (c) 2012-2013 David Herrmann dh.herrm...@gmail.com + * + * This program is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License as published by the Free + * Software Foundation; either version 2 of the License, or (at your option) + * any later version. + */ + +#include linux/kernel.h +#include linux/platform_data/simplefb.h
[PATCH v2 03/14] x86: provide platform-devices for boot-framebuffers
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: David Herrmann --- arch/x86/Kconfig | 26 +++ arch/x86/include/asm/sysfb.h | 41 + arch/x86/kernel/Makefile | 2 + arch/x86/kernel/sysfb.c | 71 ++ arch/x86/kernel/sysfb_simplefb.c | 95 5 files changed, 235 insertions(+) create mode 100644 arch/x86/include/asm/sysfb.h create mode 100644 arch/x86/kernel/sysfb.c create mode 100644 arch/x86/kernel/sysfb_simplefb.c diff --git a/arch/x86/Kconfig b/arch/x86/Kconfig index fe120da..54a93a5 100644 --- a/arch/x86/Kconfig +++ b/arch/x86/Kconfig @@ -2255,6 +2255,32 @@ config RAPIDIO source "drivers/rapidio/Kconfig" +config X86_SYSFB + bool "Mark VGA/VBE/EFI FB as generic system framebuffer" + help + Firmwares often provide initial graphics framebuffers so the BIOS, + bootloader or kernel can show basic video-output during boot for + user-guidance and debugging. Historically, x86 used the VESA BIOS + Extensions and EFI-framebuffers for this, which are mostly limited + to x86. + This option, if enabled, marks VGA/VBE/EFI framebuffers as generic + framebuffers so the new generic system-framebuffer drivers can be + used on x86. If the framebuffer is not compatible with the generic + modes, it is adverticed as fallback platform framebuffer so legacy + drivers like efifb, vesafb and uvesafb can pick it up. + If this option is not selected, all system framebuffers are always + marked as fallback platform framebuffers as usual. + + Note: Legacy fbdev drivers, including vesafb, efifb, uvesafb, will + not be able to pick up generic system framebuffers if this option + is selected. You are highly encouraged to enable simplefb as + replacement if you select this option. simplefb can correctly deal + with generic system framebuffers. But you should still keep vesafb + and others enabled as fallback if a system framebuffer is + incompatible with simplefb. + + If unsure, say Y. + endmenu diff --git a/arch/x86/include/asm/sysfb.h b/arch/x86/include/asm/sysfb.h new file mode 100644 index 000..2395fe0 --- /dev/null +++ b/arch/x86/include/asm/sysfb.h @@ -0,0 +1,41 @@ +#ifndef _ARCH_X86_KERNEL_SYSFB_H +#define _ARCH_X86_KERNEL_SYSFB_H + +/* + * Generic System Framebuffers on x86 + * Copyright (c) 2012-2013 David Herrmann + * + * This program is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License as published by the Free + * Software Foundation; either version 2 of the License, or (at your option) + * any later version. + */ + +#include +#include +#include + +#ifdef CONFIG_X86_SYSFB + +bool parse_mode(const struct screen_info *si, + struct simplefb_platform_data *mode); +int create_simplefb(const struct screen_info *si, + const struct simplefb_platform_data *mode); + +#else /*
[PATCH v2 03/14] x86: provide platform-devices for boot-framebuffers
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: David Herrmann dh.herrm...@gmail.com --- arch/x86/Kconfig | 26 +++ arch/x86/include/asm/sysfb.h | 41 + arch/x86/kernel/Makefile | 2 + arch/x86/kernel/sysfb.c | 71 ++ arch/x86/kernel/sysfb_simplefb.c | 95 5 files changed, 235 insertions(+) create mode 100644 arch/x86/include/asm/sysfb.h create mode 100644 arch/x86/kernel/sysfb.c create mode 100644 arch/x86/kernel/sysfb_simplefb.c diff --git a/arch/x86/Kconfig b/arch/x86/Kconfig index fe120da..54a93a5 100644 --- a/arch/x86/Kconfig +++ b/arch/x86/Kconfig @@ -2255,6 +2255,32 @@ config RAPIDIO source drivers/rapidio/Kconfig +config X86_SYSFB + bool Mark VGA/VBE/EFI FB as generic system framebuffer + help + Firmwares often provide initial graphics framebuffers so the BIOS, + bootloader or kernel can show basic video-output during boot for + user-guidance and debugging. Historically, x86 used the VESA BIOS + Extensions and EFI-framebuffers for this, which are mostly limited + to x86. + This option, if enabled, marks VGA/VBE/EFI framebuffers as generic + framebuffers so the new generic system-framebuffer drivers can be + used on x86. If the framebuffer is not compatible with the generic + modes, it is adverticed as fallback platform framebuffer so legacy + drivers like efifb, vesafb and uvesafb can pick it up. + If this option is not selected, all system framebuffers are always + marked as fallback platform framebuffers as usual. + + Note: Legacy fbdev drivers, including vesafb, efifb, uvesafb, will + not be able to pick up generic system framebuffers if this option + is selected. You are highly encouraged to enable simplefb as + replacement if you select this option. simplefb can correctly deal + with generic system framebuffers. But you should still keep vesafb + and others enabled as fallback if a system framebuffer is + incompatible with simplefb. + + If unsure, say Y. + endmenu diff --git a/arch/x86/include/asm/sysfb.h b/arch/x86/include/asm/sysfb.h new file mode 100644 index 000..2395fe0 --- /dev/null +++ b/arch/x86/include/asm/sysfb.h @@ -0,0 +1,41 @@ +#ifndef _ARCH_X86_KERNEL_SYSFB_H +#define _ARCH_X86_KERNEL_SYSFB_H + +/* + * Generic System Framebuffers on x86 + * Copyright (c) 2012-2013 David Herrmann dh.herrm...@gmail.com + * + * This program is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License as published by the Free + * Software Foundation; either version 2 of the License, or (at your option) + * any later version. + */ + +#include linux/kernel.h +#include linux/platform_data/simplefb.h +#include linux/screen_info.h + +#ifdef CONFIG_X86_SYSFB + +bool parse_mode(const struct screen_info *si, + struct simplefb_platform_data *mode); +int create_simplefb(const struct