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:…
[View More]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 )
[View Less]
Author: quozl
Date: Tue Jun 19 04:17:19 2012
New Revision: 3013
URL: http://tracker.coreboot.org/trac/openfirmware/changeset/3013
Log:
OLPC - dev/usb2, revert svn 3011 as it broke production use of USB scanners, reproduced also by me.
Modified:
dev/usb2/hcd/device.fth
dev/usb2/hcd/ehci/probe.fth
Modified: dev/usb2/hcd/device.fth
==============================================================================
--- dev/usb2/hcd/device.fth Sat Jun 16 05:00:26 2012 (r3012)
+++ dev/usb2/hcd/…
[View More]device.fth Tue Jun 19 04:17:19 2012 (r3013)
@@ -391,30 +391,33 @@
\ Executed in root hub node context
: get-str-descriptors ( -- )
- language ( lang )
- 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
+ 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
;
\ Executed in root hub node context
: refresh-desc-bufs ( dev -- )
set-target
- 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
+ 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
get-str-descriptors
;
\ Executed in root hub node context
-: get-initial-descriptors ( -- )
- \ Re-read the full device descriptor to pick up the vendor info
- dev-desc-buf d# 18 get-dev-desc drop ( )
- cfg-desc-buf 0 get-cfg-desc to /cfg-desc-buf ( )
+: get-initial-descriptors ( dev -- )
+ dev-desc-buf /pipe0 get-dev-desc if ( dev )
+ dev-desc-buf 7 + c@ 0 rot di-maxpayload! ( )
+ else ( dev )
+ drop ( )
+ then ( )
+ cfg-desc-buf 0 get-cfg-desc to /cfg-desc-buf ( )
;
\ Executed in hub node context (root hub or subordinate hub) - creates new child nodes via (make-device-node)
: make-device-node ( port dev -- )
- " get-initial-descriptors" my-self $call-method ( port dev )
+ dup " get-initial-descriptors" my-self $call-method ( port dev )
/cfg-desc-buf 0= if 2drop exit then ( port dev )
asso-class? if 1 else cfg-desc-buf 4 + c@ then ( port dev #intf )
0 ?do ( port dev )
@@ -440,16 +443,6 @@
then ( port )
;
-: get-initial-dev-desc ( dev -- )
- dev-desc-buf d# 18 erase ( dev )
- dev-desc-buf d# 64 get-dev-desc 0= if ( dev )
- dev-desc-buf /pipe0 get-dev-desc 0= if ( dev )
- drop exit
- then
- then
- 7 dev-desc@ 0 rot di-maxpayload! ( )
-;
-
\ Executed in the root hub node context
: setup-new-node ( port speed hub-port hub-dev -- true | port dev xt false )
\ Allocate device number
@@ -460,11 +453,7 @@
tuck di-speed! ( port dev )
0 set-target ( port dev ) \ Address it as device 0
-
- \ 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.
- 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 Sat Jun 16 05:00:26 2012 (r3012)
+++ dev/usb2/hcd/ehci/probe.fth Tue Jun 19 04:17:19 2012 (r3013)
@@ -7,16 +7,18 @@
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
- dup reset-port ( port )
+ dev-desc-buf h# 40 get-cfg-desc drop ( port )
+
port-speed ( port speed )
\ hub-port and hub-dev route USB 1.1 transactions through USB 2.0 hubs
over get-hub20-port get-hub20-dev ( port speed hub-port hub-dev )
\ Execute setup-new-node in root context and make-device-node in hub node context
- setup-new-node if execute then ( )
+ setup-new-node if execute then ( )
;
0 instance value probe-error? \ Back channel to selftest
[View Less]
Author: quozl
Date: Sat Jun 16 04:13:21 2012
New Revision: 3011
URL: http://tracker.coreboot.org/trac/openfirmware/changeset/3011
Log:
OLPC - dev/usb2, read the device descriptor after reset and before set-address, instead of after set-address. Erase the device descriptor buffer before reading. #11931
Modified:
dev/usb2/hcd/device.fth
dev/usb2/hcd/ehci/probe.fth
Modified: dev/usb2/hcd/device.fth
==============================================================================
--- dev/…
[View More]usb2/hcd/device.fth Fri Jun 15 03:58:55 2012 (r3010)
+++ dev/usb2/hcd/device.fth Sat Jun 16 04:13:21 2012 (r3011)
@@ -391,33 +391,30 @@
\ 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
+ language ( lang )
+ 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 -- )
- dev-desc-buf /pipe0 get-dev-desc if ( dev )
- dev-desc-buf 7 + c@ 0 rot di-maxpayload! ( )
- else ( dev )
- drop ( )
- then ( )
- cfg-desc-buf 0 get-cfg-desc to /cfg-desc-buf ( )
+: get-initial-descriptors ( -- )
+ \ Re-read the full device descriptor to pick up the vendor info
+ dev-desc-buf d# 18 get-dev-desc drop ( )
+ cfg-desc-buf 0 get-cfg-desc to /cfg-desc-buf ( )
;
\ Executed in hub node context (root hub or subordinate hub) - creates new child nodes via (make-device-node)
: make-device-node ( port dev -- )
- dup " get-initial-descriptors" my-self $call-method ( port dev )
+ " get-initial-descriptors" my-self $call-method ( port dev )
/cfg-desc-buf 0= if 2drop exit then ( port dev )
asso-class? if 1 else cfg-desc-buf 4 + c@ then ( port dev #intf )
0 ?do ( port dev )
@@ -443,6 +440,16 @@
then ( port )
;
+: get-initial-dev-desc ( dev -- )
+ dev-desc-buf d# 18 erase ( dev )
+ dev-desc-buf d# 64 get-dev-desc 0= if ( dev )
+ dev-desc-buf /pipe0 get-dev-desc 0= if ( dev )
+ drop exit
+ then
+ then
+ 7 dev-desc@ 0 rot di-maxpayload! ( )
+;
+
\ Executed in the root hub node context
: setup-new-node ( port speed hub-port hub-dev -- true | port dev xt false )
\ Allocate device number
@@ -453,7 +460,11 @@
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.
+ dup get-initial-dev-desc ( port dev )
+
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 Fri Jun 15 03:58:55 2012 (r3010)
+++ dev/usb2/hcd/ehci/probe.fth Sat Jun 16 04:13:21 2012 (r3011)
@@ -7,18 +7,16 @@
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 )
\ hub-port and hub-dev route USB 1.1 transactions through USB 2.0 hubs
over get-hub20-port get-hub20-dev ( port speed hub-port hub-dev )
\ Execute setup-new-node in root context and make-device-node in hub node context
- setup-new-node if execute then ( )
+ setup-new-node if execute then ( )
;
0 instance value probe-error? \ Back channel to selftest
[View Less]