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

Simon Glass
2021-10-11T14:55:35Z

Hi Takahiro,

On Sun, 10 Oct 2021 at 21:15, AKASHI Takahiro
<takahiro.akashi@linaro.org> 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
> > <takahiro.akashi@linaro.org> 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 <takahiro.akashi@linaro.org>
> > > ---
> > > 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