Skip to content

Commit

Permalink
x86, setup: Don't skip mode setting for the standard VGA modes
Browse files Browse the repository at this point in the history
The code for setting standard VGA modes probes for the current mode,
and skips the mode setting if the mode is 3 (color text 80x25) or 7
(mono text 80x25).  Unfortunately, there are BIOSes, including the
VMware BIOS, which report the previous mode if function 0F is queried
while the screen is in a VESA mode, and of course, nothing can help a
mode poked directly into the hardware.

As such, the safe option is to set the mode anyway, and only query to
see if we should be using mode 7 rather than mode 3.  People who don't
want any mode setting at all should probably use vga=0x0f04
(VIDEO_CURRENT_MODE).  It's possible that should be the kernel
default.

Reported-by Rene Arends <R.R.Arends@hro.nl>
Signed-off-by: H. Peter Anvin <hpa@zytor.com>
LKML-Reference: <tip-*@git.kernel.org>
  • Loading branch information
H. Peter Anvin committed Feb 19, 2010
1 parent eb572a5 commit 8e92dc7
Showing 1 changed file with 1 addition and 8 deletions.
9 changes: 1 addition & 8 deletions arch/x86/boot/video-vga.c
Original file line number Diff line number Diff line change
Expand Up @@ -42,22 +42,15 @@ static u8 vga_set_basic_mode(void)
{
struct biosregs ireg, oreg;
u16 ax;
u8 rows;
u8 mode;

initregs(&ireg);

/* Query current mode */
ax = 0x0f00;
intcall(0x10, &ireg, &oreg);
mode = oreg.al;

set_fs(0);
rows = rdfs8(0x484); /* rows minus one */

if ((oreg.ax == 0x5003 || oreg.ax == 0x5007) &&
(rows == 0 || rows == 24))
return mode;

if (mode != 3 && mode != 7)
mode = 3;

Expand Down

0 comments on commit 8e92dc7

Please sign in to comment.