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

Jaehoon Chung jh80.chung at samsung.com
Fri Jun 9 03:38:19 UTC 2017


On 06/09/2017 12:06 PM, Simon Glass wrote:
> 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.

include/blk.h:624:32: warning: 'struct udevice' declared inside parameter list will not be visible outside of this definition or declaration
 int blk_get_from_parent(struct udevice *parent, struct udevice **devp);

Plz, check this.. :)

Best Regards,
Jaehoon Chung

> 
>>
>> Best Regards,
>> Jaehoon Chung
> 
> - Simon
> 
> 
> 



More information about the U-Boot mailing list