All of lore.kernel.org
 help / color / mirror / Atom feed
From: Stephen Boyd <sboyd@kernel.org>
To: Paul Cercueil <paul@crapouillou.net>
Cc: Thierry Reding <thierry.reding@gmail.com>,
	Rob Herring <robh+dt@kernel.org>,
	Mark Rutland <mark.rutland@arm.com>,
	Daniel Lezcano <daniel.lezcano@linaro.org>,
	Thomas Gleixner <tglx@linutronix.de>,
	Ralf Baechle <ralf@linux-mips.org>,
	Paul Burton <paul.burton@mips.com>,
	James Hogan <jhogan@kernel.org>, Jonathan Corbet <corbet@lwn.net>,
	linux-pwm@vger.kernel.org, devicetree@vger.kernel.org,
	linux-kernel@vger.kernel.org, linux-watchdog@vger.kernel.org,
	linux-mips@vger.kernel.org, linux-doc@vger.kernel.org,
	linux-clk@vger.kernel.org, Russell King <linux@armlinux.org.uk>
Subject: Re: [PATCH v9 14/27] pwm: jz4740: Improve algorithm of clock calculation
Date: Tue, 29 Jan 2019 14:08:48 -0800	[thread overview]
Message-ID: <154879972841.136743.8067109506420222877@swboyd.mtv.corp.google.com> (raw)
In-Reply-To: <1547129096.16183.0@crapouillou.net>

Quoting Paul Cercueil (2019-01-10 06:04:56)
> Adding Stephen to the discussion.
> Adding Stephen to the discussion.
> 
> On Sat, Jan 5, 2019 at 6:27 PM, Uwe Kleine-König 
> <u.kleine-koenig@pengutronix.de> wrote:
> > Hello Paul,
> > 
> > On Sat, Jan 05, 2019 at 06:05:38PM -0300, Paul Cercueil wrote:
> >>  On Sat, Jan 5, 2019 at 4:57 PM, Uwe Kleine-König
> >>  <u.kleine-koenig@pengutronix.de> wrote:
> >>  > You are assuming stuff here about the parent clk which isn't 
> >> guaranteed
> >>  > (AFAICT) by the clk framework: If you call clk_round_rate(clk, 
> >> rate - 1)
> >>  > this might well return rate even if the clock could run slower 
> >> than
> >>  > rate.
> >> 
> >>  It may not be guaranteed by the clock framework itself, but it is 
> >> guaranteed
> >>  to behave like that on this family of SoCs.
> > 
> > You shouldn't rely on that. Experience shows that people will start
> > copying code to machines where this is not guaranteed. Even if they
> > don't copy and only learn from reading this is bad. Also how do you
> > guarantee that this won't change in the future making the pwm code 
> > break
> > without noticing?
> > 
> > If you use an API better don't assume more things given than are
> > guaranteed by the API.
> > 
> > Having said that I would consider it sensible to introduce something
> > like clk_roundup_rate() and clk_rounddown_rate() which would allow
> > calculations like that.
> 
> @Stephen:
> Some context: my algorithm makes use of clk_round_rate(clk, rate - 1) 
> to get the
> next (smaller) clock rate that a clock support.
> 
> Is it something safe to assume? If not is there a better way?

It isn't super efficient but it should work if you keep subtracting from
rate until it reaches 0. The rounding of clk_round_rate() is
implementation defined. All the API does is tell you what clk_set_rate()
will set the rate to if you call it with the same arguments passed to
clk_round_rate(). Having something like clk_roundup_rate() or
clk_rounddown_rate() could be implemented with a wrapper around
clk_round_rate(), and I believe Uwe has proposed such an API before, but
I'm not sure we want to encourage that sort of API or behavior in
general. The mailing list archives probably have discussions around this
proposed API, I can't remember the whole discussion.

Why do you need to find the "next" supported frequency anyway? It may be
a sign that something is sort of off with the approach if you need to do
this.

WARNING: multiple messages have this Message-ID (diff)
From: Stephen Boyd <sboyd@kernel.org>
To: u.kleine-koenig@pengutronix.de, Paul Cercueil <paul@crapouillou.net>
Cc: Thierry Reding <thierry.reding@gmail.com>,
	Rob Herring <robh+dt@kernel.org>,
	Mark Rutland <mark.rutland@arm.com>,
	Daniel Lezcano <daniel.lezcano@linaro.org>,
	Thomas Gleixner <tglx@linutronix.de>,
	Ralf Baechle <ralf@linux-mips.org>,
	Paul Burton <paul.burton@mips.com>,
	James Hogan <jhogan@kernel.org>, Jonathan Corbet <corbet@lwn.net>,
	linux-pwm@vger.kernel.org, devicetree@vger.kernel.org,
	linux-kernel@vger.kernel.org, linux-watchdog@vger.kernel.org,
	linux-mips@vger.kernel.org, linux-doc@vger.kernel.org,
	linux-clk@vger.kernel.org, Russell King <linux@armlinux.org.uk>
Subject: Re: [PATCH v9 14/27] pwm: jz4740: Improve algorithm of clock calculation
Date: Tue, 29 Jan 2019 14:08:48 -0800	[thread overview]
Message-ID: <154879972841.136743.8067109506420222877@swboyd.mtv.corp.google.com> (raw)
In-Reply-To: <1547129096.16183.0@crapouillou.net>

Quoting Paul Cercueil (2019-01-10 06:04:56)
> Adding Stephen to the discussion.
> Adding Stephen to the discussion.
> 
> On Sat, Jan 5, 2019 at 6:27 PM, Uwe Kleine-König 
> <u.kleine-koenig@pengutronix.de> wrote:
> > Hello Paul,
> > 
> > On Sat, Jan 05, 2019 at 06:05:38PM -0300, Paul Cercueil wrote:
> >>  On Sat, Jan 5, 2019 at 4:57 PM, Uwe Kleine-König
> >>  <u.kleine-koenig@pengutronix.de> wrote:
> >>  > You are assuming stuff here about the parent clk which isn't 
> >> guaranteed
> >>  > (AFAICT) by the clk framework: If you call clk_round_rate(clk, 
> >> rate - 1)
> >>  > this might well return rate even if the clock could run slower 
> >> than
> >>  > rate.
> >> 
> >>  It may not be guaranteed by the clock framework itself, but it is 
> >> guaranteed
> >>  to behave like that on this family of SoCs.
> > 
> > You shouldn't rely on that. Experience shows that people will start
> > copying code to machines where this is not guaranteed. Even if they
> > don't copy and only learn from reading this is bad. Also how do you
> > guarantee that this won't change in the future making the pwm code 
> > break
> > without noticing?
> > 
> > If you use an API better don't assume more things given than are
> > guaranteed by the API.
> > 
> > Having said that I would consider it sensible to introduce something
> > like clk_roundup_rate() and clk_rounddown_rate() which would allow
> > calculations like that.
> 
> @Stephen:
> Some context: my algorithm makes use of clk_round_rate(clk, rate - 1) 
> to get the
> next (smaller) clock rate that a clock support.
> 
> Is it something safe to assume? If not is there a better way?

It isn't super efficient but it should work if you keep subtracting from
rate until it reaches 0. The rounding of clk_round_rate() is
implementation defined. All the API does is tell you what clk_set_rate()
will set the rate to if you call it with the same arguments passed to
clk_round_rate(). Having something like clk_roundup_rate() or
clk_rounddown_rate() could be implemented with a wrapper around
clk_round_rate(), and I believe Uwe has proposed such an API before, but
I'm not sure we want to encourage that sort of API or behavior in
general. The mailing list archives probably have discussions around this
proposed API, I can't remember the whole discussion.

Why do you need to find the "next" supported frequency anyway? It may be
a sign that something is sort of off with the approach if you need to do
this.

  reply	other threads:[~2019-01-29 22:08 UTC|newest]

Thread overview: 47+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2018-12-27 18:12 [PATCH v9 00/27] Ingenic TCU patchset v9 Paul Cercueil
2018-12-27 18:12 ` [PATCH v9 01/27] dt-bindings: ingenic: Add DT bindings for TCU clocks Paul Cercueil
2018-12-27 18:12 ` [PATCH v9 02/27] doc: Add doc for the Ingenic TCU hardware Paul Cercueil
2018-12-27 18:12 ` [PATCH v9 03/27] dt-bindings: Add doc for the Ingenic TCU drivers Paul Cercueil
2018-12-28 21:48   ` Rob Herring
2018-12-28 21:48     ` Rob Herring
2018-12-27 18:12 ` [PATCH v9 04/27] clocksource: Add a new timer-ingenic driver Paul Cercueil
2019-02-25 15:55   ` Daniel Lezcano
2019-02-25 22:59     ` Paul Cercueil
2018-12-27 18:12 ` [PATCH v9 05/27] clocksource: Add driver for the Ingenic JZ47xx OST Paul Cercueil
2018-12-27 18:12 ` [PATCH v9 06/27] MAINTAINERS: Add myself as maintainer for Ingenic TCU drivers Paul Cercueil
2018-12-27 18:12 ` [PATCH v9 07/27] watchdog: jz4740: Use WDT clock provided by TCU driver Paul Cercueil
2018-12-27 18:13 ` [PATCH v9 08/27] watchdog: jz4740: Use regmap " Paul Cercueil
2018-12-27 18:13 ` [PATCH v9 09/27] watchdog: jz4740: Avoid starting watchdog in set_timeout Paul Cercueil
2018-12-27 18:13 ` [PATCH v9 10/27] watchdog: jz4740: Drop dependency on MACH_JZ47xx, use COMPILE_TEST Paul Cercueil
2018-12-27 18:13 ` [PATCH v9 11/27] pwm: jz4740: Apply configuration atomically Paul Cercueil
2018-12-27 18:13 ` [PATCH v9 12/27] pwm: jz4740: Use regmap from TCU driver Paul Cercueil
2019-01-05 19:42   ` Uwe Kleine-König
2019-01-05 20:46     ` Paul Cercueil
2019-01-05 21:18       ` Uwe Kleine-König
2018-12-27 18:13 ` [PATCH v9 13/27] pwm: jz4740: Use clocks " Paul Cercueil
2019-01-05 19:45   ` Uwe Kleine-König
2019-01-05 20:52     ` Paul Cercueil
2019-01-05 21:19       ` Uwe Kleine-König
2018-12-27 18:13 ` [PATCH v9 14/27] pwm: jz4740: Improve algorithm of clock calculation Paul Cercueil
2019-01-05 19:57   ` Uwe Kleine-König
2019-01-05 21:05     ` Paul Cercueil
2019-01-05 21:27       ` Uwe Kleine-König
2019-01-10 14:04         ` Paul Cercueil
2019-01-29 22:08           ` Stephen Boyd [this message]
2019-01-29 22:08             ` Stephen Boyd
2019-02-23  1:17           ` Paul Cercueil
2019-02-28 18:42             ` Stephen Boyd
2019-02-28 18:42               ` Stephen Boyd
2018-12-27 18:13 ` [PATCH v9 15/27] pwm: jz4740: Allow selection of PWM channels 0 and 1 Paul Cercueil
2018-12-27 18:13 ` [PATCH v9 16/27] pwm: jz4740: Drop dependency on MACH_INGENIC, use COMPILE_TEST Paul Cercueil
2018-12-27 18:13 ` [PATCH v9 17/27] pwm: jz4740: Remove unused devicetree compatible strings Paul Cercueil
2018-12-27 18:13 ` [PATCH v9 18/27] clk: jz4740: Add TCU clock Paul Cercueil
2018-12-27 18:13 ` [PATCH v9 19/27] MIPS: Kconfig: Select TCU timer driver when MACH_INGENIC is set Paul Cercueil
2018-12-27 18:13 ` [PATCH v9 20/27] MIPS: jz4740: Add DTS nodes for the TCU drivers Paul Cercueil
2018-12-27 18:13 ` [PATCH v9 21/27] MIPS: qi_lb60: Move PWM devices to devicetree Paul Cercueil
2018-12-27 18:13 ` [PATCH v9 22/27] MIPS: qi_lb60: Reduce system timer and clocksource to 750 kHz Paul Cercueil
2018-12-27 18:13 ` [PATCH v9 23/27] MIPS: CI20: Reduce system timer to 3 MHz Paul Cercueil
2018-12-27 18:13 ` [PATCH v9 24/27] MIPS: CI20: defconfig: enable OST driver Paul Cercueil
2018-12-27 18:13 ` [PATCH v9 25/27] MIPS: GCW0: Reduce system timer to 750 kHz Paul Cercueil
2018-12-27 18:13 ` [PATCH v9 26/27] MIPS: GCW0: defconfig: Enable OST, watchdog, PWM drivers Paul Cercueil
2018-12-27 18:13 ` [PATCH v9 27/27] MIPS: jz4740: Drop obsolete code Paul Cercueil

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=154879972841.136743.8067109506420222877@swboyd.mtv.corp.google.com \
    --to=sboyd@kernel.org \
    --cc=corbet@lwn.net \
    --cc=daniel.lezcano@linaro.org \
    --cc=devicetree@vger.kernel.org \
    --cc=jhogan@kernel.org \
    --cc=linux-clk@vger.kernel.org \
    --cc=linux-doc@vger.kernel.org \
    --cc=linux-kernel@vger.kernel.org \
    --cc=linux-mips@vger.kernel.org \
    --cc=linux-pwm@vger.kernel.org \
    --cc=linux-watchdog@vger.kernel.org \
    --cc=linux@armlinux.org.uk \
    --cc=mark.rutland@arm.com \
    --cc=paul.burton@mips.com \
    --cc=paul@crapouillou.net \
    --cc=ralf@linux-mips.org \
    --cc=robh+dt@kernel.org \
    --cc=tglx@linutronix.de \
    --cc=thierry.reding@gmail.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 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.