public inbox for linux-i3c@lists.infradead.org
 help / color / mirror / Atom feed
  • * 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

  • 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