diff mbox series

[v4,1/2] ASoC: SOF: introduce no_stream_position so host_period_bytes preserves its data

Message ID 9d92551a-fa10-4ecd-47f1-5b3b67824a12@linux.intel.com (mailing list archive)
State New, archived
Headers show
Series [v4,1/2] ASoC: SOF: introduce no_stream_position so host_period_bytes preserves its data | expand

Commit Message

Rajwa, Marcin July 30, 2019, 10:16 a.m. UTC
From: Marcin Rajwa <marcin.rajwa@linux.intel.com>

Change the use of host_period_bytes. So far this field was used
as an bool value indicating whether FW should send stream position
update. With this patch we use host_period_bytes to provide firmware
information about the frequency of host interrupts aimed to read
its input buffer. This is accoring to ALSA definition of 'FramePeriod'.
Knowing this firmware can safely copy large/irregular chunks of data
(like data comming from i.e draining task) without the risk of buffer
overflow.

Signed-off-by: Marcin Rajwa <marcin.rajwa@linux.intel.com>
Signed-off-by: Keyon Jie <yang.jie@linux.intel.com>
Reviewed-by: Ranjani Sridharan <ranjani.sridharan@linux.intel.com>

---
  include/sound/sof/stream.h | 4 ++--
  1 file changed, 2 insertions(+), 2 deletions(-)

Comments

Pierre-Louis Bossart July 30, 2019, 12:51 p.m. UTC | #1
On 7/30/19 5:16 AM, Rajwa, Marcin wrote:
> From: Marcin Rajwa <marcin.rajwa@linux.intel.com>
> 
> Change the use of host_period_bytes. So far this field was used
> as an bool value indicating whether FW should send stream position
> update. With this patch we use host_period_bytes to provide firmware
> information about the frequency of host interrupts aimed to read
> its input buffer. This is accoring to ALSA definition of 'FramePeriod'.

according to the

> Knowing this firmware can safely copy large/irregular chunks of data

why irregular? ALSA periods are pretty regular and predictable.

> (like data comming from i.e draining task) without the risk of buffer

coming

Please proof-read your commit messages (and use an editor which 
spell-checks for you), typos and misleading information don't exactly 
boost trust in the suggested patch, regardless of its merits.

> overflow.
> 
> Signed-off-by: Marcin Rajwa <marcin.rajwa@linux.intel.com>
> Signed-off-by: Keyon Jie <yang.jie@linux.intel.com>
> Reviewed-by: Ranjani Sridharan <ranjani.sridharan@linux.intel.com>
> 
> ---
>   include/sound/sof/stream.h | 4 ++--
>   1 file changed, 2 insertions(+), 2 deletions(-)
> 
> diff --git a/include/sound/sof/stream.h b/include/sound/sof/stream.h
> index 643f175cb479..06af4ecb2584 100644
> --- a/include/sound/sof/stream.h
> +++ b/include/sound/sof/stream.h
> @@ -83,10 +83,10 @@ struct sof_ipc_stream_params {
>       uint16_t sample_valid_bytes;
>       uint16_t sample_container_bytes;
> 
> -    /* for notifying host period has completed - 0 means no period IRQ */
>       uint32_t host_period_bytes;
> +    uint16_t no_stream_position; /* 1 means no IPC for position update */
> 
> -    uint32_t reserved[2];
> +    uint16_t reserved[3];
>       uint16_t chmap[SOF_IPC_MAX_CHANNELS];    /**< channel map - 
> SOF_CHMAP_ */
>   } __packed;
> 
>
Rajwa, Marcin July 30, 2019, 9:50 p.m. UTC | #2
On 7/30/2019 2:51 PM, Pierre-Louis Bossart wrote:

>
>
> On 7/30/19 5:16 AM, Rajwa, Marcin wrote:
>> From: Marcin Rajwa <marcin.rajwa@linux.intel.com>
>>
>> Change the use of host_period_bytes. So far this field was used
>> as an bool value indicating whether FW should send stream position
>> update. With this patch we use host_period_bytes to provide firmware
>> information about the frequency of host interrupts aimed to read
>> its input buffer. This is accoring to ALSA definition of 'FramePeriod'.
>
> according to the
>
>> Knowing this firmware can safely copy large/irregular chunks of data
>
> why irregular? ALSA periods are pretty regular and predictable.

I did not say ALSA periods are irregular I said that sometimes (like in 
case of draining) firmware needs to copy irregular amount of that.

What I mean by "irregular" is not equal to ALSA period or multiple of 
periods.

>
>> (like data comming from i.e draining task) without the risk of buffer
>
> coming
>
> Please proof-read your commit messages (and use an editor which 
> spell-checks for you), typos and misleading information don't exactly 
> boost trust in the suggested patch, regardless of its merits.


Sorry for typos. Should I correct them and resend again or correct here 
as we discuss?

>
>> overflow.
>>
>> Signed-off-by: Marcin Rajwa <marcin.rajwa@linux.intel.com>
>> Signed-off-by: Keyon Jie <yang.jie@linux.intel.com>
>> Reviewed-by: Ranjani Sridharan <ranjani.sridharan@linux.intel.com>
>>
>> ---
>>   include/sound/sof/stream.h | 4 ++--
>>   1 file changed, 2 insertions(+), 2 deletions(-)
>>
>> diff --git a/include/sound/sof/stream.h b/include/sound/sof/stream.h
>> index 643f175cb479..06af4ecb2584 100644
>> --- a/include/sound/sof/stream.h
>> +++ b/include/sound/sof/stream.h
>> @@ -83,10 +83,10 @@ struct sof_ipc_stream_params {
>>       uint16_t sample_valid_bytes;
>>       uint16_t sample_container_bytes;
>>
>> -    /* for notifying host period has completed - 0 means no period 
>> IRQ */
>>       uint32_t host_period_bytes;
>> +    uint16_t no_stream_position; /* 1 means no IPC for position 
>> update */
>>
>> -    uint32_t reserved[2];
>> +    uint16_t reserved[3];
>>       uint16_t chmap[SOF_IPC_MAX_CHANNELS];    /**< channel map - 
>> SOF_CHMAP_ */
>>   } __packed;
>>
>>
Pierre-Louis Bossart July 30, 2019, 11:03 p.m. UTC | #3
>>> Change the use of host_period_bytes. So far this field was used
>>> as an bool value indicating whether FW should send stream position
>>> update. With this patch we use host_period_bytes to provide firmware
>>> information about the frequency of host interrupts aimed to read
>>> its input buffer. This is accoring to ALSA definition of 'FramePeriod'.
>>
>> according to the
>>
>>> Knowing this firmware can safely copy large/irregular chunks of data
>>
>> why irregular? ALSA periods are pretty regular and predictable.
> 
> I did not say ALSA periods are irregular I said that sometimes (like in 
> case of draining) firmware needs to copy irregular amount of that.
> 
> What I mean by "irregular" is not equal to ALSA period or multiple of 
> periods.

Marcin, in the v2 review this is what we discussed. The formatting may 
be off so please refer to the emails directly should this be difficult 
to read:

"
 >>>
 >>> Before I provide more feedback, can you clarify if the 
'host_period_bytes' is the same value as the ALSA period size (in 
bytes)? And what would be the value when the no_irq mode is used?
 >>
 >> Yes, this is the same value. It is obtained by 
*params_period_bytes**()* in kernel.
 >
 > ok good. I was afraid this would be a different concept.
 >
 > So what you are saying is that the draining happens by bursts whose 
size is tied to the period defined by the host, yes?
Yes. We try to fill host buffer as much as we can to gain fast draining 
but in the same time we give host time to read it.
"

I cannot reconcile the two threads, is the draining tied to the ALSA 
period size or not?

Care to clarify?

> 
>>
>>> (like data comming from i.e draining task) without the risk of buffer
>>
>> coming
>>
>> Please proof-read your commit messages (and use an editor which 
>> spell-checks for you), typos and misleading information don't exactly 
>> boost trust in the suggested patch, regardless of its merits.
> 
> 
> Sorry for typos. Should I correct them and resend again or correct here 
> as we discuss?


better send a v5 when we've clarified what the 'irregular' wording 
refers to.
diff mbox series

Patch

diff --git a/include/sound/sof/stream.h b/include/sound/sof/stream.h
index 643f175cb479..06af4ecb2584 100644
--- a/include/sound/sof/stream.h
+++ b/include/sound/sof/stream.h
@@ -83,10 +83,10 @@  struct sof_ipc_stream_params {
      uint16_t sample_valid_bytes;
      uint16_t sample_container_bytes;

-    /* for notifying host period has completed - 0 means no period IRQ */
      uint32_t host_period_bytes;
+    uint16_t no_stream_position; /* 1 means no IPC for position update */

-    uint32_t reserved[2];
+    uint16_t reserved[3];
      uint16_t chmap[SOF_IPC_MAX_CHANNELS];    /**< channel map - 
SOF_CHMAP_ */
  } __packed;