linux-clk.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
From: Maxime Ripard <maxime@cerno.tech>
To: Stephen Boyd <sboyd@kernel.org>
Cc: Mike Turquette <mturquette@baylibre.com>,
	linux-clk@vger.kernel.org,
	Yassine Oudjana <y.oudjana@protonmail.com>,
	Naresh Kamboju <naresh.kamboju@linaro.org>,
	Dmitry Baryshkov <dmitry.baryshkov@linaro.org>,
	Tony Lindgren <tony@atomide.com>,
	Neil Armstrong <narmstrong@baylibre.com>,
	Alexander Stein <alexander.stein@ew.tq-group.com>,
	Marek Szyprowski <m.szyprowski@samsung.com>,
	Jerome Brunet <jbrunet@baylibre.com>
Subject: Re: [PATCH v5 04/28] drm/vc4: hdmi: Rework hdmi_enable_4kp60 detection
Date: Wed, 29 Jun 2022 11:29:00 +0200	[thread overview]
Message-ID: <20220629092900.inpjgl7st33dwcak@houat> (raw)
In-Reply-To: <20220629084844.E750CC34114@smtp.kernel.org>

[-- Attachment #1: Type: text/plain, Size: 4482 bytes --]

On Wed, Jun 29, 2022 at 01:48:42AM -0700, Stephen Boyd wrote:
> Quoting Maxime Ripard (2022-06-28 02:47:53)
> > Hi,
> > 
> > On Mon, Jun 27, 2022 at 04:31:04PM -0700, Stephen Boyd wrote:
> > > 
> > > Ok, so this driver must want the new API.
> > > 
> > > What is happening here though? The driver is setting 'disable_4kp60' at
> > > bind/probe time based on a clk_round_rate() returning a frequency.
> > 
> > The main issue that we're trying to address is that whether or not HDMI
> > modes with a rate over 340MHz (so most likely 4k/60Hz but others are
> > affected) need a bootloader parameter to be set. If it isn't set, we
> > can't output those modes.
> > 
> > Since it's a bootloader parameter though the kernel can't access it. The
> > main hint that we can use to figure out whether it's been enabled is
> > that the maximum clock frequency reported by the firmware will be
> > higher. So this code will try to round a frequency higher than the
> > maximum allowed when that setting isn't there, and thus figure out
> > whether it's enabled or not.
> 
> So the kernel is at least able to ask for the max frequency during
> rounding and figure out that the frequency can't be larger than that. Is
> that right?

Yes, the firmware has a call that allows to query the boundaries of a
given clock it manages, and we then used whatever value it returns to
set the clk_hw rate range.

See https://elixir.bootlin.com/linux/latest/source/drivers/clk/bcm/clk-raspberrypi.c#L287

> > If it's not, we prevent any of these modes from being exposed to
> > userspace or being used.
> > 
> > > That returned value could change at runtime though based on rate
> > > constraints, or simply because the clk driver decides that the wind is
> > > blowing differently today and thus calling clk_set_rate() with that
> > > frequency will cause the clk to be wildly different than before.
> > 
> > Yeah, that's true
> > 
> > > I don't understand how we can decide to disable 4kp60 at probe time.
> > 
> > We're trying to infer a bootloader/firmware parameter, so the only way
> > it can change is through a reboot.
> 
> Got it.
> 
> > 
> > > Why doesn't the driver try to set the rate it wants (or the rate range
> > > it wants) and then if that succeeds it knows 4kp60 is achievable and
> > > if not then it rejects the attempt by userspace to set such a
> > > resolution.
> > 
> > We can't really do that. The clock here drives the HDMI output so it can
> > only change when we change the mode. However, because of the atomic
> > commits in KMS, we can't fail when we actually change the mode, we have
> > to fail beforehand when we check that the new state is sane.
> 
> Alright. I feel like we've discussed this before.
> 
> > 
> > We also can't change the clock rate then, because there's no guarantee
> > that the state being checked is actually going to be committed, and
> > because we still have the hardware running when we check it so we would
> > modify the clock while the hardware is running.
> > 
> > I had another go in the RaspberryPi downstream kernel for this:
> > https://github.com/raspberrypi/linux/commit/df368502ecbe1de26cf02a9b7837da9e967d64ca
> > 
> 
> It really looks to me like we're trying to hide the firmware API behind
> the clk API. When the clk API doesn't provide what's needed, we add an
> API to expose internal clk details that the clk consumer should already
> know because it sets them.

That would work for me

> That's my main concern here. The driver is querying an OPP table
> through the clk framework.
> 
> Why can't we either expose the firmware API directly to this driver or
> have the firmware driver probe and populate/trim an OPP table for this
> display device so that it can query the OPP table at probe time to
> determine the maximum frequency supported. The clk framework isn't in
> the business of exposing OPP tables, that's what the OPP framework is
> for.

Is it really an OPP?

My understanding at least is that an OPP table is a discrete set of
frequencies that a device can operate at, but you still need the
frequency generator somewhere else?

What we're discussing here definitely looks more like a clock to me:
it's is the frequency generator, and can expose a continuous set of
frequencies between a range. It just turns out that depending on a
parameter that range changes a bit, and it then affect our capabilities.

Maxime

[-- Attachment #2: signature.asc --]
[-- Type: application/pgp-signature, Size: 228 bytes --]

  reply	other threads:[~2022-06-29  9:29 UTC|newest]

Thread overview: 43+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2022-05-16 13:24 [PATCH v5 00/28] clk: More clock rate fixes and tests Maxime Ripard
2022-05-16 13:25 ` [PATCH v5 01/28] clk: Drop the rate range on clk_put() Maxime Ripard
2022-05-16 13:25 ` [PATCH v5 02/28] clk: Skip clamping when rounding if there's no boundaries Maxime Ripard
2022-06-27 23:21   ` Stephen Boyd
2022-06-28  8:58     ` Maxime Ripard
2022-05-16 13:25 ` [PATCH v5 03/28] clk: Introduce clk_get_rate_range() Maxime Ripard
2022-06-27 23:23   ` Stephen Boyd
2022-05-16 13:25 ` [PATCH v5 04/28] drm/vc4: hdmi: Rework hdmi_enable_4kp60 detection Maxime Ripard
2022-06-27 23:31   ` Stephen Boyd
2022-06-28  9:47     ` Maxime Ripard
2022-06-29  8:48       ` Stephen Boyd
2022-06-29  9:29         ` Maxime Ripard [this message]
2022-05-16 13:25 ` [PATCH v5 05/28] clk: Mention that .recalc_rate can return 0 on error Maxime Ripard
2022-05-16 13:25 ` [PATCH v5 06/28] clk: Clarify clk_get_rate() expectations Maxime Ripard
2022-05-16 13:25 ` [PATCH v5 07/28] clk: tests: Add test suites description Maxime Ripard
2022-05-16 13:25 ` [PATCH v5 08/28] clk: tests: Add reference to the orphan mux bug report Maxime Ripard
2022-05-16 13:25 ` [PATCH v5 09/28] clk: tests: Add tests for uncached clock Maxime Ripard
2022-05-16 13:25 ` [PATCH v5 10/28] clk: tests: Add tests for single parent mux Maxime Ripard
2022-05-16 13:25 ` [PATCH v5 11/28] clk: tests: Add tests for mux with multiple parents Maxime Ripard
2022-05-16 13:25 ` [PATCH v5 12/28] clk: tests: Add some tests for orphan " Maxime Ripard
2022-05-16 13:25 ` [PATCH v5 13/28] clk: Take into account uncached clocks in clk_set_rate_range() Maxime Ripard
2022-06-29  9:01   ` Stephen Boyd
2022-06-29 12:42     ` Maxime Ripard
2022-05-16 13:25 ` [PATCH v5 14/28] clk: Fix clk_get_parent() documentation Maxime Ripard
2022-06-29  9:05   ` Stephen Boyd
2022-06-29 13:12     ` Maxime Ripard
2022-05-16 13:25 ` [PATCH v5 15/28] clk: Set req_rate on reparenting Maxime Ripard
2022-05-16 13:25 ` [PATCH v5 16/28] clk: Change clk_core_init_rate_req prototype Maxime Ripard
2022-05-16 13:25 ` [PATCH v5 17/28] clk: Move clk_core_init_rate_req() from clk_core_round_rate_nolock() to its caller Maxime Ripard
2022-05-16 13:25 ` [PATCH v5 18/28] clk: Introduce clk_hw_init_rate_request() Maxime Ripard
2022-05-16 13:25 ` [PATCH v5 19/28] clk: Add our request boundaries in clk_core_init_rate_req Maxime Ripard
2022-05-16 13:25 ` [PATCH v5 20/28] clk: Switch from __clk_determine_rate to clk_core_round_rate_nolock Maxime Ripard
2022-05-16 13:25 ` [PATCH v5 21/28] clk: Introduce clk_core_has_parent() Maxime Ripard
2022-06-29  9:11   ` Stephen Boyd
2022-05-16 13:25 ` [PATCH v5 22/28] clk: Stop forwarding clk_rate_requests to the parent Maxime Ripard
2022-05-16 13:25 ` [PATCH v5 23/28] clk: Zero the clk_rate_request structure Maxime Ripard
2022-05-16 13:25 ` [PATCH v5 24/28] clk: Test the clock pointer in clk_hw_get_name() Maxime Ripard
2022-06-29  9:13   ` Stephen Boyd
2022-06-29  9:39     ` Maxime Ripard
2022-05-16 13:25 ` [PATCH v5 25/28] clk: Introduce the clk_hw_get_rate_range function Maxime Ripard
2022-05-16 13:25 ` [PATCH v5 26/28] clk: qcom: clk-rcg2: Take clock boundaries into consideration for gfx3d Maxime Ripard
2022-05-16 13:25 ` [PATCH v5 27/28] clk: tests: Add some tests for clk_get_rate_range() Maxime Ripard
2022-05-16 13:25 ` [PATCH v5 28/28] clk: tests: Add missing test case for ranges Maxime Ripard

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=20220629092900.inpjgl7st33dwcak@houat \
    --to=maxime@cerno.tech \
    --cc=alexander.stein@ew.tq-group.com \
    --cc=dmitry.baryshkov@linaro.org \
    --cc=jbrunet@baylibre.com \
    --cc=linux-clk@vger.kernel.org \
    --cc=m.szyprowski@samsung.com \
    --cc=mturquette@baylibre.com \
    --cc=naresh.kamboju@linaro.org \
    --cc=narmstrong@baylibre.com \
    --cc=sboyd@kernel.org \
    --cc=tony@atomide.com \
    --cc=y.oudjana@protonmail.com \
    /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;
as well as URLs for NNTP newsgroup(s).