From: Robert Kaiser <rob@sysgo.de>
To: linux-kernel@vger.kernel.org
Subject: Re: setup.S: A20 enable sequence (once again)
Date: Mon, 6 Nov 2000 21:20:46 +0100 [thread overview]
Message-ID: <00110621255000.12156@rob> (raw)
In-Reply-To: <200011062003.VAA11818@rob.devdep.sysgo.de>
In-Reply-To: <200011062003.VAA11818@rob.devdep.sysgo.de>
On Mon, 06 Nov 2000 you wrote:
H. Peter Anvin wrote
> I just looked at the code, and it's worse than I first thought: if
> memory location 0x200 happens to contain 0x0001 when the kernel is
> entered, this code with loop indefinitely.
Ooops, you're right !
How about this one:
diff -ur linux-2.4.0-test10/arch/i386/boot/setup.S linux/arch/i386/boot/setup.S
--- linux-2.4.0-test10/arch/i386/boot/setup.S Mon Oct 30 23:44:29 2000
+++ linux/arch/i386/boot/setup.S Mon Nov 6 21:14:45 2000
@@ -631,6 +631,26 @@
# appropriate
# that was painless, now we enable a20
+# Try the "fast A20" version first:
+# You must preserve the other bits here. Otherwise embarrasing things
+# like laptops powering off on boot happen. Corrected version by Kira
+# Brown from Linux 2.2
+#
+ inb $0x92, %al #
+ orb $02, %al # "fast A20" version
+ andb $0xfe, %al # be sure not to reset CPU
+ outb %al, $0x92 # some chips have only this
+
+# See if that already did the job, skip keyboard controller
+# accesses if so: some boards do not have a keyboard controller.
+# These boards (especially if running on a slowish 386 EX)
+# can spend several *minutes* in silence, polling for the
+# non-existent keyboard controller.
+
+ movw $0x100,%cx # small retry count
+ call a20_check
+ jne a20_enabled
+
call empty_8042
movb $0xD1, %al # command write
@@ -641,20 +661,20 @@
outb %al, $0x60
call empty_8042
-#
-# You must preserve the other bits here. Otherwise embarrasing things
-# like laptops powering off on boot happen. Corrected version by Kira
-# Brown from Linux 2.2
-#
- inb $0x92, %al #
- orb $02, %al # "fast A20" version
- outb %al, $0x92 # some chips have only this
-
# wait until a20 really *is* enabled; it can take a fair amount of
# time on certain systems; Toshiba Tecras are known to have this
# problem. The memory location used here (0x200) is the int 0x80
# vector, which should be safe to use.
+a20_recheck:
+ movw $0xffff,%cx # large retry count
+ call a20_check
+ jne a20_enabled
+ jmp a20_recheck # loop until no longer aliased
+
+#
+# cx has retry count
+a20_check:
xorw %ax, %ax # segment 0x0000
movw %ax, %fs
decw %ax # segment 0xffff (HMA)
@@ -663,9 +683,11 @@
incw %ax # unused memory location <0xfff0
movw %ax, %fs:(0x200) # we use the "int 0x80" vector
cmpw %gs:(0x210), %ax # and its corresponding HMA addr
- je a20_wait # loop until no longer aliased
+ loopz a20_wait
+ ret
# make sure any possible coprocessor is properly reset..
+a20_enabled:
xorw %ax, %ax
outb %al, $0xf0
call delay
----------------------------------------------------------------
Robert Kaiser email: rkaiser@sysgo.de
SYSGO RTS GmbH
Am Pfaffenstein 14 phone: (49) 6136 9948-762
D-55270 Klein-Winternheim / Germany fax: (49) 6136 9948-10
-
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@vger.kernel.org
Please read the FAQ at http://www.tux.org/lkml/
next parent reply other threads:[~2000-11-06 20:26 UTC|newest]
Thread overview: 9+ messages / expand[flat|nested] mbox.gz Atom feed top
[not found] <200011062003.VAA11818@rob.devdep.sysgo.de>
2000-11-06 20:20 ` Robert Kaiser [this message]
2000-11-06 20:43 ` setup.S: A20 enable sequence (once again) H. Peter Anvin
2000-11-06 19:29 Robert Kaiser
2000-11-06 20:16 ` H. Peter Anvin
-- strict thread matches above, loose matches on Subject: below --
2000-11-06 16:50 Robert Kaiser
2000-11-06 19:10 ` H. Peter Anvin
2000-11-06 21:30 ` Alan Cox
2000-11-06 22:06 ` H. Peter Anvin
2000-11-06 19:56 ` H. Peter Anvin
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=00110621255000.12156@rob \
--to=rob@sysgo.de \
--cc=linux-kernel@vger.kernel.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox