From: mturquette@linaro.org (Mike Turquette)
To: linux-arm-kernel@lists.infradead.org
Subject: [PATCH 0/3] clk: divider: three exactness fixes (and a rant)
Date: Fri, 06 Mar 2015 10:57:30 -0800 [thread overview]
Message-ID: <20150306185730.11109.45998@quantum> (raw)
In-Reply-To: <1424515225-6929-1-git-send-email-u.kleine-koenig@pengutronix.de>
Quoting Uwe Kleine-K?nig (2015-02-21 02:40:22)
> Hello,
>
> TLDR: only apply patch 1 and rip of CLK_DIVIDER_ROUND_CLOSEST.
>
> I stared at clk-divider.c for some time now given Sascha's failing test
> case. I found a fix for the failure (which happens to be what Sascha
> suspected).
>
> The other two patches fix problems only present when handling dividers
> that have CLK_DIVIDER_ROUND_CLOSEST set. Note that these are still
> heavily broken however. So having a 4bit-divider and a parent clk of
> 10000 (as in Sascha's test case) requesting
>
> clk_set_rate(clk, 666)
>
> sets the rate to 625 (div=15) instead of 667 (div=16). The reason is the
> choice of parent_rate in clk_divider_bestdiv's loop is wrong for
> CLK_DIVIDER_ROUND_CLOSEST (with and without patch 1). A fix here is
> non-trivial and for sure more than one rate must be tested here. This is
> complicated by the fact that clk_round_rate might return a value bigger
> than the requested rate which convinces me (once more) that it's a bad
> idea to allow that. Even if this was fixed for .round_rate,
> clk_divider_set_rate is still broken because it also uses
>
> div = DIV_ROUND_UP(parent_rate, rate);
>
> to calculate the (pretended) best divider to get near rate.
>
> Note this makes at least two reasons to remove support for
> CLK_DIVIDER_ROUND_CLOSEST!
>
> Instead I'd favour creating a function
>
> clk_round_rate_nearest
>
> as was suggested some time ago by Soren Brinkmann and me[1] that doesn't
Uwe,
Thanks for the fixes. I'm thinking of taking all three for 4.0. I also
agree on clk_round_rate_nearest (along with a _ceil and _floor version
as well). That's something we can do for 4.1 probably.
There are currently 3 users of CLK_DIVIDER_ROUND_CLOSEST:
Loongson
QCOM
ST
So now is probably the right time to remove the flag if we're going to
do it.
What do you think?
Regards,
Mike
> need any clk type specific knowledge. This would mean that not the
> divider (or clk in general) would have to know that returning a slightly
> bigger rate than requested is OK but the caller which is fine (and even
> better) in my eyes. This would simplify clk-divider.c (and probably
> others) and give support for "nearest match" for all clock types without
> type specific implementation. (Note that it might even make sense to use
> a different metric for "nearest", instead of minimizing
>
> abs(target - rate)
>
> you might want to minimize
>
> abs(target / rate - 1)
>
> instead.
>
> Converting the clk framework to 64 bit rates was discussed earlier
> already, too, and I wonder if we should fix rounding issues (a bit) in
> the same transition such that
>
> clk_set_rate(clk, 333)
>
> allows the clk to be set to 333.3333333333 Hz and let clk_get_rate
> return 333 in this case.
>
> Also I'd vote to return 0 or -ESOMETHING if a requested rate is too low
> to be set. This would simplify some special casing I think and makes the
> request
>
> clk_round_rate(clk, x) <= x
>
> consistent.
>
> Best regards
> Uwe
>
> [1] https://lkml.org/lkml/2014/5/14/698
>
> Uwe Kleine-K?nig (3):
> clk: divider: fix calculation of maximal parent rate for a given
> divider
> clk: divider: fix selection of divider when rounding to closest
> clk: divider: fix calculation of initial best divider when rounding to
> closest
>
> drivers/clk/clk-divider.c | 27 +++++++++++++--------------
> 1 file changed, 13 insertions(+), 14 deletions(-)
>
> --
> 2.1.4
>
WARNING: multiple messages have this Message-ID (diff)
From: Mike Turquette <mturquette@linaro.org>
To: "Uwe Kleine-König" <u.kleine-koenig@pengutronix.de>,
"Stephen Boyd" <sboyd@codeaurora.org>
Cc: kernel@pengutronix.de, linux-kernel@vger.kernel.org,
linux-arm-kernel@lists.infradead.org,
"Sören Brinkmann" <soren.brinkmann@xilinx.com>
Subject: Re: [PATCH 0/3] clk: divider: three exactness fixes (and a rant)
Date: Fri, 06 Mar 2015 10:57:30 -0800 [thread overview]
Message-ID: <20150306185730.11109.45998@quantum> (raw)
In-Reply-To: <1424515225-6929-1-git-send-email-u.kleine-koenig@pengutronix.de>
Quoting Uwe Kleine-König (2015-02-21 02:40:22)
> Hello,
>
> TLDR: only apply patch 1 and rip of CLK_DIVIDER_ROUND_CLOSEST.
>
> I stared at clk-divider.c for some time now given Sascha's failing test
> case. I found a fix for the failure (which happens to be what Sascha
> suspected).
>
> The other two patches fix problems only present when handling dividers
> that have CLK_DIVIDER_ROUND_CLOSEST set. Note that these are still
> heavily broken however. So having a 4bit-divider and a parent clk of
> 10000 (as in Sascha's test case) requesting
>
> clk_set_rate(clk, 666)
>
> sets the rate to 625 (div=15) instead of 667 (div=16). The reason is the
> choice of parent_rate in clk_divider_bestdiv's loop is wrong for
> CLK_DIVIDER_ROUND_CLOSEST (with and without patch 1). A fix here is
> non-trivial and for sure more than one rate must be tested here. This is
> complicated by the fact that clk_round_rate might return a value bigger
> than the requested rate which convinces me (once more) that it's a bad
> idea to allow that. Even if this was fixed for .round_rate,
> clk_divider_set_rate is still broken because it also uses
>
> div = DIV_ROUND_UP(parent_rate, rate);
>
> to calculate the (pretended) best divider to get near rate.
>
> Note this makes at least two reasons to remove support for
> CLK_DIVIDER_ROUND_CLOSEST!
>
> Instead I'd favour creating a function
>
> clk_round_rate_nearest
>
> as was suggested some time ago by Soren Brinkmann and me[1] that doesn't
Uwe,
Thanks for the fixes. I'm thinking of taking all three for 4.0. I also
agree on clk_round_rate_nearest (along with a _ceil and _floor version
as well). That's something we can do for 4.1 probably.
There are currently 3 users of CLK_DIVIDER_ROUND_CLOSEST:
Loongson
QCOM
ST
So now is probably the right time to remove the flag if we're going to
do it.
What do you think?
Regards,
Mike
> need any clk type specific knowledge. This would mean that not the
> divider (or clk in general) would have to know that returning a slightly
> bigger rate than requested is OK but the caller which is fine (and even
> better) in my eyes. This would simplify clk-divider.c (and probably
> others) and give support for "nearest match" for all clock types without
> type specific implementation. (Note that it might even make sense to use
> a different metric for "nearest", instead of minimizing
>
> abs(target - rate)
>
> you might want to minimize
>
> abs(target / rate - 1)
>
> instead.
>
> Converting the clk framework to 64 bit rates was discussed earlier
> already, too, and I wonder if we should fix rounding issues (a bit) in
> the same transition such that
>
> clk_set_rate(clk, 333)
>
> allows the clk to be set to 333.3333333333 Hz and let clk_get_rate
> return 333 in this case.
>
> Also I'd vote to return 0 or -ESOMETHING if a requested rate is too low
> to be set. This would simplify some special casing I think and makes the
> request
>
> clk_round_rate(clk, x) <= x
>
> consistent.
>
> Best regards
> Uwe
>
> [1] https://lkml.org/lkml/2014/5/14/698
>
> Uwe Kleine-König (3):
> clk: divider: fix calculation of maximal parent rate for a given
> divider
> clk: divider: fix selection of divider when rounding to closest
> clk: divider: fix calculation of initial best divider when rounding to
> closest
>
> drivers/clk/clk-divider.c | 27 +++++++++++++--------------
> 1 file changed, 13 insertions(+), 14 deletions(-)
>
> --
> 2.1.4
>
next prev parent reply other threads:[~2015-03-06 18:57 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 [this message]
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
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=20150306185730.11109.45998@quantum \
--to=mturquette@linaro.org \
--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.