[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