TEST: issue a null command to the KBC as part of A20-flipping syslinux-3.70-pre19
authorH. Peter Anvin <hpa@zytor.com>
Wed, 18 Jun 2008 16:05:33 +0000 (09:05 -0700)
committerH. Peter Anvin <hpa@zytor.com>
Wed, 18 Jun 2008 16:05:33 +0000 (09:05 -0700)
UHCI supposedly wants a null command (0FFh) sent to the KBC as part of
the A20-flipping sequence.  See if that works for us.

core/bcopy32.inc
memdisk/memdisk16.asm

index 8f36d64..4ebbe3c 100644 (file)
@@ -413,7 +413,7 @@ a20_kbc:
 
                mov byte [cs:A20Type], A20_KBC  ; Starting KBC command sequence
 
-               mov al,0D1h                     ; Command write
+               mov al,0D1h                     ; Write output port
                out 064h, al
                call empty_8042_uncond
 
@@ -421,6 +421,13 @@ a20_kbc:
                out 060h, al
                call empty_8042_uncond
 
+               ; Apparently the UHCI spec assumes that A20 toggle
+               ; ends with a null command (assumed to be for sychronization?)
+               ; Put it here to see if it helps anything...
+               mov al,0FFh                     ; Null command
+               out 064h, al
+               call empty_8042_uncond
+
                ; Verify that A20 actually is enabled.  Do that by
                ; observing a word in low memory and the same word in
                ; the HMA until they are no longer coherent.  Note that
@@ -534,12 +541,19 @@ a20d_fast:
 ;
 a20d_kbc:
                call empty_8042_uncond
+
                mov al,0D1h
-               out 064h, al            ; Command write
+               out 064h, al            ; Write output port
                call empty_8042_uncond
+
                mov al,0DDh             ; A20 off
                out 060h, al
                call empty_8042_uncond
+
+               mov al,0FFh             ; Null command/synchronization
+               out 064h, al
+               call empty_8042_uncond
+
                ; Wait a bit for it to take effect
 a20d_snooze:
                push cx
index 692ed8b..d73ddc5 100644 (file)
@@ -294,7 +294,7 @@ a20_kbc:
 
                mov byte [A20Type], A20_KBC     ; Starting KBC command sequence
 
-               mov al,0D1h                     ; Command write
+               mov al,0D1h                     ; Write output port
                out 064h, al
                call empty_8042_uncond
 
@@ -302,6 +302,13 @@ a20_kbc:
                out 060h, al
                call empty_8042_uncond
 
+               ; Apparently the UHCI spec assumes that A20 toggle
+               ; ends with a null command (assumed to be for sychronization?)
+               ; Put it here to see if it helps anything...
+               mov al,0FFh                     ; Null command
+               out 064h, al
+               call empty_8042_uncond
+
                ; Verify that A20 actually is enabled.  Do that by
                ; observing a word in low memory and the same word in
                ; the HMA until they are no longer coherent.  Note that
@@ -424,12 +431,19 @@ a20d_fast:
 ;
 a20d_kbc:
                call empty_8042_uncond
+
                mov al,0D1h
-               out 064h, al            ; Command write
+               out 064h, al            ; Write output port
                call empty_8042_uncond
+
                mov al,0DDh             ; A20 off
                out 060h, al
                call empty_8042_uncond
+
+               mov al,0FFh             ; Null command/synchronization
+               out 064h, al
+               call empty_8042_uncond
+
                ; Wait a bit for it to take effect
 a20d_snooze:
                push cx