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);