Re: [PATCH v1 i2c-master] i2c: microchip: pci1xxxx: Update Timing registers

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



On Mon, Mar 20, 2023 at 07:52:37PM +0530, Tharun Kumar P wrote:
> Update I2C timing registers based on latest hardware design.
> This fix does not break functionality of chips with older design and
> existing users will not be affected.

Reviewed-by: Andy Shevchenko <andriy.shevchenko@xxxxxxxxxxxxxxx>

> Fixes: 361693697249 ("i2c: microchip: pci1xxxx: Add driver for I2C host controller in multifunction endpoint of pci1xxxx switch")
> Signed-off-by: Tharun Kumar P <tharunkumar.pasumarthi@xxxxxxxxxxxxx>
> ---
> v0 -> v1:
> - Update commit description as per review comments
> ---
>  drivers/i2c/busses/i2c-mchp-pci1xxxx.c | 60 +++++++++++++-------------
>  1 file changed, 30 insertions(+), 30 deletions(-)
> 
> diff --git a/drivers/i2c/busses/i2c-mchp-pci1xxxx.c b/drivers/i2c/busses/i2c-mchp-pci1xxxx.c
> index 09af75921147..b21ffd6df927 100644
> --- a/drivers/i2c/busses/i2c-mchp-pci1xxxx.c
> +++ b/drivers/i2c/busses/i2c-mchp-pci1xxxx.c
> @@ -48,9 +48,9 @@
>   * SR_HOLD_TIME_XK_TICKS field will indicate the number of ticks of the
>   * baud clock required to program 'Hold Time' at X KHz.
>   */
> -#define SR_HOLD_TIME_100K_TICKS	133
> -#define SR_HOLD_TIME_400K_TICKS	20
> -#define SR_HOLD_TIME_1000K_TICKS	11
> +#define SR_HOLD_TIME_100K_TICKS		150
> +#define SR_HOLD_TIME_400K_TICKS		20
> +#define SR_HOLD_TIME_1000K_TICKS	12
>  
>  #define SMB_CORE_COMPLETION_REG_OFF3	(SMBUS_MAST_CORE_ADDR_BASE + 0x23)
>  
> @@ -65,17 +65,17 @@
>   * the baud clock required to program 'fair idle delay' at X KHz. Fair idle
>   * delay establishes the MCTP T(IDLE_DELAY) period.
>   */
> -#define FAIR_BUS_IDLE_MIN_100K_TICKS		969
> -#define FAIR_BUS_IDLE_MIN_400K_TICKS		157
> -#define FAIR_BUS_IDLE_MIN_1000K_TICKS		157
> +#define FAIR_BUS_IDLE_MIN_100K_TICKS		992
> +#define FAIR_BUS_IDLE_MIN_400K_TICKS		500
> +#define FAIR_BUS_IDLE_MIN_1000K_TICKS		500
>  
>  /*
>   * FAIR_IDLE_DELAY_XK_TICKS field will indicate the number of ticks of the
>   * baud clock required to satisfy the fairness protocol at X KHz.
>   */
> -#define FAIR_IDLE_DELAY_100K_TICKS	1000
> -#define FAIR_IDLE_DELAY_400K_TICKS	500
> -#define FAIR_IDLE_DELAY_1000K_TICKS	500
> +#define FAIR_IDLE_DELAY_100K_TICKS	963
> +#define FAIR_IDLE_DELAY_400K_TICKS	156
> +#define FAIR_IDLE_DELAY_1000K_TICKS	156
>  
>  #define SMB_IDLE_SCALING_100K		\
>  	((FAIR_IDLE_DELAY_100K_TICKS << 16) | FAIR_BUS_IDLE_MIN_100K_TICKS)
> @@ -105,7 +105,7 @@
>   */
>  #define BUS_CLK_100K_LOW_PERIOD_TICKS		156
>  #define BUS_CLK_400K_LOW_PERIOD_TICKS		41
> -#define BUS_CLK_1000K_LOW_PERIOD_TICKS	15
> +#define BUS_CLK_1000K_LOW_PERIOD_TICKS		15
>  
>  /*
>   * BUS_CLK_XK_HIGH_PERIOD_TICKS field defines the number of I2C Baud Clock
> @@ -131,7 +131,7 @@
>   */
>  #define CLK_SYNC_100K			4
>  #define CLK_SYNC_400K			4
> -#define CLK_SYNC_1000K		4
> +#define CLK_SYNC_1000K			4
>  
>  #define SMB_CORE_DATA_TIMING_REG_OFF	(SMBUS_MAST_CORE_ADDR_BASE + 0x40)
>  
> @@ -142,25 +142,25 @@
>   * determines the SCLK hold time following SDAT driven low during the first
>   * START bit in a transfer.
>   */
> -#define FIRST_START_HOLD_100K_TICKS	22
> -#define FIRST_START_HOLD_400K_TICKS	16
> -#define FIRST_START_HOLD_1000K_TICKS	6
> +#define FIRST_START_HOLD_100K_TICKS	23
> +#define FIRST_START_HOLD_400K_TICKS	8
> +#define FIRST_START_HOLD_1000K_TICKS	12
>  
>  /*
>   * STOP_SETUP_XK_TICKS will indicate the number of ticks of the baud clock
>   * required to program 'STOP_SETUP' timer at X KHz. This timer determines the
>   * SDAT setup time from the rising edge of SCLK for a STOP condition.
>   */
> -#define STOP_SETUP_100K_TICKS		157
> +#define STOP_SETUP_100K_TICKS		150
>  #define STOP_SETUP_400K_TICKS		20
> -#define STOP_SETUP_1000K_TICKS	12
> +#define STOP_SETUP_1000K_TICKS		12
>  
>  /*
>   * RESTART_SETUP_XK_TICKS will indicate the number of ticks of the baud clock
>   * required to program 'RESTART_SETUP' timer at X KHz. This timer determines the
>   * SDAT setup time from the rising edge of SCLK for a repeated START condition.
>   */
> -#define RESTART_SETUP_100K_TICKS	157
> +#define RESTART_SETUP_100K_TICKS	156
>  #define RESTART_SETUP_400K_TICKS	20
>  #define RESTART_SETUP_1000K_TICKS	12
>  
> @@ -169,7 +169,7 @@
>   * required to program 'DATA_HOLD' timer at X KHz. This timer determines the
>   * SDAT hold time following SCLK driven low.
>   */
> -#define DATA_HOLD_100K_TICKS		2
> +#define DATA_HOLD_100K_TICKS		12
>  #define DATA_HOLD_400K_TICKS		2
>  #define DATA_HOLD_1000K_TICKS		2
>  
> @@ -190,35 +190,35 @@
>   * Bus Idle Minimum time = BUS_IDLE_MIN[7:0] x Baud_Clock_Period x
>   * (BUS_IDLE_MIN_XK_TICKS[7] ? 4,1)
>   */
> -#define BUS_IDLE_MIN_100K_TICKS		167UL
> -#define BUS_IDLE_MIN_400K_TICKS		139UL
> -#define BUS_IDLE_MIN_1000K_TICKS		133UL
> +#define BUS_IDLE_MIN_100K_TICKS		36UL
> +#define BUS_IDLE_MIN_400K_TICKS		10UL
> +#define BUS_IDLE_MIN_1000K_TICKS	4UL
>  
>  /*
>   * CTRL_CUM_TIME_OUT_XK_TICKS defines SMBus Controller Cumulative Time-Out.
>   * SMBus Controller Cumulative Time-Out duration =
>   * CTRL_CUM_TIME_OUT_XK_TICKS[7:0] x Baud_Clock_Period x 2048
>   */
> -#define CTRL_CUM_TIME_OUT_100K_TICKS		159
> -#define CTRL_CUM_TIME_OUT_400K_TICKS		159
> -#define CTRL_CUM_TIME_OUT_1000K_TICKS		159
> +#define CTRL_CUM_TIME_OUT_100K_TICKS		76
> +#define CTRL_CUM_TIME_OUT_400K_TICKS		76
> +#define CTRL_CUM_TIME_OUT_1000K_TICKS		76
>  
>  /*
>   * TARGET_CUM_TIME_OUT_XK_TICKS defines SMBus Target Cumulative Time-Out duration.
>   * SMBus Target Cumulative Time-Out duration = TARGET_CUM_TIME_OUT_XK_TICKS[7:0] x
>   * Baud_Clock_Period x 4096
>   */
> -#define TARGET_CUM_TIME_OUT_100K_TICKS	199
> -#define TARGET_CUM_TIME_OUT_400K_TICKS	199
> -#define TARGET_CUM_TIME_OUT_1000K_TICKS	199
> +#define TARGET_CUM_TIME_OUT_100K_TICKS	95
> +#define TARGET_CUM_TIME_OUT_400K_TICKS	95
> +#define TARGET_CUM_TIME_OUT_1000K_TICKS	95
>  
>  /*
>   * CLOCK_HIGH_TIME_OUT_XK defines Clock High time out period.
>   * Clock High time out period = CLOCK_HIGH_TIME_OUT_XK[7:0] x Baud_Clock_Period x 8
>   */
> -#define CLOCK_HIGH_TIME_OUT_100K_TICKS	204
> -#define CLOCK_HIGH_TIME_OUT_400K_TICKS	204
> -#define CLOCK_HIGH_TIME_OUT_1000K_TICKS	204
> +#define CLOCK_HIGH_TIME_OUT_100K_TICKS	97
> +#define CLOCK_HIGH_TIME_OUT_400K_TICKS	97
> +#define CLOCK_HIGH_TIME_OUT_1000K_TICKS	97
>  
>  #define TO_SCALING_100K		\
>  	((BUS_IDLE_MIN_100K_TICKS << 24) | (CTRL_CUM_TIME_OUT_100K_TICKS << 16) | \
> -- 
> 2.25.1
> 

-- 
With Best Regards,
Andy Shevchenko





[Index of Archives]     [Linux GPIO]     [Linux SPI]     [Linux Hardward Monitoring]     [LM Sensors]     [Linux USB Devel]     [Linux Media]     [Video for Linux]     [Linux Audio Users]     [Yosemite News]     [Linux Kernel]     [Linux SCSI]

  Powered by Linux