Author: wmb Date: 2008-12-04 10:18:23 +0100 (Thu, 04 Dec 2008) New Revision: 1020
Modified: dev/mmc/sdhci/sdhci.fth Log: OLPC - attempt to make SD startup a little more robust by retrying if the first power-up attempt failed.
Modified: dev/mmc/sdhci/sdhci.fth =================================================================== --- dev/mmc/sdhci/sdhci.fth 2008-12-04 09:18:18 UTC (rev 1019) +++ dev/mmc/sdhci/sdhci.fth 2008-12-04 09:18:23 UTC (rev 1020) @@ -463,8 +463,7 @@ drop d# 10 ms loop ( )
- ." SDHCI: Card didn't power up after 1 second" cr - abort + true ;
: set-operating-conditions ( -- error? ) @@ -560,22 +559,37 @@ false to writing? ;
-external - -: attach-card ( -- okay? ) +\ -1 means error, 1 means retry +: power-up-card ( -- false | retry? true ) intstat-on card-power-off d# 20 ms - card-power-on d# 20 ms \ This delay is just a guess - - card-inserted? 0= if card-power-off false intstat-off exit then - + card-inserted? 0= if card-power-off intstat-off false true exit then card-clock-slow d# 10 ms \ This delay is just a guess - reset-card \ Cmd 0 + set-operating-conditions if intstat-off true true exit then + false +;
- set-operating-conditions if false intstat-off exit then +external
+: attach-card ( -- okay? ) + power-up-card if ( retry? ) + \ The first try at powering up failed. + if ( ) + \ The card was detected, but didn't go to "powered up" state. + \ Sometimes that can be fixed by power cycling, so we retry + power-up-card if ( retry? ) + if ." SD card did not power up" cr then + false exit + then + \ The second attempt to power up the card worked + else + \ The card was not detected, so we give up + false exit + then + then + get-all-cids \ Cmd 2 mmc? if h# 10000 set-rca \ Cmd 3 (MMC) - Get relative card address