Re: [PATCH v2 2/2] i2c: qcom-geni: add I2C frequency table for 32 MHz firmware-based SEs
From: Konrad Dybcio
Date: Mon Aug 24 2026 - 05:27:53 EST
On 8/12/26 10:30 AM, Kathiravan Thirumoorthy wrote:
> On IPQ5424, the I2C controller can operate on both RTL-hardened SEs
> and firmware-based SEs. As documented in commit 506bb2ab0075
> ("i2c: qcom-geni: Support systems with 32MHz serial engine clock"),
> in IPQ5424 SEs use a 32 MHz source clock.
>
> The existing frequency table does not provide the required SCL timing
> parameters for firmware-based SEs. Add a dedicated frequency table
> using the SCL counter values recommended by the hardware design team
> and select it for firmware-based SEs to achieve the target bus
> frequencies.
>
> Move geni_i2c_clk_map_idx() from geni_i2c_resources_init() to
> geni_i2c_init() to ensure SE_HW_PARAM_2 is accessed only after the
> required clocks have been enabled.
>
> Signed-off-by: Kathiravan Thirumoorthy <kathiravan.thirumoorthy@xxxxxxxxxxxxxxxx>
> ---
> drivers/i2c/busses/i2c-qcom-geni.c | 25 ++++++++++++++++++-------
> include/linux/soc/qcom/geni-se.h | 1 +
> 2 files changed, 19 insertions(+), 7 deletions(-)
>
> diff --git a/drivers/i2c/busses/i2c-qcom-geni.c b/drivers/i2c/busses/i2c-qcom-geni.c
> index 00013b41a6f5..15835f10b062 100644
> --- a/drivers/i2c/busses/i2c-qcom-geni.c
> +++ b/drivers/i2c/busses/i2c-qcom-geni.c
> @@ -187,19 +187,28 @@ static const struct geni_i2c_clk_fld geni_i2c_clk_map_19p2mhz[] = {
> };
>
> /* source_clock = 32 MHz */
> -static const struct geni_i2c_clk_fld geni_i2c_clk_map_32mhz[] = {
> +static const struct geni_i2c_clk_fld geni_i2c_clk_map_32mhz_minicore[] = {
> { I2C_MAX_STANDARD_MODE_FREQ, 12, 9, 10, 26 },
> { I2C_MAX_FAST_MODE_FREQ, 4, 3, 9, 19 },
> { I2C_MAX_FAST_MODE_PLUS_FREQ, 2, 3, 5, 15 },
> {}
> };
>
> +static const struct geni_i2c_clk_fld geni_i2c_clk_map_32mhz_fwcore[] = {
> + { I2C_MAX_STANDARD_MODE_FREQ, 12, 9, 10, 25 },
> + { I2C_MAX_FAST_MODE_FREQ, 4, 3, 9, 18 },
> + { I2C_MAX_FAST_MODE_PLUS_FREQ, 1, 6, 15, 29 },
> + {}
> +};
The fwcore one seems to be slightly "stricter" - wouldn't it work
for both of them?
Konrad