summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorVincent Palatin <vpalatin@chromium.org>2012-02-09 09:36:07 -0800
committerGerrit <chrome-bot@google.com>2012-02-17 10:58:37 -0800
commitab3e59d66417919efd0e213757254a7c295e6c5a (patch)
treea35f54eec53410185cfaa77c4fc71af553405669
parentbbf79dff8c882237adf86b6d441b7dba4cecfa6b (diff)
usb: properly detect empty mass storage media reader
When a USB card reader is empty, it will return "Not Ready - medium not present" as Key Code Qualifier. In that situation, it's useless waiting for the full timeout since the result won't change until the user inserts a card. U-Boot mass storage returns empty mass storage devices with a size of 0, skip them in the VBoot devices enumeration. Signed-off-by: Vincent Palatin <vpalatin@chromium.org> BUG=None TEST=On Link, run without a MMC card. Change-Id: Iac37887742e5738e249f595e0413eec16b391fae Reviewed-on: https://gerrit.chromium.org/gerrit/15582 Commit-Ready: Vincent Palatin <vpalatin@chromium.org> Tested-by: Vincent Palatin <vpalatin@chromium.org> Reviewed-by: Vadim Bendebury <vbendeb@chromium.org>
-rw-r--r--common/usb_storage.c9
-rw-r--r--lib/vbexport/boot_device.c2
2 files changed, 10 insertions, 1 deletions
diff --git a/common/usb_storage.c b/common/usb_storage.c
index 2ce2dcd2b2..413562607a 100644
--- a/common/usb_storage.c
+++ b/common/usb_storage.c
@@ -968,6 +968,15 @@ static int usb_test_unit_ready(ccb *srb, struct us_data *ss)
if (ss->transport(srb, ss) == USB_STOR_TRANSPORT_GOOD)
return 0;
usb_request_sense(srb, ss);
+ /* Check the Key Code Qualifier, if it matches
+ * "Not Ready - medium not present"
+ * (the sense Key equals 0x2 and the ASC is 0x3a)
+ * return immediatly as the medium being absent won't change
+ * unless there is a user action.
+ */
+ if ((srb->sense_buf[2] == 0x02) &&
+ (srb->sense_buf[12] == 0x3a))
+ return -1;
wait_ms(100);
} while (retry--);
diff --git a/lib/vbexport/boot_device.c b/lib/vbexport/boot_device.c
index 8b842e1a0a..11daea2176 100644
--- a/lib/vbexport/boot_device.c
+++ b/lib/vbexport/boot_device.c
@@ -50,7 +50,7 @@ int boot_device_matches(const block_dev_desc_t *dev,
{
*flags = dev->removable ? VB_DISK_FLAG_REMOVABLE :
VB_DISK_FLAG_FIXED;
- return (*flags & disk_flags) == disk_flags;
+ return (*flags & disk_flags) == disk_flags && dev->lba;
}
/**