All of lore.kernel.org
 help / color / mirror / Atom feed
From: David Lechner <david@lechnology.com>
To: William Breathitt Gray <vilhelm.gray@gmail.com>
Cc: linux-iio@vger.kernel.org,
	Robert Nelson <robertcnelson@gmail.com>,
	linux-kernel@vger.kernel.org
Subject: Re: [PATCH 3/8] counter/ti-eqep: add support for unit timer
Date: Wed, 27 Oct 2021 10:28:59 -0500	[thread overview]
Message-ID: <253916e2-a808-8786-ac72-60a1a62b1531@lechnology.com> (raw)
In-Reply-To: <YXZvQSU6bRRaWD89@shinobu>

On 10/25/21 3:48 AM, William Breathitt Gray wrote:
> On Sat, Oct 16, 2021 at 08:33:38PM -0500, David Lechner wrote:
>> This adds support to the TI eQEP counter driver for the Unit Timer.
>> The Unit Timer is a device-level extension that provides a timer to be
>> used for speed calculations. The sysfs interface for the Unit Timer is
>> new and will be documented in a later commit. It contains a R/W time
>> attribute for the current time, a R/W period attribute for the timeout
>> period and a R/W enable attribute to start/stop the timer. It also
>> implements a timeout event on the chrdev interface that is triggered
>> each time the period timeout is reached.
>>
>> Signed-off-by: David Lechner <david@lechnology.com>
> 
> I'll comment on the sysfs interface in the respective docs patch. Some
> comments regarding this patch below.
> 

...

>> +static int ti_eqep_unit_timer_period_write(struct counter_device *counter,
>> +					   u64 value)
>> +{
>> +	struct ti_eqep_cnt *priv = counter->priv;
>> +	u32 quprd;
>> +
>> +	/* convert nanoseconds to timer ticks */
>> +	quprd = value = mul_u64_u32_div(value, priv->sysclkout_rate, NSEC_PER_SEC);
>> +	if (quprd != value)
>> +		return -ERANGE;
>> +
>> +	/* protect against infinite unit timeout interrupts */
>> +	if (quprd == 0)
>> +		return -EINVAL;
> 
> I doubt there's any practical reason for a user to set the timer period
> to 0, but perhaps we should not try to protect users from themselves
> here. It's very obvious and expected that setting the timer period to 0
> results in timeouts as quickly as possible, so really the user should be
> left to reap the fruits of their decision regardless of how asinine that
> decision is.

Even if the operating system ceases operation because the interrupt
handler keeps running because clearing the interrupt has no effect
in this condition?

...

>> @@ -500,6 +608,7 @@ static int ti_eqep_probe(struct platform_device *pdev)
>>   {
>>   	struct device *dev = &pdev->dev;
>>   	struct ti_eqep_cnt *priv;
>> +	struct clk *clk;
>>   	void __iomem *base;
>>   	int err;
>>   	int irq;
>> @@ -508,6 +617,24 @@ static int ti_eqep_probe(struct platform_device *pdev)
>>   	if (!priv)
>>   		return -ENOMEM;
>>   
>> +	clk = devm_clk_get(dev, "sysclkout");
>> +	if (IS_ERR(clk)) {
>> +		if (PTR_ERR(clk) != -EPROBE_DEFER)
>> +			dev_err(dev, "failed to get sysclkout");
>> +		return PTR_ERR(clk);
>> +	}
>> +
>> +	priv->sysclkout_rate = clk_get_rate(clk);
>> +	if (priv->sysclkout_rate == 0) {
>> +		dev_err(dev, "failed to get sysclkout rate");
>> +		/* prevent divide by zero */
>> +		priv->sysclkout_rate = 1;
>> +		/*
>> +		 * This error is not expected and the driver is mostly usable
>> +		 * without clock rate anyway, so don't exit here.
>> +		 */
> 
> If the values for these new attributes are expected to be denominated in
> nanoseconds then we must guarantee that. You should certainly error out
> here if you can't guarantee such.
> 
> Alternatively, you could provide an additional set of attributes that
> are denominated in units of raw timer ticks rather than nanoseconds.
> That way if you can't determine the clock rate you can simply have the
> nanosecond-denominated timer attributes return an EOPNOTSUPP error code
> or similar while still providing users with the raw timer ticks
> attributes.

I think we should just fail here.

  reply	other threads:[~2021-10-27 15:29 UTC|newest]

Thread overview: 41+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2021-10-17  1:33 [PATCH 0/8] counter: ti-eqep: implement features for speed measurement David Lechner
2021-10-17  1:33 ` [PATCH 1/8] counter/ti-eqep: implement over/underflow events David Lechner
2021-10-17 11:10   ` Jonathan Cameron
2021-10-25  7:13   ` William Breathitt Gray
2021-10-27 15:23     ` David Lechner
2021-10-28  6:41       ` William Breathitt Gray
2021-10-17  1:33 ` [PATCH 2/8] counter/ti-eqep: add support for direction David Lechner
2021-10-17 11:11   ` Jonathan Cameron
2021-10-25  7:29   ` William Breathitt Gray
2021-10-17  1:33 ` [PATCH 3/8] counter/ti-eqep: add support for unit timer David Lechner
2021-10-17 11:20   ` Jonathan Cameron
2021-10-25  8:48   ` William Breathitt Gray
2021-10-27 15:28     ` David Lechner [this message]
2021-10-28  7:48       ` William Breathitt Gray
2021-10-28 13:42         ` David Lechner
2021-10-30  8:35           ` William Breathitt Gray
2021-10-17  1:33 ` [PATCH 4/8] docs: counter: add unit timer sysfs attributes David Lechner
2021-10-17 11:23   ` Jonathan Cameron
2021-10-27  6:46   ` William Breathitt Gray
2021-10-27 15:30     ` David Lechner
2021-10-28  7:59       ` William Breathitt Gray
2021-10-30 16:40         ` David Lechner
2021-11-01  4:08           ` William Breathitt Gray
2021-11-01  5:27             ` William Breathitt Gray
2021-10-17  1:33 ` [PATCH 5/8] counter/ti-eqep: add support for latched position David Lechner
2021-10-27  7:44   ` William Breathitt Gray
2021-10-27 15:40     ` David Lechner
2021-10-28  8:12       ` William Breathitt Gray
2021-10-17  1:33 ` [PATCH 6/8] docs: counter: add latch_mode and latched_count sysfs attributes David Lechner
2021-10-17 11:26   ` Jonathan Cameron
2021-10-27  7:54   ` William Breathitt Gray
2021-10-27 17:00     ` David Lechner
2021-10-30  1:32       ` William Breathitt Gray
2021-10-30 14:39         ` Jonathan Cameron
2021-11-01  5:11           ` William Breathitt Gray
2021-10-17  1:33 ` [PATCH 7/8] counter/ti-eqep: add support for edge capture unit David Lechner
2021-10-17 11:29   ` Jonathan Cameron
2021-10-27  8:23   ` William Breathitt Gray
2021-10-27 17:28     ` David Lechner
2021-10-17  1:33 ` [PATCH 8/8] docs: counter: add edge_capture_unit_* attributes David Lechner
2021-10-27  8:26   ` William Breathitt Gray

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=253916e2-a808-8786-ac72-60a1a62b1531@lechnology.com \
    --to=david@lechnology.com \
    --cc=linux-iio@vger.kernel.org \
    --cc=linux-kernel@vger.kernel.org \
    --cc=robertcnelson@gmail.com \
    --cc=vilhelm.gray@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.