Re: [PATCH v1 i2c-master] i2c: microchip: pci1xxxx: Update Timing registers
From: Andy Shevchenko
Date: Mon Mar 20 2023 - 11:43:08 EST
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