]> CyberLeo.Net >> Repos - FreeBSD/stable/10.git/commit
MFC r261994, r275905, r275951, r276106, r283128, r285678: MMC driver fixes...
authorian <ian@ccf9f872-aa2e-dd11-9fc8-001c23d0bc1f>
Wed, 14 Oct 2015 23:41:41 +0000 (23:41 +0000)
committerian <ian@ccf9f872-aa2e-dd11-9fc8-001c23d0bc1f>
Wed, 14 Oct 2015 23:41:41 +0000 (23:41 +0000)
commitdab3f4bb0134f7004c0b7e2623c312f8b3735a89
tree3147b38dfb315140a2b0cf617d77164905464cb3
parentfe8bd54088418bf0a0b6b00d2f88ae4837de2135
MFC r261994, r275905, r275951, r276106, r283128, r285678: MMC driver fixes...

  If no compatible cards were found after probing the bus, say so.

  Don't deselect the card too soon. To set the block size or switch the
  function parameters, the card has to be in transfer state. If it is in
  the idle state, the commands are ignored. This caused us not to set
  the proper parameters that we later assume to be present, leading to
  downstream failures of the card / interface as our state machine
  mismatches the card's.

  Log mmc and sd command failures.  Reporting of routine expected errors,
  such as timeouts while probing a bus or testing for a feature, is
  squelched.  Also, error reporting is limited to 5 events per second,
  because when an sdcard goes bad on a low-end embedded board, flooding
  the console at high speed isn't helpful.

  Always select the card before we do the 4.x specific stuff and
  deselect it after setting the block size. This is a similar bug that
  was fixed elsewhere, but not here. This makes sure that we leave the
  card deselected at the end of the loop, and we don't send any commands
  to the card without it selected.

  Re-select the SD card before getting the SD status. On a couple Atmel
  boards, this prevents some error messages during enumeration and also
  gives us the correct erase block size. They appear to be harmless
  elsewhere.

  Deselect the sd card before re-selecting it when working around a problem
  with some cards that causes them to become deselected after probing for
  switch capabilities.  The old workaround fixes the behavior with some cards,
  but causes problems with the cards the behave correctly and don't become
  deselected.  Forcing a deselect then reselect appears to work correctly
  with all cards in initial testing.

git-svn-id: svn://svn.freebsd.org/base/stable/10@289339 ccf9f872-aa2e-dd11-9fc8-001c23d0bc1f
sys/dev/mmc/mmc.c