summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorGovindraj Raja <govindraj.raja@arm.com>2026-01-06 15:39:58 +0000
committerTrustedFirmware Code Review <review@review.trustedfirmware.org>2026-01-06 15:39:58 +0000
commitc52ef2a0e5603c98930e8ce76f389f0fcf23ba02 (patch)
tree4c4f5c07dd267948727fda567d98470d16a13866
parent370b1c0dc72dd1576e8d656e6a946810dbb4c791 (diff)
parent6866675ae17a94e85a913c71b75f01c3de9290c3 (diff)
downloadarm-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.c2
-rw-r--r--plat/mediatek/drivers/audio/audio.h2
-rw-r--r--plat/mediatek/drivers/audio/mt8196/audio_domain.c56
-rw-r--r--plat/mediatek/drivers/audio/mt8196/mt_audio_private.h34
-rw-r--r--plat/mediatek/drivers/audio/mt8196/rules.mk13
-rw-r--r--plat/mediatek/mt8196/platform.mk1
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