Commit 4d31a2b7 authored by Michal Januszewski's avatar Michal Januszewski Committed by Linus Torvalds

fbdev: ignore VESA modes if framebuffer does not support them

Currently, it is possible to set a graphics VESA mode at boot time via the
vga= parameter even when no framebuffer driver supporting this is
configured.  This could lead to the system booting with a black screen,
without a usable console.

Fix this problem by only allowing to set graphics modes at boot time if a
supporting framebuffer driver is configured.
Signed-off-by: default avatarMichal Januszewski <spock@gentoo.org>
Acked-by: default avatarKrzysztof Helt <krzysztof.h1@wp.pl>
Cc: "H. Peter Anvin" <hpa@zytor.com>
Signed-off-by: default avatarAndrew Morton <akpm@linux-foundation.org>
Signed-off-by: default avatarLinus Torvalds <torvalds@linux-foundation.org>
parent 5ab48409
...@@ -88,14 +88,11 @@ static int vesa_probe(void) ...@@ -88,14 +88,11 @@ static int vesa_probe(void)
(vminfo.memory_layout == 4 || (vminfo.memory_layout == 4 ||
vminfo.memory_layout == 6) && vminfo.memory_layout == 6) &&
vminfo.memory_planes == 1) { vminfo.memory_planes == 1) {
#ifdef CONFIG_FB #ifdef CONFIG_FB_BOOT_VESA_SUPPORT
/* Graphics mode, color, linear frame buffer /* Graphics mode, color, linear frame buffer
supported. Only register the mode if supported. Only register the mode if
if framebuffer is configured, however, if framebuffer is configured, however,
otherwise the user will be left without a screen. otherwise the user will be left without a screen. */
We don't require CONFIG_FB_VESA, however, since
some of the other framebuffer drivers can use
this mode-setting, too. */
mi = GET_HEAP(struct mode_info, 1); mi = GET_HEAP(struct mode_info, 1);
mi->mode = mode + VIDEO_FIRST_VESA; mi->mode = mode + VIDEO_FIRST_VESA;
mi->depth = vminfo.bpp; mi->depth = vminfo.bpp;
...@@ -133,10 +130,12 @@ static int vesa_set_mode(struct mode_info *mode) ...@@ -133,10 +130,12 @@ static int vesa_set_mode(struct mode_info *mode)
if ((vminfo.mode_attr & 0x15) == 0x05) { if ((vminfo.mode_attr & 0x15) == 0x05) {
/* It's a supported text mode */ /* It's a supported text mode */
is_graphic = 0; is_graphic = 0;
#ifdef CONFIG_FB_BOOT_VESA_SUPPORT
} else if ((vminfo.mode_attr & 0x99) == 0x99) { } else if ((vminfo.mode_attr & 0x99) == 0x99) {
/* It's a graphics mode with linear frame buffer */ /* It's a graphics mode with linear frame buffer */
is_graphic = 1; is_graphic = 1;
vesa_mode |= 0x4000; /* Request linear frame buffer */ vesa_mode |= 0x4000; /* Request linear frame buffer */
#endif
} else { } else {
return -1; /* Invalid mode */ return -1; /* Invalid mode */
} }
......
...@@ -76,6 +76,14 @@ config FB_DDC ...@@ -76,6 +76,14 @@ config FB_DDC
select I2C select I2C
default n default n
config FB_BOOT_VESA_SUPPORT
bool
depends on FB
default n
---help---
If true, at least one selected framebuffer driver can take advantage
of VESA video modes set at an early boot stage via the vga= parameter.
config FB_CFB_FILLRECT config FB_CFB_FILLRECT
tristate tristate
depends on FB depends on FB
...@@ -681,6 +689,7 @@ config FB_VESA ...@@ -681,6 +689,7 @@ config FB_VESA
select FB_CFB_FILLRECT select FB_CFB_FILLRECT
select FB_CFB_COPYAREA select FB_CFB_COPYAREA
select FB_CFB_IMAGEBLIT select FB_CFB_IMAGEBLIT
select FB_BOOT_VESA_SUPPORT
help help
This is the frame buffer device driver for generic VESA 2.0 This is the frame buffer device driver for generic VESA 2.0
compliant graphic cards. The older VESA 1.2 cards are not supported. compliant graphic cards. The older VESA 1.2 cards are not supported.
...@@ -1117,6 +1126,7 @@ config FB_INTEL ...@@ -1117,6 +1126,7 @@ config FB_INTEL
select FB_CFB_FILLRECT select FB_CFB_FILLRECT
select FB_CFB_COPYAREA select FB_CFB_COPYAREA
select FB_CFB_IMAGEBLIT select FB_CFB_IMAGEBLIT
select FB_BOOT_VESA_SUPPORT
help help
This driver supports the on-board graphics built in to the Intel This driver supports the on-board graphics built in to the Intel
830M/845G/852GM/855GM/865G/915G/915GM/945G/945GM/965G/965GM chipsets. 830M/845G/852GM/855GM/865G/915G/915GM/945G/945GM/965G/965GM chipsets.
...@@ -1469,6 +1479,7 @@ config FB_SIS ...@@ -1469,6 +1479,7 @@ config FB_SIS
select FB_CFB_FILLRECT select FB_CFB_FILLRECT
select FB_CFB_COPYAREA select FB_CFB_COPYAREA
select FB_CFB_IMAGEBLIT select FB_CFB_IMAGEBLIT
select FB_BOOT_VESA_SUPPORT
help help
This is the frame buffer device driver for the SiS 300, 315, 330 This is the frame buffer device driver for the SiS 300, 315, 330
and 340 series as well as XGI V3XT, V5, V8, Z7 graphics chipsets. and 340 series as well as XGI V3XT, V5, V8, Z7 graphics chipsets.
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment