Author: pluto Date: Mon Sep 22 11:37:02 2008 GMT Module: SOURCES Tag: HEAD ---- Log message: - fix uvesafb_vbe_getmodes() for some broken bioses. - prevent black-screen-of-death when vga=.. is passed w/o any builtin vesa driver.
---- Files affected: SOURCES: kernel-vesa-upstream.patch (NONE -> 1.1) (NEW) ---- Diffs: ================================================================ Index: SOURCES/kernel-vesa-upstream.patch diff -u /dev/null SOURCES/kernel-vesa-upstream.patch:1.1 --- /dev/null Mon Sep 22 13:37:03 2008 +++ SOURCES/kernel-vesa-upstream.patch Mon Sep 22 13:36:57 2008 @@ -0,0 +1,87 @@ +http://lkml.org/lkml/2008/9/21/136 +uvesafb: don't treat mode info retrieval failures as errors + +http://lkml.org/lkml/2008/9/21/141 +fbdev: don't allow to set a video mode via vga= if FB doesn't support it + +diff --git a/drivers/video/uvesafb.c b/drivers/video/uvesafb.c +index 5074422..6c2d37f 100644 +--- a/drivers/video/uvesafb.c ++++ b/drivers/video/uvesafb.c +@@ -516,10 +516,12 @@ static int __devinit uvesafb_vbe_getmodes(struct uvesafb_ktask *task, + + err = uvesafb_exec(task); + if (err || (task->t.regs.eax & 0xffff) != 0x004f) { +- printk(KERN_ERR "uvesafb: Getting mode info block " ++ printk(KERN_WARNING "uvesafb: Getting mode info block " + "for mode 0x%x failed (eax=0x%x, err=%d)\n", + *mode, (u32)task->t.regs.eax, err); +- return -EINVAL; ++ mode++; ++ par->vbe_modes_cnt--; ++ continue; + } + + mib = task->buf; +@@ -548,7 +550,10 @@ static int __devinit uvesafb_vbe_getmodes(struct uvesafb_ktask *task, + mib->depth = mib->bits_per_pixel; + } + +- return 0; ++ if (par->vbe_modes_cnt > 0) ++ return 0; ++ else ++ return -EINVAL; + } + + /* +diff --git a/arch/x86/boot/video-vesa.c b/arch/x86/boot/video-vesa.c +index 401ad99..32a6045 100644 +--- a/arch/x86/boot/video-vesa.c ++++ b/arch/x86/boot/video-vesa.c +@@ -88,14 +88,11 @@ static int vesa_probe(void) + (vminfo.memory_layout == 4 || + vminfo.memory_layout == 6) && + vminfo.memory_planes == 1) { +-#ifdef CONFIG_FB ++#if FB_SUPPORTS_BOOT_VESA + /* Graphics mode, color, linear frame buffer + supported. Only register the mode if + if framebuffer is configured, however, +- 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. */ ++ otherwise the user will be left without a screen. */ + mi = GET_HEAP(struct mode_info, 1); + mi->mode = mode + VIDEO_FIRST_VESA; + mi->depth = vminfo.bpp; +@@ -134,9 +131,13 @@ static int vesa_set_mode(struct mode_info *mode) + /* It's a supported text mode */ + is_graphic = 0; + } else if ((vminfo.mode_attr & 0x99) == 0x99) { ++#if FB_SUPPORTS_BOOT_VESA + /* It's a graphics mode with linear frame buffer */ + is_graphic = 1; + vesa_mode |= 0x4000; /* Request linear frame buffer */ ++#else ++ return -1; ++#endif + } else { + return -1; /* Invalid mode */ + } +diff --git a/include/linux/screen_info.h b/include/linux/screen_info.h +index 1ee2c05..20fdc2f 100644 +--- a/include/linux/screen_info.h ++++ b/include/linux/screen_info.h +@@ -76,6 +76,10 @@ extern struct screen_info screen_info; + #define ORIG_VIDEO_LINES (screen_info.orig_video_lines) + #define ORIG_VIDEO_ISVGA (screen_info.orig_video_isVGA) + #define ORIG_VIDEO_POINTS (screen_info.orig_video_points) ++ ++#define FB_SUPPORTS_BOOT_VESA (defined(CONFIG_FB_VESA) || \ ++ defined(CONFIG_FB_SIS) || defined(CONFIG_FB_IMAC) || \ ++ defined(CONFIG_FB_INTEL)) + #endif /* __KERNEL__ */ + + #endif /* _SCREEN_INFO_H */ ================================================================ _______________________________________________ pld-cvs-commit mailing list [email protected] http://lists.pld-linux.org/mailman/listinfo/pld-cvs-commit
