i2c: thunderx: Support for High speed mode
authorSuneel Garapati <sgarapati@marvell.com>
Tue, 23 Apr 2024 07:46:05 +0000 (00:46 -0700)
committerAndi Shyti <andi.shyti@kernel.org>
Sun, 5 May 2024 22:56:39 +0000 (00:56 +0200)
commit03240f826b02929476abd7c3a3cc132cc65c8614
tree9d5205d259ce538e9ac0f6e18c519bdf24a21e33
parent114c69f4be3f3a55355b2f1db46a820bb0364457
i2c: thunderx: Support for High speed mode

To support bus operations for high speed bus frequencies greater than
400KHZ following control bits need to be setup accordingly
 - hs_mode (bit 0) field in Mode register to switch controller
   between low-speed and high-speed frequency operating mode.
 - Setup clock divisors for desired TWSI bus frequency using
   FOSCL output frequency divisor (D):
   0 - sets the divisor to 10 for low speed mode
   1 - sets the divisor to 15 for high speed mode.
The TWSI bus output frequency, in master mode is based on:
                TCLK = 100MHz / (THP + 2)
                FOSCL = FSAMP / (M+1)×D = TCLK / (2 ^ N × (M + 1) × 15)
                FSAMP = TCLK / 2 ^ N
where,
        N is <2:0> and M is <6:3> of TWSI Clock Control Register
        D is 10 for low speed or 15 for HS_MODE

With high speed mode support, HLC mode usage is limited to
low speed frequency (<=400KHz) bus transfers in hardware.

Signed-off-by: Suneel Garapati <sgarapati@marvell.com>
Signed-off-by: Piyush Malgujar <pmalgujar@marvell.com>
Signed-off-by: Andi Shyti <andi.shyti@kernel.org>
drivers/i2c/busses/i2c-octeon-core.c
drivers/i2c/busses/i2c-octeon-core.h
drivers/i2c/busses/i2c-thunderx-pcidrv.c