Author: wmb Date: 2010-01-11 09:06:23 +0100 (Mon, 11 Jan 2010) New Revision: 1659
Modified: dev/usb2/device/keyboard/kbd.fth dev/usb2/device/net/ethernet.fth dev/usb2/device/serial/uart.fth dev/usb2/device/storage/scsi.fth dev/usb2/device/userial/userial.fth dev/usb2/device/wlan/wlan.fth Log: OLPC trac 9969 - guarded "configuration set-config" with " reset?" $call-parent for all devices. It turns out that if you do set-config unnecessarily for devices where the configuration has already been set, it sometimes fails, and often triggers the problem described in #9423.
Modified: dev/usb2/device/keyboard/kbd.fth =================================================================== --- dev/usb2/device/keyboard/kbd.fth 2010-01-10 10:50:45 UTC (rev 1658) +++ dev/usb2/device/keyboard/kbd.fth 2010-01-11 08:06:23 UTC (rev 1659) @@ -326,14 +326,20 @@ ;
\ kbd-buf and led-buf must have been allocated -: setup-hardware ( -- ) +: setup-hardware? ( -- error? ) device set-target - configuration set-config if ." Failed to set USB keyboard configuration" cr then + " reset?" $call-parent if + configuration set-config if + ." Failed to set USB keyboard configuration" cr + true exit + then + then set-boot-protocol if ." Failed to set USB keyboard boot protocol" cr then \ Some USB keyboards don't implement set-idle properly, and it's not critical, \ so we suppress the message to avoid confusing the user idle-rate set-idle drop \ if ." Failed to set USB keyboard idle" cr then 0 set-leds + false ;
@@ -362,7 +368,10 @@ : open ( -- flag ) kbd-refcount @ if 1 +refcnt true exit then init-kbd-buf - setup-hardware + setup-hardware? if + free-kbd-buf + false exit + then noop \ Add noop so I can patch it before open normal-op? if unlock
Modified: dev/usb2/device/net/ethernet.fth =================================================================== --- dev/usb2/device/net/ethernet.fth 2010-01-10 10:50:45 UTC (rev 1658) +++ dev/usb2/device/net/ethernet.fth 2010-01-11 08:06:23 UTC (rev 1659) @@ -211,13 +211,15 @@ : open ( -- ok? ) my-args " debug" $= if debug-on then device set-target - configuration set-config if - ." Failed to set configuration" cr - false exit - then
opencount @ 0= if - " reset?" $call-parent if init-nic then + " reset?" $call-parent if + configuration set-config if + ." Failed to set configuration" cr + false exit + then + init-nic + then
first-open? if false to first-open?
Modified: dev/usb2/device/serial/uart.fth =================================================================== --- dev/usb2/device/serial/uart.fth 2010-01-10 10:50:45 UTC (rev 1658) +++ dev/usb2/device/serial/uart.fth 2010-01-11 08:06:23 UTC (rev 1659) @@ -54,6 +54,14 @@ : open ( -- flag ) device set-target refcount @ 0= if + + " reset?" $call-parent if + configuration set-config if + ." Failed set serial port configuration" cr + false exit + then + then + init-buf inituart rts-dtr-on then
Modified: dev/usb2/device/storage/scsi.fth =================================================================== --- dev/usb2/device/storage/scsi.fth 2010-01-10 10:50:45 UTC (rev 1658) +++ dev/usb2/device/storage/scsi.fth 2010-01-11 08:06:23 UTC (rev 1659) @@ -183,8 +183,10 @@ : set-address ( lun -- ) 0 max max-lun min to lun device set-target - configuration set-config if - ." USB storage scsi layer: Failed to set configuration" cr + " reset?" $call-parent if + configuration set-config if + ." USB storage scsi layer: Failed to set configuration" cr + then then ; : set-timeout ( n -- ) bulk-timeout max set-bulk-in-timeout ;
Modified: dev/usb2/device/userial/userial.fth =================================================================== --- dev/usb2/device/userial/userial.fth 2010-01-10 10:50:45 UTC (rev 1658) +++ dev/usb2/device/userial/userial.fth 2010-01-11 08:06:23 UTC (rev 1659) @@ -18,9 +18,11 @@
: open ( -- flag ) device set-target - configuration set-config if - ." userial: set-config failed" cr - false exit + " reset?" $call-parent if + configuration set-config if + ." userial: set-config failed" cr + false exit + then then alloc-buffers inbuf h# 10 bulk-in-pipe begin-bulk-in
Modified: dev/usb2/device/wlan/wlan.fth =================================================================== --- dev/usb2/device/wlan/wlan.fth 2010-01-10 10:50:45 UTC (rev 1658) +++ dev/usb2/device/wlan/wlan.fth 2010-01-11 08:06:23 UTC (rev 1659) @@ -68,6 +68,12 @@ my-args parse-args set-parent-channel opencount @ 0= if + " reset?" $call-parent if + configuration set-config if + ." Failed to set USB configuration for wireless" cr + false exit + then + then init-buf /inbuf /outbuf setup-bus-io if free-buf false exit then ?load-fw if release-bus-resources free-buf false exit then