mmc: provide a select_hwpart implementation for get_device()
This enables specifying which eMMC HW partition to target for any U-Boot command that uses the generic get_partition() function to parse its command-line arguments. Acked-by: Pantelis Antoniou <panto@antoniou-consulting.com> Signed-off-by: Stephen Warren <swarren@nvidia.com>
This commit is contained in:
parent
336b6f9048
commit
d235628434
@ -39,7 +39,11 @@ static const struct block_drvr block_drvr[] = {
|
||||
{ .name = "usb", .get_dev = usb_stor_get_dev, },
|
||||
#endif
|
||||
#if defined(CONFIG_MMC)
|
||||
{ .name = "mmc", .get_dev = mmc_get_dev, },
|
||||
{
|
||||
.name = "mmc",
|
||||
.get_dev = mmc_get_dev,
|
||||
.select_hwpart = mmc_select_hwpart,
|
||||
},
|
||||
#endif
|
||||
#if defined(CONFIG_SYSTEMACE)
|
||||
{ .name = "ace", .get_dev = systemace_get_dev, },
|
||||
|
@ -552,6 +552,32 @@ static int mmc_set_capacity(struct mmc *mmc, int part_num)
|
||||
return 0;
|
||||
}
|
||||
|
||||
int mmc_select_hwpart(int dev_num, int hwpart)
|
||||
{
|
||||
struct mmc *mmc = find_mmc_device(dev_num);
|
||||
int ret;
|
||||
|
||||
if (!mmc)
|
||||
return -1;
|
||||
|
||||
if (mmc->part_num == hwpart)
|
||||
return 0;
|
||||
|
||||
if (mmc->part_config == MMCPART_NOAVAILABLE) {
|
||||
printf("Card doesn't support part_switch\n");
|
||||
return -1;
|
||||
}
|
||||
|
||||
ret = mmc_switch_part(dev_num, hwpart);
|
||||
if (ret)
|
||||
return -1;
|
||||
|
||||
mmc->part_num = hwpart;
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
||||
int mmc_switch_part(int dev_num, unsigned int part_num)
|
||||
{
|
||||
struct mmc *mmc = find_mmc_device(dev_num);
|
||||
|
@ -103,6 +103,7 @@ block_dev_desc_t* sata_get_dev(int dev);
|
||||
block_dev_desc_t* scsi_get_dev(int dev);
|
||||
block_dev_desc_t* usb_stor_get_dev(int dev);
|
||||
block_dev_desc_t* mmc_get_dev(int dev);
|
||||
int mmc_select_hwpart(int dev_num, int hwpart);
|
||||
block_dev_desc_t* systemace_get_dev(int dev);
|
||||
block_dev_desc_t* mg_disk_get_dev(int dev);
|
||||
block_dev_desc_t *host_get_dev(int dev);
|
||||
@ -126,6 +127,7 @@ static inline block_dev_desc_t* sata_get_dev(int dev) { return NULL; }
|
||||
static inline block_dev_desc_t* scsi_get_dev(int dev) { return NULL; }
|
||||
static inline block_dev_desc_t* usb_stor_get_dev(int dev) { return NULL; }
|
||||
static inline block_dev_desc_t* mmc_get_dev(int dev) { return NULL; }
|
||||
static inline int mmc_select_hwpart(int dev_num, int hwpart) { return -1; }
|
||||
static inline block_dev_desc_t* systemace_get_dev(int dev) { return NULL; }
|
||||
static inline block_dev_desc_t* mg_disk_get_dev(int dev) { return NULL; }
|
||||
static inline block_dev_desc_t *host_get_dev(int dev) { return NULL; }
|
||||
|
Loading…
Reference in New Issue
Block a user