mirror of
https://github.com/u-boot/u-boot.git
synced 2025-05-09 03:21:51 +00:00
dm: mmc: Use bootdev_setup_sibling_blk()
At present MMC uses the bootdev_setup_for_dev() function to set up the bootdev. This is because MMC only has one block-device child, so does not need to worry about naming of the bootdev. However this inconsistency with other bootdevs that use block devices is a bit annoying. The only real reason for it is to have a name like 'mmc0.bootdev' instead of 'mmc0.blk.bootdev'. Update bootdev_setup_sibling_blk() to drop '.blk' from the name where it appears, thus removing the only reason to use the bootdev_setup_for_dev(). Switch MMC over to the subling function. Signed-off-by: Simon Glass <sjg@chromium.org>
This commit is contained in:
parent
d0075059e4
commit
3a2cb96e5d
3 changed files with 35 additions and 14 deletions
|
@ -234,13 +234,27 @@ int bootdev_setup_for_dev(struct udevice *parent, const char *drv_name)
|
|||
return 0;
|
||||
}
|
||||
|
||||
static int bootdev_get_suffix_start(struct udevice *dev, const char *suffix)
|
||||
{
|
||||
int len, slen;
|
||||
|
||||
len = strlen(dev->name);
|
||||
slen = strlen(suffix);
|
||||
if (len > slen && !strcmp(suffix, dev->name + len - slen))
|
||||
return len - slen;
|
||||
|
||||
return len;
|
||||
}
|
||||
|
||||
int bootdev_setup_sibling_blk(struct udevice *blk, const char *drv_name)
|
||||
{
|
||||
struct udevice *parent, *dev;
|
||||
char dev_name[50];
|
||||
int ret;
|
||||
int ret, len;
|
||||
|
||||
snprintf(dev_name, sizeof(dev_name), "%s.%s", blk->name, "bootdev");
|
||||
len = bootdev_get_suffix_start(blk, ".blk");
|
||||
snprintf(dev_name, sizeof(dev_name), "%.*s.%s", len, blk->name,
|
||||
"bootdev");
|
||||
|
||||
parent = dev_get_parent(blk);
|
||||
ret = device_find_child_by_name(parent, dev_name, &dev);
|
||||
|
@ -271,20 +285,22 @@ int bootdev_get_sibling_blk(struct udevice *dev, struct udevice **blkp)
|
|||
struct udevice *parent = dev_get_parent(dev);
|
||||
struct udevice *blk;
|
||||
int ret, len;
|
||||
char *p;
|
||||
|
||||
if (device_get_uclass_id(dev) != UCLASS_BOOTDEV)
|
||||
return -EINVAL;
|
||||
|
||||
/* This should always work if bootdev_setup_sibling_blk() was used */
|
||||
p = strstr(dev->name, ".bootdev");
|
||||
if (!p)
|
||||
return log_msg_ret("str", -EINVAL);
|
||||
|
||||
len = p - dev->name;
|
||||
len = bootdev_get_suffix_start(dev, ".bootdev");
|
||||
ret = device_find_child_by_namelen(parent, dev->name, len, &blk);
|
||||
if (ret)
|
||||
return log_msg_ret("find", ret);
|
||||
if (ret) {
|
||||
char dev_name[50];
|
||||
|
||||
snprintf(dev_name, sizeof(dev_name), "%.*s.blk", len,
|
||||
dev->name);
|
||||
ret = device_find_child_by_name(parent, dev_name, &blk);
|
||||
if (ret)
|
||||
return log_msg_ret("find", ret);
|
||||
}
|
||||
*blkp = blk;
|
||||
|
||||
return 0;
|
||||
|
@ -295,13 +311,15 @@ static int bootdev_get_from_blk(struct udevice *blk, struct udevice **bootdevp)
|
|||
struct udevice *parent = dev_get_parent(blk);
|
||||
struct udevice *bootdev;
|
||||
char dev_name[50];
|
||||
int ret;
|
||||
int ret, len;
|
||||
|
||||
if (device_get_uclass_id(blk) != UCLASS_BLK)
|
||||
return -EINVAL;
|
||||
|
||||
/* This should always work if bootdev_setup_sibling_blk() was used */
|
||||
snprintf(dev_name, sizeof(dev_name), "%s.%s", blk->name, "bootdev");
|
||||
len = bootdev_get_suffix_start(blk, ".blk");
|
||||
snprintf(dev_name, sizeof(dev_name), "%.*s.%s", len, blk->name,
|
||||
"bootdev");
|
||||
ret = device_find_child_by_name(parent, dev_name, &bootdev);
|
||||
if (ret)
|
||||
return log_msg_ret("find", ret);
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue