blob: 7ab219468c44f04dbfdb4c4096df4a9725d6cd81 [file] [log] [blame]
Rex-BC Chenb48c6c42021-04-12 11:10:31 +08001/*
2 * Copyright (c) 2020, MediaTek Inc. All rights reserved.
3 *
4 * SPDX-License-Identifier: BSD-3-Clause
5 */
6#include <common/debug.h>
7#include <lib/mmio.h>
8#include <mt_dp.h>
9#include <mtk_sip_svc.h>
10#include <platform_def.h>
11
12static uint32_t dp_write_sec_reg(uint32_t is_edp, uint32_t offset,
13 uint32_t value, uint32_t mask)
14{
15 uint32_t reg = (is_edp != 0U) ? eDP_SEC_BASE : DP_SEC_BASE;
16
17 mmio_clrsetbits_32(reg + offset, mask, value);
18
19 return mmio_read_32(reg + offset);
20}
21
22int32_t dp_secure_handler(uint64_t cmd, uint64_t para, uint32_t *val)
23{
24 int32_t ret = 0L;
25 uint32_t is_edp = 0UL;
26 uint32_t regval = 0UL;
27 uint32_t regmsk = 0UL;
28 uint32_t fldmask = 0UL;
29
30 if ((cmd > DP_ATF_CMD_COUNT) || (val == NULL)) {
31 INFO("dp_secure_handler error cmd 0x%llx\n", cmd);
32 return MTK_SIP_E_INVALID_PARAM;
33 }
34
35 switch (cmd) {
36 case DP_ATF_DP_VIDEO_UNMUTE:
37 INFO("[%s] DP_ATF_DP_VIDEO_UNMUTE\n", __func__);
38 is_edp = DP_ATF_TYPE_DP;
39 ret = MTK_SIP_E_SUCCESS;
40 break;
41 case DP_ATF_EDP_VIDEO_UNMUTE:
42 INFO("[%s] DP_ATF_EDP_VIDEO_UNMUTE\n", __func__);
43 is_edp = DP_ATF_TYPE_EDP;
44 ret = MTK_SIP_E_SUCCESS;
45 break;
46 default:
47 ret = MTK_SIP_E_INVALID_PARAM;
48 break;
49 }
50
51 if (ret == MTK_SIP_E_SUCCESS) {
52 regmsk = (VIDEO_MUTE_SEL_SECURE_FLDMASK |
53 VIDEO_MUTE_SW_SECURE_FLDMASK);
54 if (para > 0U) {
55 fldmask = VIDEO_MUTE_SW_SECURE_FLDMASK;
56 } else {
57 fldmask = 0;
58 }
59
60 regval = (VIDEO_MUTE_SEL_SECURE_FLDMASK | fldmask);
61 *val = dp_write_sec_reg(is_edp, DP_TX_SECURE_REG11,
62 regval, regmsk);
63 }
64
65 return ret;
66}