From: u.kleine-koenig@pengutronix.de (Uwe Kleine-König)
To: linux-arm-kernel@lists.infradead.org
Subject: [PATCH 0/3] clk: divider: three exactness fixes (and a rant)
Date: Tue, 10 Mar 2015 00:34:16 +0100 [thread overview]
Message-ID: <20150309233416.GF7525@pengutronix.de> (raw)
In-Reply-To: <54FE215D.7090804@codeaurora.org>
Hello Stephen,
On Mon, Mar 09, 2015 at 03:40:29PM -0700, Stephen Boyd wrote:
> On 03/09/15 14:58, Uwe Kleine-K?nig wrote:
> > If you see
> >
> > round_rate(110) = 108
> >
> > it would be fortunate to know if you get 108 because the next available
> > greater rate is > 112 or because the implementation rounds down always
> > (which would mean that 111 is possible, too). For the "easy" consumers
> > this probably doesn't matter much, but if you do things that affects
> > a considerable part of the clock tree, you really want to know more
> > about the behaviour of round_rate to effectively work with its results.
> >
> > So yes, please let us pick ceiling for round_rate (i.e. a fixed policy
> > for all clks) and then it should even be possible to make
> > clk_set_rate_range a generic function that doesn't need the min and max
> > members in the clk struct and the respective parameters to
> > determine_rate.
> >
> > What should a clock that can only provide 100 Hz return on
> >
> > clk_round_rate(clk, 60);
> >
> > ? 0? -ESOMETHING (for SOMETHING = ...?)?
> >
>
> Do you have any real world use cases, or is this just all theoretical?
The question about clk_round_rate(fixed_clk_100hz, 60) is an
implementation detail that we must handle after agreeing that
clk_round_rate should always round down. I faced that when I tried to
implement this rounding requirement for dividers.
> At least in Philipp's panel case we can discuss how to make an API that
> works properly. These other examples are either completely theoretical
> or taken out of context and so it's unclear how they matter in practice.
We can stick to Philipp's panel case if you want. Philipp wants to find
a rate between 100 Hz and 120 Hz and likes 110 Hz most. And the lower
abs(1 / 110 - 1 / r) the better. Let's assume the clk is provided by a
fixed clk with 10000 Hz that goes through two 4bit-dividers. (So no,
that's not a real world use case, but I imagine that something like that
can occur and should definitely be possible to handle.) Something
similar happens if you have for example an i2c bus device that has a
built-in divider. For the lowest consumer the situation is easy most of
the time: It wants a certain frequency to update a panel, or it wants at
most 100 kHz on the i2c bus. But already for the divider one step up
the clk tree it's not that easy any more.
> Ideally I'd like an API to exist that doesn't require going back and
> forth with the framework (i.e. it's "atomic" and doesn't require calling
> clk_round_rate() in a loop) and that allows consumers to properly
Why is calling "clk_round_rate() in a loop" bad? In some situations you
won't be able to do something different.
> express what they want. Right now we have a way to say min/max and a
> typical rate is in the works. If we need to declare some sort of clock
> provider rounding policy then we've failed to provide an API that
> properly expresses all the requirements that the consumer has. It
I think you don't want a way to express: "I want a frequency that I
can divide down to 110 Hz with a divider picked from [1 ... 16].".
And even if we somehow manage to create something like that in a sane
way, I think the only reliable and maintainable way to get there is to
not ask all clock types to implement this functionality.
That is, I want the complexity at a single place in the framework and
only ask easy things from the clk type implementors. A .round_rate
callback is easy for most clk types. .determine_rate a bit less and it
already promotes boilerplate because each implementation has to check
for min_rate and max_rate. And .determine_rate as it is today doesn't
even support the typical value yet.
> probably means we're missing some key parameter that consumers know but
> we don't accept. Maybe some more concrete examples will help clarify
> what this is.
Best regards
Uwe
--
Pengutronix e.K. | Uwe Kleine-K?nig |
Industrial Linux Solutions | http://www.pengutronix.de/ |
WARNING: multiple messages have this Message-ID (diff)
From: "Uwe Kleine-König" <u.kleine-koenig@pengutronix.de>
To: Stephen Boyd <sboyd@codeaurora.org>
Cc: "Mike Turquette" <mturquette@linaro.org>,
"Philipp Zabel" <p.zabel@pengutronix.de>,
linux-arm-kernel@lists.infradead.org,
linux-kernel@vger.kernel.org,
"Sören Brinkmann" <soren.brinkmann@xilinx.com>,
kernel@pengutronix.de
Subject: Re: [PATCH 0/3] clk: divider: three exactness fixes (and a rant)
Date: Tue, 10 Mar 2015 00:34:16 +0100 [thread overview]
Message-ID: <20150309233416.GF7525@pengutronix.de> (raw)
In-Reply-To: <54FE215D.7090804@codeaurora.org>
Hello Stephen,
On Mon, Mar 09, 2015 at 03:40:29PM -0700, Stephen Boyd wrote:
> On 03/09/15 14:58, Uwe Kleine-König wrote:
> > If you see
> >
> > round_rate(110) = 108
> >
> > it would be fortunate to know if you get 108 because the next available
> > greater rate is > 112 or because the implementation rounds down always
> > (which would mean that 111 is possible, too). For the "easy" consumers
> > this probably doesn't matter much, but if you do things that affects
> > a considerable part of the clock tree, you really want to know more
> > about the behaviour of round_rate to effectively work with its results.
> >
> > So yes, please let us pick ceiling for round_rate (i.e. a fixed policy
> > for all clks) and then it should even be possible to make
> > clk_set_rate_range a generic function that doesn't need the min and max
> > members in the clk struct and the respective parameters to
> > determine_rate.
> >
> > What should a clock that can only provide 100 Hz return on
> >
> > clk_round_rate(clk, 60);
> >
> > ? 0? -ESOMETHING (for SOMETHING = ...?)?
> >
>
> Do you have any real world use cases, or is this just all theoretical?
The question about clk_round_rate(fixed_clk_100hz, 60) is an
implementation detail that we must handle after agreeing that
clk_round_rate should always round down. I faced that when I tried to
implement this rounding requirement for dividers.
> At least in Philipp's panel case we can discuss how to make an API that
> works properly. These other examples are either completely theoretical
> or taken out of context and so it's unclear how they matter in practice.
We can stick to Philipp's panel case if you want. Philipp wants to find
a rate between 100 Hz and 120 Hz and likes 110 Hz most. And the lower
abs(1 / 110 - 1 / r) the better. Let's assume the clk is provided by a
fixed clk with 10000 Hz that goes through two 4bit-dividers. (So no,
that's not a real world use case, but I imagine that something like that
can occur and should definitely be possible to handle.) Something
similar happens if you have for example an i2c bus device that has a
built-in divider. For the lowest consumer the situation is easy most of
the time: It wants a certain frequency to update a panel, or it wants at
most 100 kHz on the i2c bus. But already for the divider one step up
the clk tree it's not that easy any more.
> Ideally I'd like an API to exist that doesn't require going back and
> forth with the framework (i.e. it's "atomic" and doesn't require calling
> clk_round_rate() in a loop) and that allows consumers to properly
Why is calling "clk_round_rate() in a loop" bad? In some situations you
won't be able to do something different.
> express what they want. Right now we have a way to say min/max and a
> typical rate is in the works. If we need to declare some sort of clock
> provider rounding policy then we've failed to provide an API that
> properly expresses all the requirements that the consumer has. It
I think you don't want a way to express: "I want a frequency that I
can divide down to 110 Hz with a divider picked from [1 ... 16].".
And even if we somehow manage to create something like that in a sane
way, I think the only reliable and maintainable way to get there is to
not ask all clock types to implement this functionality.
That is, I want the complexity at a single place in the framework and
only ask easy things from the clk type implementors. A .round_rate
callback is easy for most clk types. .determine_rate a bit less and it
already promotes boilerplate because each implementation has to check
for min_rate and max_rate. And .determine_rate as it is today doesn't
even support the typical value yet.
> probably means we're missing some key parameter that consumers know but
> we don't accept. Maybe some more concrete examples will help clarify
> what this is.
Best regards
Uwe
--
Pengutronix e.K. | Uwe Kleine-König |
Industrial Linux Solutions | http://www.pengutronix.de/ |
next prev parent reply other threads:[~2015-03-09 23:34 UTC|newest]
Thread overview: 194+ messages / expand[flat|nested] mbox.gz Atom feed top
2015-02-12 6:01 [PATCH RFC v9 00/20] Add support for i.MX MIPI DSI DRM driver Liu Ying
2015-02-12 6:01 ` Liu Ying
2015-02-12 6:01 ` Liu Ying
2015-02-12 6:01 ` [PATCH RFC v9 01/20] clk: divider: Correct parent clk round rate if no bestdiv is normally found Liu Ying
2015-02-12 6:01 ` Liu Ying
2015-02-12 6:01 ` Liu Ying
2015-02-12 9:33 ` Sascha Hauer
2015-02-12 9:33 ` Sascha Hauer
2015-02-12 9:33 ` Sascha Hauer
2015-02-12 10:39 ` Liu Ying
2015-02-12 10:39 ` Liu Ying
2015-02-12 10:39 ` Liu Ying
2015-02-12 12:24 ` Sascha Hauer
2015-02-12 12:24 ` Sascha Hauer
2015-02-12 12:24 ` Sascha Hauer
2015-02-12 12:56 ` Russell King - ARM Linux
2015-02-12 12:56 ` Russell King - ARM Linux
2015-02-12 12:56 ` Russell King - ARM Linux
2015-02-12 13:41 ` Sascha Hauer
2015-02-12 13:41 ` Sascha Hauer
2015-02-12 13:41 ` Sascha Hauer
2015-02-12 14:06 ` Liu Ying
2015-02-12 14:06 ` Liu Ying
2015-02-12 14:06 ` Liu Ying
2015-02-13 2:58 ` Liu Ying
2015-02-13 2:58 ` Liu Ying
2015-02-13 2:58 ` Liu Ying
2015-02-13 2:58 ` Travis
2015-02-13 2:58 ` Travis
2015-02-13 2:58 ` Travis
2015-02-13 14:35 ` Tomi Valkeinen
2015-02-13 14:35 ` Tomi Valkeinen
2015-02-13 14:35 ` Tomi Valkeinen
2015-02-13 18:57 ` Sascha Hauer
2015-02-13 18:57 ` Sascha Hauer
2015-02-13 18:57 ` Sascha Hauer
2015-02-16 11:18 ` Tomi Valkeinen
2015-02-16 11:18 ` Tomi Valkeinen
2015-02-16 11:18 ` Tomi Valkeinen
2015-02-17 10:32 ` Sascha Hauer
2015-02-17 10:32 ` Sascha Hauer
2015-02-17 10:32 ` Sascha Hauer
2015-02-16 11:27 ` Russell King - ARM Linux
2015-02-16 11:27 ` Russell King - ARM Linux
2015-02-16 11:27 ` Russell King - ARM Linux
2015-02-20 19:13 ` Mike Turquette
2015-02-20 19:13 ` Mike Turquette
2015-02-20 19:20 ` Russell King - ARM Linux
2015-02-20 19:20 ` Russell King - ARM Linux
2015-02-20 19:20 ` Russell King - ARM Linux
2015-02-20 19:42 ` Mike Turquette
2015-02-20 19:42 ` Mike Turquette
2015-02-21 8:56 ` Uwe Kleine-König
2015-02-21 8:56 ` Uwe Kleine-König
2015-02-21 8:56 ` Uwe Kleine-König
2015-02-21 10:40 ` [PATCH 0/3] clk: divider: three exactness fixes (and a rant) Uwe Kleine-König
2015-02-21 10:40 ` Uwe Kleine-König
2015-02-21 10:40 ` [PATCH 1/3] clk: divider: fix calculation of maximal parent rate for a given divider Uwe Kleine-König
2015-02-21 10:40 ` Uwe Kleine-König
2015-02-23 7:32 ` Sascha Hauer
2015-02-23 7:32 ` Sascha Hauer
2015-03-05 8:35 ` Uwe Kleine-König
2015-03-05 8:35 ` Uwe Kleine-König
2015-02-21 10:40 ` [PATCH 2/3] clk: divider: fix selection of divider when rounding to closest Uwe Kleine-König
2015-02-21 10:40 ` Uwe Kleine-König
2015-02-23 9:46 ` Maxime Coquelin
2015-02-23 9:46 ` Maxime Coquelin
2015-02-21 10:40 ` [PATCH 3/3] clk: divider: fix calculation of initial best " Uwe Kleine-König
2015-02-21 10:40 ` Uwe Kleine-König
2015-02-23 9:42 ` Maxime Coquelin
2015-02-23 9:42 ` Maxime Coquelin
2015-02-23 7:23 ` [PATCH 0/3] clk: divider: three exactness fixes (and a rant) Sascha Hauer
2015-02-23 7:23 ` Sascha Hauer
2015-03-06 18:57 ` Mike Turquette
2015-03-06 18:57 ` Mike Turquette
2015-03-06 19:28 ` Uwe Kleine-König
2015-03-06 19:28 ` Uwe Kleine-König
2015-03-06 19:40 ` Stephen Boyd
2015-03-06 19:40 ` Stephen Boyd
2015-03-09 9:58 ` Philipp Zabel
2015-03-09 9:58 ` Philipp Zabel
2015-03-09 19:05 ` Stephen Boyd
2015-03-09 19:05 ` Stephen Boyd
2015-03-09 20:23 ` Uwe Kleine-König
2015-03-09 20:23 ` Uwe Kleine-König
2015-03-09 21:07 ` Mike Turquette
2015-03-09 21:07 ` Mike Turquette
2015-03-09 21:58 ` Uwe Kleine-König
2015-03-09 21:58 ` Uwe Kleine-König
2015-03-09 22:40 ` Stephen Boyd
2015-03-09 22:40 ` Stephen Boyd
2015-03-09 23:34 ` Uwe Kleine-König [this message]
2015-03-09 23:34 ` Uwe Kleine-König
2015-03-12 1:21 ` Stephen Boyd
2015-03-12 1:21 ` Stephen Boyd
2015-03-12 8:57 ` Philipp Zabel
2015-03-12 8:57 ` Philipp Zabel
2015-03-13 7:50 ` Uwe Kleine-König
2015-03-13 7:50 ` Uwe Kleine-König
2015-03-13 8:13 ` Philipp Zabel
2015-03-13 8:13 ` Philipp Zabel
2015-03-06 19:44 ` Stephen Boyd
2015-03-06 19:44 ` Stephen Boyd
2015-03-06 21:09 ` Uwe Kleine-König
2015-03-06 21:09 ` Uwe Kleine-König
2015-02-12 6:01 ` [PATCH RFC v9 02/20] ARM: imx6q: Add GPR3 MIPI muxing control register field shift bits definition Liu Ying
2015-02-12 6:01 ` Liu Ying
2015-02-12 6:01 ` Liu Ying
2015-02-12 6:01 ` [PATCH RFC v9 03/20] ARM: imx6q: clk: Add the video_27m clock Liu Ying
2015-02-12 6:01 ` Liu Ying
2015-02-12 6:01 ` Liu Ying
2015-02-12 6:01 ` [PATCH RFC v9 04/20] ARM: imx6q: clk: Change hdmi_isfr clock's parent to be " Liu Ying
2015-02-12 6:01 ` Liu Ying
2015-02-12 6:01 ` Liu Ying
2015-02-12 6:01 ` [PATCH RFC v9 05/20] ARM: imx6q: clk: Change hsi_tx clock to be a shared clock gate Liu Ying
2015-02-12 6:01 ` Liu Ying
2015-02-12 6:01 ` Liu Ying
2015-02-12 6:01 ` [PATCH RFC v9 06/20] ARM: imx6q: clk: Add support for mipi_core_cfg clock as " Liu Ying
2015-02-12 6:01 ` Liu Ying
2015-02-12 6:01 ` Liu Ying
2015-02-12 6:01 ` [PATCH RFC v9 07/20] ARM: imx6q: clk: Add support for mipi_ipg " Liu Ying
2015-02-12 6:01 ` Liu Ying
2015-02-12 6:01 ` Liu Ying
2015-02-12 6:01 ` [PATCH RFC v9 08/20] ARM: dts: imx6qdl: Move existing MIPI DSI ports into a new 'ports' node Liu Ying
2015-02-12 6:01 ` Liu Ying
2015-02-12 6:01 ` Liu Ying
2015-02-12 6:01 ` [PATCH RFC v9 09/20] drm/dsi: Add a helper to get bits per pixel of MIPI DSI pixel format Liu Ying
2015-02-12 6:01 ` Liu Ying
2015-02-12 6:01 ` Liu Ying
2015-02-12 9:26 ` Daniel Vetter
2015-02-12 9:26 ` Daniel Vetter
2015-02-12 9:26 ` Daniel Vetter
2015-02-13 5:01 ` Liu Ying
2015-02-13 5:01 ` Liu Ying
2015-02-13 5:01 ` Liu Ying
2015-03-03 11:07 ` Philipp Zabel
2015-03-03 11:07 ` Philipp Zabel
2015-03-03 11:07 ` Philipp Zabel
2015-04-03 3:28 ` Liu Ying
2015-04-03 3:28 ` Liu Ying
2015-04-09 7:10 ` Thierry Reding
2015-04-09 7:10 ` Thierry Reding
2015-04-09 7:10 ` Thierry Reding
2015-02-12 6:01 ` [PATCH RFC v9 10/20] Documentation: dt-bindings: Add bindings for Synopsys DW MIPI DSI DRM bridge driver Liu Ying
2015-02-12 6:01 ` Liu Ying
2015-02-12 6:01 ` Liu Ying
2015-02-12 6:01 ` [PATCH RFC v9 11/20] drm/bridge: Add Synopsys DesignWare MIPI DSI host controller driver Liu Ying
2015-02-12 6:01 ` Liu Ying
2015-02-12 6:01 ` Liu Ying
2015-04-09 8:43 ` Thierry Reding
2015-04-09 8:43 ` Thierry Reding
2015-04-09 8:43 ` Thierry Reding
2015-04-16 5:39 ` Archit Taneja
2015-04-16 5:39 ` Archit Taneja
2015-04-16 5:39 ` Archit Taneja
2015-04-22 12:13 ` Heiko Stübner
2015-04-22 12:13 ` Heiko Stübner
2015-04-22 12:13 ` Heiko Stübner
2015-02-12 6:01 ` [PATCH RFC v9 12/20] Documentation: dt-bindings: Add bindings for i.MX specific Synopsys DW MIPI DSI driver Liu Ying
2015-02-12 6:01 ` Liu Ying
2015-02-12 6:01 ` Liu Ying
2015-02-12 6:01 ` [PATCH RFC v9 13/20] drm: imx: Support Synopsys DesignWare MIPI DSI host controller Liu Ying
2015-02-12 6:01 ` Liu Ying
2015-02-12 6:01 ` Liu Ying
2015-02-12 6:01 ` [PATCH RFC v9 14/20] Documentation: dt-bindings: Add bindings for Himax HX8369A DRM panel driver Liu Ying
2015-02-12 6:01 ` Liu Ying
2015-02-12 6:01 ` Liu Ying
2015-04-09 7:20 ` Thierry Reding
2015-04-09 7:20 ` Thierry Reding
2015-04-09 7:20 ` Thierry Reding
2015-02-12 6:01 ` [PATCH RFC v9 15/20] drm: panel: Add support for Himax HX8369A MIPI DSI panel Liu Ying
2015-02-12 6:01 ` Liu Ying
2015-02-12 6:01 ` Liu Ying
2015-04-09 8:09 ` Thierry Reding
2015-04-09 8:09 ` Thierry Reding
2015-04-09 8:09 ` Thierry Reding
2015-02-12 6:01 ` [PATCH RFC v9 16/20] ARM: dtsi: imx6qdl: Add support for MIPI DSI host controller Liu Ying
2015-02-12 6:01 ` Liu Ying
2015-02-12 6:01 ` Liu Ying
2015-02-12 6:01 ` [PATCH RFC v9 17/20] ARM: dts: imx6qdl-sabresd: Add support for TRULY TFT480800-16-E MIPI DSI panel Liu Ying
2015-02-12 6:01 ` Liu Ying
2015-02-12 6:01 ` Liu Ying
2015-02-12 6:01 ` [PATCH RFC v9 18/20] ARM: imx_v6_v7_defconfig: Cleanup for imx drm being moved out of staging Liu Ying
2015-02-12 6:01 ` Liu Ying
2015-02-12 6:01 ` Liu Ying
2015-02-12 6:01 ` [PATCH RFC v9 19/20] ARM: imx_v6_v7_defconfig: Add support for MIPI DSI host controller Liu Ying
2015-02-12 6:01 ` Liu Ying
2015-02-12 6:01 ` Liu Ying
2015-02-12 6:01 ` [PATCH RFC v9 20/20] ARM: imx_v6_v7_defconfig: Add support for Himax HX8369A panel Liu Ying
2015-02-12 6:01 ` Liu Ying
2015-02-12 6:01 ` Liu Ying
2015-03-02 13:24 ` [PATCH RFC v9 00/20] Add support for i.MX MIPI DSI DRM driver Shawn Guo
2015-03-02 13:24 ` Shawn Guo
2015-03-02 13:24 ` Shawn Guo
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=20150309233416.GF7525@pengutronix.de \
--to=u.kleine-koenig@pengutronix.de \
--cc=linux-arm-kernel@lists.infradead.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 an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.