Re: [PATCH v2 04/11] iio: add support for hardware fifo

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



On Wed, Feb 4, 2015 at 7:08 PM, Jonathan Cameron <jic23@xxxxxxxxxx> wrote:
> On 05/01/15 11:29, Octavian Purdila wrote:
>> On Mon, Jan 5, 2015 at 2:07 AM, Jonathan Cameron <jic23@xxxxxxxxxx> wrote:
>>> On 21/12/14 00:42, Octavian Purdila wrote:
>>>
>>> Thanks for taking this on!
>>>
>>> This all looks fairly sensible, though a few comments inline.
>>> One big semantic change I'd suggest is to allow the watermark
>>> level passed to the hardware to be a 'hint' rather than a hard
>>> and fast rull.  A lot of these hardware buffers are fairly small
>>> (perhaps 32 entries) and the devices can run fast so whilst
>>> we will obviously have to handle an interrupt often, we may well
>>> want to have a much larger software front end buffer with a
>>> much larger watermark.  For example, a 8192Hz accelerometer
>>> with 32 entry fifo (watermark at 16).  Will fire an interrupt 512 times
>>> a second.  Userspace might be only interested in getting data 32 times
>>> a second and hence want a watermark of 256 entries and probably have
>>> a buffer that is 512 entries long or more.
>>>
>>
>> Very good point with the above example, but I find the hint approach a
>> bit too hard to diagnose and tune by the application.
>>
>> Could we perhaps expose the hwfifo watermark as well, in addition to
>> the software watermark? We can even keep the hint behavior if the
>> application only touches the software watermark, but if it the
>> application directly sets the hwfifo level then we use that.
> Hmm. Not sure how well this would work.  We probably need a way of indicating
> the hardware buffer has not been 'pinned' to a particular value.
> Maybe we can have it read only?
> That way it is obvious what effect the 'hint' is having on the hardware
> without adding a confusing double control for the same thing...

Yeah, the double control do seem confusing...

>>> Hmm. I wonder to a degree if the trigger approach really makes sense for
>>> fifo equiped devices.  We've deliberately not added one in a few existing
>>> cases.
>>>
>>> Otherwise, is there a reason to run this separately from a trigger not using
>>> the fifo.  Surely that's just the same as a watermark of 1?
>>>
>>> Anyhow, a point for discussion!
>>
>> I might be misunderstand you here, but the reason for which we use a
>> separate trigger is to have a way to enable/disable FIFO mode, because
>> enabling the FIFO might have some downsides, e.g. more power
>> consumption. This matters only when the application is interested in
>> low latency sampling ( watermark of 1).
> Perhaps we use a watermark of one to disable the fifo if present.  Can't
> think why you'd want it under those circumstances unless the data can't
> be read without.  This then becomes a driver issue as all the core
> cares about is that the data turns up, not particularly whether it very
> briefly bounces through a buffer or not.
>>

There is another reason to use a trigger to enable/disable the FIFO.

Lets take the bmc150 driver and say that the user sets the any-motion
trigger. In this case we only get data in the buffer when the
accelerometer is moved regardless of sample_frequency. Now, if we
enable the FIFO, the user might expect to see this behavior unchanged
- get data only when the accelerometer is moved. With BMC150's FIFO
this is not true, the FIFO will be filled with data at the
sample_frequency. We effectively switched to a data ready trigger.

>> Yeah, I wanted to add some checks in the core to make sure that if the
>> driver is registering the hwfifo ops then it should allocate and
>> register a watermark trigger as well. If we decide to go with the
>> trigger approach, do you think it is a good idea to add the checks?
>>
> If so, but I'll be honest I really don't like the trigger approach here.
> It feels like an abuse of an interface that is really there to allow
> synchronized capture/ controllable capture on devices without fixed
> timing... (when they are fixed, the point is really to allow other
> non fixed devices to lock on and sample at the same time - very handy
> for inertial data fusion and other places...)

Ah, I was not aware of what the trigger abstraction was intended for.
I always thought it was the equivalent of a device interrupt so it
felt natural to me to implement it as a trigger.
--
To unsubscribe from this list: send the line "unsubscribe linux-iio" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at  http://vger.kernel.org/majordomo-info.html




[Index of Archives]     [Linux USB Devel]     [Video for Linux]     [Linux Audio Users]     [Yosemite News]     [Linux Input]     [Linux Kernel]     [Linux SCSI]     [X.org]

  Powered by Linux