[Sound-open-firmware] [PATCH] sof: Turn IRQs off globally when send command to pipeline component

Pierre-Louis Bossart pierre-louis.bossart at linux.intel.com
Tue Mar 27 20:50:36 CEST 2018



On 03/27/2018 01:34 PM, Liam Girdwood wrote:
> On Tue, 2018-03-27 at 10:37 -0500, Pierre-Louis Bossart wrote:
>> On 3/27/18 4:17 AM, Wu Zhigang wrote:
>>> When pipeline processing the command, we have to turn off the IRQs.
>>> If not, the DMA IRQ will interrupt the pipeline state set process,
>>> when pipeline is scheduled, the states inconsistence will cause xrun.
>> we disable the irqs but then will walk the graph from host to DAI with
>> component_op_downstream to pass a COMPS_OPS_CMD with in turn will call
>> all .cmd callbacks from all components
>>
>> This could take a significant amount of time and lead to interrupts
>> unrelated to that specific pipeline not being serviced, leading to xruns.
>>
>> what am I missing?
>>
> The pipeline cmd just walks the pipeline and updates the component state
> alongside calling comp_cmd() on each component (START, STOP, PAUSE etc). This is
> very fast in practice, about 20us on BYT. I agree that we do need to be clear
> this is in atomic context (like ALSA trigger) and that any component de-
> init/cleanup must be done in comp_reset().
>
> I will be writing some docs to go alongside 1.2 so I can include this in the
> programming documentation.
ok, but then we need to go back to the existing components. Just looking 
at e.g. eq_fir and src the assumption of fast operation is not right, 
there are things like the code below which go beyond just a state change.

     switch (cmd) {
     case COMP_CMD_SET_VALUE:
         ret = fir_cmd_set_value(dev, cdata);
         break;
     case COMP_CMD_SET_DATA:
         ret = fir_cmd_set_data(dev, cdata);
         break;
     }


     if (cmd == COMP_CMD_SET_VALUE)
         ret = src_ctrl_cmd(dev, cdata);

Or it could be that we need a 'fast' state change and an additional hook 
for actual commands?

>
> Liam



More information about the Sound-open-firmware mailing list