* [PATCH v2 0/2] I2C SCL counter updates for Qualcomm IPQ5424 SoC
@ 2026-08-12 8:30 Kathiravan Thirumoorthy
2026-08-12 8:30 ` [PATCH v2 1/2] i2c: qcom-geni: update frequency table to fix timing parameters Kathiravan Thirumoorthy
2026-08-12 8:30 ` [PATCH v2 2/2] i2c: qcom-geni: add I2C frequency table for 32 MHz firmware-based SEs Kathiravan Thirumoorthy
0 siblings, 2 replies; 5+ messages in thread
From: Kathiravan Thirumoorthy @ 2026-08-12 8:30 UTC (permalink / raw)
To: Mukesh Kumar Savaliya, Viken Dadhaniya, Andi Shyti,
Manikanta Mylavarapu, Bjorn Andersson, Konrad Dybcio
Cc: Mukesh Kumar Savaliya, linux-i2c, linux-arm-msm, linux-kernel,
Kathiravan Thirumoorthy, stable
To meet the specification requirement in the standard-mode bus frequency,
update the SCL counters as recommended by the design team.
IPQ5424 uses 32MHz source clock for the I2C and I2C is supported on both
RTL-hardened and firmware based SEs. The driver already provides SCL timing
parameters for a 32 MHz source clock, but the resulting I2C bus frequencies
do not meet the required specification on firmware-based SEs.
As recommended by the hardware design team, use a separate set of SCL
timing parameters for firmware-based SEs. Introduce a dedicated
frequency table and select the appropriate table based on the SE type.
Signed-off-by: Kathiravan Thirumoorthy <kathiravan.thirumoorthy@oss.qualcomm.com>
---
Changes in v2:
- Reworded the commit message to provide more background
- s/geni_i2c_clk_map_32mhz/geni_i2c_clk_map_32mhz_minicore/
- Link to v1: https://patch.msgid.link/20260811-ipq5424_i2c_scl_updates-v1-0-bddcb2ceebda@oss.qualcomm.com
To: Mukesh Kumar Savaliya <mukesh.savaliya@oss.qualcomm.com>
To: Viken Dadhaniya <viken.dadhaniya@oss.qualcomm.com>
To: Andi Shyti <andi.shyti@kernel.org>
To: Kathiravan Thirumoorthy <kathiravan.thirumoorthy@oss.qualcomm.com>
To: Manikanta Mylavarapu <quic_mmanikan@quicinc.com>
To: Bjorn Andersson <andersson@kernel.org>
To: Konrad Dybcio <konradybcio@kernel.org>
Cc: Mukesh Kumar Savaliya <quic_msavaliy@quicinc.com>
Cc: linux-i2c@vger.kernel.org
Cc: linux-arm-msm@vger.kernel.org
Cc: linux-kernel@vger.kernel.org
---
Kathiravan Thirumoorthy (2):
i2c: qcom-geni: update frequency table to fix timing parameters
i2c: qcom-geni: add I2C frequency table for 32 MHz firmware-based SEs
drivers/i2c/busses/i2c-qcom-geni.c | 29 ++++++++++++++++++++---------
include/linux/soc/qcom/geni-se.h | 1 +
2 files changed, 21 insertions(+), 9 deletions(-)
---
base-commit: 3d08ff75a47a3e7e2ab45a3bcab6723b4d906422
change-id: 20260808-ipq5424_i2c_scl_updates-f1696a0590fc
Best regards,
--
Kathiravan Thirumoorthy <kathiravan.thirumoorthy@oss.qualcomm.com>
^ permalink raw reply [flat|nested] 5+ messages in thread* [PATCH v2 1/2] i2c: qcom-geni: update frequency table to fix timing parameters 2026-08-12 8:30 [PATCH v2 0/2] I2C SCL counter updates for Qualcomm IPQ5424 SoC Kathiravan Thirumoorthy @ 2026-08-12 8:30 ` Kathiravan Thirumoorthy 2026-08-12 17:45 ` Mukesh Savaliya 2026-08-12 8:30 ` [PATCH v2 2/2] i2c: qcom-geni: add I2C frequency table for 32 MHz firmware-based SEs Kathiravan Thirumoorthy 1 sibling, 1 reply; 5+ messages in thread From: Kathiravan Thirumoorthy @ 2026-08-12 8:30 UTC (permalink / raw) To: Mukesh Kumar Savaliya, Viken Dadhaniya, Andi Shyti, Manikanta Mylavarapu, Bjorn Andersson, Konrad Dybcio Cc: Mukesh Kumar Savaliya, linux-i2c, linux-arm-msm, linux-kernel, Kathiravan Thirumoorthy, stable In IPQ5424, to meet the setup and hold timing requirements in the standard mode, update the frequency table with the values recommended by HW design team. Also remove the stray space in the I2C_MAX_FAST_MODE_FREQ entry. Cc: <stable@vger.kernel.org> Fixes: 85c34532849d ("i2c: qcom-geni: fix I2C frequency table to achieve accurate bus rates") Fixes: 506bb2ab0075 ("i2c: qcom-geni: Support systems with 32MHz serial engine clock") Signed-off-by: Kathiravan Thirumoorthy <kathiravan.thirumoorthy@oss.qualcomm.com> --- drivers/i2c/busses/i2c-qcom-geni.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/drivers/i2c/busses/i2c-qcom-geni.c b/drivers/i2c/busses/i2c-qcom-geni.c index 658636c1ee0e..00013b41a6f5 100644 --- a/drivers/i2c/busses/i2c-qcom-geni.c +++ b/drivers/i2c/busses/i2c-qcom-geni.c @@ -188,8 +188,8 @@ 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[] = { - { I2C_MAX_STANDARD_MODE_FREQ, 8, 14, 18, 38 }, - { I2C_MAX_FAST_MODE_FREQ, 4, 3, 9, 19 }, + { 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 }, {} }; -- 2.34.1 ^ permalink raw reply related [flat|nested] 5+ messages in thread
* Re: [PATCH v2 1/2] i2c: qcom-geni: update frequency table to fix timing parameters 2026-08-12 8:30 ` [PATCH v2 1/2] i2c: qcom-geni: update frequency table to fix timing parameters Kathiravan Thirumoorthy @ 2026-08-12 17:45 ` Mukesh Savaliya 0 siblings, 0 replies; 5+ messages in thread From: Mukesh Savaliya @ 2026-08-12 17:45 UTC (permalink / raw) To: Kathiravan Thirumoorthy, Viken Dadhaniya, Andi Shyti, Manikanta Mylavarapu, Bjorn Andersson, Konrad Dybcio Cc: Mukesh Kumar Savaliya, linux-i2c, linux-arm-msm, linux-kernel, stable On 8/12/2026 2:00 PM, Kathiravan Thirumoorthy wrote: > In IPQ5424, to meet the setup and hold timing requirements in the > standard mode, update the frequency table with the values recommended by > HW design team. > > Also remove the stray space in the I2C_MAX_FAST_MODE_FREQ entry. > > Cc: <stable@vger.kernel.org> > Fixes: 85c34532849d ("i2c: qcom-geni: fix I2C frequency table to achieve accurate bus rates") > Fixes: 506bb2ab0075 ("i2c: qcom-geni: Support systems with 32MHz serial engine clock") > Signed-off-by: Kathiravan Thirumoorthy <kathiravan.thirumoorthy@oss.qualcomm.com> > --- Reviewed-by: Mukesh Savaliya <mukesh.savaliya@oss.qualcomm.com> ^ permalink raw reply [flat|nested] 5+ messages in thread
* [PATCH v2 2/2] i2c: qcom-geni: add I2C frequency table for 32 MHz firmware-based SEs 2026-08-12 8:30 [PATCH v2 0/2] I2C SCL counter updates for Qualcomm IPQ5424 SoC Kathiravan Thirumoorthy 2026-08-12 8:30 ` [PATCH v2 1/2] i2c: qcom-geni: update frequency table to fix timing parameters Kathiravan Thirumoorthy @ 2026-08-12 8:30 ` Kathiravan Thirumoorthy 2026-08-12 17:56 ` Mukesh Savaliya 1 sibling, 1 reply; 5+ messages in thread From: Kathiravan Thirumoorthy @ 2026-08-12 8:30 UTC (permalink / raw) To: Mukesh Kumar Savaliya, Viken Dadhaniya, Andi Shyti, Manikanta Mylavarapu, Bjorn Andersson, Konrad Dybcio Cc: Mukesh Kumar Savaliya, linux-i2c, linux-arm-msm, linux-kernel, Kathiravan Thirumoorthy 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@oss.qualcomm.com> --- 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 }, + {} +}; + static int geni_i2c_clk_map_idx(struct geni_i2c_dev *gi2c) { const struct geni_i2c_clk_fld *itr; + bool is_minicore = FIELD_GET(GEN_USE_MINICORES, + readl_relaxed(gi2c->se.base + SE_HW_PARAM_2)); if (clk_get_rate(gi2c->se.clk) == 32 * HZ_PER_MHZ) - itr = geni_i2c_clk_map_32mhz; + itr = is_minicore ? geni_i2c_clk_map_32mhz_minicore : geni_i2c_clk_map_32mhz_fwcore; else itr = geni_i2c_clk_map_19p2mhz; @@ -1046,6 +1055,13 @@ static int geni_i2c_init(struct geni_i2c_dev *gi2c) return ret; } + ret = geni_i2c_clk_map_idx(gi2c); + if (ret) { + return dev_err_probe(gi2c->se.dev, ret, "Invalid clk frequency %d Hz\n", + gi2c->clk_freq_out); + goto err; + } + proto = geni_se_read_proto(&gi2c->se); if (proto == GENI_SE_INVALID_PROTO) { ret = geni_load_se_firmware(&gi2c->se, GENI_SE_I2C); @@ -1109,11 +1125,6 @@ static int geni_i2c_resources_init(struct geni_se *se) if (ret) return ret; - ret = geni_i2c_clk_map_idx(gi2c); - if (ret) - return dev_err_probe(gi2c->se.dev, ret, "Invalid clk frequency %d Hz\n", - gi2c->clk_freq_out); - return geni_icc_set_bw_ab(&gi2c->se, GENI_DEFAULT_BW, GENI_DEFAULT_BW, Bps_to_icc(gi2c->clk_freq_out)); } diff --git a/include/linux/soc/qcom/geni-se.h b/include/linux/soc/qcom/geni-se.h index 29a53bbc0dd4..7e8c0bb6d674 100644 --- a/include/linux/soc/qcom/geni-se.h +++ b/include/linux/soc/qcom/geni-se.h @@ -331,6 +331,7 @@ struct geni_se { #define RX_FIFO_DEPTH_SHFT 16 /* SE_HW_PARAM_2 fields */ +#define GEN_USE_MINICORES BIT(12) #define PROG_RAM_DEPTH_MSK GENMASK(10, 0) #define HW_VER_MAJOR_MASK GENMASK(31, 28) -- 2.34.1 ^ permalink raw reply related [flat|nested] 5+ messages in thread
* Re: [PATCH v2 2/2] i2c: qcom-geni: add I2C frequency table for 32 MHz firmware-based SEs 2026-08-12 8:30 ` [PATCH v2 2/2] i2c: qcom-geni: add I2C frequency table for 32 MHz firmware-based SEs Kathiravan Thirumoorthy @ 2026-08-12 17:56 ` Mukesh Savaliya 0 siblings, 0 replies; 5+ messages in thread From: Mukesh Savaliya @ 2026-08-12 17:56 UTC (permalink / raw) To: Kathiravan Thirumoorthy, Viken Dadhaniya, Andi Shyti, Manikanta Mylavarapu, Bjorn Andersson, Konrad Dybcio Cc: Mukesh Kumar Savaliya, linux-i2c, linux-arm-msm, linux-kernel On 8/12/2026 2:00 PM, 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@oss.qualcomm.com> > --- Reviewed-by: Mukesh Savaliya <mukesh.savaliya@oss.qualcomm.com> ^ permalink raw reply [flat|nested] 5+ messages in thread
end of thread, other threads:[~2026-08-12 17:56 UTC | newest] Thread overview: 5+ messages (download: mbox.gz follow: Atom feed -- links below jump to the message on this page -- 2026-08-12 8:30 [PATCH v2 0/2] I2C SCL counter updates for Qualcomm IPQ5424 SoC Kathiravan Thirumoorthy 2026-08-12 8:30 ` [PATCH v2 1/2] i2c: qcom-geni: update frequency table to fix timing parameters Kathiravan Thirumoorthy 2026-08-12 17:45 ` Mukesh Savaliya 2026-08-12 8:30 ` [PATCH v2 2/2] i2c: qcom-geni: add I2C frequency table for 32 MHz firmware-based SEs Kathiravan Thirumoorthy 2026-08-12 17:56 ` Mukesh Savaliya
This is a public inbox, see mirroring instructions for how to clone and mirror all data and code used for this inbox