Commit 21deacab authored by Zwane Mwaikambo's avatar Zwane Mwaikambo Committed by Greg Kroah-Hartman

x86: Don't probe for DDC on VBE1.2

[PATCH] x86: Don't probe for DDC on VBE1.2

VBE1.2 doesn't support function 15h (DDC) resulting in a 'hang' whilst
uncompressing kernel with some video cards. Make sure we check VBE version
before fiddling around with DDC.

http://bugzilla.kernel.org/show_bug.cgi?id=1458

Opened: 2003-10-30 09:12 Last update: 2007-02-13 22:03

Much thanks to Tobias Hain for help in testing and investigating the bug.
Tested on;

i386, Chips & Technologies 65548 VESA VBE 1.2
CONFIG_VIDEO_SELECT=Y
CONFIG_FIRMWARE_EDID=Y

Untested on x86_64.
Signed-off-by: default avatarZwane Mwaikambo <zwane@infradead.org>
Signed-off-by: default avatarAndi Kleen <ak@suse.de>
Cc: Chuck Ebbert <cebbert@redhat.com>
Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@suse.de>
parent d0769f55
...@@ -571,6 +571,16 @@ setr1: lodsw ...@@ -571,6 +571,16 @@ setr1: lodsw
jmp _m_s jmp _m_s
check_vesa: check_vesa:
#ifdef CONFIG_FIRMWARE_EDID
leaw modelist+1024, %di
movw $0x4f00, %ax
int $0x10
cmpw $0x004f, %ax
jnz setbad
movw 4(%di), %ax
movw %ax, vbe_version
#endif
leaw modelist+1024, %di leaw modelist+1024, %di
subb $VIDEO_FIRST_VESA>>8, %bh subb $VIDEO_FIRST_VESA>>8, %bh
movw %bx, %cx # Get mode information structure movw %bx, %cx # Get mode information structure
...@@ -1945,6 +1955,9 @@ store_edid: ...@@ -1945,6 +1955,9 @@ store_edid:
rep rep
stosl stosl
cmpw $0x0200, vbe_version # only do EDID on >= VBE2.0
jl no_edid
pushw %es # save ES pushw %es # save ES
xorw %di, %di # Report Capability xorw %di, %di # Report Capability
pushw %di pushw %di
...@@ -1987,6 +2000,7 @@ do_restore: .byte 0 # Screen contents altered during mode change ...@@ -1987,6 +2000,7 @@ do_restore: .byte 0 # Screen contents altered during mode change
svga_prefix: .byte VIDEO_FIRST_BIOS>>8 # Default prefix for BIOS modes svga_prefix: .byte VIDEO_FIRST_BIOS>>8 # Default prefix for BIOS modes
graphic_mode: .byte 0 # Graphic mode with a linear frame buffer graphic_mode: .byte 0 # Graphic mode with a linear frame buffer
dac_size: .byte 6 # DAC bit depth dac_size: .byte 6 # DAC bit depth
vbe_version: .word 0 # VBE bios version
# Status messages # Status messages
keymsg: .ascii "Press <RETURN> to see video modes available, " keymsg: .ascii "Press <RETURN> to see video modes available, "
......
...@@ -571,6 +571,16 @@ setr1: lodsw ...@@ -571,6 +571,16 @@ setr1: lodsw
jmp _m_s jmp _m_s
check_vesa: check_vesa:
#ifdef CONFIG_FIRMWARE_EDID
leaw modelist+1024, %di
movw $0x4f00, %ax
int $0x10
cmpw $0x004f, %ax
jnz setbad
movw 4(%di), %ax
movw %ax, vbe_version
#endif
leaw modelist+1024, %di leaw modelist+1024, %di
subb $VIDEO_FIRST_VESA>>8, %bh subb $VIDEO_FIRST_VESA>>8, %bh
movw %bx, %cx # Get mode information structure movw %bx, %cx # Get mode information structure
...@@ -1945,6 +1955,9 @@ store_edid: ...@@ -1945,6 +1955,9 @@ store_edid:
rep rep
stosl stosl
cmpw $0x0200, vbe_version # only do EDID on >= VBE2.0
jl no_edid
pushw %es # save ES pushw %es # save ES
xorw %di, %di # Report Capability xorw %di, %di # Report Capability
pushw %di pushw %di
...@@ -1987,6 +2000,7 @@ do_restore: .byte 0 # Screen contents altered during mode change ...@@ -1987,6 +2000,7 @@ do_restore: .byte 0 # Screen contents altered during mode change
svga_prefix: .byte VIDEO_FIRST_BIOS>>8 # Default prefix for BIOS modes svga_prefix: .byte VIDEO_FIRST_BIOS>>8 # Default prefix for BIOS modes
graphic_mode: .byte 0 # Graphic mode with a linear frame buffer graphic_mode: .byte 0 # Graphic mode with a linear frame buffer
dac_size: .byte 6 # DAC bit depth dac_size: .byte 6 # DAC bit depth
vbe_version: .word 0 # VBE bios version
# Status messages # Status messages
keymsg: .ascii "Press <RETURN> to see video modes available, " keymsg: .ascii "Press <RETURN> to see video modes available, "
......
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