Re: [RFC 14/22] dm: blk: call efi's device-probe hook

2021-10-31 Thread Simon Glass
Hi Takahiro,

On Mon, 11 Oct 2021 at 08:54, Simon Glass  wrote:
>
> Hi Takahiro,
>
> On Sun, 10 Oct 2021 at 21:15, AKASHI Takahiro
>  wrote:
> >
> > Hi Simon,
> >
> > On Sun, Oct 10, 2021 at 08:14:23AM -0600, Simon Glass wrote:
> > > Hi Takahiro,
> > >
> > > On Thu, 30 Sept 2021 at 23:04, AKASHI Takahiro
> > >  wrote:
> > > >
> > > > Adding this callback function, efi_disk_create() in block devices's
> > > > post_probe hook will allows for automatically creating efi_disk objects
> > > > per block device.
> > > >
> > > > This will end up not only eliminating efi_disk_register() called in UEFI
> > > > initialization, but also enabling detections of new block devices even
> > > > after the initialization.
> > > >
> > > > Signed-off-by: AKASHI Takahiro 
> > > > ---
> > > >  drivers/block/blk-uclass.c | 10 ++
> > > >  1 file changed, 10 insertions(+)
> > >
> > > This is where events come in. We need a way to notify things when
> > > devices go through different stages, etc.
> >
> > I favor your idea of event notification to decouple subsystems from
> > the core block layer.
> >
> > > I am thinking of:
> > >
> > > enum dm_event_t {
> > >DMEVT_PROBE,
> > >DMEVT_POST_PROBE,
> > > ...
> > > };
> > >
> > > struct dm_event {
> > > enum dm_event_t type;
> > > union {
> > > // add data for different event types in here
> > > } data;
> > > }
> > >
> > > int (*dm_handler_t)(void *ctx, struct dm_event *event);
> > >
> > > int dm_register(enum dm_event_t evtype, dm_handler_t func, void *ctx)
> > >
> > > int dm_notify(struct udevice *dev, enum dm_event_t type, void *data);
> > >
> > > Then the code below becomes:
> > >
> > > dm_notify(struct udevice *dev, DMEVT_POST_PROBE, NULL);
> > >
> > > the implementation of which will call the handler.
> > >
> > > If you like I could create an impl of the above as a separate patch
> > > for discussion.
> >
> > Yes, please.
> > I'm willing to rebase my code on top of your patch.
>
> OK I will give it a crack, hopefully around the end of the week.

Well that didn't happen as the two things ahead of it expanded.

I'll send a patch with a sketch soon, for you to look at.

Regards,
Simon


Re: [RFC 14/22] dm: blk: call efi's device-probe hook

2021-10-11 Thread Simon Glass
Hi Takahiro,

On Sun, 10 Oct 2021 at 21:15, AKASHI Takahiro
 wrote:
>
> Hi Simon,
>
> On Sun, Oct 10, 2021 at 08:14:23AM -0600, Simon Glass wrote:
> > Hi Takahiro,
> >
> > On Thu, 30 Sept 2021 at 23:04, AKASHI Takahiro
> >  wrote:
> > >
> > > Adding this callback function, efi_disk_create() in block devices's
> > > post_probe hook will allows for automatically creating efi_disk objects
> > > per block device.
> > >
> > > This will end up not only eliminating efi_disk_register() called in UEFI
> > > initialization, but also enabling detections of new block devices even
> > > after the initialization.
> > >
> > > Signed-off-by: AKASHI Takahiro 
> > > ---
> > >  drivers/block/blk-uclass.c | 10 ++
> > >  1 file changed, 10 insertions(+)
> >
> > This is where events come in. We need a way to notify things when
> > devices go through different stages, etc.
>
> I favor your idea of event notification to decouple subsystems from
> the core block layer.
>
> > I am thinking of:
> >
> > enum dm_event_t {
> >DMEVT_PROBE,
> >DMEVT_POST_PROBE,
> > ...
> > };
> >
> > struct dm_event {
> > enum dm_event_t type;
> > union {
> > // add data for different event types in here
> > } data;
> > }
> >
> > int (*dm_handler_t)(void *ctx, struct dm_event *event);
> >
> > int dm_register(enum dm_event_t evtype, dm_handler_t func, void *ctx)
> >
> > int dm_notify(struct udevice *dev, enum dm_event_t type, void *data);
> >
> > Then the code below becomes:
> >
> > dm_notify(struct udevice *dev, DMEVT_POST_PROBE, NULL);
> >
> > the implementation of which will call the handler.
> >
> > If you like I could create an impl of the above as a separate patch
> > for discussion.
>
> Yes, please.
> I'm willing to rebase my code on top of your patch.

OK I will give it a crack, hopefully around the end of the week.

Regards,
Simon


Re: [RFC 14/22] dm: blk: call efi's device-probe hook

2021-10-10 Thread AKASHI Takahiro
Hi Simon,

On Sun, Oct 10, 2021 at 08:14:23AM -0600, Simon Glass wrote:
> Hi Takahiro,
> 
> On Thu, 30 Sept 2021 at 23:04, AKASHI Takahiro
>  wrote:
> >
> > Adding this callback function, efi_disk_create() in block devices's
> > post_probe hook will allows for automatically creating efi_disk objects
> > per block device.
> >
> > This will end up not only eliminating efi_disk_register() called in UEFI
> > initialization, but also enabling detections of new block devices even
> > after the initialization.
> >
> > Signed-off-by: AKASHI Takahiro 
> > ---
> >  drivers/block/blk-uclass.c | 10 ++
> >  1 file changed, 10 insertions(+)
> 
> This is where events come in. We need a way to notify things when
> devices go through different stages, etc.

I favor your idea of event notification to decouple subsystems from
the core block layer.

> I am thinking of:
> 
> enum dm_event_t {
>DMEVT_PROBE,
>DMEVT_POST_PROBE,
> ...
> };
> 
> struct dm_event {
> enum dm_event_t type;
> union {
> // add data for different event types in here
> } data;
> }
> 
> int (*dm_handler_t)(void *ctx, struct dm_event *event);
> 
> int dm_register(enum dm_event_t evtype, dm_handler_t func, void *ctx)
> 
> int dm_notify(struct udevice *dev, enum dm_event_t type, void *data);
> 
> Then the code below becomes:
> 
> dm_notify(struct udevice *dev, DMEVT_POST_PROBE, NULL);
> 
> the implementation of which will call the handler.
> 
> If you like I could create an impl of the above as a separate patch
> for discussion.

Yes, please.
I'm willing to rebase my code on top of your patch.

-Takahiro Akashi


> >
> > diff --git a/drivers/block/blk-uclass.c b/drivers/block/blk-uclass.c
> > index 8fbec8779e1e..ce45cf0a8768 100644
> > --- a/drivers/block/blk-uclass.c
> > +++ b/drivers/block/blk-uclass.c
> > @@ -9,6 +9,7 @@
> >  #include 
> >  #include 
> >  #include 
> > +#include 
> >  #include 
> >  #include 
> >  #include 
> > @@ -827,6 +828,11 @@ int blk_create_partitions(struct udevice *parent)
> >
> >  static int blk_post_probe(struct udevice *dev)
> >  {
> > +   if (CONFIG_IS_ENABLED(EFI_LOADER)) {
> > +   if (efi_disk_create(dev))
> > +   debug("*** efi_post_probe_device failed\n");
> > +   }
> > +
> > if (IS_ENABLED(CONFIG_PARTITIONS) &&
> > IS_ENABLED(CONFIG_HAVE_BLOCK_DEVICE)) {
> > struct blk_desc *desc = dev_get_uclass_plat(dev);
> > @@ -843,6 +849,10 @@ static int blk_post_probe(struct udevice *dev)
> >
> >  static int blk_part_post_probe(struct udevice *dev)
> >  {
> > +   if (CONFIG_IS_ENABLED(EFI_LOADER)) {
> > +   if (efi_disk_create(dev))
> > +   debug("*** efi_post_probe_device failed\n");
> > +   }
> > /*
> >  * TODO:
> >  * If we call blk_creat_partitions() here, it would allow for
> > --
> > 2.33.0
> >
> 
> Regards,
> Simon


Re: [RFC 14/22] dm: blk: call efi's device-probe hook

2021-10-10 Thread Simon Glass
Hi Takahiro,

On Thu, 30 Sept 2021 at 23:04, AKASHI Takahiro
 wrote:
>
> Adding this callback function, efi_disk_create() in block devices's
> post_probe hook will allows for automatically creating efi_disk objects
> per block device.
>
> This will end up not only eliminating efi_disk_register() called in UEFI
> initialization, but also enabling detections of new block devices even
> after the initialization.
>
> Signed-off-by: AKASHI Takahiro 
> ---
>  drivers/block/blk-uclass.c | 10 ++
>  1 file changed, 10 insertions(+)

This is where events come in. We need a way to notify things when
devices go through different stages, etc.

I am thinking of:

enum dm_event_t {
   DMEVT_PROBE,
   DMEVT_POST_PROBE,
...
};

struct dm_event {
enum dm_event_t type;
union {
// add data for different event types in here
} data;
}

int (*dm_handler_t)(void *ctx, struct dm_event *event);

int dm_register(enum dm_event_t evtype, dm_handler_t func, void *ctx)

int dm_notify(struct udevice *dev, enum dm_event_t type, void *data);

Then the code below becomes:

dm_notify(struct udevice *dev, DMEVT_POST_PROBE, NULL);

the implementation of which will call the handler.

If you like I could create an impl of the above as a separate patch
for discussion.

>
> diff --git a/drivers/block/blk-uclass.c b/drivers/block/blk-uclass.c
> index 8fbec8779e1e..ce45cf0a8768 100644
> --- a/drivers/block/blk-uclass.c
> +++ b/drivers/block/blk-uclass.c
> @@ -9,6 +9,7 @@
>  #include 
>  #include 
>  #include 
> +#include 
>  #include 
>  #include 
>  #include 
> @@ -827,6 +828,11 @@ int blk_create_partitions(struct udevice *parent)
>
>  static int blk_post_probe(struct udevice *dev)
>  {
> +   if (CONFIG_IS_ENABLED(EFI_LOADER)) {
> +   if (efi_disk_create(dev))
> +   debug("*** efi_post_probe_device failed\n");
> +   }
> +
> if (IS_ENABLED(CONFIG_PARTITIONS) &&
> IS_ENABLED(CONFIG_HAVE_BLOCK_DEVICE)) {
> struct blk_desc *desc = dev_get_uclass_plat(dev);
> @@ -843,6 +849,10 @@ static int blk_post_probe(struct udevice *dev)
>
>  static int blk_part_post_probe(struct udevice *dev)
>  {
> +   if (CONFIG_IS_ENABLED(EFI_LOADER)) {
> +   if (efi_disk_create(dev))
> +   debug("*** efi_post_probe_device failed\n");
> +   }
> /*
>  * TODO:
>  * If we call blk_creat_partitions() here, it would allow for
> --
> 2.33.0
>

Regards,
Simon