From: Atanas Filipov <atanas.filipov@oss.qualcomm.com>
To: Bryan O'Donoghue <bryan.odonoghue@linaro.org>,
Mauro Carvalho Chehab <mchehab@kernel.org>
Cc: atanas.filipov@oss.qualcomm.com,
Vladimir Zapolskiy <vladimir.zapolskiy@linaro.org>,
Loic Poulain <loic.poulain@oss.qualcomm.com>,
Gjorgji Rosikopulos <gjorgji.rosikopulos@oss.qualcomm.com>,
linux-media@vger.kernel.org, linux-arm-msm@vger.kernel.org,
linux-kernel@vger.kernel.org
Subject: [PATCH v2 2/6] media: qcom: camss: clamp VFE clock rates to the highest level
Date: Sat, 24 Oct 2026 12:40:23 +0300 [thread overview]
Message-ID: <20261024094027.3095475-3-atanas.filipov@oss.qualcomm.com> (raw)
In-Reply-To: <20261024094027.3095475-1-atanas.filipov@oss.qualcomm.com>
The VFE fails to power on when the pixel rate exceeds the highest rate
listed for any of its clocks. The rate tables of the VFE clocks are
independent and need not have the same number of levels, so a clock
with a lower top rate than the VFE core clock, such as the SC7280
camnoc_axi clock, makes the VFE reject pixel rates the core clock
still supports.
Clamp each clock to its highest listed rate instead, and warn that the
pixel rate exceeds it when the clock lists more than one rate. Take the
clamp into account when another line powers on an already running VFE,
so that a clock running at its highest rate does not reject the
request.
Signed-off-by: Atanas Filipov <atanas.filipov@oss.qualcomm.com>
---
drivers/media/platform/qcom/camss/camss-vfe.c | 18 +++++++++++-------
1 file changed, 11 insertions(+), 7 deletions(-)
diff --git a/drivers/media/platform/qcom/camss/camss-vfe.c b/drivers/media/platform/qcom/camss/camss-vfe.c
index 59be37f83df3..359b5942df89 100644
--- a/drivers/media/platform/qcom/camss/camss-vfe.c
+++ b/drivers/media/platform/qcom/camss/camss-vfe.c
@@ -996,15 +996,13 @@ static int vfe_set_clock_rates(struct vfe_device *vfe)
if (vfe_match_clock_names(vfe, clock) && vfe_check_clock_levels(clock)) {
long rate;
- for (j = 0; j < clock->nfreqs; j++)
+ for (j = 0; j < clock->nfreqs - 1; j++)
if (min_rate < clock->freq[j])
break;
- if (j == clock->nfreqs) {
- dev_err(dev,
- "Pixel clock is too high for VFE");
- return -EINVAL;
- }
+ if (clock->nfreqs > 1 && min_rate >= clock->freq[j])
+ dev_warn(dev, "Pixel clock is too high for VFE clock %s\n",
+ clock->name);
/* if sensor pixel clock is not available */
/* set highest possible VFE clock rate */
@@ -1046,9 +1044,15 @@ static int vfe_check_clock_rates(struct vfe_device *vfe)
if (vfe_match_clock_names(vfe, clock) && vfe_check_clock_levels(clock)) {
unsigned long rate;
+ long max_rate;
+
+ /* A clock already at its highest rate cannot go higher */
+ max_rate = clk_round_rate(clock->clk, clock->freq[clock->nfreqs - 1]);
+ if (max_rate < 0)
+ return max_rate;
rate = clk_get_rate(clock->clk);
- if (rate < min_rate)
+ if (rate < min_t(u64, min_rate, max_rate))
return -EBUSY;
}
}
--
2.34.1
next prev parent reply other threads:[~2026-10-24 9:40 UTC|newest]
Thread overview: 18+ messages / expand[flat|nested] mbox.gz Atom feed top
2026-10-24 9:40 [PATCH v2 0/6] media: qcom: camss: share VFE clock sources on SM8250 Atanas Filipov
2026-10-24 9:40 ` [PATCH v2 1/6] media: qcom: camss: factor out the VFE minimum clock rate Atanas Filipov
2026-10-26 9:07 ` Bryan O'Donoghue
2026-10-24 9:40 ` Atanas Filipov [this message]
2026-10-26 9:08 ` [PATCH v2 2/6] media: qcom: camss: clamp VFE clock rates to the highest level Bryan O'Donoghue
2026-10-26 9:28 ` Loic Poulain
2026-10-26 13:18 ` Atanas Filipov
2026-10-24 9:40 ` [PATCH v2 3/6] media: qcom: camss: sm8250: do not set VFE core clock rates from CSID Atanas Filipov
2026-10-26 9:08 ` Bryan O'Donoghue
2026-10-24 9:40 ` [PATCH v2 4/6] media: qcom: camss: share VFE clock sources by the highest rate Atanas Filipov
2026-10-26 9:13 ` Bryan O'Donoghue
2026-10-26 13:18 ` Atanas Filipov
2026-10-24 9:40 ` [PATCH v2 5/6] media: qcom: camss: sm8250: set the VFE AREG clock rate from the VFE Atanas Filipov
2026-10-26 9:22 ` Bryan O'Donoghue
2026-10-26 13:18 ` Atanas Filipov
2026-10-24 9:40 ` [PATCH v2 6/6] media: qcom: camss: sm8250: set the camera NoC AXI " Atanas Filipov
2026-10-26 9:25 ` Bryan O'Donoghue
2026-10-26 13:18 ` Atanas Filipov
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=20261024094027.3095475-3-atanas.filipov@oss.qualcomm.com \
--to=atanas.filipov@oss.qualcomm.com \
--cc=bryan.odonoghue@linaro.org \
--cc=gjorgji.rosikopulos@oss.qualcomm.com \
--cc=linux-arm-msm@vger.kernel.org \
--cc=linux-kernel@vger.kernel.org \
--cc=linux-media@vger.kernel.org \
--cc=loic.poulain@oss.qualcomm.com \
--cc=mchehab@kernel.org \
--cc=vladimir.zapolskiy@linaro.org \
/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
all inboxes | Powered by JetHome®