Commit Graph

8507 Commits

Author SHA1 Message Date
Liam Girdwood 778d7209cb rmbox: return -EIO and bail on any file open() errors
Signed-off-by: Liam Girdwood <liam.r.girdwood@linux.intel.com>
2017-06-09 14:37:14 +01:00
Liam Girdwood e03147d755 rmbox: add support for new trace classes.
Signed-off-by: Liam Girdwood <liam.r.girdwood@linux.intel.com>
2017-06-09 14:36:33 +01:00
Liam Girdwood 03acfd640d rimage: update to new SOF driver file format.
Support the SOF driver file format.

Signed-off-by: Liam Girdwood <liam.r.girdwood@linux.intel.com>
2017-06-09 14:25:36 +01:00
Liam Girdwood 072fb5c43f rimage: remove flat file builder.
No longer needed so can be safely removed.

Signed-off-by: Liam Girdwood <liam.r.girdwood@linux.intel.com>
2017-06-09 14:24:51 +01:00
Seppo Ingalsuo 6a24a293c6 Add IIR Equalizer component
This change provides an IIR equalizer component. The
 IIR equalizer can be used for any transducer or effects equalizer needs but
 it is especially recommended for speaker response equalization and other
 applications without dependence to matched phase response or best possible
 THD+N performance where FIR may be a better choise. IIR equalization is
 capable to strong response enhancement without need for large DSP resources
 consumption. The tool to create the EQ setup blobs is included in the
 rimage tools.
2017-06-07 15:23:58 +01:00
Seppo Ingalsuo 6f03aa5a5b Add FIR Equalizer component
This change provides a finite impulse response (FIR)
 equalizer component. The FIR equalizer can be used for any transducer or
 effects equalizer needs but it is especially recommended for microphone
 arrays equalization. The tool to create EQ setup blobs is included in the
 rimage tools.
2017-06-07 15:23:57 +01:00
Seppo Ingalsuo 29566ee3e4 Add tone generator component
This change provides a tone generator component. The
 purpose is to provide a high quality FW internal test signal generator for
 objective audio quality measurements for component or system tests. It can
 also be used as simple beep indication tones generator for users.
2017-06-07 15:09:57 +01:00
Seppo Ingalsuo 6a274839ee Add SRC component
This change provides a sample rate converter (SRC).
 The SRC is polyphase FIR type. All the conversions coefficients tables are
 automatically generated by a separate Octave scripts set in the rimage
 tools set. The supported in/out rates and the performance can be customized
 for a different quality/resources trade-off.
2017-06-07 15:09:31 +01:00
Liam Girdwood 84e46b0b2a cache: xtensa: Add cache region implementation for xtensa
Add cache ops for the xtensa architecture.

Signed-off-by: Liam Girdwood <liam.r.girdwood@linux.intel.com>
2017-06-07 12:41:29 +01:00
Liam Girdwood 3c5d9a3b63 cache: Add cache management API to writeback/invalidate regions
Add an API to allow drivers to writeback or invalidate cache contents.
This is useful where the DSP firmware runs from cache and needs to
writeback/buffer prior to DMA or other peripheral usage.

Signed-off-by: Liam Girdwood <liam.r.girdwood@linux.intel.com>
2017-06-07 10:13:57 +01:00
Liam Girdwood 425aa5e917 ipc: Add support for creating pipelines dynamically. Part 1
Currently pipelines have to be statically defined in the firmware source
code. This patch provides a mechanism whereby they can be created and
destroyed via IPC messages from the host.

Part 2 to follow.

Signed-off-by: Liam Girdwood <liam.r.girdwood@linux.intel.com>
2017-06-06 20:35:05 +01:00
Liam Girdwood f4fc2328bf scheduler: Add initial EDF scheduler.
Add an Earliest Deadline First scheduler to perform scheduling of audio
pipeline tasks based on task deadlines. i.e. the task with the earliest
deadline will be scheduled so that it will complete and preempt other
lower priority tasks before the deadline.

Signed-off-by: Liam Girdwood <liam.r.girdwood@linux.intel.com>
2017-06-06 20:35:05 +01:00
Liam Girdwood 2d2cd78be1 task: add priority driven task management
Provide a method for tasks to be performed on a priority basis using the
interrupts levels to preempt lower priority tasks.

The scheduler will use the to schedule work at different priorities.

Signed-off-by: Liam Girdwood <liam.r.girdwood@linux.intel.com>
2017-06-06 20:35:05 +01:00
Liam Girdwood 535201458f arch: xtensa: display memory dump in the map file and add prefix
Also make sure the binaries have platform prefix.

Signed-off-by: Liam Girdwood <liam.r.girdwood@linux.intel.com>
2017-06-06 20:14:56 +01:00
Liam Girdwood 2743d0eeda drivers: ssp: move regsier macros into seperate header
Move the register macros into separate header.

Signed-off-by: Liam Girdwood <liam.r.girdwood@linux.intel.com>
2017-06-06 19:39:13 +01:00
Liam Girdwood a2d5fe5d58 drivers: dw-dma: move register macros into platform specific header.
Clean up the DW-DMA rsgisters so that it can be more easily integrated
into other platforms.

Signed-off-by: Liam Girdwood <liam.r.girdwood@linux.intel.com>
2017-06-06 19:36:27 +01:00
Liam Girdwood 405b1f34f2 list: add list previous iterator
Signed-off-by: Liam Girdwood <liam.r.girdwood@linux.intel.com>
2017-06-06 16:41:35 +01:00
Liam Girdwood 69222cf7d7 core: create a context and pass it to each subsystem at init
Create a global firmware context structure and pass this to each subsystem
on initialisation. This allows components to share access to global DSP
context.

Signed-off-by: Liam Girdwood <liam.r.girdwood@linux.intel.com>
2017-06-06 16:41:07 +01:00
Liam Girdwood d65a18a98b trace: add more detailed trace vales for init
Signed-off-by: Liam Girdwood <liam.r.girdwood@linux.intel.com>
2017-06-06 16:37:05 +01:00
Liam Girdwood b0401e9dc9 build: add rule to clean local files
Signed-off-by: Liam Girdwood <liam.r.girdwood@linux.intel.com>
2017-06-06 13:17:22 +01:00
Liam Girdwood 68abb98990 dma: Add cherrytrail SSP IRQs and DMAC IDs
Add Cherrytrail SSP handshake IDs and extra DMAC

Signed-off-by: Liam Girdwood <liam.r.girdwood@linux.intel.com>
2017-06-06 13:17:22 +01:00
Liam Girdwood 50f7b0e906 allocator: simplify heap modification and allocation part 1
The allocator currently has different methods to allocate heap memory
depending on memory size requested. The heap also has to be defined
in two places atm i.e in memory.h and baytrail.x

This patch aligns the heap macros with the linker script and introduces
new flags to specify the allocation type.

Signed-off-by: Liam Girdwood <liam.r.girdwood@linux.intel.com>
2017-06-06 13:17:22 +01:00
Liam Girdwood 58a99d68bf build-all: run autogen and fail on any errors
Signed-off-by: Liam Girdwood <liam.r.girdwood@linux.intel.com>
2017-06-06 13:17:22 +01:00
Liam Girdwood 658159e7c5 build: fix generation of commit ID and build number
Signed-off-by: Liam Girdwood <liam.r.girdwood@linux.intel.com>
2017-06-06 13:17:22 +01:00
Keyon Jie 2e7a2af3b9 work: enable/disable workq timer following each timer_set/clear()
We need enable/disable workq timer also after each calling to
set/clear timer, but not only CPU frequency change, so merge
them into work_set/clear_timer().

Signed-off-by: Keyon Jie <yang.jie@linux.intel.com>
2017-03-16 19:55:15 +00:00
Keyon Jie 29973dfa78 ssp: add handle for default clk type
Add default clk type SSP_CLK_DEFAULT and the handle for it

Signed-off-by: Keyon Jie <yang.jie@linux.intel.com>
2017-03-16 19:52:53 +00:00
Keyon Jie d8dd7576b2 work: fix typos for comment message
Signed-off-by: Keyon Jie <yang.jie@linux.intel.com>
2017-03-16 19:51:52 +00:00
Liam Girdwood 2a0f0ea62b host: Add more comments to host callback
Signed-off-by: Liam Girdwood <liam.r.girdwood@linux.intel.com>
2017-03-02 12:00:29 +00:00
Keyon Jie bfcf15ef41 host: remove host side buffer check and fix for capture
We assume that there are always datas/spaces for playback/capture,
and then don't need to check the host side buffer pointers, here
remove these buffer check related code to save about 0.6KB to the
firmware binary size.

We also do code cleanup for host in this patch: remove superfluous
prefix 'host_' for host_data members, merge host_dma_cb_playback()
and host_dma_cb_capture() as they have most common code, and the
latter change can save about 0.25KB to firmware binary size.

Furthermore, we also fix the capture doesn't work issue at the
same time.

Signed-off-by: Keyon Jie <yang.jie@linux.intel.com>
2017-03-02 11:42:30 +00:00
Keyon Jie 28b48f83b0 component: set source buffer params for capture component .params()
Considering of capture pipeline, when doing .params(), we need
set params to each component's source buffer.

This patch implement that for host/volume component, as mixer is
only for playback ATM, and dai don't have source buffer for capture,
we don't need change them ATM.

Signed-off-by: Keyon Jie <yang.jie@linux.intel.com>
2017-03-01 11:01:51 +00:00
Liam Girdwood b1d2434696 rmbox: use SSP 19.2M clock for trace
Signed-off-by: Liam Girdwood <liam.r.girdwood@linux.intel.com>
2017-02-28 12:14:48 +00:00
Liam Girdwood 74512df085 rmbox: add support for snapshots of HW state
Signed-off-by: Liam Girdwood <liam.r.girdwood@linux.intel.com>
2017-02-28 12:14:39 +00:00
Keyon Jie 1cdbc3e426 host: fix an uninitialized warning issue
We met a variable uninitialized issue:
'ret' might be used uninitialized in this function.
host.c:606 | host_preload()

Here adding the initialized assignment to fix this issue.

Signed-off-by: Keyon Jie <yang.jie@linux.intel.com>
2017-02-14 09:45:34 +00:00
Liam Girdwood 12d789ad5b pipeline: Add support for full pipeline pre-loading.
Preload entire pipeline and all components by walking the pipeline graph.

Signed-off-by: Liam Girdwood <liam.r.girdwood@linux.intel.com>
Modified-by: Keyon Jie <yang.jie@linux.intel.com>
2017-02-13 14:54:31 +00:00
Keyon Jie cd77fb05a7 host: create host_elements_reset() and host_pointer_reset() for common use
The elements reset code may be shared by params() and stop(),
and the host side pointer resetting code may be used by both
reset() and stop().

Here create separate functions for those common codes, to make
code more clean.

Signed-off-by: Keyon Jie <yang.jie@linux.intel.com>
2017-02-13 14:54:31 +00:00
Keyon Jie 2b72ea7b0e component: host/volume/mixer: reset buffers for stop cmd
For command stop, excepting reset components, we may need reset
the buffer next to the component, otherwise, if the next start
command comes(without reset before it), the buffer pointers may
be disordered.

Signed-off-by: Keyon Jie <yang.jie@linux.intel.com>
2017-02-13 14:54:31 +00:00
Keyon Jie 55abae7eeb dw-dma: handle different cases in irq handler
After finished a transfer copy, check for reload channel:
1. if next.size is DMA_RELOAD_END, stop this dma copy;
2. if next.size > 0 but not DMA_RELOAD_LLI, use next
element for next copy;
3. if we are waiting for pause, pause it;
4. otherwise, reload lli.

Signed-off-by: Keyon Jie <yang.jie@linux.intel.com>
2017-02-13 14:54:31 +00:00
Keyon Jie 4c1937e50c dai: add R/W pointer check for dai copy
We should only copy when there is data, after copied the last bytes
or period, we will stop the dai and ssp, and trigger the pipeline
finish, which will notify host side the last read pointer and let
host side send trigger stop ipc.

Signed-off-by: Keyon Jie <yang.jie@linux.intel.com>
2017-02-13 14:54:31 +00:00
Keyon Jie 33d624956a mixer: add dd->last_bytes for the last bytes(< period) caculation
For the last bytes (< 1 period) copy, we need to remember this
for the size caculation at finished, here add dd->last_bytes for
this purpos.

Signed-off-by: Keyon Jie <yang.jie@linux.intel.com>
2017-02-13 14:54:31 +00:00
Keyon Jie 7a834bb2e2 mixer: add R/W pointer check for mixer_copy()
We should only copy when there is data, as we are using pulling
mode, should sink side should have free space always, we check
each source->avail and copy only some bytes when avail < period
size.

Signed-off-by: Keyon Jie <yang.jie@linux.intel.com>
2017-02-13 14:54:31 +00:00
Keyon Jie 4cbe38a52d mixer: mixer_params(): set the sink buffer params to STREAM_FORMAT_S32_LE.
As its sink won't be host/dai, it is alwasys internal component,
let's hard code it to STREAM_FORMAT_S32_LE ATM.

Signed-off-by: Keyon Jie <yang.jie@linux.intel.com>
2017-02-13 14:54:31 +00:00
Keyon Jie 240f90c54d volume: add R/W pointer check for volume_copy()
We should only copy when there is data, as we are using pulling
mode, should sink side should have free space always, we check
source->avail only and copy only some bytes when avail < period
size.

Signed-off-by: Keyon Jie <yang.jie@linux.intel.com>
2017-02-13 14:54:31 +00:00
Keyon Jie 7d0c7b6c1d volume: volume_cmd(): only stop/pause at running
We should only stop/pause it when the volume component is in
running status.

Signed-off-by: Keyon Jie <yang.jie@linux.intel.com>
2017-02-13 14:54:31 +00:00
Keyon Jie f3aec1d744 component: status: rename COMP_STATE_STOPPED to COMP_STATE_SETUP
For component 'inactive, but ready' status, naming 'SETUP' may
be more understandable than 'STOPPED', and 'SETUP' is consistent
with ALSA.

     new()        params()       start()
none ======> init =======> setup ======> running
     <======      <=======       <======
     free()       reset()         stop()
2017-02-13 14:54:31 +00:00
Keyon Jie 002daab594 volume: volume_params(): set the sink buffer params depending on its sink
If its sink is host, we need set it to 16bit(hard coded ATM);
if its sink is dai, we need set it to 32bit SSP format;
otherwise, for internal component, we uses STREAM_FORMAT_S32_LE.

Signed-off-by: Keyon Jie <yang.jie@linux.intel.com>
2017-02-13 14:54:31 +00:00
Keyon Jie 1ff623bdf5 host: host_copy: only copy when there is data and wait until finish
We don't copy when host_avail is 0(usually stream finished), at the
same time, we need wait until the dma copy is finished before we
can start next pulling copy.

Signed-off-by: Keyon Jie <yang.jie@linux.intel.com>
2017-02-13 14:54:31 +00:00
Keyon Jie 8cbf06c96b host: cleanup host_cmd() cases
1. only pause at running stage;
2. resetting buffer pointers and local_elem for stopping, to let next
starting begin from original position;
3. adding processes for COMP_CMD_AVAIL_UPDATE.

Signed-off-by: Keyon Jie <yang.jie@linux.intel.com>
2017-02-13 14:54:31 +00:00
Keyon Jie f0d4d7a14c host: reset pointers at new() and reset()
We need to clear those pointers at new(), and undo at reset()
those initialization what we did in set_params().

For new(), rzalloc() will help set host_data members to 0s and
NULLs.

Signed-off-by: Keyon Jie <yang.jie@linux.intel.com>
2017-02-13 14:54:31 +00:00
Keyon Jie 9e58cf39a5 host: add a completion work to notify host side
We need to wait until the last bytes/period is finished in dai,
before we can notify host side about that, otherwise, host side
will trigger stop too early, and we will miss rendering them.

Signed-off-by: Keyon Jie <yang.jie@linux.intel.com>
2017-02-13 14:54:31 +00:00
Keyon Jie 1e524a17f0 host: add R/W pointers check for playback
Here add R/W pointers check for playback, make sure the next
copy size is not bigger than the host avail bytes.

Signed-off-by: Keyon Jie <yang.jie@linux.intel.com>
2017-02-13 14:54:31 +00:00