Re: [PATCH v6 2/3] i3c: master: Extend address status bit to 4 and add I3C_ADDR_SLOT_EXT_DESIRED

From: Frank Li
Date: Fri Oct 04 2024 - 16:11:09 EST


On Fri, Oct 04, 2024 at 06:22:29PM +0200, Miquel Raynal wrote:
> Hi Frank,
>
> > > > @@ -1918,9 +1959,10 @@ static int i3c_master_bus_init(struct i3c_master_controller *master)
> > > > goto err_rstdaa;
> > > > }
> > > >
> > > > - i3c_bus_set_addr_slot_status(&master->bus,
> > > > - i3cboardinfo->init_dyn_addr,
> > > > - I3C_ADDR_SLOT_I3C_DEV);
> > > > + i3c_bus_set_addr_slot_status_mask(&master->bus,
> > > > + i3cboardinfo->init_dyn_addr,
> > > > + I3C_ADDR_SLOT_I3C_DEV | I3C_ADDR_SLOT_EXT_DESIRED,
> > > > + I3C_ADDR_SLOT_EXT_STATUS_MASK);
> > >
> > > However I'm not sure I understand the use of the
> > > set_addr_slot_status_mask() function. Can't we just use the normal
> > > function and just extend the mask in the fist place?
> >
> > The major purpose of set_addr_slot_status_mask() is that reduce code
> > change. There are already address alloc/free by using I3C_ADDR_SLOT_FREE.
> >
> > we don't want i3c_bus_set_addr_slot_status() touch bit
> > I3C_ADDR_SLOT_EXT_DESIRED since it was init at scan dts.
>
> I agree, but in general you will never remove any "desired" slot, so
> the "set status", besides at init time, should never touch these extra
> bits?

I am not sure I understand what your means exactly.

Yes, it is first and only place to set I3C_ADDR_SLOT_EXT_DESIRED.

Other place's i3c_bus_set_addr_slot_status() will not touch these bits.

Frank

>
> > There are 18 place, using i3c_bus_set_addr_slot_status(), but we only need
> > touch I3C_ADDR_SLOT_EXT_DESIRED bit when scan dts.
> >
>
> Thanks,
> Miquèl