Re: [PATCH 4/7] serial: qcom-geni: Use geni_se_set_rate() for source clock configuration
Konrad Dybcio <[email protected]>
| Newsgroups | org.kernel.vger.linux-pm,org.infradead.lists.linux-arm-kernel,org.kernel.vger.arm-scmi,org.kernel.vger.linux-arm-msm,org.kernel.vger.linux-i2c,org.kernel.vger.linux-kernel,org.kernel.vger.linux-serial,org.kernel.vger.linux-spi |
|---|---|
| Message-ID | <[email protected]> |
On 8/25/26 6:00 AM, Praveen Talari wrote: > HI Konrad, > > On 24-08-2026 20:35, Konrad Dybcio wrote: >> On 8/4/26 9:57 PM, Praveen Talari wrote: >>> The driver calls dev_pm_opp_set_rate() directly on uport->dev to apply >>> the computed source clock frequency, and dispatches baud rate handling >>> through a per-variant dev_data->set_rate() callback that either >>> recalculates the clock divider (Linux clock managed path) or selects >>> a performance level via geni_se_set_perf_level() (SA8255P firmware >>> managed path). >> [...] >> >>> + geni_se_set_rate(&port->se, 0); >> This ends up calling dev_pm_opp_set_rate(0) [i see this is an existing >> bug in geni_se_resources_deactivate()], which removes the power vote, >> but does nothing to the clock (neither set_rate nor disable_unprepare), >> which will crash the platform >> >> Both of these calls (new and existing) should be removed. Clocks will >> be disabled by geni_se_clks_off() in geni_se_resources_deactivate(). >> >> Then, we should do dev_pm_set_opp(se->dev, NULL) *after* they are off >> to remove any trailing OPP resources (i.e. icc votes defined in the OPP >> table in our case) > So, if I understand correctly, the expected sequence is: > > 1. Disable the clocks. > > 2. Remove the OPP/performance resources. Yes, otherwise there is no guarantee that the clocks have sufficient power for a given rate Konrad