[U-Boot] [PATCH 1/3] dm: blk: Add a way to obtain a block device from its parent

Simon Glass sjg at chromium.org
Fri Jun 9 03:06:05 UTC 2017


Hi Jaehoon,

On 6 June 2017 at 21:49, Jaehoon Chung <jh80.chung at samsung.com> wrote:
> Hi Simon,
>
> On 05/28/2017 02:37 AM, Simon Glass wrote:
>> Many devices support a child block device (e.g. MMC, USB). Add a
>> convenient way to get this device given the parent device.
>>
>> Signed-off-by: Simon Glass <sjg at chromium.org>
>> ---
>>
>>  drivers/block/blk-uclass.c | 26 ++++++++++++++++++++++++++
>>  include/blk.h              |  7 +++++++
>>  test/dm/blk.c              | 18 ++++++++++++++++++
>>  3 files changed, 51 insertions(+)
>>
>> diff --git a/drivers/block/blk-uclass.c b/drivers/block/blk-uclass.c
>> index 6145675271..23f131b7ad 100644
>> --- a/drivers/block/blk-uclass.c
>> +++ b/drivers/block/blk-uclass.c
>> @@ -453,6 +453,32 @@ int blk_prepare_device(struct udevice *dev)
>>       return 0;
>>  }
>>
>> +int blk_get_from_parent(struct udevice *parent, struct udevice **devp)
>> +{
>> +     struct udevice *dev;
>> +     enum uclass_id id;
>> +     int ret;
>> +
>> +     device_find_first_child(parent, &dev);
>> +     if (!dev) {
>> +             debug("%s: No block device found for parent '%s'\n", __func__,
>> +                   parent->name);
>> +             return -ENODEV;
>> +     }
>> +     id = device_get_uclass_id(dev);
>> +     if (id != UCLASS_BLK) {
>> +             debug("%s: Incorrect uclass %s for block device '%s'\n",
>> +                   __func__, uclass_get_name(id), dev->name);
>> +             return -ENOTBLK;
>> +     }
>> +     ret = device_probe(dev);
>> +     if (ret)
>> +             return ret;
>> +     *devp = dev;
>> +
>> +     return 0;
>> +}
>> +
>>  int blk_find_max_devnum(enum if_type if_type)
>>  {
>>       struct udevice *dev;
>> diff --git a/include/blk.h b/include/blk.h
>> index a128ee4841..4d60987f61 100644
>> --- a/include/blk.h
>> +++ b/include/blk.h
>> @@ -616,4 +616,11 @@ ulong blk_write_devnum(enum if_type if_type, int devnum, lbaint_t start,
>>   */
>>  int blk_select_hwpart_devnum(enum if_type if_type, int devnum, int hwpart);
>>
>> +/**
>> + * blk_get_from_parent() - obtain a block device by looking up its parent
>> + *
>> + * All devices with
>> + */
>> +int blk_get_from_parent(struct udevice *parent, struct udevice **devp);
>
> Don't need to consider whether CONFIG_BLK is defined or not?
> blk_get_from_parent() is declared in blk-uclass.c

Well in that case this function will not be called, so I think it is OK.

>
> Best Regards,
> Jaehoon Chung

- Simon


More information about the U-Boot mailing list