From: sashiko-bot@kernel.org
To: "Praveen Talari" <praveen.talari@oss.qualcomm.com>
Cc: linux-serial@vger.kernel.org
Subject: Re: [PATCH v2 5/9] serial: qcom-geni: Use geni_se_set_rate() for source clock configuration
Date: Thu, 27 Aug 2026 18:12:46 +0000 [thread overview]
Message-ID: <20260827181246.A22661F000E9@smtp.kernel.org> (raw)
In-Reply-To: <20260827-derive_clk_perf_tbl_from_perf_domain_opp_table-v2-5-091697dbeb02@oss.qualcomm.com>
Thank you for your contribution! Sashiko AI review found 2 potential issue(s) to consider:
- [Critical] Device clocks are enabled before restoring the OPP performance state during resume, violating hardware constraints.
- [High] Returning an error from runtime_suspend after hardware is disabled causes state desynchronization and system crashes.
--
commit 23fad340d403394b171aaa614c65cbbd0f718351
Author: Praveen Talari <praveen.talari@oss.qualcomm.com>
serial: qcom-geni: Use geni_se_set_rate() for source clock configuration
On the SA8255P platform there is no Linux clock handler for the SE
source clock, so the driver has no way to compute the divider needed
for a requested baud rate. To work around this, firmware instead
exposes the SE HW supported source clock frequencies as OPPs on the
perf domain device.
> diff --git a/drivers/tty/serial/qcom_geni_serial.c b/drivers/tty/serial/qcom_geni_serial.c
> index 3633723acef8d..23ecd137c5210 100644
> --- a/drivers/tty/serial/qcom_geni_serial.c
> +++ b/drivers/tty/serial/qcom_geni_serial.c
[ ... ]
> @@ -2039,15 +2041,19 @@ static void qcom_geni_serial_remove(struct platform_device *pdev)
> static int __maybe_unused qcom_geni_serial_runtime_suspend(struct device *dev)
> {
> struct qcom_geni_serial_port *port = dev_get_drvdata(dev);
> + int ret;
>
> - return port->dev_data->power_off ?
> - port->dev_data->power_off(&port->se) : 0;
> + ret = port->dev_data->power_off ?
> + port->dev_data->power_off(&port->se) : 0;
> + if (ret)
> + return ret;
> +
> + return geni_se_set_rate(&port->se, 0);
[Severity: High]
Does returning an error from geni_se_set_rate() here cause a state
desynchronization?
If power_off() succeeds, the hardware (interconnects, clocks, and pin
control) is physically disabled. If geni_se_set_rate() then fails and
we return that error to the PM core, the PM core will leave the device
state as RPM_ACTIVE.
Subsequent accesses from the console or user space would then attempt
to read or write hardware registers without calling runtime_resume.
Because the hardware is already powered off, wouldn't these unclocked
accesses lead to a synchronous external abort and crash the system?
> }
>
> static int __maybe_unused qcom_geni_serial_runtime_resume(struct device *dev)
> {
> struct qcom_geni_serial_port *port = dev_get_drvdata(dev);
> - struct uart_port *uport = &port->uport;
> int ret;
>
> if (port->dev_data->power_on) {
> @@ -2056,8 +2062,8 @@ static int __maybe_unused qcom_geni_serial_runtime_resume(struct device *dev)
> return ret;
> }
>
> - if (port->se.has_opp && port->clk_rate)
> - return dev_pm_opp_set_rate(uport->dev, port->clk_rate);
> + if (port->clk_rate)
> + return geni_se_set_rate(&port->se, port->clk_rate);
[Severity: Critical]
Are the device clocks being enabled before restoring the OPP performance
state here?
In qcom_geni_serial_runtime_suspend(), the driver disables hardware via
power_off() first, then drops the OPP performance state to 0.
However, in qcom_geni_serial_runtime_resume(), power_on() is called
before geni_se_set_rate(). The power_on() function enables the serial
and core clocks at their full target rate while the power domain is
still at a 0 voltage vote.
Could enabling clocks without sufficient voltage violate hardware
constraints and cause a synchronous external abort on resume? Should
geni_se_set_rate() be called to restore the OPP performance state
before we power on the clocks?
--
Sashiko AI review · https://sashiko.dev/#/patchset/20260827-derive_clk_perf_tbl_from_perf_domain_opp_table-v2-0-091697dbeb02@oss.qualcomm.com?part=5
next prev parent reply other threads:[~2026-08-27 18:12 UTC|newest]
Thread overview: 31+ messages / expand[flat|nested] mbox.gz Atom feed top
2026-08-27 17:59 [PATCH v2 0/9] soc: qcom: geni: Derive SE clock configuration from OPP table on SA8255P Praveen Talari
2026-08-27 17:59 ` [PATCH v2 1/9] pmdomain: arm: Fix -EINVAL from scmi_pd_set_perf_state() on state 0 Praveen Talari
2026-08-27 18:16 ` sashiko-bot
2026-09-01 14:31 ` Ulf Hansson
2026-08-27 17:59 ` [PATCH v2 2/9] soc: qcom: geni-se: Populate clk_perf_tbl with SE source clock frequencies from perf OPP table Praveen Talari
2026-08-27 18:16 ` sashiko-bot
2026-08-27 17:59 ` [PATCH v2 3/9] soc: qcom: geni-se: Add helper to set SE clock rate via OPP Praveen Talari
2026-08-27 18:14 ` sashiko-bot
2026-09-04 9:01 ` Konrad Dybcio
2026-08-27 17:59 ` [PATCH v2 4/9] soc: qcom: geni-se: Remove OPP rate reset from resource deactivation Praveen Talari
2026-08-27 18:14 ` sashiko-bot
2026-09-04 8:49 ` Konrad Dybcio
2026-09-11 17:13 ` Praveen Talari
2026-08-27 17:59 ` [PATCH v2 5/9] serial: qcom-geni: Use geni_se_set_rate() for source clock configuration Praveen Talari
2026-08-27 18:12 ` sashiko-bot [this message]
2026-08-27 17:59 ` [PATCH v2 6/9] spi: qcom-geni: Use geni_se_set_rate() for setting source clock frequency Praveen Talari
2026-08-27 18:12 ` sashiko-bot
2026-08-27 17:59 ` [PATCH v2 7/9] i2c: qcom-geni: Vote for SE clock rate using OPP Praveen Talari
2026-08-27 18:11 ` sashiko-bot
2026-09-04 8:52 ` Konrad Dybcio
2026-09-11 17:42 ` Praveen Talari
2026-08-27 17:59 ` [PATCH v2 8/9] i2c: qcom-geni: Use common GENI resource initialization helper Praveen Talari
2026-08-27 18:16 ` sashiko-bot
2026-08-27 17:59 ` [PATCH v2 9/9] i2c: qcom-geni: Use geni_se_set_rate() for setting source clock frequency Praveen Talari
2026-08-27 18:25 ` sashiko-bot
2026-09-01 14:52 ` [PATCH v2 0/9] soc: qcom: geni: Derive SE clock configuration from OPP table on SA8255P Ulf Hansson
2026-09-01 16:48 ` Praveen Talari
2026-09-04 7:56 ` Ulf Hansson
2026-09-04 9:00 ` Konrad Dybcio
2026-09-11 17:33 ` Praveen Talari
2026-09-09 6:32 ` Praveen Talari
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20260827181246.A22661F000E9@smtp.kernel.org \
--to=sashiko-bot@kernel.org \
--cc=linux-serial@vger.kernel.org \
--cc=praveen.talari@oss.qualcomm.com \
--cc=sashiko-reviews@lists.linux.dev \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox