mirror of
https://github.com/ARM-software/arm-trusted-firmware.git
synced 2025-08-14 00:17:02 +02:00
MTK display port mute/unmute control registers need to be set in secure world. TEST=build pass BUG=b:236331724 Signed-off-by: Bo-Chen Chen <rex-bc.chen@mediatek.com> Change-Id: I0aa0675f07c80aab4349493bfbb0782bf0bbef58
80 lines
1.8 KiB
C
80 lines
1.8 KiB
C
/*
|
|
* Copyright (c) 2020-2022, MediaTek Inc. All rights reserved.
|
|
*
|
|
* SPDX-License-Identifier: BSD-3-Clause
|
|
*/
|
|
|
|
#include <inttypes.h>
|
|
|
|
#include <common/debug.h>
|
|
#include <lib/mmio.h>
|
|
#include <mt_dp.h>
|
|
#include <mtk_sip_svc.h>
|
|
#include <platform_def.h>
|
|
|
|
static uint32_t dp_write_sec_reg(uint32_t is_edp, uint32_t offset,
|
|
uint32_t value, uint32_t mask)
|
|
{
|
|
uint32_t reg = (is_edp != 0U) ? EDP_SEC_BASE : DP_SEC_BASE;
|
|
|
|
mmio_clrsetbits_32(reg + offset, mask, value);
|
|
|
|
return mmio_read_32(reg + offset);
|
|
}
|
|
|
|
int32_t dp_secure_handler(uint64_t cmd, uint64_t para, uint32_t *val)
|
|
{
|
|
int32_t ret = 0L;
|
|
uint32_t is_edp = 0UL;
|
|
uint32_t regval = 0UL;
|
|
uint32_t regmsk = 0UL;
|
|
uint32_t fldmask = 0UL;
|
|
|
|
if ((cmd > DP_ATF_CMD_COUNT) || (val == NULL)) {
|
|
INFO("dp_secure_handler error cmd 0x%" PRIx64 "\n", cmd);
|
|
return MTK_SIP_E_INVALID_PARAM;
|
|
}
|
|
|
|
switch (cmd) {
|
|
case DP_ATF_DP_VIDEO_UNMUTE:
|
|
INFO("[%s] DP_ATF_DP_VIDEO_UNMUTE\n", __func__);
|
|
is_edp = DP_ATF_TYPE_DP;
|
|
ret = MTK_SIP_E_SUCCESS;
|
|
break;
|
|
case DP_ATF_EDP_VIDEO_UNMUTE:
|
|
INFO("[%s] DP_ATF_EDP_VIDEO_UNMUTE\n", __func__);
|
|
is_edp = DP_ATF_TYPE_EDP;
|
|
ret = MTK_SIP_E_SUCCESS;
|
|
break;
|
|
default:
|
|
ret = MTK_SIP_E_INVALID_PARAM;
|
|
break;
|
|
}
|
|
|
|
if (ret == MTK_SIP_E_SUCCESS) {
|
|
regmsk = (VIDEO_MUTE_SEL_SECURE_FLDMASK |
|
|
VIDEO_MUTE_SW_SECURE_FLDMASK);
|
|
if (para > 0U) {
|
|
fldmask = VIDEO_MUTE_SW_SECURE_FLDMASK;
|
|
} else {
|
|
fldmask = 0;
|
|
}
|
|
|
|
regval = (VIDEO_MUTE_SEL_SECURE_FLDMASK | fldmask);
|
|
*val = dp_write_sec_reg(is_edp, DP_TX_SECURE_REG11,
|
|
regval, regmsk);
|
|
}
|
|
|
|
return ret;
|
|
}
|
|
|
|
u_register_t mtk_dp_sip_handler(u_register_t x1, u_register_t x2,
|
|
u_register_t x3, u_register_t x4,
|
|
void *handle, struct smccc_res *smccc_ret)
|
|
{
|
|
uint32_t ret_val;
|
|
|
|
return dp_secure_handler(x1, x2, &ret_val);
|
|
}
|
|
DECLARE_SMC_HANDLER(MTK_SIP_DP_CONTROL, mtk_dp_sip_handler);
|