[OpenBIOS] r640 - cpu/x86/pc/olpc
svn at openbios.org
svn at openbios.org
Fri Sep 28 00:06:12 CEST 2007
Author: wmb
Date: 2007-09-28 00:06:12 +0200 (Fri, 28 Sep 2007)
New Revision: 640
Modified:
cpu/x86/pc/olpc/resume.bth
Log:
OLPC resume - added code to bitbang the DCON SMBUS, generating 8 clock
pulses with DATA held high, in order to clear the DCON in case it sees
a false start condition. This is per a suggestion from HiMax.
To enable this code, uncomment the "create reset-smbus-bitbang" line.
Modified: cpu/x86/pc/olpc/resume.bth
===================================================================
--- cpu/x86/pc/olpc/resume.bth 2007-09-27 17:25:13 UTC (rev 639)
+++ cpu/x86/pc/olpc/resume.bth 2007-09-27 22:06:12 UTC (rev 640)
@@ -20,7 +20,8 @@
\ This code will be copied to RAM at suspend-base
\ create save-display
-create reset-smbus
+\ create reset-smbus
+\ create reset-smbus-bitbang
\ create restore-usb-power
h# fe00.0000 constant gp-pa
@@ -336,6 +337,40 @@
ax lods ax dx xchg ax lods ax dx xchg h# c000.2001 wmsr \ Video output format
ax lods ax dx xchg ax lods ax dx xchg h# c000.2011 wmsr \ TFTP pad select
+[ifdef] reset-smbus-bitbang
+ \ GPIO15 is SMB_DATA
+ \ GPIO14 is SMB_CLOCK
+ h# c0000000 # ax mov \ Mask to clear SMB_DATA and SMB_CLOCK
+ h# 1010 # dx mov ax dx out \ Deselect OUT AUX1
+ h# 1014 # dx mov ax dx out \ Deselect OUT AUX2
+ h# 1034 # dx mov ax dx out \ Deselect IN AUX1
+ h# c000 # ax mov \ Mask to set SMB_DATA and SMB_CLOCK
+ h# 1000 # dx mov ax dx out \ Set output values to high
+ h# 1004 # dx mov ax dx out \ Set pins to output
+
+ h# 1000 # dx mov \ Output value register
+
+ 8 # cx mov \ Generate 8 low pulses on SMB_CLOCK
+ begin
+ \ 50 uS delay (slightly longer for GX)
+ rdtsc ax bx mov d# 50 d# 500 * # bx add
+ begin rdtsc bx ax sub 0>= until
+
+ h# 40000000 # ax mov ax dx out \ Clear SMB_CLOCK
+
+ \ 50 uS delay (slightly longer for GX)
+ rdtsc ax bx mov d# 50 d# 500 * # bx add
+ begin rdtsc bx ax sub 0>= until
+
+ h# 4000 # ax mov ax dx out \ Set SMB_CLOCK
+
+ loopa
+
+ \ 50 uS delay (slightly longer for GX)
+ rdtsc ax bx mov d# 50 d# 500 * # bx add
+ begin rdtsc bx ax sub 0>= until
+[then]
+
h# 1038 # dx mov \ Low bank - first contiguous GPIO register
h# 3c /l / # cx mov \ Register count (stop at lock register)
begin
More information about the OpenBIOS
mailing list