blob: 5930cd5533d5fe081290dfdf8b1bfbd4d466ff07 [file] [log] [blame]
/*
* Copyright (c) 2020, 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;
}