Changeset 3444


Ignore:
Timestamp:
Nov 20, 2012, 10:27:07 PM (3 years ago)
Author:
wmb
Message:

USB - Changed selftest logic so that it will not destroy (by wanton reprobing) the setup of devices that were connected prior to the execution of selftest. This fixes OLPC trac #12254 and corrects the fix to OLPC trac #11845. I also made it possible to invoke the fisheye test by supplying the argument "fisheye" to the usb path, as in "test /usb:fisheye" or "test /usb:fisheye/hub" . The fisheye test is only available when diag-switch? is false.

Location:
dev/usb2/hcd
Files:
4 edited

Legend:

Unmodified
Added
Removed
  • dev/usb2/hcd/device.fth

    r3015 r3444  
    358358;
    359359
     360: find-port-node  ( port -- true | phandle false)
     361   my-self ihandle>phandle child                 ( port phandle )
     362   begin  ?dup  while                            ( port phandle )
     363      " reg" 2 pick get-package-property 0=  if  ( port phandle adr len )
     364         decode-int  nip nip                     ( port phandle port1 )
     365         2 pick  =  if                           ( port phandle )
     366            \ Check if the node has been disabled
     367            " assigned-address"                  ( port phandle propname$ )
     368            2 pick  get-package-property 0=  if  ( port phandle adr len )
     369               decode-int  nip nip               ( port phandle assigned-address )
     370               -1 <>  if                         ( port phandle )
     371                  nip false exit
     372               then
     373            then                                 ( port phandle )
     374         then                                    ( port phandle )
     375      then                                       ( port phandle )
     376      peer                                       ( port phandle' )
     377   repeat                                        ( port )
     378   drop                                          ( )
     379   true
     380;
     381
     382: .phandle-property  ( phandle prop-name$ -- )
     383   rot get-package-property 0=  if    ( adr len )
     384      decode-string type  2drop
     385   then
     386;
     387: .usb-device  ( port -- )
     388   find-port-node  if
     389      ." Can't find device node for USB port!" cr
     390   else                                      ( phandle )
     391      dup " device_type" .phandle-property   ( phandle )
     392      ." ,"
     393      dup " vendor$" .phandle-property       ( phandle )
     394      ." ,"
     395      dup " device$" .phandle-property       ( phandle )
     396      drop                                   ( )
     397   then
     398;
     399
    360400: (make-device-node)  ( dev port intf -- )
    361401   swap                              ( dev intf port )
  • dev/usb2/hcd/ehci/probe.fth

    r3325 r3444  
    8585: power-usb-ports  ( -- )  ;
    8686
     87: port-changed?  ( port# -- flag )  portsc@ 2 and 0<>  ;
    8788: ports-changed?  ( -- flag )
    8889   #ports 0  ?do
    89       i portsc@ 2 and  if  true unloop exit  then
     90      i port-changed?  if  true unloop exit  then
    9091   loop
    9192   false
     
    9697
    9798   #ports 0  ?do                                \ For each port
    98       i portsc@ 2 and  if                       \ Connection changed
     99      i port-changed?  if                       \ Connection changed
    99100\         i rm-obsolete-children                        \ Remove obsolete device nodes
    100101         i probe-root-hub-port                  \ Probe it
     
    155156;
    156157
    157 : .occupied  ( port -- )  ." USB 2.0 port " u. ."  in use" cr  ;
    158158: regs{  ( -- prev )  ehci-reg dup 0=  if  map-regs  then  ;
    159159: }regs  ( prev -- )  0=  if  unmap-regs  then  ;
    160160
    161 : fisheye  ( -- )
    162    regs{
     161: selftest  ( -- error? )
     162   open 0=  if  true exit  then
    163163   #testable-ports  0  ?do
     164      ." USB port " i u. ." : "
    164165      i port-connected?  if
    165          i .occupied
     166         ." In use - "
     167         i .usb-device cr
    166168      else
    167          ." Fisheye pattern out to USB 2.0 port " i u. cr
    168          i test-port-begin
    169          d# 2,000 ms
    170          i test-port-end
    171          0 i portsc!  i reset-port  i power-port
    172       then
    173    loop
    174    }regs
    175 ;
    176 
    177 : thorough  ( -- error? )
    178    #testable-ports  0  ?do
    179       i port-connected?  if
    180          i .occupied
    181       else
    182          ." Please connect a device to USB port " i u. cr
    183          i wait-connect  if  true unloop exit  then
     169         diagnostic-mode?  if
     170            ." Please connect a device" cr
     171            i wait-connect  if  true unloop exit  then
     172            i .usb-device cr
     173         else
     174            fisheye?  if
     175               ." Fisheye pattern" cr
     176               i test-port-begin
     177               d# 2,000 ms
     178               i test-port-end
     179               0 i portsc!  i reset-port  i power-port
     180            else
     181               ." Empty" cr
     182            then
     183         then
    184184      then
    185185   loop
    186186   false
    187 ;
    188 
    189 : sagacity  ( -- error? )
    190    #testable-ports  0  ?do
    191       ." USB port " i u. ." ... "
    192       i port-connected?  if
    193          i wait-connect  if  true unloop exit  then
    194       else
    195          ." Empty" cr
    196       then
    197    loop
    198    false
    199 ;
    200 
    201 : selftest  ( -- error? )
    202    regs{                        ( prev )
    203    diagnostic-mode?  if
    204       thorough
    205    else
    206       sagacity
    207    then                         ( prev error? )
    208    swap }regs                   ( error? )
     187   close
    209188;
    210189
  • dev/usb2/hcd/hcd.fth

    r1987 r3444  
    117117\ ;
    118118
     119false instance value fisheye?
     120
    119121: parse-my-args  ( -- )
    120122   my-args
     
    123125      2dup " debug"   $=  if  debug-on          then
    124126      2dup " noprobe" $=  if  true to noprobe?  then
     127      2dup " fisheye" $=  if  true to fisheye?  then
    125128      2drop               ( rem$ )
    126129   repeat                 ( rem$ )
  • dev/usb2/hcd/probehub.fth

    r3391 r3444  
    196196      r> drop true exit                   ( -- true )
    197197   then                                   ( )
     198   ." Hub port " r@ u. ." : "             ( )
    198199   hub-buf c@ 8 and  if   \ Connected     ( )
    199       ." Hub port " r@ u. ." in over current" cr
     200      ." In over current" cr              ( )
    200201      r> drop true exit                   ( -- true )
    201202   then                                   ( )
    202203   hub-buf c@ 1 and  if   \ Connected     ( )
    203       ." Hub port " r@ u. ." in use" cr   ( )
     204      ." In use - "                       ( )
     205      r@ .usb-device cr                   ( )
    204206   else                                   ( )
    205207      diagnostic-mode?  if                ( )
    206          ." Please connect a device to USB hub port " r@ u.  cr   ( )
    207          r@ wait-hub-connect  if  r> drop true exit  then         ( )
    208       else                                                        ( )
    209          ." Fisheye pattern out to USB hub port " r@ u. cr        ( )
    210          r@ 4 test-hub-port                                       ( )
    211          d# 2,000 ms                                              ( )
    212          r@ untest-hub-port                                       ( )
    213          r@ reset-hub-port  r@ power-hub-port                     ( )
    214       then                                                        ( )
    215    then                                                           ( )
     208         ." Please connect a device"  cr  ( )
     209         r@ wait-hub-connect  if  r> drop true exit  then   ( )
     210         r@ .usb-device cr                                  ( )
     211      else                                                  ( )
     212         " fisheye?" $call-parent  if                       ( )
     213            ." Fisheye pattern" cr                          ( )
     214            r@ 4 test-hub-port                              ( )
     215            d# 2,000 ms                                     ( )
     216            r@ untest-hub-port                              ( )
     217            r@ reset-hub-port  r@ power-hub-port            ( )
     218         else                                               ( )
     219            ." Empty" cr                                    ( )
     220         then                                               ( )
     221      then                                                  ( )
     222   then                                                     ( )
    216223   r> drop false
    217224;
Note: See TracChangeset for help on using the changeset viewer.