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

Simon Glass sjg at chromium.org
Wed Jun 21 01:49:15 UTC 2017


Hi Jaehoon,

On 8 June 2017 at 21:38, Jaehoon Chung <jh80.chung at samsung.com> wrote:
> 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.. :)

Which board is this, please?

Regards,
Simon


More information about the U-Boot mailing list