summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--cmd/usb_mass_storage.c11
-rw-r--r--include/usb_mass_storage.h1
2 files changed, 12 insertions, 0 deletions
diff --git a/cmd/usb_mass_storage.c b/cmd/usb_mass_storage.c
index 47e8b70cd10..e8b87045bdc 100644
--- a/cmd/usb_mass_storage.c
+++ b/cmd/usb_mass_storage.c
@@ -24,6 +24,11 @@ static int ums_read_sector(struct ums *ums_dev,
{
struct blk_desc *block_dev = &ums_dev->block_dev;
lbaint_t blkstart = start + ums_dev->start_sector;
+ int ret;
+
+ ret = blk_dselect_hwpart(block_dev, ums_dev->hwpart);
+ if (ret && ret != -ENOSYS)
+ return ret;
return blk_dread(block_dev, blkstart, blkcnt, buf);
}
@@ -33,6 +38,11 @@ static int ums_write_sector(struct ums *ums_dev,
{
struct blk_desc *block_dev = &ums_dev->block_dev;
lbaint_t blkstart = start + ums_dev->start_sector;
+ int ret;
+
+ ret = blk_dselect_hwpart(block_dev, ums_dev->hwpart);
+ if (ret && ret != -ENOSYS)
+ return ret;
return blk_dwrite(block_dev, blkstart, blkcnt, buf);
}
@@ -110,6 +120,7 @@ static int ums_init(const char *devtype, const char *devnums_part_str)
snprintf(name, UMS_NAME_LEN, "UMS disk %d", ums_count);
ums[ums_count].name = name;
ums[ums_count].block_dev = *block_dev;
+ ums[ums_count].hwpart = block_dev->hwpart;
printf("UMS: LUN %d, dev %s %d, hwpart %d, sector %#x, count %#x\n",
ums_count, devtype, ums[ums_count].block_dev.devnum,
diff --git a/include/usb_mass_storage.h b/include/usb_mass_storage.h
index 6d83d93cad7..9be704ea8b7 100644
--- a/include/usb_mass_storage.h
+++ b/include/usb_mass_storage.h
@@ -22,6 +22,7 @@ struct ums {
unsigned int num_sectors;
const char *name;
struct blk_desc block_dev;
+ int hwpart;
};
int fsg_init(struct ums *ums_devs, int count, struct udevice *udc);