On 3/27/23 10:24, Simon Glass wrote:
Hi Heinrich,

On Mon, 27 Mar 2023 at 19:48, Heinrich Schuchardt
<[email protected]> wrote:



On 3/27/23 06:00, Simon Glass wrote:
Hi Heinrich,

On Mon, 27 Mar 2023 at 06:27, Heinrich Schuchardt
<[email protected]> wrote:

Currently the device paths don't match the dm tree.
We should create a device path node per dm tree node.

Signed-off-by: Heinrich Schuchardt <[email protected]>
---
   include/dm/uclass.h | 5 +++++
   1 file changed, 5 insertions(+)

This affects very few uclasses but adds a field to all of them. I
think an event might be best for this. We can add an event spy in each
of the affected uclasses.

EVENT_SPY does not allow to return information to the emitter of the event.

You just add it into unio event_data

If you have multiple listeners for a single event, you can't be sure who added what.



event_notfify() does not allow to select a single recipient.

Do you need that? You can check whether the uclass matches, for example.

Checking the uclass multiple times is not efficient.

We are talking about 1 KiB for the pointers vs repetitive coding. We should go for the simplest code and most efficient code.

If you want to save memory, (temporarily) remove unused methods in struct uclass_driver: pre_unbind, post_bind, post_remove.

Best regards

Heinrich



In struct uclass_driver there are many other fields that are rarely used:

          int (*post_bind)(struct udevice *dev);
          int (*pre_unbind)(struct udevice *dev);
          int (*pre_probe)(struct udevice *dev);
          int (*post_probe)(struct udevice *dev);
          int (*pre_remove)(struct udevice *dev);
          int (*child_post_bind)(struct udevice *dev);
          int (*child_pre_probe)(struct udevice *dev);
          int (*child_post_probe)(struct udevice *dev);

If we wanted to save memory in linker generated lists we would convert
structures with pointers to variable size arrays e.g.

struct ops * =
{
{ POST_BIND, post_bind },
{ CHILD_POST_BIND, child_post_bind},
{ END, NULL },
}


Yes. We have the same problem with devices. We have a way to resolve
this today, using tags. We use DM_TAG_EFI and there are tags for the
devices but support for using them to reduce the struct sizes is not
yet added.

We might have a problem with efficiency, since direct pointers are
faster, but of course we can address that using a suitable data
structure.

Regards,
Simon

Reply via email to