diff mbox series

[v4,6/6] i3c: master: dw: reattach device on first available location of address table

Message ID 20191210101502.8401-7-pgaj@cadence.com (mailing list archive)
State Superseded
Headers show
Series I3C device addresing adjustments | expand

Commit Message

Przemysław Gaj Dec. 10, 2019, 10:15 a.m. UTC
From: Vitor Soares <vitor.soares@synopsys.com>

For today the reattach function only update the device address on the
controller.

Update the location to the first available too, will optimize the
enumeration process avoiding additional checks to keep the available
positions on address table consecutive.

Signed-off-by: Vitor Soares <vitor.soares@synopsys.com>
Reviewed-by: Boris Brezillon <boris.brezillon@collabora.com>
Signed-off-by: Przemyslaw Gaj <pgaj@cadence.com>
---
Change in v3:
  - None

Change in v2:
  - Add Boris rb-tag
---
 drivers/i3c/master/dw-i3c-master.c | 16 ++++++++++++++++
 1 file changed, 16 insertions(+)

Comments

Vitor Soares Dec. 10, 2019, 2:40 p.m. UTC | #1
++João Pinto

Hi Przemysław,

Sorry for this, but please drop this patch from this series. Boris as 
Maintainer could already merge it when gives rb tag.

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

> From: Vitor Soares <vitor.soares@synopsys.com>
> 
> For today the reattach function only update the device address on the
> controller.
> 
> Update the location to the first available too, will optimize the
> enumeration process avoiding additional checks to keep the available
> positions on address table consecutive.
> 
> Signed-off-by: Vitor Soares <vitor.soares@synopsys.com>
> Reviewed-by: Boris Brezillon <boris.brezillon@collabora.com>
> Signed-off-by: Przemyslaw Gaj <pgaj@cadence.com>
> ---
> Change in v3:
>   - None
> 
> Change in v2:
>   - Add Boris rb-tag
> ---
>  drivers/i3c/master/dw-i3c-master.c | 16 ++++++++++++++++
>  1 file changed, 16 insertions(+)
> 
> diff --git a/drivers/i3c/master/dw-i3c-master.c b/drivers/i3c/master/dw-i3c-master.c
> index b0ff0e12d84c..c6caba39a34b 100644
> --- a/drivers/i3c/master/dw-i3c-master.c
> +++ b/drivers/i3c/master/dw-i3c-master.c
> @@ -899,6 +899,22 @@ static int dw_i3c_master_reattach_i3c_dev(struct i3c_dev_desc *dev,
>  	struct dw_i3c_i2c_dev_data *data = i3c_dev_get_master_data(dev);
>  	struct i3c_master_controller *m = i3c_dev_get_master(dev);
>  	struct dw_i3c_master *master = to_dw_i3c_master(m);
> +	int pos;
> +
> +	pos = dw_i3c_master_get_free_pos(master);
> +
> +	if (data->index > pos && pos > 0) {
> +		writel(0,
> +		       master->regs +
> +		       DEV_ADDR_TABLE_LOC(master->datstartaddr, data->index));
> +
> +		master->addrs[data->index] = 0;
> +		master->free_pos |= BIT(data->index);
> +
> +		data->index = pos;
> +		master->addrs[pos] = dev->info.dyn_addr;
> +		master->free_pos &= ~BIT(pos);
> +	}
>  
>  	writel(DEV_ADDR_TABLE_DYNAMIC_ADDR(dev->info.dyn_addr),
>  	       master->regs +
> -- 
> 2.14.0

Best regards,
Vitor Soares
Przemysław Gaj Dec. 10, 2019, 2:43 p.m. UTC | #2
Hi Vitor,

The 12/10/2019 14:40, Vitor Soares wrote:
> 
> ++João Pinto
> 
> Hi Przemysław,
> 
> Sorry for this, but please drop this patch from this series. Boris as 
> Maintainer could already merge it when gives rb tag.

OK, understand. Thank you for the information.

> 
> From: Przemysław Gaj <pgaj@cadence.com>
> Date: Tue, Dec 10, 2019 at 10:15:02
> 
> > From: Vitor Soares <vitor.soares@synopsys.com>
> > 
> > For today the reattach function only update the device address on the
> > controller.
> > 
> > Update the location to the first available too, will optimize the
> > enumeration process avoiding additional checks to keep the available
> > positions on address table consecutive.
> > 
> > Signed-off-by: Vitor Soares <vitor.soares@synopsys.com>
> > Reviewed-by: Boris Brezillon <boris.brezillon@collabora.com>
> > Signed-off-by: Przemyslaw Gaj <pgaj@cadence.com>
> > ---
> > Change in v3:
> >   - None
> > 
> > Change in v2:
> >   - Add Boris rb-tag
> > ---
> >  drivers/i3c/master/dw-i3c-master.c | 16 ++++++++++++++++
> >  1 file changed, 16 insertions(+)
> > 
> > diff --git a/drivers/i3c/master/dw-i3c-master.c b/drivers/i3c/master/dw-i3c-master.c
> > index b0ff0e12d84c..c6caba39a34b 100644
> > --- a/drivers/i3c/master/dw-i3c-master.c
> > +++ b/drivers/i3c/master/dw-i3c-master.c
> > @@ -899,6 +899,22 @@ static int dw_i3c_master_reattach_i3c_dev(struct i3c_dev_desc *dev,
> >  	struct dw_i3c_i2c_dev_data *data = i3c_dev_get_master_data(dev);
> >  	struct i3c_master_controller *m = i3c_dev_get_master(dev);
> >  	struct dw_i3c_master *master = to_dw_i3c_master(m);
> > +	int pos;
> > +
> > +	pos = dw_i3c_master_get_free_pos(master);
> > +
> > +	if (data->index > pos && pos > 0) {
> > +		writel(0,
> > +		       master->regs +
> > +		       DEV_ADDR_TABLE_LOC(master->datstartaddr, data->index));
> > +
> > +		master->addrs[data->index] = 0;
> > +		master->free_pos |= BIT(data->index);
> > +
> > +		data->index = pos;
> > +		master->addrs[pos] = dev->info.dyn_addr;
> > +		master->free_pos &= ~BIT(pos);
> > +	}
> >  
> >  	writel(DEV_ADDR_TABLE_DYNAMIC_ADDR(dev->info.dyn_addr),
> >  	       master->regs +
> > -- 
> > 2.14.0
> 
> Best regards,
> Vitor Soares
Boris Brezillon Dec. 10, 2019, 2:52 p.m. UTC | #3
On Tue, 10 Dec 2019 14:40:49 +0000
Vitor Soares <Vitor.Soares@synopsys.com> wrote:

> ++João Pinto
> 
> Hi Przemysław,
> 
> Sorry for this, but please drop this patch from this series. Boris as 
> Maintainer could already merge it when gives rb tag.

Noted, I'll queue that one separately (IIUC, it's independent from the
rest of the series).

> 
> From: Przemysław Gaj <pgaj@cadence.com>
> Date: Tue, Dec 10, 2019 at 10:15:02
> 
> > From: Vitor Soares <vitor.soares@synopsys.com>
> > 
> > For today the reattach function only update the device address on the
> > controller.
> > 
> > Update the location to the first available too, will optimize the
> > enumeration process avoiding additional checks to keep the available
> > positions on address table consecutive.
> > 
> > Signed-off-by: Vitor Soares <vitor.soares@synopsys.com>
> > Reviewed-by: Boris Brezillon <boris.brezillon@collabora.com>
> > Signed-off-by: Przemyslaw Gaj <pgaj@cadence.com>
> > ---
> > Change in v3:
> >   - None
> > 
> > Change in v2:
> >   - Add Boris rb-tag
> > ---
> >  drivers/i3c/master/dw-i3c-master.c | 16 ++++++++++++++++
> >  1 file changed, 16 insertions(+)
> > 
> > diff --git a/drivers/i3c/master/dw-i3c-master.c b/drivers/i3c/master/dw-i3c-master.c
> > index b0ff0e12d84c..c6caba39a34b 100644
> > --- a/drivers/i3c/master/dw-i3c-master.c
> > +++ b/drivers/i3c/master/dw-i3c-master.c
> > @@ -899,6 +899,22 @@ static int dw_i3c_master_reattach_i3c_dev(struct i3c_dev_desc *dev,
> >  	struct dw_i3c_i2c_dev_data *data = i3c_dev_get_master_data(dev);
> >  	struct i3c_master_controller *m = i3c_dev_get_master(dev);
> >  	struct dw_i3c_master *master = to_dw_i3c_master(m);
> > +	int pos;
> > +
> > +	pos = dw_i3c_master_get_free_pos(master);
> > +
> > +	if (data->index > pos && pos > 0) {
> > +		writel(0,
> > +		       master->regs +
> > +		       DEV_ADDR_TABLE_LOC(master->datstartaddr, data->index));
> > +
> > +		master->addrs[data->index] = 0;
> > +		master->free_pos |= BIT(data->index);
> > +
> > +		data->index = pos;
> > +		master->addrs[pos] = dev->info.dyn_addr;
> > +		master->free_pos &= ~BIT(pos);
> > +	}
> >  
> >  	writel(DEV_ADDR_TABLE_DYNAMIC_ADDR(dev->info.dyn_addr),
> >  	       master->regs +
> > -- 
> > 2.14.0  
> 
> Best regards,
> Vitor Soares
diff mbox series

Patch

diff --git a/drivers/i3c/master/dw-i3c-master.c b/drivers/i3c/master/dw-i3c-master.c
index b0ff0e12d84c..c6caba39a34b 100644
--- a/drivers/i3c/master/dw-i3c-master.c
+++ b/drivers/i3c/master/dw-i3c-master.c
@@ -899,6 +899,22 @@  static int dw_i3c_master_reattach_i3c_dev(struct i3c_dev_desc *dev,
 	struct dw_i3c_i2c_dev_data *data = i3c_dev_get_master_data(dev);
 	struct i3c_master_controller *m = i3c_dev_get_master(dev);
 	struct dw_i3c_master *master = to_dw_i3c_master(m);
+	int pos;
+
+	pos = dw_i3c_master_get_free_pos(master);
+
+	if (data->index > pos && pos > 0) {
+		writel(0,
+		       master->regs +
+		       DEV_ADDR_TABLE_LOC(master->datstartaddr, data->index));
+
+		master->addrs[data->index] = 0;
+		master->free_pos |= BIT(data->index);
+
+		data->index = pos;
+		master->addrs[pos] = dev->info.dyn_addr;
+		master->free_pos &= ~BIT(pos);
+	}
 
 	writel(DEV_ADDR_TABLE_DYNAMIC_ADDR(dev->info.dyn_addr),
 	       master->regs +