This patch updates binary IPC to similar style as done previously for FIR
equalizer. The blob size needs to be added as first word in the blob.
The internals of IIR coefficients format is exposed to uapi/eq.h level.
Also the blob parsing code is changed to use the structures instead of
hardcoded word offsets.
The EQ assign or switch to bypass (via -1) is fixed so there is no more
need to define a bypass EQ shape into the blob.
Finally C code style is updated to pass the commit checker scripts.
Signed-off-by: Seppo Ingalsuo <seppo.ingalsuo@linux.intel.com>
Changes flow of dw-dma interrupt registration and unregistration:
Now it is possible for slave cores to register for dw-dma handler.
Also registration happens before start and not on FW load
during probing. This way we are not wasting runtime heap memory
and also it will allow us to dynamically change execution core
for certain pipelines.
Signed-off-by: Tomasz Lauda <tomasz.lauda@linux.intel.com>
Aligns memmap related structs to cache line size.
This is getting us closer to have memory allocator
fully shared between cores.
Signed-off-by: Tomasz Lauda <tomasz.lauda@linux.intel.com>
The busy bit of DIPCIDR register is cleared when host is ready,
and the done bit of DIPCIDA is cleared after fw confirms the
reply message from host. So fw should check these two conditions
before sending ipc msg to host
Signed-off-by: Rander Wang <rander.wang@linux.intel.com>
The busy bit of DIPCI register is cleared when host is ready.
So fw could send ipc msgs to host when the value of busy bit
is zero
Signed-off-by: Rander Wang <rander.wang@linux.intel.com>
Signed-off-by: Pan Xiuli <xiuli.pan@linux.intel.com>
I've added tdm support in ssp. Tdm mode has
padding at the end of each slot. Tdm mode is
enabled by tdm_per_slot_padding flag in
sof_ipc_dai_ssp_params struct.
Signed-off-by: Bartosz Kokoszko <bartoszx.kokoszko@linux.intel.com>
The only difference between DSP_A and DSP_B modes
is FSRT bit in sspsp register and start delay
set to 1 in DSP_A mode.
Signed-off-by: Bartosz Kokoszko <bartoszx.kokoszko@linux.intel.com>
It beats me why changes done one one side are not merged on the other.
We should really require all changes to the IPC files to be distinct
PRs so that they are easier to track.
Signed-off-by: Pierre-Louis Bossart <pierre-louis.bossart@linux.intel.com>
Aligns every runtime heap buffer to cache line (64 bytes).
This way we won't have problem with processing tasks on slave cores
in the future.
Signed-off-by: Tomasz Lauda <tomasz.lauda@linux.intel.com>
It is a simple fix for trace buffer overflowing at the boot
up time or debug mode FW. At boot up time, there are many trace
events for topology loading in very short time, the trace buffer
needs to be scheduled ASAP. 5us is the shortest time works on
every platforms.
Signed-off-by: Rander Wang <rander.wang@linux.intel.com>
This patch prevents an error if the EQ responses to channels mapping
table in the configuration blob contains less channels than current
number of channels in firmware. Without this check the lookup from blob
can go past the table. Reporting an error depended on successive blob
content to detect corrupt blob and was not guaranteed.
The situation is not changed to stop to error but instead extrapolate
the table by applying 1st channel EQ for additional channels. It e.g.
helps to duplicate mono effect EQ to all channels without need to make
blobs with mapping to match max. channels count of SOF. The used response
index for each channel can be seen from trace.
Signed-off-by: Seppo Ingalsuo <seppo.ingalsuo@linux.intel.com>
This patch add possibility to use two samples per call processed
filter core. The use of optimized version depends on FIR core header
files settings. Normally when compiled with xt-xcc the optimized filter
version will be used.
The set data and get data IPC is updated to use binary and enum control
commands.
A pass-trough copy function is added get working pipeline with
non-configured EQ.
The full-circular EQ copy function is needed since it is unnecessary.
Normal SOF components work with buffers
EQ mute is removed since SOF components do not usually support it except
volume.
The IPC is updated to match ALSA binary and enum controls style. The
previous approach was not practical for kernel driver side.
Code style is updated the pass the checks.
Signed-off-by: Ranjani Sridharan <ranjani.sridharan@linux.intel.com>
Signed-off-by: Seppo Ingalsuo <seppo.ingalsuo@linux.intel.com>
When the DMA is stuck, e.g. in slave mode when the external clock is
not active, the Linux kernel will trigger a stop after a
timeout. Since the DMA will never complete, the current code returns
an IPC error on stop (DMA completion fails) and will not reset DMA
channel status and reference counts.
Force the DMA and DAI to be stopped to solve the problem. We probably
need to look at all error handling since it's likely to be a recurring
issue.
Also simplify the Xrun code, no need for an extra return.
Signed-off-by: Pierre-Louis Bossart <pierre-louis.bossart@linux.intel.com>