Revert "fbdev: ignore VESA modes if framebuffer is disabled"
[firefly-linux-kernel-4.4.55.git] / arch / i386 / boot / video.S
index c9343c3a8082c4d1d2e8fe906c1a757e7fd918d4..8143c9516cb429ebdacf3e2fa3f2c7b10bec963e 100644 (file)
@@ -11,8 +11,6 @@
  *
  */
 
-#include <linux/config.h> /* for CONFIG_VIDEO_* */
-
 /* Enable autodetection of SVGA adapters and modes. */
 #undef CONFIG_VIDEO_SVGA
 
@@ -573,6 +571,16 @@ setr1:     lodsw
        jmp     _m_s
 
 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
        subb    $VIDEO_FIRST_VESA>>8, %bh
        movw    %bx, %cx                        # Get mode information structure
@@ -1929,7 +1937,7 @@ skip10:   movb    %ah, %al
        ret
 
 store_edid:
-#ifdef CONFIG_FB_FIRMWARE_EDID
+#ifdef CONFIG_FIRMWARE_EDID
        pushw   %es                             # just save all registers
        pushw   %ax
        pushw   %bx
@@ -1947,6 +1955,25 @@ store_edid:
        rep
        stosl
 
+       cmpw    $0x0200, vbe_version            # only do EDID on >= VBE2.0
+       jl      no_edid
+
+       pushw   %es                             # save ES
+       xorw    %di, %di                        # Report Capability
+       pushw   %di
+       popw    %es                             # ES:DI must be 0:0
+       movw    $0x4f15, %ax
+       xorw    %bx, %bx
+       xorw    %cx, %cx
+       int     $0x10
+       popw    %es                             # restore ES
+
+       cmpb    $0x00, %ah                      # call successful
+       jne     no_edid
+
+       cmpb    $0x4f, %al                      # function supported
+       jne     no_edid
+
        movw    $0x4f15, %ax                    # do VBE/DDC
        movw    $0x01, %bx
        movw    $0x00, %cx
@@ -1954,6 +1981,7 @@ store_edid:
        movw    $0x140, %di
        int     $0x10
 
+no_edid:
        popw    %di                             # restore all registers
        popw    %dx
        popw    %cx
@@ -1972,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
 graphic_mode:  .byte   0       # Graphic mode with a linear frame buffer
 dac_size:      .byte   6       # DAC bit depth
+vbe_version:   .word   0       # VBE bios version
 
 # Status messages
 keymsg:                .ascii  "Press <RETURN> to see video modes available, "