Skip to content

Commit ce983f0

Browse files
committed
imx8mp: Switch to native drivers and timer domain
This includes: - switching all topologies from DMA domain to timer domain. - interrupt related fixes done via CONFIG_IMX8M. - remove SOF standalone drivers from compilation Signed-off-by: Daniel Baluta <daniel.baluta@nxp.com>
1 parent 72df5f6 commit ce983f0

File tree

11 files changed

+46
-54
lines changed

11 files changed

+46
-54
lines changed

app/boards/imx8mp_evk_mimx8ml8_adsp.conf

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,3 +2,10 @@ CONFIG_IMX8M=y
22
CONFIG_HAVE_AGENT=n
33
CONFIG_FORMAT_CONVERT_HIFI3=n
44
CONFIG_KPB_FORCE_COPY_TYPE_NORMAL=n
5+
CONFIG_DMA=y
6+
CONFIG_DMA_NXP_SDMA=y
7+
CONFIG_TRACE=n
8+
CONFIG_SHARED_INTERRUPTS=y
9+
CONFIG_ZEPHYR_NATIVE_DRIVERS=y
10+
CONFIG_SAI_HAS_MCLK_CONFIG_OPTION=y
11+
CONFIG_CLOCK_CONTROL_FIXED_RATE_CLOCK=y

src/drivers/imx/ipc.c

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -33,15 +33,13 @@
3333

3434
LOG_MODULE_REGISTER(ipc_task, CONFIG_SOF_LOG_LEVEL);
3535

36-
#ifndef CONFIG_IMX8M
3736
/* thanks to the fact that ARM's GIC is supported
3837
* by Zephyr there's no need to clear interrupts
3938
* explicitly. This should already be done by Zephyr
4039
* after executing the ISR. This macro is used for
4140
* linkage purposes on ARM64-based platforms.
4241
*/
4342
#define interrupt_clear(irq)
44-
#endif /* CONFIG_IMX8M */
4543

4644
SOF_DEFINE_REG_UUID(ipc_task);
4745

src/platform/Kconfig

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -127,7 +127,6 @@ config IMX8M
127127
select IMX
128128
select IMX_SDMA
129129
select IMX_MICFIL
130-
select SCHEDULE_DMA_MULTI_CHANNEL
131130
select IMX_INTERRUPT_IRQSTEER
132131
help
133132
Select if your target platform is imx8m-compatible

src/platform/imx8m/include/platform/platform.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -24,7 +24,7 @@ struct timer;
2424
#define LPSRAM_SIZE 16384
2525

2626
/* IPC Interrupt */
27-
#define PLATFORM_IPC_INTERRUPT IRQ_NUM_MU
27+
#define PLATFORM_IPC_INTERRUPT 7
2828
#define PLATFORM_IPC_INTERRUPT_NAME NULL
2929

3030
/* Host page size */

src/platform/imx8m/platform.c

Lines changed: 0 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -159,11 +159,6 @@ int platform_init(struct sof *sof)
159159
sof->cpu_timers = sof->platform_timer;
160160
#endif
161161

162-
#ifdef __ZEPHYR__
163-
/* initialize cascade interrupts before any usage */
164-
interrupt_init(sof);
165-
#endif
166-
167162
platform_interrupt_init();
168163
platform_clock_init(sof);
169164
scheduler_init_edf();
@@ -186,16 +181,6 @@ int platform_init(struct sof *sof)
186181
if (ret < 0)
187182
return -ENODEV;
188183

189-
/* Init SDMA platform domain */
190-
sof->platform_dma_domain =
191-
dma_multi_chan_domain_init(&sof->dma_info->dma_array[1],
192-
PLATFORM_NUM_DMACS - 1,
193-
PLATFORM_DEFAULT_CLOCK, true);
194-
195-
/* i.MX platform DMA domain will be full synchronous, no time dependent */
196-
sof->platform_dma_domain->full_sync = true;
197-
scheduler_init_ll(sof->platform_dma_domain);
198-
199184
/* initialize the host IPC mechanims */
200185
ipc_init(sof);
201186

tools/topology/topology1/CMakeLists.txt

Lines changed: 15 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -48,24 +48,24 @@ set(TPLGS
4848
## end i.MX8 (i.MX8QM and i.MX8QXP) topologies
4949

5050
## i.MX8MP topologies
51-
"sof-imx8-compr-wm8960-mixer\;sof-imx8mp-compr-wm8960-mixer\;-DCODEC=wm8960\;-DSAI_INDEX=3\;-DDMA_DOMAIN"
52-
"sof-imx8-compr-wm8960-mixer\;sof-imx8mp-compr-wm8962-mixer\;-DCODEC=wm8962\;-DSAI_INDEX=3\;-DDMA_DOMAIN"
53-
"sof-imx8-wm8960-mixer\;sof-imx8mp-wm8960-mixer\;-DCODEC=wm8960\;-DRATE=48000\;-DSAI_INDEX=3\;-DDMA_DOMAIN"
54-
"sof-imx8-wm8960-mixer\;sof-imx8mp-wm8962-mixer\;-DCODEC=wm8962\;-DRATE=48000\;-DSAI_INDEX=3\;-DDMA_DOMAIN"
51+
"sof-imx8-compr-wm8960-mixer\;sof-imx8mp-compr-wm8960-mixer\;-DCODEC=wm8960\;-DSAI_INDEX=3"
52+
"sof-imx8-compr-wm8960-mixer\;sof-imx8mp-compr-wm8962-mixer\;-DCODEC=wm8962\;-DSAI_INDEX=3"
53+
"sof-imx8-wm8960-mixer\;sof-imx8mp-wm8960-mixer\;-DCODEC=wm8960\;-DRATE=48000\;-DSAI_INDEX=3"
54+
"sof-imx8-wm8960-mixer\;sof-imx8mp-wm8962-mixer\;-DCODEC=wm8962\;-DRATE=48000\;-DSAI_INDEX=3"
5555
"sof-imx8mp-wm8960-kwd\;sof-imx8mp-wm8960-kwd"
5656
"sof-imx8mp-micfil\;sof-imx8mp-micfil"
5757
"sof-imx8mp-btsco-dual-8ch\;sof-imx8mp-btsco-dual-8ch"
58-
"sof-imx8-wm8960\;sof-imx8mp-wm8960\;-DCODEC=wm8960\;-DRATE=48000\;-DPPROC=volume\;-DSAI_INDEX=3\;-DDMA_DOMAIN"
59-
"sof-imx8-wm8960\;sof-imx8mp-wm8904\;-DCODEC=wm8904\;-DRATE=44100\;-DPPROC=volume\;-DSAI_INDEX=3\;-DDMA_DOMAIN"
60-
"sof-imx8-wm8960\;sof-imx8mp-wm8962\;-DCODEC=wm8962\;-DRATE=48000\;-DPPROC=volume\;-DSAI_INDEX=3\;-DDMA_DOMAIN"
61-
"sof-imx8-wm8960\;sof-imx8mp-eq-iir-wm8960\;-DCODEC=wm8960\;-DRATE=48000\;-DPPROC=eq-iir-volume\;-DSAI_INDEX=3\;-DDMA_DOMAIN"
62-
"sof-imx8-wm8960\;sof-imx8mp-eq-iir-wm8962\;-DCODEC=wm8962\;-DRATE=48000\;-DPPROC=eq-iir-volume\;-DSAI_INDEX=3\;-DDMA_DOMAIN"
63-
"sof-imx8-wm8960\;sof-imx8mp-eq-fir-wm8960\;-DCODEC=wm8960\;-DRATE=48000\;-DPPROC=eq-fir-volume\;-DSAI_INDEX=3\;-DDMA_DOMAIN"
64-
"sof-imx8-wm8960\;sof-imx8mp-eq-fir-wm8962\;-DCODEC=wm8962\;-DRATE=48000\;-DPPROC=eq-fir-volume\;-DSAI_INDEX=3\;-DDMA_DOMAIN"
65-
"sof-imx8-wm8960\;sof-imx8mp-gui-components-wm8960\;-DCODEC=wm8960\;-DRATE=48000\;-DPPROC=gui-components\;-DSAI_INDEX=3\;-DDMA_DOMAIN"
66-
"sof-imx8-wm8960\;sof-imx8mp-drc-wm8960\;-DCODEC=wm8960\;-DRATE=48000\;-DPPROC=drc\;-DSAI_INDEX=3\;-DDMA_DOMAIN"
67-
"sof-imx8-src-wm8960\;sof-imx8mp-src-wm8960\;-DCODEC=wm8960\;-DRATE=48000\;-DPPROC=src\;-DSAI_INDEX=3\;-DDMA_DOMAIN"
68-
"sof-imx8-src-wm8960\;sof-imx8mp-src-wm8962\;-DCODEC=wm8962\;-DRATE=48000\;-DPPROC=src\;-DSAI_INDEX=3\;-DDMA_DOMAIN"
58+
"sof-imx8-wm8960\;sof-imx8mp-wm8960\;-DCODEC=wm8960\;-DRATE=48000\;-DPPROC=volume\;-DSAI_INDEX=3"
59+
"sof-imx8-wm8960\;sof-imx8mp-wm8904\;-DCODEC=wm8904\;-DRATE=44100\;-DPPROC=volume\;-DSAI_INDEX=3"
60+
"sof-imx8-wm8960\;sof-imx8mp-wm8962\;-DCODEC=wm8962\;-DRATE=48000\;-DPPROC=volume\;-DSAI_INDEX=3"
61+
"sof-imx8-wm8960\;sof-imx8mp-eq-iir-wm8960\;-DCODEC=wm8960\;-DRATE=48000\;-DPPROC=eq-iir-volume\;-DSAI_INDEX=3"
62+
"sof-imx8-wm8960\;sof-imx8mp-eq-iir-wm8962\;-DCODEC=wm8962\;-DRATE=48000\;-DPPROC=eq-iir-volume\;-DSAI_INDEX=3"
63+
"sof-imx8-wm8960\;sof-imx8mp-eq-fir-wm8960\;-DCODEC=wm8960\;-DRATE=48000\;-DPPROC=eq-fir-volume\;-DSAI_INDEX=3"
64+
"sof-imx8-wm8960\;sof-imx8mp-eq-fir-wm8962\;-DCODEC=wm8962\;-DRATE=48000\;-DPPROC=eq-fir-volume\;-DSAI_INDEX=3"
65+
"sof-imx8-wm8960\;sof-imx8mp-gui-components-wm8960\;-DCODEC=wm8960\;-DRATE=48000\;-DPPROC=gui-components\;-DSAI_INDEX=3"
66+
"sof-imx8-wm8960\;sof-imx8mp-drc-wm8960\;-DCODEC=wm8960\;-DRATE=48000\;-DPPROC=drc\;-DSAI_INDEX=3"
67+
"sof-imx8-src-wm8960\;sof-imx8mp-src-wm8960\;-DCODEC=wm8960\;-DRATE=48000\;-DPPROC=src\;-DSAI_INDEX=3"
68+
"sof-imx8-src-wm8960\;sof-imx8mp-src-wm8962\;-DCODEC=wm8962\;-DRATE=48000\;-DPPROC=src\;-DSAI_INDEX=3"
6969
"sof-imx8mp-compr-pcm-wm8960\;sof-imx8mp-compr-pcm-wm8960"
7070
"sof-imx8mp-compr-pcm-cap-wm8960\;sof-imx8mp-compr-pcm-cap-wm8960"
7171
"sof-imx8mp-compr-wm8960\;sof-imx8mp-compr-wm8960\;-DCODEC=wm8960\;-DRATE=48000"

zephyr/CMakeLists.txt

Lines changed: 1 addition & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -314,25 +314,18 @@ endif()
314314

315315
if (CONFIG_SOC_MIMX8ML8_ADSP)
316316
zephyr_library_sources(
317-
${SOF_DRIVERS_PATH}/generic/dummy-dma.c
318-
${SOF_DRIVERS_PATH}/imx/sdma.c
319-
${SOF_DRIVERS_PATH}/imx/sai.c
320317
${SOF_DRIVERS_PATH}/imx/ipc.c
321-
${SOF_DRIVERS_PATH}/imx/micfil.c
322-
${SOF_DRIVERS_PATH}/imx/interrupt-irqsteer.c
323318
)
324319

325320
# Platform sources
326321
zephyr_library_sources(
327322
${SOF_PLATFORM_PATH}/imx8m/platform.c
328323
${SOF_PLATFORM_PATH}/imx8m/lib/clk.c
329-
${SOF_PLATFORM_PATH}/imx8m/lib/dai.c
330-
${SOF_PLATFORM_PATH}/imx8m/lib/dma.c
331324
)
332325

333326
# SOF core infrastructure - runs on top of Zephyr
334327
zephyr_library_sources(
335-
${SOF_SRC_PATH}/drivers/interrupt.c
328+
lib/dma.c
336329
)
337330

338331
zephyr_library_sources(${SOF_SRC_PATH}/schedule/zephyr_ll.c)

zephyr/Kconfig

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,6 @@ config ZEPHYR_NATIVE_DRIVERS
2020

2121
config DMA_DOMAIN
2222
bool "Enable the usage of DMA domain."
23-
default y if IMX8M
2423
help
2524
This enables the usage of the DMA domain in scheduling.
2625

zephyr/include/rtos/interrupt.h

Lines changed: 1 addition & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,7 @@
1111
/* TODO: to be removed completely when the following platforms are switched
1212
* to native drivers.
1313
*/
14-
#if defined(CONFIG_IMX8M) || defined(CONFIG_AMD)
14+
#if defined(CONFIG_AMD)
1515
/* imx currently has no IRQ driver in Zephyr so we force to xtos IRQ */
1616
#include "../../../xtos/include/rtos/interrupt.h"
1717
#else
@@ -49,16 +49,7 @@ static inline void interrupt_unregister(uint32_t irq, const void *arg)
4949

5050
static inline int interrupt_get_irq(unsigned int irq, const char *cascade)
5151
{
52-
#ifdef CONFIG_IMX8M
53-
if (cascade == irq_name_level2)
54-
return SOC_AGGREGATE_IRQ(irq, IRQ_NUM_EXT_LEVEL2);
55-
if (cascade == irq_name_level5)
56-
return SOC_AGGREGATE_IRQ(irq, IRQ_NUM_EXT_LEVEL5);
57-
58-
return SOC_AGGREGATE_IRQ(0, irq);
59-
#else
6052
return irq;
61-
#endif
6253
}
6354

6455
/* enable an interrupt source - IRQ needs mapped to Zephyr,

zephyr/lib/dma.c

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -150,6 +150,26 @@ SHARED_DATA struct dma dma[] = {
150150
.z_dev = DEVICE_DT_GET(DT_NODELABEL(host_dma)),
151151
},
152152
#endif
153+
#if defined(CONFIG_SOC_MIMX8ML8_ADSP)
154+
{
155+
.plat_data = {
156+
.dir = SOF_DMA_DIR_MEM_TO_DEV | SOF_DMA_DIR_DEV_TO_MEM,
157+
.devs = SOF_DMA_DEV_SAI,
158+
.channels = 32,
159+
.period_count = 2,
160+
},
161+
.z_dev = DEVICE_DT_GET(DT_NODELABEL(sdma3)),
162+
},
163+
{
164+
.plat_data = {
165+
.dir = SOF_DMA_DIR_HMEM_TO_LMEM | SOF_DMA_DIR_LMEM_TO_HMEM,
166+
.devs = SOF_DMA_DEV_HOST,
167+
.channels = 32,
168+
.period_count = 2,
169+
},
170+
.z_dev = DEVICE_DT_GET(DT_NODELABEL(host_dma)),
171+
},
172+
#endif /* CONFIG_SOC_MIMX8ML8_ADSP */
153173
#ifdef CONFIG_SOC_MIMX8UD7_ADSP
154174
{
155175
.plat_data = {

0 commit comments

Comments
 (0)