public inbox for linux-i3c@lists.infradead.org
 help / color / mirror / Atom feed
* Re: [PATCH V4 2/2] i3c: master: svc: use slow speed for first broadcast address
       [not found] ` <20240905074557.3810026-2-carlos.song@nxp.com>
@ 2024-09-05 15:12   ` Frank Li
  0 siblings, 0 replies; 5+ messages in thread
From: Frank Li @ 2024-09-05 15:12 UTC (permalink / raw)
  To: Carlos Song
  Cc: alexandre.belloni, miquel.raynal, conor.culhane, linux-i3c,
	linux-kernel, imx

On Thu, Sep 05, 2024 at 03:45:57PM +0800, Carlos Song wrote:
> I3C controller should support adjusting open drain timing for the first
> broadcast address to make I3C device working as a i2c device can see slow
> broadcast address to close its Spike Filter to change working at i3c mode.
>
> Signed-off-by: Carlos Song <carlos.song@nxp.com>
> Reviewed-by: Frank Li <frank.li@nxp.com>

Tested with https://lore.kernel.org/linux-i3c/20240719080233.842771-1-carlos.song@nxp.com/
The patch of i3c: master: svc: adjust SDR according to i3c spec is critial
at imx93-9x9-qsb boards.

Frank

> ---
> Change for V4:
> - No change. Send out together with I3C master.c fix patch.
> Change for V3:
> - No change. But miss sending it with I3C master.c fix patch.
> Change for V2:
> - Adjust variable definition order
> - Add mctrl_config description to fix build warning
> ---
>  drivers/i3c/master/svc-i3c-master.c | 52 +++++++++++++++++++++++++++++
>  1 file changed, 52 insertions(+)
>
> diff --git a/drivers/i3c/master/svc-i3c-master.c b/drivers/i3c/master/svc-i3c-master.c
> index 7c30f58e344b..423db3dca257 100644
> --- a/drivers/i3c/master/svc-i3c-master.c
> +++ b/drivers/i3c/master/svc-i3c-master.c
> @@ -184,6 +184,7 @@ struct svc_i3c_regs_save {
>   * @ibi.lock: IBI lock
>   * @lock: Transfer lock, protect between IBI work thread and callbacks from master
>   * @enabled_events: Bit masks for enable events (IBI, HotJoin).
> + * @mctrl_config: Configuration value in SVC_I3C_MCTRL for setting speed back.
>   */
>  struct svc_i3c_master {
>  	struct i3c_master_controller base;
> @@ -214,6 +215,7 @@ struct svc_i3c_master {
>  	} ibi;
>  	struct mutex lock;
>  	int enabled_events;
> +	u32 mctrl_config;
>  };
>
>  /**
> @@ -531,6 +533,54 @@ static irqreturn_t svc_i3c_master_irq_handler(int irq, void *dev_id)
>  	return IRQ_HANDLED;
>  }
>
> +static int svc_i3c_master_set_speed(struct i3c_master_controller *m,
> +				     enum i3c_open_drain_speed speed)
> +{
> +	struct svc_i3c_master *master = to_svc_i3c_master(m);
> +	struct i3c_bus *bus = i3c_master_get_bus(&master->base);
> +	u32 ppbaud, odbaud, odhpp, mconfig;
> +	unsigned long fclk_rate;
> +	int ret;
> +
> +	ret = pm_runtime_resume_and_get(master->dev);
> +	if (ret < 0) {
> +		dev_err(master->dev, "<%s> Cannot get runtime PM.\n", __func__);
> +		return ret;
> +	}
> +
> +	switch (speed) {
> +	case I3C_OPEN_DRAIN_SLOW_SPEED:
> +		fclk_rate = clk_get_rate(master->fclk);
> +		if (!fclk_rate) {
> +			ret = -EINVAL;
> +			goto rpm_out;
> +		}
> +		/*
> +		 * Set 50% duty-cycle I2C speed to I3C OPEN-DRAIN mode, so the first
> +		 * broadcast address is visible to all I2C/I3C devices on the I3C bus.
> +		 * I3C device working as a I2C device will turn off its 50ns Spike
> +		 * Filter to change to I3C mode.
> +		 */
> +		mconfig = master->mctrl_config;
> +		ppbaud = FIELD_GET(GENMASK(11, 8), mconfig);
> +		odhpp = 0;
> +		odbaud = DIV_ROUND_UP(fclk_rate, bus->scl_rate.i2c * (2 + 2 * ppbaud)) - 1;
> +		mconfig &= ~GENMASK(24, 16);
> +		mconfig |= SVC_I3C_MCONFIG_ODBAUD(odbaud) | SVC_I3C_MCONFIG_ODHPP(odhpp);
> +		writel(mconfig, master->regs + SVC_I3C_MCONFIG);
> +		break;
> +	case I3C_OPEN_DRAIN_NORMAL_SPEED:
> +		writel(master->mctrl_config, master->regs + SVC_I3C_MCONFIG);
> +		break;
> +	}
> +
> +rpm_out:
> +	pm_runtime_mark_last_busy(master->dev);
> +	pm_runtime_put_autosuspend(master->dev);
> +
> +	return ret;
> +}
> +
>  static int svc_i3c_master_bus_init(struct i3c_master_controller *m)
>  {
>  	struct svc_i3c_master *master = to_svc_i3c_master(m);
> @@ -624,6 +674,7 @@ static int svc_i3c_master_bus_init(struct i3c_master_controller *m)
>  	      SVC_I3C_MCONFIG_I2CBAUD(i2cbaud);
>  	writel(reg, master->regs + SVC_I3C_MCONFIG);
>
> +	master->mctrl_config = reg;
>  	/* Master core's registration */
>  	ret = i3c_master_get_free_addr(m, 0);
>  	if (ret < 0)
> @@ -1658,6 +1709,7 @@ static const struct i3c_master_controller_ops svc_i3c_master_ops = {
>  	.disable_ibi = svc_i3c_master_disable_ibi,
>  	.enable_hotjoin = svc_i3c_master_enable_hotjoin,
>  	.disable_hotjoin = svc_i3c_master_disable_hotjoin,
> +	.set_speed = svc_i3c_master_set_speed,
>  };
>
>  static int svc_i3c_master_prepare_clks(struct svc_i3c_master *master)
> --
> 2.34.1
>

-- 
linux-i3c mailing list
linux-i3c@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/linux-i3c

^ permalink raw reply	[flat|nested] 5+ messages in thread

* Re: [PATCH V4 1/2] i3c: master: support to adjust first broadcast address speed
       [not found] <20240905074557.3810026-1-carlos.song@nxp.com>
       [not found] ` <20240905074557.3810026-2-carlos.song@nxp.com>
@ 2024-09-09 19:58 ` Frank Li
  2024-09-09 21:03   ` Alexandre Belloni
  1 sibling, 1 reply; 5+ messages in thread
From: Frank Li @ 2024-09-09 19:58 UTC (permalink / raw)
  To: Carlos Song
  Cc: alexandre.belloni, miquel.raynal, conor.culhane, linux-i3c,
	linux-kernel, imx

On Thu, Sep 05, 2024 at 03:45:56PM +0800, Carlos Song wrote:
> According to I3C spec 6.2 Timing Specification, the Open Drain High Period
> of SCL Clock timing for first broadcast address should be adjusted to 200ns
> at least. I3C device working as i2c device will see the broadcast to close
> its Spike Filter then change to work at I3C mode. After that I3C open drain
> SCL high level should be adjusted back.
>
> Signed-off-by: Carlos Song <carlos.song@nxp.com>
> Reviewed-by: Miquel Raynal <miquel.raynal@bootlin.com>
> Reviewed-by: Frank Li <Frank.Li@nxp.com>

Alexandre Belloni:

	I have not seen these in patch work
	https://patchwork.kernel.org/project/linux-i3c/list/

	Any thing wrong. These two patches is critial for some boards.
Could you please take care it?

best regards
Frank Li

> ---
> Change for V4:
> - No change. Send this patch with svc-i3c-master.c fix patch.
> Change for V3:
> - Modify comments from Miquel's suggestion
> Chnage for V2:
> - Fix set_speed description from Frank's comment
> ---
>  drivers/i3c/master.c       | 12 ++++++++++++
>  include/linux/i3c/master.h | 16 ++++++++++++++++
>  2 files changed, 28 insertions(+)
>
> diff --git a/drivers/i3c/master.c b/drivers/i3c/master.c
> index 7028f03c2c42..6f3eb710a75d 100644
> --- a/drivers/i3c/master.c
> +++ b/drivers/i3c/master.c
> @@ -1868,6 +1868,12 @@ static int i3c_master_bus_init(struct i3c_master_controller *master)
>  		goto err_bus_cleanup;
>  	}
>
> +	if (master->ops->set_speed) {
> +		ret = master->ops->set_speed(master, I3C_OPEN_DRAIN_SLOW_SPEED);
> +		if (ret)
> +			goto err_bus_cleanup;
> +	}
> +
>  	/*
>  	 * Reset all dynamic address that may have been assigned before
>  	 * (assigned by the bootloader for example).
> @@ -1876,6 +1882,12 @@ static int i3c_master_bus_init(struct i3c_master_controller *master)
>  	if (ret && ret != I3C_ERROR_M2)
>  		goto err_bus_cleanup;
>
> +	if (master->ops->set_speed) {
> +		master->ops->set_speed(master, I3C_OPEN_DRAIN_NORMAL_SPEED);
> +		if (ret)
> +			goto err_bus_cleanup;
> +	}
> +
>  	/* Disable all slave events before starting DAA. */
>  	ret = i3c_master_disec_locked(master, I3C_BROADCAST_ADDR,
>  				      I3C_CCC_EVENT_SIR | I3C_CCC_EVENT_MR |
> diff --git a/include/linux/i3c/master.h b/include/linux/i3c/master.h
> index 074f632868d9..2a1ed05d5782 100644
> --- a/include/linux/i3c/master.h
> +++ b/include/linux/i3c/master.h
> @@ -277,6 +277,20 @@ enum i3c_bus_mode {
>  	I3C_BUS_MODE_MIXED_SLOW,
>  };
>
> +/**
> + * enum i3c_open_drain_speed - I3C open-drain speed
> + * @I3C_OPEN_DRAIN_SLOW_SPEED: Slow open-drain speed for sending the first
> + *				broadcast address. The first broadcast address at this speed
> + *				will be visible to all devices on the I3C bus. I3C devices
> + *				working in I2C mode will turn off their spike filter when
> + *				switching into I3C mode.
> + * @I3C_OPEN_DRAIN_NORMAL_SPEED: Normal open-drain speed in I3C bus mode.
> + */
> +enum i3c_open_drain_speed {
> +	I3C_OPEN_DRAIN_SLOW_SPEED,
> +	I3C_OPEN_DRAIN_NORMAL_SPEED,
> +};
> +
>  /**
>   * enum i3c_addr_slot_status - I3C address slot status
>   * @I3C_ADDR_SLOT_FREE: address is free
> @@ -436,6 +450,7 @@ struct i3c_bus {
>   *		      NULL.
>   * @enable_hotjoin: enable hot join event detect.
>   * @disable_hotjoin: disable hot join event detect.
> + * @set_speed: adjust I3C open drain mode timing.
>   */
>  struct i3c_master_controller_ops {
>  	int (*bus_init)(struct i3c_master_controller *master);
> @@ -464,6 +479,7 @@ struct i3c_master_controller_ops {
>  				 struct i3c_ibi_slot *slot);
>  	int (*enable_hotjoin)(struct i3c_master_controller *master);
>  	int (*disable_hotjoin)(struct i3c_master_controller *master);
> +	int (*set_speed)(struct i3c_master_controller *master, enum i3c_open_drain_speed speed);
>  };
>
>  /**
> --
> 2.34.1
>

-- 
linux-i3c mailing list
linux-i3c@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/linux-i3c

^ permalink raw reply	[flat|nested] 5+ messages in thread

* Re: [PATCH V4 1/2] i3c: master: support to adjust first broadcast address speed
  2024-09-09 19:58 ` [PATCH V4 1/2] i3c: master: support to adjust first broadcast address speed Frank Li
@ 2024-09-09 21:03   ` Alexandre Belloni
  2024-09-09 21:58     ` Frank Li
  0 siblings, 1 reply; 5+ messages in thread
From: Alexandre Belloni @ 2024-09-09 21:03 UTC (permalink / raw)
  To: Frank Li
  Cc: Carlos Song, miquel.raynal, conor.culhane, linux-i3c,
	linux-kernel, imx

On 09/09/2024 15:58:40-0400, Frank Li wrote:
> On Thu, Sep 05, 2024 at 03:45:56PM +0800, Carlos Song wrote:
> > According to I3C spec 6.2 Timing Specification, the Open Drain High Period
> > of SCL Clock timing for first broadcast address should be adjusted to 200ns
> > at least. I3C device working as i2c device will see the broadcast to close
> > its Spike Filter then change to work at I3C mode. After that I3C open drain
> > SCL high level should be adjusted back.
> >
> > Signed-off-by: Carlos Song <carlos.song@nxp.com>
> > Reviewed-by: Miquel Raynal <miquel.raynal@bootlin.com>
> > Reviewed-by: Frank Li <Frank.Li@nxp.com>
> 
> Alexandre Belloni:
> 
> 	I have not seen these in patch work
> 	https://patchwork.kernel.org/project/linux-i3c/list/
> 
> 	Any thing wrong. These two patches is critial for some boards.
> Could you please take care it?

They didn't make it to the list, please subscribe and resend. Also, it
is very very difficult to keep track of all the patches you sent s I'm
not sure what actually needs to be applied and what has been dropped r
superseded.

> 
> best regards
> Frank Li
> 
> > ---
> > Change for V4:
> > - No change. Send this patch with svc-i3c-master.c fix patch.
> > Change for V3:
> > - Modify comments from Miquel's suggestion
> > Chnage for V2:
> > - Fix set_speed description from Frank's comment
> > ---
> >  drivers/i3c/master.c       | 12 ++++++++++++
> >  include/linux/i3c/master.h | 16 ++++++++++++++++
> >  2 files changed, 28 insertions(+)
> >
> > diff --git a/drivers/i3c/master.c b/drivers/i3c/master.c
> > index 7028f03c2c42..6f3eb710a75d 100644
> > --- a/drivers/i3c/master.c
> > +++ b/drivers/i3c/master.c
> > @@ -1868,6 +1868,12 @@ static int i3c_master_bus_init(struct i3c_master_controller *master)
> >  		goto err_bus_cleanup;
> >  	}
> >
> > +	if (master->ops->set_speed) {
> > +		ret = master->ops->set_speed(master, I3C_OPEN_DRAIN_SLOW_SPEED);
> > +		if (ret)
> > +			goto err_bus_cleanup;
> > +	}
> > +
> >  	/*
> >  	 * Reset all dynamic address that may have been assigned before
> >  	 * (assigned by the bootloader for example).
> > @@ -1876,6 +1882,12 @@ static int i3c_master_bus_init(struct i3c_master_controller *master)
> >  	if (ret && ret != I3C_ERROR_M2)
> >  		goto err_bus_cleanup;
> >
> > +	if (master->ops->set_speed) {
> > +		master->ops->set_speed(master, I3C_OPEN_DRAIN_NORMAL_SPEED);
> > +		if (ret)
> > +			goto err_bus_cleanup;
> > +	}
> > +
> >  	/* Disable all slave events before starting DAA. */
> >  	ret = i3c_master_disec_locked(master, I3C_BROADCAST_ADDR,
> >  				      I3C_CCC_EVENT_SIR | I3C_CCC_EVENT_MR |
> > diff --git a/include/linux/i3c/master.h b/include/linux/i3c/master.h
> > index 074f632868d9..2a1ed05d5782 100644
> > --- a/include/linux/i3c/master.h
> > +++ b/include/linux/i3c/master.h
> > @@ -277,6 +277,20 @@ enum i3c_bus_mode {
> >  	I3C_BUS_MODE_MIXED_SLOW,
> >  };
> >
> > +/**
> > + * enum i3c_open_drain_speed - I3C open-drain speed
> > + * @I3C_OPEN_DRAIN_SLOW_SPEED: Slow open-drain speed for sending the first
> > + *				broadcast address. The first broadcast address at this speed
> > + *				will be visible to all devices on the I3C bus. I3C devices
> > + *				working in I2C mode will turn off their spike filter when
> > + *				switching into I3C mode.
> > + * @I3C_OPEN_DRAIN_NORMAL_SPEED: Normal open-drain speed in I3C bus mode.
> > + */
> > +enum i3c_open_drain_speed {
> > +	I3C_OPEN_DRAIN_SLOW_SPEED,
> > +	I3C_OPEN_DRAIN_NORMAL_SPEED,
> > +};
> > +
> >  /**
> >   * enum i3c_addr_slot_status - I3C address slot status
> >   * @I3C_ADDR_SLOT_FREE: address is free
> > @@ -436,6 +450,7 @@ struct i3c_bus {
> >   *		      NULL.
> >   * @enable_hotjoin: enable hot join event detect.
> >   * @disable_hotjoin: disable hot join event detect.
> > + * @set_speed: adjust I3C open drain mode timing.
> >   */
> >  struct i3c_master_controller_ops {
> >  	int (*bus_init)(struct i3c_master_controller *master);
> > @@ -464,6 +479,7 @@ struct i3c_master_controller_ops {
> >  				 struct i3c_ibi_slot *slot);
> >  	int (*enable_hotjoin)(struct i3c_master_controller *master);
> >  	int (*disable_hotjoin)(struct i3c_master_controller *master);
> > +	int (*set_speed)(struct i3c_master_controller *master, enum i3c_open_drain_speed speed);
> >  };
> >
> >  /**
> > --
> > 2.34.1
> >

-- 
Alexandre Belloni, co-owner and COO, Bootlin
Embedded Linux and Kernel engineering
https://bootlin.com

-- 
linux-i3c mailing list
linux-i3c@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/linux-i3c

^ permalink raw reply	[flat|nested] 5+ messages in thread

* Re: [PATCH V4 1/2] i3c: master: support to adjust first broadcast address speed
  2024-09-09 21:03   ` Alexandre Belloni
@ 2024-09-09 21:58     ` Frank Li
  2024-09-10  5:11       ` Carlos Song
  0 siblings, 1 reply; 5+ messages in thread
From: Frank Li @ 2024-09-09 21:58 UTC (permalink / raw)
  To: Alexandre Belloni
  Cc: Carlos Song, miquel.raynal, conor.culhane, linux-i3c,
	linux-kernel, imx

On Mon, Sep 09, 2024 at 11:03:29PM +0200, Alexandre Belloni wrote:
> On 09/09/2024 15:58:40-0400, Frank Li wrote:
> > On Thu, Sep 05, 2024 at 03:45:56PM +0800, Carlos Song wrote:
> > > According to I3C spec 6.2 Timing Specification, the Open Drain High Period
> > > of SCL Clock timing for first broadcast address should be adjusted to 200ns
> > > at least. I3C device working as i2c device will see the broadcast to close
> > > its Spike Filter then change to work at I3C mode. After that I3C open drain
> > > SCL high level should be adjusted back.
> > >
> > > Signed-off-by: Carlos Song <carlos.song@nxp.com>
> > > Reviewed-by: Miquel Raynal <miquel.raynal@bootlin.com>
> > > Reviewed-by: Frank Li <Frank.Li@nxp.com>
> >
> > Alexandre Belloni:
> >
> > 	I have not seen these in patch work
> > 	https://patchwork.kernel.org/project/linux-i3c/list/
> >
> > 	Any thing wrong. These two patches is critial for some boards.
> > Could you please take care it?
>
> They didn't make it to the list, please subscribe and resend. Also, it
> is very very difficult to keep track of all the patches you sent s I'm
> not sure what actually needs to be applied and what has been dropped r
> superseded.

Sorry for that. Only one big patches set (about hotjoin fix) and update
maintaner are directly sent from me.

There are 3 patches from carlos.
one patch already in patchwork
https://patchwork.kernel.org/project/linux-i3c/patch/20240719080233.842771-1-carlos.song@nxp.com/
the other two patches is what's talking about in this email.

Anther one from Ravindra can be dropped.

I am not sure how I can help this because there are difference contributor.

Frank

>
> >
> > best regards
> > Frank Li
> >
> > > ---
> > > Change for V4:
> > > - No change. Send this patch with svc-i3c-master.c fix patch.
> > > Change for V3:
> > > - Modify comments from Miquel's suggestion
> > > Chnage for V2:
> > > - Fix set_speed description from Frank's comment
> > > ---
> > >  drivers/i3c/master.c       | 12 ++++++++++++
> > >  include/linux/i3c/master.h | 16 ++++++++++++++++
> > >  2 files changed, 28 insertions(+)
> > >
> > > diff --git a/drivers/i3c/master.c b/drivers/i3c/master.c
> > > index 7028f03c2c42..6f3eb710a75d 100644
> > > --- a/drivers/i3c/master.c
> > > +++ b/drivers/i3c/master.c
> > > @@ -1868,6 +1868,12 @@ static int i3c_master_bus_init(struct i3c_master_controller *master)
> > >  		goto err_bus_cleanup;
> > >  	}
> > >
> > > +	if (master->ops->set_speed) {
> > > +		ret = master->ops->set_speed(master, I3C_OPEN_DRAIN_SLOW_SPEED);
> > > +		if (ret)
> > > +			goto err_bus_cleanup;
> > > +	}
> > > +
> > >  	/*
> > >  	 * Reset all dynamic address that may have been assigned before
> > >  	 * (assigned by the bootloader for example).
> > > @@ -1876,6 +1882,12 @@ static int i3c_master_bus_init(struct i3c_master_controller *master)
> > >  	if (ret && ret != I3C_ERROR_M2)
> > >  		goto err_bus_cleanup;
> > >
> > > +	if (master->ops->set_speed) {
> > > +		master->ops->set_speed(master, I3C_OPEN_DRAIN_NORMAL_SPEED);
> > > +		if (ret)
> > > +			goto err_bus_cleanup;
> > > +	}
> > > +
> > >  	/* Disable all slave events before starting DAA. */
> > >  	ret = i3c_master_disec_locked(master, I3C_BROADCAST_ADDR,
> > >  				      I3C_CCC_EVENT_SIR | I3C_CCC_EVENT_MR |
> > > diff --git a/include/linux/i3c/master.h b/include/linux/i3c/master.h
> > > index 074f632868d9..2a1ed05d5782 100644
> > > --- a/include/linux/i3c/master.h
> > > +++ b/include/linux/i3c/master.h
> > > @@ -277,6 +277,20 @@ enum i3c_bus_mode {
> > >  	I3C_BUS_MODE_MIXED_SLOW,
> > >  };
> > >
> > > +/**
> > > + * enum i3c_open_drain_speed - I3C open-drain speed
> > > + * @I3C_OPEN_DRAIN_SLOW_SPEED: Slow open-drain speed for sending the first
> > > + *				broadcast address. The first broadcast address at this speed
> > > + *				will be visible to all devices on the I3C bus. I3C devices
> > > + *				working in I2C mode will turn off their spike filter when
> > > + *				switching into I3C mode.
> > > + * @I3C_OPEN_DRAIN_NORMAL_SPEED: Normal open-drain speed in I3C bus mode.
> > > + */
> > > +enum i3c_open_drain_speed {
> > > +	I3C_OPEN_DRAIN_SLOW_SPEED,
> > > +	I3C_OPEN_DRAIN_NORMAL_SPEED,
> > > +};
> > > +
> > >  /**
> > >   * enum i3c_addr_slot_status - I3C address slot status
> > >   * @I3C_ADDR_SLOT_FREE: address is free
> > > @@ -436,6 +450,7 @@ struct i3c_bus {
> > >   *		      NULL.
> > >   * @enable_hotjoin: enable hot join event detect.
> > >   * @disable_hotjoin: disable hot join event detect.
> > > + * @set_speed: adjust I3C open drain mode timing.
> > >   */
> > >  struct i3c_master_controller_ops {
> > >  	int (*bus_init)(struct i3c_master_controller *master);
> > > @@ -464,6 +479,7 @@ struct i3c_master_controller_ops {
> > >  				 struct i3c_ibi_slot *slot);
> > >  	int (*enable_hotjoin)(struct i3c_master_controller *master);
> > >  	int (*disable_hotjoin)(struct i3c_master_controller *master);
> > > +	int (*set_speed)(struct i3c_master_controller *master, enum i3c_open_drain_speed speed);
> > >  };
> > >
> > >  /**
> > > --
> > > 2.34.1
> > >
>
> --
> Alexandre Belloni, co-owner and COO, Bootlin
> Embedded Linux and Kernel engineering
> https://bootlin.com

-- 
linux-i3c mailing list
linux-i3c@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/linux-i3c

^ permalink raw reply	[flat|nested] 5+ messages in thread

* RE: [PATCH V4 1/2] i3c: master: support to adjust first broadcast address speed
  2024-09-09 21:58     ` Frank Li
@ 2024-09-10  5:11       ` Carlos Song
  0 siblings, 0 replies; 5+ messages in thread
From: Carlos Song @ 2024-09-10  5:11 UTC (permalink / raw)
  To: Frank Li, Alexandre Belloni
  Cc: miquel.raynal@bootlin.com, conor.culhane@silvaco.com,
	linux-i3c@lists.infradead.org, linux-kernel@vger.kernel.org,
	imx@lists.linux.dev



> On Mon, Sep 09, 2024 at 11:03:29PM +0200, Alexandre Belloni wrote:
> > On 09/09/2024 15:58:40-0400, Frank Li wrote:
> > > On Thu, Sep 05, 2024 at 03:45:56PM +0800, Carlos Song wrote:
> > > > According to I3C spec 6.2 Timing Specification, the Open Drain
> > > > High Period of SCL Clock timing for first broadcast address should
> > > > be adjusted to 200ns at least. I3C device working as i2c device
> > > > will see the broadcast to close its Spike Filter then change to
> > > > work at I3C mode. After that I3C open drain SCL high level should be
> adjusted back.
> > > >
> > > > Signed-off-by: Carlos Song <carlos.song@nxp.com>
> > > > Reviewed-by: Miquel Raynal <miquel.raynal@bootlin.com>
> > > > Reviewed-by: Frank Li <Frank.Li@nxp.com>
> > >
> > > Alexandre Belloni:
> > >
> > > 	I have not seen these in patch work
> > > 	https://patchwork.kernel.org/project/linux-i3c/list/
> > >
> > > 	Any thing wrong. These two patches is critial for some boards.
> > > Could you please take care it?
> >
> > They didn't make it to the list, please subscribe and resend. Also, it
> > is very very difficult to keep track of all the patches you sent s I'm
> > not sure what actually needs to be applied and what has been dropped r
> > superseded.
> 
> Sorry for that. Only one big patches set (about hotjoin fix) and update maintaner
> are directly sent from me.
> 
> There are 3 patches from carlos.
> one patch already in patchwork
> https://patchwork.kernel.org/project/linux-i3c/patch/20240719080233.842771
> -1-carlos.song@nxp.com/
> the other two patches is what's talking about in this email.
> 

[Carlos]:
Hi,
I have subscribe to linux-i3c@lists.infradead.org. Then resend these 2 patches V5.

Sorry for confusing!

Thank you very much.

> Anther one from Ravindra can be dropped.
> 
> I am not sure how I can help this because there are difference contributor.
> 
> Frank
> 
> >
> > >
> > > best regards
> > > Frank Li
> > >
> > > > ---
> > > > Change for V4:
> > > > - No change. Send this patch with svc-i3c-master.c fix patch.
> > > > Change for V3:
> > > > - Modify comments from Miquel's suggestion Chnage for V2:
> > > > - Fix set_speed description from Frank's comment
> > > > ---
> > > >  drivers/i3c/master.c       | 12 ++++++++++++
> > > >  include/linux/i3c/master.h | 16 ++++++++++++++++
> > > >  2 files changed, 28 insertions(+)
> > > >
> > > > diff --git a/drivers/i3c/master.c b/drivers/i3c/master.c index
> > > > 7028f03c2c42..6f3eb710a75d 100644
> > > > --- a/drivers/i3c/master.c
> > > > +++ b/drivers/i3c/master.c
> > > > @@ -1868,6 +1868,12 @@ static int i3c_master_bus_init(struct
> i3c_master_controller *master)
> > > >  		goto err_bus_cleanup;
> > > >  	}
> > > >
> > > > +	if (master->ops->set_speed) {
> > > > +		ret = master->ops->set_speed(master,
> I3C_OPEN_DRAIN_SLOW_SPEED);
> > > > +		if (ret)
> > > > +			goto err_bus_cleanup;
> > > > +	}
> > > > +
> > > >  	/*
> > > >  	 * Reset all dynamic address that may have been assigned before
> > > >  	 * (assigned by the bootloader for example).
> > > > @@ -1876,6 +1882,12 @@ static int i3c_master_bus_init(struct
> i3c_master_controller *master)
> > > >  	if (ret && ret != I3C_ERROR_M2)
> > > >  		goto err_bus_cleanup;
> > > >
> > > > +	if (master->ops->set_speed) {
> > > > +		master->ops->set_speed(master,
> I3C_OPEN_DRAIN_NORMAL_SPEED);
> > > > +		if (ret)
> > > > +			goto err_bus_cleanup;
> > > > +	}
> > > > +
> > > >  	/* Disable all slave events before starting DAA. */
> > > >  	ret = i3c_master_disec_locked(master, I3C_BROADCAST_ADDR,
> > > >  				      I3C_CCC_EVENT_SIR | I3C_CCC_EVENT_MR |
> diff --git
> > > > a/include/linux/i3c/master.h b/include/linux/i3c/master.h index
> > > > 074f632868d9..2a1ed05d5782 100644
> > > > --- a/include/linux/i3c/master.h
> > > > +++ b/include/linux/i3c/master.h
> > > > @@ -277,6 +277,20 @@ enum i3c_bus_mode {
> > > >  	I3C_BUS_MODE_MIXED_SLOW,
> > > >  };
> > > >
> > > > +/**
> > > > + * enum i3c_open_drain_speed - I3C open-drain speed
> > > > + * @I3C_OPEN_DRAIN_SLOW_SPEED: Slow open-drain speed for sending
> the first
> > > > + *				broadcast address. The first broadcast address at this
> speed
> > > > + *				will be visible to all devices on the I3C bus. I3C devices
> > > > + *				working in I2C mode will turn off their spike filter when
> > > > + *				switching into I3C mode.
> > > > + * @I3C_OPEN_DRAIN_NORMAL_SPEED: Normal open-drain speed in
> I3C bus mode.
> > > > + */
> > > > +enum i3c_open_drain_speed {
> > > > +	I3C_OPEN_DRAIN_SLOW_SPEED,
> > > > +	I3C_OPEN_DRAIN_NORMAL_SPEED,
> > > > +};
> > > > +
> > > >  /**
> > > >   * enum i3c_addr_slot_status - I3C address slot status
> > > >   * @I3C_ADDR_SLOT_FREE: address is free @@ -436,6 +450,7 @@
> > > > struct i3c_bus {
> > > >   *		      NULL.
> > > >   * @enable_hotjoin: enable hot join event detect.
> > > >   * @disable_hotjoin: disable hot join event detect.
> > > > + * @set_speed: adjust I3C open drain mode timing.
> > > >   */
> > > >  struct i3c_master_controller_ops {
> > > >  	int (*bus_init)(struct i3c_master_controller *master); @@ -464,6
> > > > +479,7 @@ struct i3c_master_controller_ops {
> > > >  				 struct i3c_ibi_slot *slot);
> > > >  	int (*enable_hotjoin)(struct i3c_master_controller *master);
> > > >  	int (*disable_hotjoin)(struct i3c_master_controller *master);
> > > > +	int (*set_speed)(struct i3c_master_controller *master, enum
> > > > +i3c_open_drain_speed speed);
> > > >  };
> > > >
> > > >  /**
> > > > --
> > > > 2.34.1
> > > >
> >
> > --
> > Alexandre Belloni, co-owner and COO, Bootlin Embedded Linux and Kernel
> > engineering https://bootlin.com

-- 
linux-i3c mailing list
linux-i3c@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/linux-i3c

^ permalink raw reply	[flat|nested] 5+ messages in thread

end of thread, other threads:[~2024-09-10  5:18 UTC | newest]

Thread overview: 5+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
     [not found] <20240905074557.3810026-1-carlos.song@nxp.com>
     [not found] ` <20240905074557.3810026-2-carlos.song@nxp.com>
2024-09-05 15:12   ` [PATCH V4 2/2] i3c: master: svc: use slow speed for first broadcast address Frank Li
2024-09-09 19:58 ` [PATCH V4 1/2] i3c: master: support to adjust first broadcast address speed Frank Li
2024-09-09 21:03   ` Alexandre Belloni
2024-09-09 21:58     ` Frank Li
2024-09-10  5:11       ` Carlos Song

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox