[openfirmware] r1311 - cpu/x86/pc/olpc/via
svn at openfirmware.info
svn at openfirmware.info
Thu Aug 20 09:58:25 CEST 2009
Author: wmb
Date: 2009-08-20 09:58:25 +0200 (Thu, 20 Aug 2009)
New Revision: 1311
Modified:
cpu/x86/pc/olpc/via/boardrev.fth
cpu/x86/pc/olpc/via/startcominit.fth
cpu/x86/pc/olpc/via/suspend.fth
Log:
Via - moved the atest check for serial enabling into the assembly language startup code.
Modified: cpu/x86/pc/olpc/via/boardrev.fth
===================================================================
--- cpu/x86/pc/olpc/via/boardrev.fth 2009-08-20 06:43:38 UTC (rev 1310)
+++ cpu/x86/pc/olpc/via/boardrev.fth 2009-08-20 07:58:25 UTC (rev 1311)
@@ -44,11 +44,6 @@
\ Cache the board revision in CMOS RAM so the early startup code
\ can get it without having to wait for the EC.
board-revision dup h# 82 cmos! invert h# 83 cmos!
-
- \ Force the serial port back on for A-test, even when SERIAL_EN is
- \ not asserted, because many developers use serial on A-test systems
- \ and it is not easy to jumper SERIAL_EN on A-test.
- atest? if enable-uart then
;
warning !
Modified: cpu/x86/pc/olpc/via/startcominit.fth
===================================================================
--- cpu/x86/pc/olpc/via/startcominit.fth 2009-08-20 06:43:38 UTC (rev 1310)
+++ cpu/x86/pc/olpc/via/startcominit.fth 2009-08-20 07:58:25 UTC (rev 1311)
@@ -21,18 +21,65 @@
h# 80 # al or al bl mov \ Set south module pad share enable
78 3c4 port-wb 3c5 # dx mov bl al mov al dx out
- \ If the SERIAL_EN jumper is installed, routing the external pin to
- \ the UART; otherwise leave it connected to the VCP port.
+ \ If the SERIAL_EN jumper is installed, or if the machine is an A-test,
+ \ route the external pin to the UART; otherwise leave it connected to the VCP port.
acpi-io-base 48 + port-rb h# 10 # al test 0= if
+ \ SERIAL_EN is installed, so put the A-test ID in AL so we can check
+ \ a single condition at the end of the logic.
+ h# d0 # al mov
+ else
+ \ SERIAL_EN is not installed. Determine the board ID.
+ \ First we check for a cached board ID in CMOS RAM, to avoid the
+ \ possibly time-consuming operation of asking the EC.
+
+ \ To read the high half of CMOS RAM we must enable it
d# 17 0 devfunc
+ 4e 18 18 mreg \ Enable ports 74/75 for CMOS RAM access - 10 res be like Phx
+ end-table
+
+ h# 83 # al mov al h# 74 # out h# 75 # al in \ check byte - should be ~board-id
+ al ah mov ah not \ ~check byte in AH
+ h# 82 # al mov al h# 74 # out h# 75 # al in \ board-id in AL
+
+ al ah cmp 0<> if \ If the check byte matches, fall through with the ID in AL
+
+ \ If check byte is wrong, we have to ask the EC
+
+ h# 6c # al in \ EC status register
+ 2 # al and \ input buffer full bit
+ 0<> if \ If the bit is nonzero, we can't send a command yet
+ \ We don't wait for the EC; if it is busy we assume B-test
+ \ It shouldn't be busy at this point because we haven't tried to talk to it yet
+ h# d1 # al mov \ EC busy - report B-test
+ else
+ h# 19 # al mov al h# 6c # out \ Send board ID command to EC
+ d# 200 # cx mov \ Wait up to 200 mS for the EC to respond
+ begin
+ d# 1000 wait-us \ 1 mS delay so we don't pound on the EC
+ h# 6c # al in \ Get status register
+ 3 # al and \ Check for output buffer full
+ 1 # al cmp
+ loopne
+ <> if \ Not equal means timeout
+ h# d1 # al mov \ EC timeout - report B-test
+ else
+ h# 68 # al in \ Get board ID byte from EC
+ then
+ then
+ then
+ then
+
+ \ Now AL contains the board ID or a surrogate that will cause the
+ \ desired result for the test below.
+ h# d1 # al cmp u< if
+ d# 17 0 devfunc
\ The following is for UART on VCP port
46 c0 40 mreg
\ The following is for UART on DVP port
\ 46 c0 c0 mreg
end-table
-
then
d# 17 0 devfunc
Modified: cpu/x86/pc/olpc/via/suspend.fth
===================================================================
--- cpu/x86/pc/olpc/via/suspend.fth 2009-08-20 06:43:38 UTC (rev 1310)
+++ cpu/x86/pc/olpc/via/suspend.fth 2009-08-20 07:58:25 UTC (rev 1311)
@@ -31,8 +31,6 @@
sp@ 4 - h# f0000 ax-call \ sp@ 4 - is a dummy pdir-va location
[then]
\ sum-forth
-
- atest? if enable-uart then ukey? if ukey drop then
;
: kb-suspend ( -- )
sci-wakeup
More information about the openfirmware
mailing list