linux-kernel.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
From: "Uwe Kleine-König" <u.kleine-koenig@pengutronix.de>
To: Sean Young <sean@mess.org>
Cc: Lino Sanfilippo <LinoSanfilippo@gmx.de>,
	thierry.reding@gmail.com, lee.jones@linaro.org,
	nsaenzjulienne@suse.de, f.fainelli@gmail.com, rjui@broadcom.com,
	sbranden@broadcom.com, bcm-kernel-feedback-list@broadcom.com,
	linux-pwm@vger.kernel.org, linux-rpi-kernel@lists.infradead.org,
	linux-arm-kernel@lists.infradead.org,
	linux-kernel@vger.kernel.org
Subject: Re: [PATCH v2] pwm: bcm2835: Support apply function for atomic configuration
Date: Fri, 4 Dec 2020 12:13:26 +0100	[thread overview]
Message-ID: <20201204111326.qjux6k2472dmukot@pengutronix.de> (raw)
In-Reply-To: <20201204084417.GA2154@gofer.mess.org>

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

Hello,

On Fri, Dec 04, 2020 at 08:44:17AM +0000, Sean Young wrote:
> On Fri, Dec 04, 2020 at 12:42:15AM +0100, Lino Sanfilippo wrote:
> > > You're storing an unsigned long long (i.e. 64 bits) in an u32. If
> > > you are sure that this won't discard relevant bits, please explain
> > > this in a comment for the cursory reader.
> > 
> > What about an extra check then to make sure that the period has not been truncated,
> > e.g:
> > 
> > 	value = DIV_ROUND_CLOSEST_ULL(state->period, scaler);
> > 
> > 	/* dont accept a period that is too small or has been truncated */
> > 	if ((value < PERIOD_MIN) ||
> > 	    (value != DIV_ROUND_CLOSEST_ULL(state->period, scaler)))
> > 		return -EINVAL;
> 
> Rather than doing another 64 bit division which is expensive (esp on 32 bit
> kernels), you could assign to u64 and check:
> 
> 	if (value < PERIOD || value > U32_MAX)
> 		return -EINVAL;

Given that value is a u32, value > U32_MAX will never trigger.

Maybe checking period before doing the division is more sensible.

> > > Also note that round_closed is probably wrong, as .apply() is
> > > supposed to round down the period to the next achievable period. (But
> > > fixing this has to do done in a separate patch.)
> > 
> > According to commit 11fc4edc4 rounding to the closest integer has been introduced
> > to improve precision in case that the pwm controller is used by the pwm-ir-tx driver.
> > I dont know how strong the requirement is to round down the period in apply(), but I
> > can imagine that this may be a good reason to deviate from this rule.
> > (CCing Sean Young who introduced DIV_ROUND_CLOSEST)
> 
> There was a problem where the carrier is incorrect for some IR hardware
> which uses a carrier of 455kHz. With periods that small, rounding errors
> do really matter and rounding down might cause problems.
> 
> A policy of rounding down the carrier is not the right thing to do
> for pwm-ir-tx, and such a change will probably break pwm-ir-tx in some
> edge cases.

IMO it's not an option to say: pwm-driver A is used for IR, so A's
.apply uses round-nearest and pwm-driver B is used for $somethingelse,
so B's .apply uses round-down. To be a sensible API pwm_apply_state
should have a fixed behaviour. I consider round-down the sensible
choice (because it is easier to implmement the other options with this)
and for consumers like the IR stuff we need to provide some more
functions to allow it selecting a better suited state. Something like:

	pwm_round_state_nearest(pwm, { .period = 2198, .. }, &state)

which queries the hardwares capabilities and then assigns state.period =
2200 instead of 2100.

Where can I find the affected (consumer) driver?

Best regards
Uwe

-- 
Pengutronix e.K.                           | Uwe Kleine-König            |
Industrial Linux Solutions                 | https://www.pengutronix.de/ |

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

  parent reply	other threads:[~2020-12-04 11:14 UTC|newest]

Thread overview: 25+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
     [not found] <202011281128.54eLfMWr-lkp@intel.com>
2020-11-28 12:02 ` [PATCH v2] pwm: bcm2835: Support apply function for atomic configuration Lino Sanfilippo
2020-11-29 18:10   ` Uwe Kleine-König
2020-12-03 23:42     ` Lino Sanfilippo
2020-12-04  8:44       ` Sean Young
2020-12-04  8:58         ` Sean Young
2020-12-04 11:13         ` Uwe Kleine-König [this message]
2020-12-04 11:38           ` Sean Young
2020-12-04 23:28             ` Uwe Kleine-König
2020-12-05 17:34               ` Sean Young
2020-12-05 19:25                 ` Uwe Kleine-König
2020-12-06 14:19                   ` Sean Young
2020-12-07  8:16                     ` Uwe Kleine-König
2020-12-07  9:43                       ` Sean Young
2020-12-07 13:52                         ` Uwe Kleine-König
2020-12-07 15:29                           ` Thierry Reding
2020-12-07 21:46                             ` Uwe Kleine-König
2020-12-07 18:18                           ` Sean Young
2020-12-08  0:00                           ` Lino Sanfilippo
2020-12-08  9:07                             ` Uwe Kleine-König
2020-12-04 23:16         ` Lino Sanfilippo
2020-12-04 11:21       ` Uwe Kleine-König
2020-12-04 11:40         ` Sean Young
2020-12-04 21:55           ` Uwe Kleine-König
2020-12-04 22:44             ` Sean Young
2020-12-04 23:25         ` Lino Sanfilippo

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=20201204111326.qjux6k2472dmukot@pengutronix.de \
    --to=u.kleine-koenig@pengutronix.de \
    --cc=LinoSanfilippo@gmx.de \
    --cc=bcm-kernel-feedback-list@broadcom.com \
    --cc=f.fainelli@gmail.com \
    --cc=lee.jones@linaro.org \
    --cc=linux-arm-kernel@lists.infradead.org \
    --cc=linux-kernel@vger.kernel.org \
    --cc=linux-pwm@vger.kernel.org \
    --cc=linux-rpi-kernel@lists.infradead.org \
    --cc=nsaenzjulienne@suse.de \
    --cc=rjui@broadcom.com \
    --cc=sbranden@broadcom.com \
    --cc=sean@mess.org \
    --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 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).