Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 8e92dc76 authored by H. Peter Anvin's avatar H. Peter Anvin
Browse files

x86, setup: Don't skip mode setting for the standard VGA modes



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: default avatarH. Peter Anvin <hpa@zytor.com>
LKML-Reference: <tip-*@git.kernel.org>
parent eb572a5c
Loading
Loading
Loading
Loading
+1 −8
Original line number Diff line number Diff line
@@ -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;