[openfirmware] [commit] r3015 - in dev/usb2/hcd: . ehci

repository service svn at openfirmware.info
Wed Jun 20 10:18:56 CEST 2012


Author: wmb
Date: Wed Jun 20 10:18:56 2012
New Revision: 3015
URL: http://tracker.coreboot.org/trac/openfirmware/changeset/3015

Log:
Reinstate the USB probing change, but fixed so it works with USB 1.1 devices.

Modified:
   dev/usb2/hcd/device.fth
   dev/usb2/hcd/ehci/probe.fth

Modified: dev/usb2/hcd/device.fth
==============================================================================
--- dev/usb2/hcd/device.fth	Tue Jun 19 04:18:40 2012	(r3014)
+++ dev/usb2/hcd/device.fth	Wed Jun 20 10:18:56 2012	(r3015)
@@ -392,26 +392,38 @@
 \ Executed in root hub node context
 : get-str-descriptors  ( -- )
    language					( lang )
-   dup dev-desc-buf d# 14 + c@ v$-desc-buf get-string to /v$-desc-buf
-   dup dev-desc-buf d# 15 + c@ d$-desc-buf get-string to /d$-desc-buf
-       dev-desc-buf d# 16 + c@ s$-desc-buf get-string to /s$-desc-buf
+   dup d# 14 dev-desc@ v$-desc-buf get-string to /v$-desc-buf
+   dup d# 15 dev-desc@ d$-desc-buf get-string to /d$-desc-buf
+       d# 16 dev-desc@ s$-desc-buf get-string to /s$-desc-buf
 ;
 
 \ Executed in root hub node context
 : refresh-desc-bufs  ( dev -- )
    set-target
-   dev-desc-buf 12 get-dev-desc to /dev-desc-buf		\ Refresh dev-desc-buf
-   cfg-desc-buf  0 get-cfg-desc to /cfg-desc-buf		\ Refresh cfg-desc-buf
+   dev-desc-buf d# 18 get-dev-desc to /dev-desc-buf		\ Refresh dev-desc-buf
+   cfg-desc-buf     0 get-cfg-desc to /cfg-desc-buf		\ Refresh cfg-desc-buf
    get-str-descriptors
 ;
 
-\ Executed in root hub node context
-: get-initial-descriptors  ( dev -- )
+: get-initial-dev-desc  ( dev -- )
+   dev-desc-buf d# 18 erase                     ( dev )
+
+   \ Until we know the size of the control endpoint, we must be
+   \ conservative about the transfer size.
    dev-desc-buf /pipe0 get-dev-desc  if		( dev )
-      dev-desc-buf 7 + c@ 0 rot di-maxpayload!	( )
+      7 dev-desc@                               ( dev maxtransfer )
+      tuck  0 rot di-maxpayload!	        ( maxtransfer )
+      d# 18 >=  if                              ( )
+         dev-desc-buf d# 18 get-dev-desc drop   ( )
+      then                                      ( )
    else						( dev )
       drop					( )
    then						( )
+;
+
+\ Executed in root hub node context
+: get-initial-descriptors  ( dev -- )
+   get-initial-dev-desc                         ( )
    cfg-desc-buf 0 get-cfg-desc to /cfg-desc-buf	( )
 ;
 
@@ -453,7 +465,15 @@
    tuck di-speed!			( port dev )
 
    0 set-target				( port dev )	\ Address it as device 0
-   over reset-port                	( port dev )	\ Some devices want to be reset here
+
+   \ Some devices (e.g. Lexar USB-to-SD and at least one USB FLASH drive) fail
+   \ on set-address unless you first read the device descriptor from address 0.
+   \ On other devices, this will fail, but it won't cause problems, and the
+   \ descriptor will be re-read later by make-device-node
+   dup get-initial-dev-desc             ( port dev )
+
+\  over reset-port                	( port dev )	\ Some devices want to be reset here
+
    dup set-address  if			( port dev )	\ Assign it usb addr dev
       ." Retrying with a delay" cr
       over reset-port  d# 5000 ms

Modified: dev/usb2/hcd/ehci/probe.fth
==============================================================================
--- dev/usb2/hcd/ehci/probe.fth	Tue Jun 19 04:18:40 2012	(r3014)
+++ dev/usb2/hcd/ehci/probe.fth	Wed Jun 20 10:18:56 2012	(r3015)
@@ -7,10 +7,10 @@
 0 value port-speed
 
 : make-root-hub-node  ( port -- )
-   \ Some devices (e.g. Lexar USB-to-SD) fail unless you get the cfg desc from device 0 first
    0 set-target	\ First address it as device 0	( port )
    port-speed 0 di-speed!     \ Use high speed for getting the device descriptor
-   dev-desc-buf h# 40 get-cfg-desc drop		( port )
+
+   dup reset-port				( port )
 
    port-speed					( port speed )
 



More information about the openfirmware mailing list