RE: [PATCH v4 2/6] i3c: master: pre-reserve boardinfo->init_dyn_addr when available

Vitor Soares
2019-12-10T15:25:07Z

Hi Przemysław,

From: Przemysław Gaj <pgaj@cadence.com>
Date: Tue, Dec 10, 2019 at 10:14:58

> It may be the case that SETDASA fails for some reason. Reserve
> ->init_dyn_addr when it's defined to prevent assigning this address
> to another slave device. This way when device shows up we don't
> have to re-assign addresses.
>
> Signed-off-by: Przemysław Gaj <pgaj@cadence.com>
> ---
> drivers/i3c/master.c | 8 +++++++-
> 1 file changed, 7 insertions(+), 1 deletion(-)
>
> diff --git a/drivers/i3c/master.c b/drivers/i3c/master.c
> index 5c06c41e6660..fab6e0609fca 100755
> --- a/drivers/i3c/master.c
> +++ b/drivers/i3c/master.c
> @@ -1263,7 +1263,8 @@ static void i3c_master_put_i3c_addrs(struct i3c_dev_desc *dev)
> I3C_ADDR_SLOT_FREE);
>
> if (dev->boardinfo && dev->boardinfo->init_dyn_addr)
> - i3c_bus_set_addr_slot_status(&master->bus, dev->info.dyn_addr,
> + i3c_bus_set_addr_slot_status(&master->bus,
> + dev->boardinfo->init_dyn_addr,
> I3C_ADDR_SLOT_FREE);
> }
>
> @@ -1675,6 +1676,11 @@ static int i3c_master_bus_init(struct i3c_master_controller *master)
> ret = -EBUSY;
> goto err_detach_devs;
> }
> +
> + /* Reserve the slot. */
> + i3c_bus_set_addr_slot_status(&master->bus,
> + i3cboardinfo->init_dyn_addr,
> + I3C_ADDR_SLOT_I3C_DEV);
> }
>
> i3cdev = i3c_master_alloc_i3c_dev(master, &info);
> --
> 2.14.0

In my experience we should pre-reserve all DT DA entries and not use them
during the ENTDAA for safety reasons.
That would be one of my next steps in this patch series.

Best regards,
Vitor Soares