[PATCH 0/7] soc: qcom: geni: Derive SE clock configuration from OPP table on SA8255P
Praveen Talari <[email protected]> Wed, 05 Aug 2026 01:27:38 +0530
| Newsgroups | gmane.linux.serial,gmane.linux.ports.arm.kernel,gmane.linux.power-management.general,gmane.linux.kernel,gmane.linux.ports.arm.msm,gmane.linux.kernel.spi.devel,gmane.linux.drivers.i2c |
|---|---|
| Message-ID | <20260805-derive_clk_perf_tbl_from_perf_domain_opp_table-v1-0-61171ab1cdce@oss.qualcomm.com> |
On firmware-managed platforms such as SA8255P, there is no Linux clock handler available to determine the appropriate SE source clock, source clock index, and divider values for a requested protocol frequency. However, these parameters are required when programming GSI TREs, where the hardware expects an explicit clock source selection and divider configuration for the serial engine. In contrast, platforms using Linux-managed clocks derive these parameters through geni_se_clk_freq_match() using the source clock information stored in clk_perf_tbl. Since the firmware-managed path lacks equivalent clock information, protocol drivers cannot reuse the existing frequency matching logic and instead rely on a direct mapping between protocol-requested frequencies and performance levels. This creates a separate clock configuration flow and prevents firmware-managed platforms from deriving the actual SE clock parameters required for GSI TRE programming. To address this limitation, the performance-domain OPP table is treated as the representation of SE-supported source clock frequencies. During geni_se_domain_attach(), the OPP entries are used to populate clk_perf_tbl and related clock performance data, allowing firmware-managed platforms to leverage the same clock frequency matching infrastructure used by Linux-managed platforms. With this change, protocol drivers can use geni_se_clk_freq_match() to select the closest supported source clock frequency for a requested protocol rate, derive the corresponding source clock index and divider values required for GSI TRE programming, and apply the matched clock through the OPP framework. This removes the dependency on direct protocol-frequency-to-performance-level mappings and provides a common clock selection and configuration mechanism across both firmware-managed and Linux-managed GENI deployments. Signed-off-by: Praveen Talari <[email protected]> --- Praveen Talari (7): pmdomain: arm: Fix -EINVAL from scmi_pd_set_perf_state() on state 0 soc: qcom: geni-se: Populate clk_perf_tbl with SE source clock frequencies from perf OPP table soc: qcom: geni-se: Add helper to set SE clock rate via OPP serial: qcom-geni: Use geni_se_set_rate() for source clock configuration spi: qcom-geni: Use geni_se_set_rate() for setting source clock frequency i2c: qcom-geni: Use common GENI resource initialization helper i2c: qcom-geni: Use geni_se_set_rate() for setting source clock frequency drivers/i2c/busses/i2c-qcom-geni.c | 45 +++++++++++----------------- drivers/pmdomain/arm/scmi_perf_domain.c | 2 +- drivers/soc/qcom/qcom-geni-se.c | 53 ++++++++++++++++++++++++++++++++- drivers/spi/spi-geni-qcom.c | 17 ++++------- drivers/tty/serial/qcom_geni_serial.c | 19 ++++++------ include/linux/soc/qcom/geni-se.h | 2 ++ 6 files changed, 88 insertions(+), 50 deletions(-) --- base-commit: 0f6da28aab51b16762ed82e8fdeaa5042da45b08 change-id: 20260805-derive_clk_perf_tbl_from_perf_domain_opp_table-2f29ad32226a Best regards, -- Praveen Talari <[email protected]>