Skip to content

Commit 4644f21

Browse files
Sivasubramanian678kv2019i
authored andcommitted
DAI: Add SoundWire DAI support for native zephyr
This adds SoundWire DAI support for ACP 7.0 native zephyr. Co-developed-by: DineshKumar Kalva <DineshKumar.Kalva@amd.com> Co-developed-by: Sneha Voona <sneha.voona@amd.com> Signed-off-by: DineshKumar Kalva <DineshKumar.Kalva@amd.com> Signed-off-by: Sivasubramanian <sravisar@amd.com>
1 parent f07e7f1 commit 4644f21

8 files changed

Lines changed: 80 additions & 10 deletions

File tree

app/boards/acp_7_0_adsp.conf

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,10 @@ CONFIG_LOG_MODE_MINIMAL=y
1010
CONFIG_DMA=y
1111
CONFIG_DMA_DOMAIN=n
1212
CONFIG_ZEPHYR_NATIVE_DRIVERS=y
13+
CONFIG_INTC_AMD_ACP=y
14+
CONFIG_DMA_AMD_ACP_HOST=y
15+
CONFIG_DMA_AMD_ACP_SDW=y
16+
CONFIG_DAI_AMD_SDW=y
1317
CONFIG_AMS=n
1418
CONFIG_WRAP_ACTUAL_POSITION=y
1519
CONFIG_TRACE=n

src/audio/dai-zephyr.c

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -192,6 +192,10 @@ __cold int dai_set_config(struct dai *dai, struct ipc_config_dai *common_config,
192192
cfg.type = DAI_IMX_MICFIL;
193193
cfg_params = &sof_cfg->micfil;
194194
break;
195+
case SOF_DAI_AMD_SDW:
196+
cfg.type = DAI_AMD_SDW;
197+
cfg_params = &sof_cfg->acpsdw;
198+
break;
195199
case SOF_DAI_INTEL_UAOL:
196200
cfg.type = DAI_INTEL_UAOL;
197201
cfg.channels = common_config->gtw_fmt->channels_count;

src/drivers/amd/rembrandt/acp_sw_audio_dai.c

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,10 @@
11
// SPDX-License-Identifier: BSD-3-Clause
22
//
3-
//Copyright(c) 2023 AMD. All rights reserved.
3+
//Copyright(c) 2023, 2026 AMD. All rights reserved.
44
//
55
//Author: Basavaraj Hiregoudar <basavaraj.hiregoudar@amd.com>
66
// Maruthi Machani <maruthi.machani@amd.com>
7+
// Sivasubramanian <sravisar@amd.com>
78

89
#include <sof/drivers/acp_dai_dma.h>
910
#include <sof/lib/uuid.h>
@@ -95,7 +96,7 @@ static int swaudiodai_get_hw_params(struct dai *dai,
9596
}
9697

9798
const struct dai_driver acp_swaudiodai_driver = {
98-
.type = SOF_DAI_AMD_SW_AUDIO,
99+
.type = SOF_DAI_AMD_SDW,
99100
.uid = SOF_UUID(swaudiodai_uuid),
100101
.tctx = &swaudiodai_tr,
101102
.dma_dev = DMA_DEV_SW,

src/include/ipc/dai.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -95,7 +95,7 @@ enum sof_ipc_dai_type {
9595
SOF_DAI_AMD_SP_VIRTUAL, /**<Amd SP VIRTUAL */
9696
SOF_DAI_AMD_HS_VIRTUAL, /**<Amd HS VIRTUAL */
9797
SOF_DAI_IMX_MICFIL, /**< i.MX MICFIL */
98-
SOF_DAI_AMD_SW_AUDIO, /**<Amd SW AUDIO */
98+
SOF_DAI_AMD_SDW, /**< Amd SDW */
9999
SOF_DAI_INTEL_UAOL, /**< Intel UAOL */
100100
};
101101

src/ipc/ipc3/dai.c

Lines changed: 28 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -93,9 +93,14 @@ int dai_config_dma_channel(struct dai_data *dd, struct comp_dev *dev, const void
9393
break;
9494
case SOF_DAI_AMD_HS:
9595
case SOF_DAI_AMD_HS_VIRTUAL:
96-
case SOF_DAI_AMD_SW_AUDIO:
96+
case SOF_DAI_AMD_SDW:
9797
channel = dai_get_handshake(dd->dai, dai->direction,
9898
dd->stream_id);
99+
#if defined(CONFIG_SOC_ACP_7_0)
100+
if (channel >= 64 && channel < 128) {
101+
channel = channel - 64;
102+
}
103+
#endif
99104
break;
100105
case SOF_DAI_MEDIATEK_AFE:
101106
handshake = dai_get_handshake(dd->dai, dai->direction,
@@ -188,8 +193,28 @@ int ipc_dai_data_config(struct dai_data *dd, struct comp_dev *dev)
188193
break;
189194
case SOF_DAI_AMD_HS:
190195
case SOF_DAI_AMD_HS_VIRTUAL:
191-
case SOF_DAI_AMD_SW_AUDIO:
192-
dev->ipc_config.frame_fmt = SOF_IPC_FRAME_S16_LE;
196+
case SOF_DAI_AMD_SDW:
197+
#if defined(CONFIG_AMD) && !defined(CONFIG_SOC_ACP_6_0)
198+
{
199+
struct acp_dma_dev_data *dev_data = dd->dma->z_dev->data;
200+
struct sdw_pin_data *pin_data;
201+
202+
/* Allocate memory only if not already allocated */
203+
if (!dev_data->dai_index_ptr) {
204+
pin_data = rzalloc(SOF_MEM_FLAG_USER | SOF_MEM_FLAG_COHERENT,
205+
sizeof(*pin_data));
206+
dev_data->dai_index_ptr = pin_data;
207+
} else {
208+
pin_data = dev_data->dai_index_ptr;
209+
}
210+
pin_data->pin_num = dd->dai->index;
211+
pin_data->pin_dir = dai->direction;
212+
pin_data->dma_channel = dd->chan ? dd->chan->index : 0xFFFF;
213+
pin_data->index = 0xFFFF;
214+
pin_data->instance = 0xFFFF;
215+
dev_data->dai_index_ptr = pin_data;
216+
}
217+
#endif
193218
break;
194219
case SOF_DAI_MEDIATEK_AFE:
195220
break;

src/lib/dai.c

Lines changed: 9 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -185,6 +185,9 @@ const struct device *zephyr_dev[] = {
185185
#if CONFIG_DAI_NXP_MICFIL
186186
DT_FOREACH_STATUS_OKAY(nxp_dai_micfil, GET_DEVICE_LIST)
187187
#endif
188+
#if CONFIG_DAI_AMD_SDW
189+
DT_FOREACH_STATUS_OKAY(amd_acp_sdw_dai, GET_DEVICE_LIST)
190+
#endif
188191
#if CONFIG_DAI_INTEL_UAOL
189192
DT_FOREACH_STATUS_OKAY(intel_uaol_dai, GET_DEVICE_LIST)
190193
#endif
@@ -229,8 +232,8 @@ static int sof_dai_type_to_zephyr(uint32_t type)
229232
case SOF_DAI_AMD_HS:
230233
case SOF_DAI_AMD_SP_VIRTUAL:
231234
case SOF_DAI_AMD_HS_VIRTUAL:
232-
case SOF_DAI_AMD_SW_AUDIO:
233-
return -ENOTSUP;
235+
case SOF_DAI_AMD_SDW:
236+
return DAI_AMD_SDW;
234237
default:
235238
return -EINVAL;
236239
}
@@ -294,6 +297,10 @@ static void dai_set_device_params(struct dai *d)
294297
d->dma_dev = SOF_DMA_DEV_HDA;
295298
d->dma_caps = SOF_DMA_CAP_HDA;
296299
break;
300+
case SOF_DAI_AMD_SDW:
301+
d->dma_dev = SOF_DMA_DEV_SW;
302+
d->dma_caps = SOF_DMA_CAP_SW;
303+
break;
297304
default:
298305
break;
299306
}

src/platform/amd/acp_7_0/lib/dai.c

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,10 @@
11
// SPDX-License-Identifier: BSD-3-Clause
22
//
3-
//Copyright(c) 2024 AMD. All rights reserved.
3+
//Copyright(c) 2024, 2026 AMD. All rights reserved.
44
//
55
//Author: SaiSurya, Ch <saisurya.chakkaveeravenkatanaga@amd.com>
6+
// Basavaraj Hiregoudar <basavaraj.hiregoudar@amd.com>
7+
// Sivasubramanian <sravisar@amd.com>
68

79
#include <sof/common.h>
810
#include <sof/drivers/acp_dai_dma.h>
@@ -299,7 +301,7 @@ const struct dai_type_info dti[] = {
299301
},
300302
#endif
301303
{
302-
.type = SOF_DAI_AMD_SW_AUDIO,
304+
.type = SOF_DAI_AMD_SDW,
303305
.dai_array = swaudiodai,
304306
.num_dais = ARRAY_SIZE(swaudiodai)
305307
},

zephyr/lib/dma.c

Lines changed: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -212,6 +212,33 @@ SHARED_DATA struct sof_dma dma[] = {
212212
.z_dev = DEVICE_DT_GET(DT_NODELABEL(host_dma)),
213213
},
214214
#endif /* CONFIG_SOC_MIMX9596_M7 */
215+
#if defined(CONFIG_SOC_ACP_7_0)
216+
{
217+
.plat_data = {
218+
.dir = SOF_DMA_DIR_LMEM_TO_HMEM |
219+
SOF_DMA_DIR_HMEM_TO_LMEM,
220+
.devs = SOF_DMA_DEV_HOST,
221+
.base = DMA0_BASE,
222+
.chan_size = DMA0_SIZE,
223+
.channels = 8,
224+
.period_count = 2,
225+
},
226+
.z_dev = DEVICE_DT_GET(DT_NODELABEL(acp_host_dma)),
227+
},
228+
{
229+
.plat_data = {
230+
.dir = SOF_DMA_DIR_MEM_TO_DEV |
231+
SOF_DMA_DIR_DEV_TO_MEM,
232+
.devs = SOF_DMA_DEV_SW,
233+
.caps = SOF_DMA_CAP_SW,
234+
.base = DMA0_BASE,
235+
.chan_size = DMA0_SIZE,
236+
.channels = 12,
237+
.period_count = 2,
238+
},
239+
.z_dev = DEVICE_DT_GET(DT_NODELABEL(acp_sdw_dma)),
240+
},
241+
#endif
215242
};
216243

217244
const struct dma_info lib_dma = {

0 commit comments

Comments
 (0)