Commit Graph

52 Commits

Author SHA1 Message Date
Kai Vehmanen 8c619cf740 rtos: add Zephyr implementation of sof/lib/dai.h
Implement sof/lib/dai.h for Zephyr build and do not rely o
the xtos version for Zephyr builds. Add a warning to catch
invalid build configurations.

Link: https://github.com/thesofproject/sof/issues/9015
Signed-off-by: Kai Vehmanen <kai.vehmanen@linux.intel.com>
2024-09-11 09:51:33 +03:00
Damian Nikodem 213306433f src: dai-zephyr: copy data to all available sinks
In the case where the copier has more than one output and,
additionally, we will be using a pin other than pin 0
(for example, when we want to copy data from pin 1 of
a gateway-type copier to the next pipeline), it is necessary
to copy data in playback path from the source to the output
for all possible active sinks.

Signed-off-by: Damian Nikodem <damian.nikodem@intel.com>
2024-08-05 10:39:30 +03:00
Serhiy Katsyuba 319978685d pcm_converter: Add channel map parameter
Adds a channel map parameter to conversion functions, allowing for
the introduction of conversions that can handle both format conversion
and channel remapping.

Signed-off-by: Serhiy Katsyuba <serhiy.katsyuba@intel.com>
2024-07-17 15:27:41 +03:00
Guennadi Liakhovetski c34cdaf376 compile: replace 'typeof' with '__typeof__' globally
When compiled with '-std=c99' or newer 'typeof' is unavailable and
'__typeof__' should be used instead [1].

[1] https://gcc.gnu.org/onlinedocs/gcc/Alternate-Keywords.html

Signed-off-by: Guennadi Liakhovetski <guennadi.liakhovetski@linux.intel.com>
2024-05-14 14:37:44 +01:00
Kai Vehmanen e9b238f826 xtos: perf_cnt: use correct timing_counter_get()
Do not use arch_timing_counter() directly, but instead use
the public timing_counter_get().

Signed-off-by: Kai Vehmanen <kai.vehmanen@linux.intel.com>
2024-04-15 13:54:01 +01:00
Ranjani Sridharan 3540548b95 src: panic: Modify the signature of __panic()
Make the filename argument be a const char * to avoid the following
warning with c++ compliation:
warning: ISO C++ forbids converting a string constant to ‘char*’ [-Wwrite-strings]

Signed-off-by: Ranjani Sridharan <ranjani.sridharan@linux.intel.com>
2024-02-16 21:45:27 +02:00
Baofeng Tian ac76b3e136 Trace: move META specific header to posix folder
Move META preproc header file to posix folder.

Signed-off-by: Baofeng Tian <baofeng.tian@intel.com>
2024-01-23 19:43:02 +02:00
Baofeng Tian 13aac8cf66 sof: remove META usage in sof source code
Except for trace file, there is no usage for META in sof
source code, posix and xtos are all aligned with zephyr definiton.

Signed-off-by: Baofeng Tian <baofeng.tian@intel.com>
2024-01-23 19:43:02 +02:00
Guennadi Liakhovetski 12d958a2eb module: export symbols for loadable modules
Export a number of symbols, commonly used by loadable modules.

Signed-off-by: Guennadi Liakhovetski <guennadi.liakhovetski@linux.intel.com>
2024-01-09 19:01:13 +02:00
maruthi machani 3858532c76 driver:amd:enabling support for sound wire
Enabling sound wire support for amd platform

Signed-off-by: maruthi machani <maruthi.machani@amd.corp-partner.google.com>
2023-11-15 14:30:31 +02:00
Daniel Baluta 7ca9a2eb8a driver: imx: Add PDM MICFIL driver
The Pulse Density Modulated Microphone Interface (MICFIL) is a popular
way to deliver audio from microphones to the processor in several
applications, such as mobile telephones. However, current digital-audio
systems use multibit audio signal (also known as multibit PCM) to
represent the signal. This block implements the required digital
interface to provide a 24-bits audio signal from a PDM microphone
bitstream in a configurable output sampling rate.

This patch adds initial support for PDM MICFIL IP found on i.MX8MP
board.

Signed-off-by: Daniel Baluta <daniel.baluta@nxp.com>
2023-09-20 14:43:11 +03:00
Liam Girdwood b2c9944ae7 xtos: mailbox: use memcpy for host mailbox_write
Host based mailbox needs to be fixed in another place. It's here
now until rtos partitioning is done.

Signed-off-by: Liam Girdwood <liam.r.girdwood@linux.intel.com>
Signed-off-by: Ranjani Sridharan <ranjani.sridharan@linux.intel.com>
2023-09-14 16:19:15 +01:00
Marcin Szkudlinski fc9fe6c043 sparse: remove all sparse_cache from buffer related structs
struct audio_stream __sparse_cache => struct audio_stream
struct comp_buffer __sparse_cache => struct comp_buffer
struct sof_source __sparse_cache => struct sof_source
struct sof_sink __sparse_cache => struct sof_sinkurce

this commit is 100% generated by editor find/replace
+ one cosmetic change (intent correction to make checkpatch happy)

Signed-off-by: Marcin Szkudlinski <marcin.szkudlinski@intel.com>
2023-09-11 13:58:09 +01:00
Baofeng Tian b9967598e2 perf-cnt: add peak mcps count
add peak mcps counter to indicate which period have max mcps.
Also changed sample_cnt to period_cnt to make name more sense.

Signed-off-by: Baofeng Tian <baofeng.tian@intel.com>
2023-08-09 16:13:35 +01:00
Serhiy Katsyuba 071ba084a6 Add remote get_attribute for cross core connection
To support pipelines connection between cores, ipc4_create_buffer()
must be able to create buffer shared between source and sink
components created on different cores. ipc4_create_buffer() requires
source component obs size. When both source and sink components
created on same core, ipc4_create_buffer() is executed on that core,
otherwise it is executed of core 0 (IPC processing core). So for the
case when source and sink components are created on different cores
comp_get_attribute_remote() is used to receive source obs size.

Signed-off-by: Serhiy Katsyuba <serhiy.katsyuba@intel.com>
2023-07-26 14:39:14 +01:00
Serhiy Katsyuba a63a877dbe bind/unbind support for cross core connection
bind/unbind handler must be called from core on which component was
created.
When both source and sink components are created on same core,
bind/unbind IPC is processed on that core. However, when connected
source and sink are on different cores, IPC is processed on core 0.
Hence comp_bind_remote() and comp_unbide_remote() is added to call
bind/unbide from proper core.

Signed-off-by: Serhiy Katsyuba <serhiy.katsyuba@intel.com>
2023-07-26 14:39:14 +01:00
SaiSurya, Ch 90ac563cee Add HS I2S DMA capabilities.
Define HS I2S DMA capabilities.

Signed-off-by: SaiSurya, Ch <saisurya.chakkaveeravenkatanaga@amd.com>
2023-07-25 15:00:03 +01:00
Baofeng Tian 8adbb85044 perf_cnt: simplify the difference calculation for cycles
Previously, due to cycle get max is UINT32_MAX, so check
and wrap cycles based on INT32_MAX, however, unsigned int can wrap
automatically with minus, remove the check and make
perf difference calculation more simple.

Signed-off-by: Baofeng Tian <baofeng.tian@intel.com>
2023-07-05 19:59:08 -07:00
Ranjani Sridharan a09982e093 lib: dma: Add a new DMA buffer copy function
Add a new DMA copy function, dma_buffer_copy_from_no_consume(), that can
be used to copy from the DMA buffer to the sink without modifying the
read pointer in the DMA buffer. This will be used when the DMA data
needs to be copied to multiple sink buffers. The DMA buffer pointer
should be updated at the end of all copies in this case.

Signed-off-by: Ranjani Sridharan <ranjani.sridharan@linux.intel.com>
2023-05-12 14:26:51 +03:00
Andy Ross 483c78fa5c ipc4: Clean up toolchain definitions
__packed and __aligned are defined in compiler_attributes.h, which
wasn't included, and when building for Zephyr that needs to include
the zephyr/toolchain.h header which is the original source of those
macros.

Transitive headers were saving this, but building for posix/fuzzing
works differently.

Signed-off-by: Andy Ross <andyross@google.com>
2023-05-09 12:17:44 +03:00
Guennadi Liakhovetski 5cbbde7986 clock: replace per-clock locks with a global one
select_cpu_clock() on cAVS currently takes all the clock locks while
adjusting them. And that function is called from clock_set_freq()
which also takes one of those locks, which leads to a recursive
spin-lock. To fix that remove per-clock spin-locks and use a global
clock lock instead.

Signed-off-by: Guennadi Liakhovetski <guennadi.liakhovetski@linux.intel.com>
2023-03-07 13:37:56 +02:00
Laurentiu Mihalcea 039ccee564 zephyr: Introduce Zephyr version of sof/lib/io.h
The purpose of this commit is to get rid of the dependency
on xtos/include/sof/lib/io.h when building SOF for Zephyr.
Apart from that, this commit solves or gets us closer to
solving the following issues:
	1) Compiling SOF for arm64 architecture results
	in warnings such as the following:

	"warning: cast to pointer from integer
	of different size [-Wint-to-pointer-cast]"

	2) Enabling CONFIG_SOF_ZEPHYR_STRICT_HEADERS will
	result in a compilation error. One of the causes
	for this is the fact that sof/lib/io.h doesn't
	exist.

Signed-off-by: Laurentiu Mihalcea <laurentiu.mihalcea@nxp.com>
2023-03-01 16:03:40 +00:00
Laurentiu Mihalcea d4c573401b xtos: include: sof: lib: io.h Fix naming inconsistency for 64-bit functions
The naming scheme used for the 64-bit read/write function is
not consistent with the naming scheme used for the other
read/write functions. This commit fixes this.

Signed-off-by: Laurentiu Mihalcea <laurentiu.mihalcea@nxp.com>
2023-03-01 16:03:40 +00:00
Krzysztof Frydryk 10e1172ea5 ams: Add initial AMS implementation
Add Asynchronous Messaging Service. This can be used to communicate between
modules.
Asynchronous Messages are one-way messages from one producer to one or
multiple registered consumers. Messages between modules on different
cores are sent through IDC. All inter-core communication must be proxied
by the main core.

Signed-off-by: Krzysztof Frydryk <krzysztofx.frydryk@intel.com>
2023-02-28 09:10:29 +01:00
Laurentiu Mihalcea 7ed1159e48 Switch to using rtos/idc.h instead of sof/drivers/idc.h
The purpose of this commit is to separate the XTOS-specifc
code from the Zephyr-specifc code found in sof/drivers/idc.h.

Signed-off-by: Laurentiu Mihalcea <laurentiu.mihalcea@nxp.com>
2023-02-24 14:28:49 +02:00
Laurentiu Mihalcea 0a5c049ac0 Switch to using rtos/task.h instead of sof/schedule/task.h
The purpose of this commit is to separate XTOS-specific code
from the Zephyr-specific code found in sof/schedule/task.h.

Signed-off-by: Laurentiu Mihalcea <laurentiu.mihalcea@nxp.com>
2023-02-24 14:28:49 +02:00
Laurentiu Mihalcea 2115a7bfea Switch to using rtos/sof.h instead of sof/sof.h
The purpose of this commit is to separate the XTOS-specifc
code from the Zephyr-specifc code found in sof/sof.h.

Signed-off-by: Laurentiu Mihalcea <laurentiu.mihalcea@nxp.com>
2023-02-22 13:15:06 +00:00
Laurentiu Mihalcea c3695ded43 arch: debug: Allow panic.h to be included from XTOS's rtos/panic.h
Since sof/debug/panic.h has been removed, the only file which should
be including arch/debug/panic.h is XTOS's rtos/panic.h. This commit
removes the forced "#define __SOF_DEBUG_PANIC_H__" from rtos/panic.h
and makes all arch/debug/panic.h files include-able from rtos/panic.h.

Signed-off-by: Laurentiu Mihalcea <laurentiu.mihalcea@nxp.com>
2023-02-21 15:34:47 +00:00
Laurentiu Mihalcea d3c7c08d7e Replace sof/debug/panic.h with rtos/panic.h
Since all sof/debug/panic.h does is it includes rtos/panic.h
why not just simply replace sof/debug/panic.h with rtos/panic.h?

This commit does exactly that.

Signed-off-by: Laurentiu Mihalcea <laurentiu.mihalcea@nxp.com>
2023-02-21 15:34:47 +00:00
Laurentiu Mihalcea b91e253f65 include: sof: debug: Split panic.h into Zephyr and XTOS-specific headers
The purpose of this commit is to separate Zephyr-specific definitions
from XTOS-specific definitions. Based on the build, <rtos/panic.h>
will contain the required definitions.

Signed-off-by: Laurentiu Mihalcea <laurentiu.mihalcea@nxp.com>
2023-02-21 15:34:47 +00:00
Guennadi Liakhovetski afcbe880c4 list: add a static list head initialiser
To statically initialise a list do something like
static struct list_item item = LIST_INIT(item);

Signed-off-by: Guennadi Liakhovetski <guennadi.liakhovetski@linux.intel.com>
2023-02-09 15:23:43 +00:00
Guennadi Liakhovetski 6d48dc5ca4 zephyr: add a macro for module initialisation
This macro integrates SOF modules into Zephyr initialisation
framework. SOF module initialisation functions use
DECLARE_MODULE_ADAPTER() or DECLARE_MODULE() to register with the SOF
native initialisation scheme, now the same initialisation functions
can be used with the new SOF_MODULE_INIT() macro to integrate them
into the Zephyr initialisation flow.

Signed-off-by: Guennadi Liakhovetski <guennadi.liakhovetski@linux.intel.com>
2023-01-26 16:54:57 +02:00
Rander Wang 5ac79eae01 mutex: add mutex support in XTOS
It uses spin lock to support mutex.

Suggested-by: Liam Girdwood <liam.r.girdwood@linux.intel.com>
Suggested-by: Kai Vehmanen <kai.vehmanen@linux.intel.com>
Signed-off-by: Rander Wang <rander.wang@intel.com>
2022-12-19 13:26:19 +02:00
Andy Ross c50eddce1f platform: Add Zephyr native_posix-based emulation environment
This extends the ideas in CONFIG_LIBRARY=y to implement SOF as an
application for the Zephyr native_posix architecture.  These are host
x86 or x86_64 binaries that include a full OS build, which can be used
(via mocked drivers) for testing against host validation environments
like ASAN/MSAN.

The mechanism uses the existing "host" architecture used by
CONFIG_LIBRARY, but adds a new platform layer named "posix", populated
entirely with stubs.

No driver integration is provided in this patch.  The resulting
executable builds correctly, but has no devices and won't do anything.

Signed-off-by: Andy Ross <andyross@google.com>
2022-12-07 17:25:39 +00:00
Adrian Warecki 6f488686b9 dma: Use dma_get_attribute from Zephyr
Use Zephyrs dma_get_attribute when using Zephyr native drivers.

After switching to dma_get_attribute from Zephyr,
local copy of get_attribute function for dw and alh
in ace platform is no longer necessary.

Signed-off-by: Adrian Warecki <adrian.warecki@intel.com>
2022-11-28 16:55:55 +02:00
Adrian Warecki 4321546db0 dma: cavs: ace: Move period count to dma_plat_data
Since zephyr does not support reading the period count
attribute from dma, this value has been moved to
dma_plat_data.

Signed-off-by: Adrian Warecki <adrian.warecki@intel.com>
2022-11-28 16:55:55 +02:00
Adrian Warecki 7f04a2aaf5 dma: Rename dma_get_attribute to dma_get_attribute_legacy
This commit prepares for the introduction of the
dma_get_attribute function in Zephyr.
The dma_get_attribute function was renamed to
dma_get_attribute_legacy. Fixed all existing calls to it.

Signed-off-by: Adrian Warecki <adrian.warecki@intel.com>
2022-11-28 16:55:55 +02:00
MARUTHI MACHANI 4c39ce3433 platform:amd:support for tdm configuration
support for tdm configuration for amd platforms

Signed-off-by: MARUTHI MACHANI <maruthi.machani@amd.com>
2022-11-23 20:28:09 +00:00
Baofeng Tian 5261853027 Performance: remove perf avg macro and reduce print profiling logs
PERFORMANCE_COUNTERS_RUN_AVERAGE is not an independent macro,
it depend on: PERFORMANCE_COUNTERS, so it is duplicated,
remove this macro and use one macro to control this module,
also reduced unnecessary profiling log print.

Signed-off-by: Baofeng Tian <baofeng.tian@intel.com>
2022-11-01 10:45:00 +00:00
Tomasz Leman e973f5245e zephyr: cpu: moving outside of the wrapper
Moving core management code out of the wrapper for solutions builded
with zephyr.

Signed-off-by: Tomasz Leman <tomasz.m.leman@intel.com>
2022-10-26 13:27:25 +01:00
Baofeng Tian 177b61457f performance: perf cnt bugfix for profiling
Current hw cycle is based on 38400000, and perf cnt module did not consider
the clock wrap case, i.e the later cycle maybe small than the previous one.
so add code to handle this situation.

Signed-off-by: Baofeng Tian <baofeng.tian@intel.com>
2022-10-18 13:41:37 +03:00
Baofeng Tian 33ea9ea5ab profiling task: modify task profiling with performance counter macro
This patch is used to make sure profiling code only can be run
with performance profiling build, and unify all performance profiling
with same format and usage.

Signed-off-by: Baofeng Tian <baofeng.tian@intel.com>
2022-10-14 12:08:03 +03:00
Liam Girdwood 27a3d7c2af header: rtos: use rtos specific version of cache.h
Code can now include <rtos/cache.h> which can wrap onto rtos cache
APIs. Will wrap onto Zephyr generic cache API when ready.

Signed-off-by: Liam Girdwood <liam.r.girdwood@linux.intel.com>
2022-09-12 11:44:27 +01:00
Liam Girdwood e8733b4f4c header: rtos: use rtos specific version of clk.h
Code can now include <rtos/clk.h>. API is not yet wrapped to Zephyr.

Signed-off-by: Liam Girdwood <liam.r.girdwood@linux.intel.com>
2022-09-12 11:44:27 +01:00
Liam Girdwood 4843516ab8 header: rtos: use rtos specific version of alloc.h
Code can now include <rtos/alloc.h> and uses thinly wrapped Zephyr
native for most uses. Wrapping can be removed over time.

Signed-off-by: Liam Girdwood <liam.r.girdwood@linux.intel.com>
2022-09-12 11:44:27 +01:00
Liam Girdwood e7d1b7bbf9 header: rtos: use rtos specific version of interrupt.h
Code can now include <rtos/interrupt.h> and uses native Zephyr IRQ API
for most uses. Some wrapping still exists which can be removed over
time. IMX is missing IRQ driver in Zephyr so falls back to xtos IRQ
driver.

Signed-off-by: Liam Girdwood <liam.r.girdwood@linux.intel.com>
2022-09-12 11:44:27 +01:00
Liam Girdwood e42f4a6e63 header: rtos: use rtos specific version of timer.h
Code can now include <rtos/timer.h> and uses native Zephyr timer API
for most uses. Some wrapping still exists which can be removed over
time.

Signed-off-by: Liam Girdwood <liam.r.girdwood@linux.intel.com>
2022-09-12 11:44:27 +01:00
Liam Girdwood c3c94fc515 header: rtos: use rtos specific version of wait.h
Code can now include <rtos/wait.h> and uses native Zephyr 64
cycle API instead of SOF version.

Signed-off-by: Liam Girdwood <liam.r.girdwood@linux.intel.com>
2022-09-06 15:37:21 +01:00
Liam Girdwood c90055f2f5 header: rtos: use rtos specific version of string.h
No runtime semantic change. Use C library when RTOS uses
C library otherwise use own C library calls.

Signed-off-by: Liam Girdwood <liam.r.girdwood@linux.intel.com>
2022-08-31 12:01:07 +01:00
Liam Girdwood 09c52810a7 header: rtos: use rtos specific version of bit.h
No runtime functional change. Code can now include <rtos/bit.h>

Signed-off-by: Liam Girdwood <liam.r.girdwood@linux.intel.com>
2022-08-31 12:01:07 +01:00