[openfirmware] r1442 - cpu/x86/pc/olpc/via

svn at openfirmware.info svn at openfirmware.info
Thu Oct 29 00:19:25 CET 2009


Author: wmb
Date: 2009-10-29 00:19:25 +0100 (Thu, 29 Oct 2009)
New Revision: 1442

Modified:
   cpu/x86/pc/olpc/via/fw.bth
   cpu/x86/pc/olpc/via/ioinit.fth
   cpu/x86/pc/olpc/via/romreset.bth
   cpu/x86/pc/olpc/via/usb.fth
Log:
OLPC trac 9423 - lengthen USB power off time during a reboot, thus
giving the power rail time to discharge enough to reset attached devices.


Modified: cpu/x86/pc/olpc/via/fw.bth
===================================================================
--- cpu/x86/pc/olpc/via/fw.bth	2009-10-28 21:51:49 UTC (rev 1441)
+++ cpu/x86/pc/olpc/via/fw.bth	2009-10-28 23:19:25 UTC (rev 1442)
@@ -268,6 +268,13 @@
          protect-fw
          ." Interacting" cr  hex interact
       then
+      \ This is a good place to turn on USB power.  It is about 2 seconds after
+      \ early startup, giving the USB power rail time to discharge and stay
+      \ off long enough to reset attached devices.  The total "off" time is
+      \ about 2.6 seconds - part of that is EC time - but the rail droops
+      \ slowly depending on what is plugged in.  It droops hardly at all
+      \ with nothing plugged in.
+      usb-power-on
    then
 ;
 warning !

Modified: cpu/x86/pc/olpc/via/ioinit.fth
===================================================================
--- cpu/x86/pc/olpc/via/ioinit.fth	2009-10-28 21:51:49 UTC (rev 1441)
+++ cpu/x86/pc/olpc/via/ioinit.fth	2009-10-28 23:19:25 UTC (rev 1442)
@@ -207,6 +207,15 @@
    64 05 05 mreg  \ Bump NULL-SOF valid time to 8 micro frames (04), Inhibit C4 state on USB 1.1 ISO activity (01)
    end-table
 
+[ifdef] xo-board
+   \ On a boot we turn off USB power to ensure that USB devices are reset
+   \ properly after a reboot.  A "stand-init" routine in via/usb.fth turns
+   \ it back on, after the implicit delay of uncompressing OFW and other
+   \ startup activities.  We must do this before selecting GPO10 below, else
+   \ the enable will start to float high before we can turn it off.
+   acpi-io-base h# 4c + port-rl  h# 400 bitclr  ax dx out  \ Turn off USB power
+[then]
+
    d# 17 0 devfunc  \ Bus control and power management
    40 44 44 mreg  \ Enable I/O Recovery time (40), Enable ports 4d0/4d1 for edge/level setting (04)
 [ifdef] xo-board
@@ -404,6 +413,5 @@
 
 \ acpi-io-base h# 26 + port-rb  h#  07 bitset  al dx out  \ Settings to support C4 state
 acpi-io-base h# 26 + port-rb  h#  06 bitset  al dx out  \ Settings to support C3 state
-acpi-io-base h# 4c + port-rl  h# 400 bitset  ax dx out  \ Set USB power high
 
 3 # io-apic-mmio-base #) byte mov    1 # io-apic-mmio-base h# 10 + #) mov  \ IO-APIC FSB delivery type

Modified: cpu/x86/pc/olpc/via/romreset.bth
===================================================================
--- cpu/x86/pc/olpc/via/romreset.bth	2009-10-28 21:51:49 UTC (rev 1441)
+++ cpu/x86/pc/olpc/via/romreset.bth	2009-10-28 23:19:25 UTC (rev 1442)
@@ -230,6 +230,8 @@
 
       fload ${BP}/cpu/x86/pc/olpc/via/startgfxrestore.fth  \ Display restoration
 
+      acpi-io-base h# 4c + port-rl  h# 400 bitset  ax dx out  \ Set USB power high
+
       cli
 
       facs-adr h# 18 + #) ax mov  ax ax or  0<>  if  \ X_Firmware_Waking_Vector

Modified: cpu/x86/pc/olpc/via/usb.fth
===================================================================
--- cpu/x86/pc/olpc/via/usb.fth	2009-10-28 21:51:49 UTC (rev 1441)
+++ cpu/x86/pc/olpc/via/usb.fth	2009-10-28 23:19:25 UTC (rev 1442)
@@ -100,6 +100,11 @@
 ;
 ' usb-quiet to go-hook
 
+\ Turn on USB power after a delay, to ensure that USB devices are reset correctly on boot
+: usb-power-off  ( -- )  h# 4c acpi-l@  h# 400 invert and  h# 4c acpi-l!  ;
+: usb-power-on   ( -- )  h# 4c acpi-l@  h# 400 or          h# 4c acpi-l!  ;
+: usb-power-cycle  ( -- )  usb-power-off d# 1000 ms usb-power-on  ;
+
 \ LICENSE_BEGIN
 \ Copyright (c) 2007 FirmWorks
 \ 




More information about the openfirmware mailing list