Changeset 3444


Ignore:
Timestamp:
Nov 20, 2012, 11:27:07 PM (2 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.