diff options
| author | Govindraj Raja <govindraj.raja@arm.com> | 2026-01-06 15:39:58 +0000 |
|---|---|---|
| committer | TrustedFirmware Code Review <review@review.trustedfirmware.org> | 2026-01-06 15:39:58 +0000 |
| commit | c52ef2a0e5603c98930e8ce76f389f0fcf23ba02 (patch) | |
| tree | 4c4f5c07dd267948727fda567d98470d16a13866 | |
| parent | 370b1c0dc72dd1576e8d656e6a946810dbb4c791 (diff) | |
| parent | 6866675ae17a94e85a913c71b75f01c3de9290c3 (diff) | |
| download | arm-trusted-firmware-c52ef2a0e5603c98930e8ce76f389f0fcf23ba02.tar.gz arm-trusted-firmware-c52ef2a0e5603c98930e8ce76f389f0fcf23ba02.zip | |
Merge "feat(mt8196): add audio SMC cmd implementation" into integration
| -rw-r--r-- | plat/mediatek/drivers/audio/audio.c | 2 | ||||
| -rw-r--r-- | plat/mediatek/drivers/audio/audio.h | 2 | ||||
| -rw-r--r-- | plat/mediatek/drivers/audio/mt8196/audio_domain.c | 56 | ||||
| -rw-r--r-- | plat/mediatek/drivers/audio/mt8196/mt_audio_private.h | 34 | ||||
| -rw-r--r-- | plat/mediatek/drivers/audio/mt8196/rules.mk | 13 | ||||
| -rw-r--r-- | plat/mediatek/mt8196/platform.mk | 1 |
6 files changed, 106 insertions, 2 deletions
diff --git a/plat/mediatek/drivers/audio/audio.c b/plat/mediatek/drivers/audio/audio.c index 285c56511..308a19ebf 100644 --- a/plat/mediatek/drivers/audio/audio.c +++ b/plat/mediatek/drivers/audio/audio.c @@ -13,8 +13,6 @@ #include <mtk_sip_svc.h> -#define MODULE_TAG "[AUDIO]" - static u_register_t audio_smc_handler(u_register_t x1, u_register_t x2, u_register_t x3, u_register_t x4, void *handle, struct smccc_res *smccc_ret) diff --git a/plat/mediatek/drivers/audio/audio.h b/plat/mediatek/drivers/audio/audio.h index 1598a92d2..047979181 100644 --- a/plat/mediatek/drivers/audio/audio.h +++ b/plat/mediatek/drivers/audio/audio.h @@ -10,6 +10,8 @@ #include <stdint.h> #include <lib/mmio.h> +#define MODULE_TAG "[AUDIO_DOMAIN]" + enum mtk_audio_smc_call_op { MTK_AUDIO_SMC_OP_INIT = 0, MTK_AUDIO_SMC_OP_DRAM_REQUEST, diff --git a/plat/mediatek/drivers/audio/mt8196/audio_domain.c b/plat/mediatek/drivers/audio/mt8196/audio_domain.c new file mode 100644 index 000000000..7beb767dc --- /dev/null +++ b/plat/mediatek/drivers/audio/mt8196/audio_domain.c @@ -0,0 +1,56 @@ +/* + * Copyright (c) 2025, Mediatek Inc. All rights reserved. + * + * SPDX-License-Identifier: BSD-3-Clause + */ + +#include <errno.h> +#include <common/debug.h> + +#include <audio.h> +#include <mt_audio_private.h> +#include <platform_def.h> + +#define AUDIO_PWR_ACK_BITS 0xC0000000 +#define AFE_SE_DOMAIN_SIDEBAND0_VAL 0xCCCCCCCC +#define AFE_SE_DOMAIN_SIDEBAND1_VAL 0xCCCCCCCC +#define AFE_SE_DOMAIN_SIDEBAND2_VAL 0xCCCCCCCC +#define AFE_SE_DOMAIN_SIDEBAND3_VAL 0xCCCCCCCC +#define AFE_SE_DOMAIN_SIDEBAND4_VAL 0xCCCCCCCC +#define AFE_SE_DOMAIN_SIDEBAND5_VAL 0xCCCCCCCC +#define AFE_SE_DOMAIN_SIDEBAND6_VAL 0xCCCCCCCC +#define AFE_SE_DOMAIN_SIDEBAND7_VAL 0xCCCCCCCC +#define AFE_SE_DOMAIN_SIDEBAND8_VAL 0xCCCCCCCC +#define AFE_SE_DOMAIN_SIDEBAND9_VAL 0xCCCCCCCC + +int32_t set_audio_domain_sidebands(void) +{ + uint32_t val; + + val = mmio_read_32(SPM_AUDIO_PWR_CON); + + if ((val & AUDIO_PWR_ACK_BITS) != AUDIO_PWR_ACK_BITS) { + ERROR("%s: %s, pwr_status=0x%x.\n", MODULE_TAG, __func__, val); + return -EIO; + } + + mmio_write_32(AFE_SE_DOMAIN_SIDEBAND0, AFE_SE_DOMAIN_SIDEBAND0_VAL); + mmio_write_32(AFE_SE_DOMAIN_SIDEBAND1, AFE_SE_DOMAIN_SIDEBAND1_VAL); + mmio_write_32(AFE_SE_DOMAIN_SIDEBAND2, AFE_SE_DOMAIN_SIDEBAND2_VAL); + mmio_write_32(AFE_SE_DOMAIN_SIDEBAND3, AFE_SE_DOMAIN_SIDEBAND3_VAL); + mmio_write_32(AFE_SE_DOMAIN_SIDEBAND4, AFE_SE_DOMAIN_SIDEBAND4_VAL); + mmio_write_32(AFE_SE_DOMAIN_SIDEBAND5, AFE_SE_DOMAIN_SIDEBAND5_VAL); + mmio_write_32(AFE_SE_DOMAIN_SIDEBAND6, AFE_SE_DOMAIN_SIDEBAND6_VAL); + mmio_write_32(AFE_SE_DOMAIN_SIDEBAND7, AFE_SE_DOMAIN_SIDEBAND7_VAL); + mmio_write_32(AFE_SE_DOMAIN_SIDEBAND8, AFE_SE_DOMAIN_SIDEBAND8_VAL); + mmio_write_32(AFE_SE_DOMAIN_SIDEBAND9, AFE_SE_DOMAIN_SIDEBAND9_VAL); + + VERBOSE("%s: %s, SIDEBAND0 0x%x, SIDEBAND1 0x%x, SIDEBAND2 0x%x\n", + MODULE_TAG, + __func__, + mmio_read_32(AFE_SE_DOMAIN_SIDEBAND0_MON), + mmio_read_32(AFE_SE_DOMAIN_SIDEBAND1_MON), + mmio_read_32(AFE_SE_DOMAIN_SIDEBAND2_MON)); + + return 0; +} diff --git a/plat/mediatek/drivers/audio/mt8196/mt_audio_private.h b/plat/mediatek/drivers/audio/mt8196/mt_audio_private.h new file mode 100644 index 000000000..72dd89521 --- /dev/null +++ b/plat/mediatek/drivers/audio/mt8196/mt_audio_private.h @@ -0,0 +1,34 @@ +/* + * Copyright (c) 2025, MediaTek Inc. All rights reserved. + * + * SPDX-License-Identifier: BSD-3-Clause + */ + +#ifndef MT_AUDIO_PRIVATE_H +#define MT_AUDIO_PRIVATE_H + +#include <platform_def.h> + +#define AFE_SE_DOMAIN_SIDEBAND0 (AUDIO_BASE + 0x5650) +#define AFE_SE_DOMAIN_SIDEBAND1 (AUDIO_BASE + 0x5654) +#define AFE_SE_DOMAIN_SIDEBAND2 (AUDIO_BASE + 0x5658) +#define AFE_SE_DOMAIN_SIDEBAND3 (AUDIO_BASE + 0x565c) +#define AFE_SE_DOMAIN_SIDEBAND4 (AUDIO_BASE + 0x5660) +#define AFE_SE_DOMAIN_SIDEBAND5 (AUDIO_BASE + 0x5664) +#define AFE_SE_DOMAIN_SIDEBAND6 (AUDIO_BASE + 0x5668) +#define AFE_SE_DOMAIN_SIDEBAND7 (AUDIO_BASE + 0x566c) +#define AFE_SE_DOMAIN_SIDEBAND8 (AUDIO_BASE + 0x5670) +#define AFE_SE_DOMAIN_SIDEBAND9 (AUDIO_BASE + 0x5674) + +#define AFE_SE_DOMAIN_SIDEBAND0_MON (AUDIO_BASE + 0x5688) +#define AFE_SE_DOMAIN_SIDEBAND1_MON (AUDIO_BASE + 0x568c) +#define AFE_SE_DOMAIN_SIDEBAND2_MON (AUDIO_BASE + 0x5690) +#define AFE_SE_DOMAIN_SIDEBAND3_MON (AUDIO_BASE + 0x5694) +#define AFE_SE_DOMAIN_SIDEBAND4_MON (AUDIO_BASE + 0x5698) +#define AFE_SE_DOMAIN_SIDEBAND5_MON (AUDIO_BASE + 0x569c) +#define AFE_SE_DOMAIN_SIDEBAND6_MON (AUDIO_BASE + 0x56a0) +#define AFE_SE_DOMAIN_SIDEBAND7_MON (AUDIO_BASE + 0x56a4) +#define AFE_SE_DOMAIN_SIDEBAND8_MON (AUDIO_BASE + 0x56a8) +#define AFE_SE_DOMAIN_SIDEBAND9_MON (AUDIO_BASE + 0x56ac) + +#endif /* MT_AUDIO_PRIVATE_H */ diff --git a/plat/mediatek/drivers/audio/mt8196/rules.mk b/plat/mediatek/drivers/audio/mt8196/rules.mk new file mode 100644 index 000000000..047db3a4e --- /dev/null +++ b/plat/mediatek/drivers/audio/mt8196/rules.mk @@ -0,0 +1,13 @@ +# +# Copyright (c) 2025, MediaTek Inc. All rights reserved. +# +# SPDX-License-Identifier: BSD-3-Clause +# + +LOCAL_DIR := $(call GET_LOCAL_DIR) + +MODULE := audio_${MTK_SOC} + +LOCAL_SRCS-y := ${LOCAL_DIR}/audio_domain.c + +$(eval $(call MAKE_MODULE,$(MODULE),$(LOCAL_SRCS-y),$(MTK_BL))) diff --git a/plat/mediatek/mt8196/platform.mk b/plat/mediatek/mt8196/platform.mk index e62000139..d899dfd36 100644 --- a/plat/mediatek/mt8196/platform.mk +++ b/plat/mediatek/mt8196/platform.mk @@ -44,6 +44,7 @@ MODULES-y += $(MTK_PLAT)/lib/mtk_init MODULES-y += $(MTK_PLAT)/lib/pm MODULES-y += $(MTK_PLAT)/lib/system_reset MODULES-y += $(MTK_PLAT)/drivers/apusys +MODULES-y += $(MTK_PLAT)/drivers/audio MODULES-y += $(MTK_PLAT)/drivers/cirq MODULES-y += $(MTK_PLAT)/drivers/cpu_qos MODULES-y += $(MTK_PLAT)/drivers/dp |
