Mt8196/v0.3#10785
Conversation
|
Can one of the admins verify this patch?
|
|
test this please |
There was a problem hiding this comment.
Pull request overview
This PR introduces a Zephyr “native drivers” path for MediaTek (MT8196) by adding Zephyr-based DMA/DAI drivers for MTK AFE + host memory transfers and wiring them into the MTK Zephyr platform init/build.
Changes:
- Add MTK Zephyr-native DMA drivers (AFE MEMIF DMA + “host DMA” memcpy/cache driver) and a Zephyr DAI wrapper for MTK AFE.
- Switch MTK Zephyr build to select native vs legacy DMA/DAI sources and update platform init to use
sof_dma_*in native mode. - Extend Zephyr-native DAI/device enumeration and allow MTK host DMA for IPC3 host page-table transfers.
Reviewed changes
Copilot reviewed 14 out of 14 changed files in this pull request and generated 6 comments.
Show a summary per file
| File | Description |
|---|---|
| zephyr/lib/dma.c | Adds new DT-based DMA entries for MTK AFE MEMIF and host DMA |
| zephyr/Kconfig | Adds Kconfig symbol for MTK SOF host DMA driver |
| zephyr/include/sof/lib/dma.h | Fixes #endif comment for native/legacy include |
| zephyr/CMakeLists.txt | Selects MTK native vs legacy DMA/DAI source sets |
| src/platform/mtk/platform.c | Uses sof_dma_get() in native mode; adds SOF-level DMA channel-array allocation |
| src/platform/mtk/dai.c | Gates legacy DAI/DMA info setup on non-native builds |
| src/platform/Kconfig | Avoids selecting SCHEDULE_DMA_MULTI_CHANNEL in native mode |
| src/lib/dai.c | Adds MediaTek AFE devices to Zephyr DAI device list and sets DMA dev mapping |
| src/ipc/ipc3/host-page-table.c | Allows MTK host DMA driver for page-table transfer in native mode |
| src/drivers/mediatek/afe/zephyr_mtk_host_dma.c | New MTK “software host DMA” driver (memcpy + cache mgmt) |
| src/drivers/mediatek/afe/zephyr_mtk_dai.c | New Zephyr DAI driver for MTK AFE that bridges to SOF AFE functions |
| src/drivers/mediatek/afe/zephyr_mtk_afe_memif.c | New Zephyr DMA driver for MTK AFE MEMIF |
| src/audio/dai-zephyr.c | Adds MediaTek AFE case to Zephyr DAI config translation |
| app/boards/mt8196_mt8196_adsp.conf | Enables Zephyr native drivers + DMA/DAI for MT8196 board config |
Comments suppressed due to low confidence (2)
src/drivers/mediatek/afe/zephyr_mtk_host_dma.c:163
mtk_host_dma_get_status()always returns success without populatingstruct dma_status. SOF's host Zephyr component relies ondma_get_status()fields likefree,pending_length,read_position, andwrite_positionto decide how many bytes to copy. Returning 0 with uninitialized status data can cause incorrect copy sizes or undefined behavior. Please either properly fillstat(and track positions/busy state) or return a clear error (e.g.-ENOTSUP) until implemented.
static int mtk_host_dma_get_status(const struct device *dev,
uint32_t chan_id, struct dma_status *stat)
{
return 0;
}
src/drivers/mediatek/afe/zephyr_mtk_host_dma.c:111
mtk_host_dma_config()dereferencesconfig->head_blockbefore validating it is non-NULL (e.g.config->head_block->source_address). If a caller passesblock_count == 1withhead_block == NULL, this will crash. Please checkconfigandconfig->head_blockfor NULL before any dereference, and validateblock_size/addresses afterward.
if (config->block_count != 1) {
LOG_ERR("invalid number of blocks: %d", config->block_count);
return -EINVAL;
}
if (!config->head_block->source_address) {
LOG_ERR("got NULL source address");
return -EINVAL;
}
if (!config->head_block->dest_address) {
LOG_ERR("got NULL destination address");
return -EINVAL;
}
Specify the rimage signing schema for the mt8196 ADSP board so the firmware image is signed with the matching mt8196 manifest. Signed-off-by: Cyril Chao <cyril.chao@mediatek.corp-partner.google.com>
Map Zephyr DMA API operations to AFE MEMIF register accesses. Use chan_filter to enforce fixed channel-to-MEMIF-index mapping. Signed-off-by: Cyril Chao <cyril.chao@mediatek.corp-partner.google.com>
Software DMA using memcpy + cache ops to copy audio from host DRAM to DSP local SRAM. Transfer executes in config() so data is ready before the pipeline callback fires. Signed-off-by: Cyril Chao <cyril.chao@mediatek.corp-partner.google.com>
Expose each AFE MEMIF as a Zephyr DAI device via DEVICE_DT_INST_DEFINE. Hardware start/stop is handled by the MEMIF DMA driver; DAI trigger is a no-op. Signed-off-by: Cyril Chao <cyril.chao@mediatek.corp-partner.google.com>
Add SOF_DAI_MEDIATEK_AFE handling in dai_set_config() and dai_set_device_params(), and expose mediatek_afe devices to dai_get(). Signed-off-by: Cyril Chao <cyril.chao@mediatek.corp-partner.google.com>
Register sof_dma[] entries, allocate dma_chan_data[] arrays in platform_init(), add CONFIG_DMA_MTK_SOF_HOST_DMA Kconfig symbol, guard legacy-only code paths, and enable native drivers for MT8196. Signed-off-by: Cyril Chao <cyril.chao@mediatek.corp-partner.google.com>
lgirdwood
left a comment
There was a problem hiding this comment.
It looks like some of this PR need to go into Zephyr i.e. any drivers that touch IP have to be in the RTOS now.
| * SPDX-License-Identifier: Apache-2.0 | ||
| */ | ||
|
|
||
| #include <zephyr/drivers/dma.h> |
There was a problem hiding this comment.
I think this driver needs to go into Zephyr git now unless you still have some native zephyr transition APIs still pending ?
There was a problem hiding this comment.
Currently, we only adapts to the native Zephyr API and still relies on the original driver. A complete migration to a Zephyr tree would be quite laborious, so we hope to merge it into the SOF tree first, allowing subsequent work to continue.
Thanks~
There was a problem hiding this comment.
It was aligned at last TSC to deprecate and remove all xtos related code this year. Any patches that added driver code would be at risk so I would encourage you to complete the Zephyr work as soon as you can.
Fwiw, you have working driver code in SOF and all the other vendors are now using Zephyr, hence APIs are also stable and you will probably find with the help of AI the effort should not be too great in taking working drivers from SOF to Zephyr APIs.
I think we can merge, but this would have to be the last PR for driver code and any driver code would be removed by end of year from main branch. Non driver code is fine, it will stay in SOF.
| * SPDX-License-Identifier: Apache-2.0 | ||
| */ | ||
|
|
||
| #include <zephyr/drivers/dma.h> |
There was a problem hiding this comment.
ditto, this should go into Zephyr git too.
|
@mtkcyril is there another reviewer from MTK who will review your changes align with HW programming etc ? |
No description provided.