diff options
author | Bo-Chen Chen <rex-bc.chen@mediatek.com> | 2022-06-22 19:51:41 +0800 |
---|---|---|
committer | Bo-Chen Chen <rex-bc.chen@mediatek.com> | 2022-09-08 18:02:02 +0800 |
commit | 4dbe24cf7d2b04c552f394062f42c30fee7e26a6 (patch) | |
tree | c78aa9c670a83e4c15068d0d3200eb3e57960f00 /plat/mediatek | |
parent | 3bdd9a24e953b3b38acaf01eb4f173f62983da93 (diff) | |
download | arm-trusted-firmware-4dbe24cf7d2b04c552f394062f42c30fee7e26a6.tar.gz |
feat(mediatek): add smcc call for MSDC
Some registers of MSDC need to be set in ATF, so we add MSDC drivers.
Signed-off-by: Bo-Chen Chen <rex-bc.chen@mediatek.com>
Change-Id: Idde51a136ad08dbaece0bdaa804b934fca7046b6
Diffstat (limited to 'plat/mediatek')
-rw-r--r-- | plat/mediatek/drivers/msdc/mt8186/mt_msdc_priv.h | 13 | ||||
-rw-r--r-- | plat/mediatek/drivers/msdc/mt_msdc.c | 19 | ||||
-rw-r--r-- | plat/mediatek/drivers/msdc/mt_msdc.h | 15 | ||||
-rw-r--r-- | plat/mediatek/include/mtk_sip_def.h | 1 | ||||
-rw-r--r-- | plat/mediatek/mt8186/include/plat_sip_calls.h | 4 | ||||
-rw-r--r-- | plat/mediatek/mt8186/include/platform_def.h | 5 | ||||
-rw-r--r-- | plat/mediatek/mt8186/plat_sip_calls.c | 7 | ||||
-rw-r--r-- | plat/mediatek/mt8186/platform.mk | 3 |
8 files changed, 65 insertions, 2 deletions
diff --git a/plat/mediatek/drivers/msdc/mt8186/mt_msdc_priv.h b/plat/mediatek/drivers/msdc/mt8186/mt_msdc_priv.h new file mode 100644 index 000000000..b3337caf6 --- /dev/null +++ b/plat/mediatek/drivers/msdc/mt8186/mt_msdc_priv.h @@ -0,0 +1,13 @@ +/* + * Copyright (c) 2022, MediaTek Inc. All rights reserved. + * + * SPDX-License-Identifier: BSD-3-Clause + */ + +#ifndef MT_MSDC_PRIV_H +#define MT_MSDC_PRIV_H + +#define MSDC_CQHCI_CFG 0x808 +#define MSDC_CQHCI_CRYPTO_ENABLE BIT(1) + +#endif diff --git a/plat/mediatek/drivers/msdc/mt_msdc.c b/plat/mediatek/drivers/msdc/mt_msdc.c new file mode 100644 index 000000000..ccf440fcd --- /dev/null +++ b/plat/mediatek/drivers/msdc/mt_msdc.c @@ -0,0 +1,19 @@ +/* + * Copyright (c) 2022, MediaTek Inc. All rights reserved. + * + * SPDX-License-Identifier: BSD-3-Clause + */ + +#include <common/debug.h> +#include <lib/mmio.h> +#include <mt_msdc.h> +#include <platform_def.h> + +uint64_t msdc_smc_dispatcher(uint64_t arg0, uint64_t arg1, + uint64_t arg2, uint64_t arg3) +{ + INFO("[%s] msdc setup call from kernel\n", __func__); + mmio_setbits_32(MSDC0_BASE + MSDC_CQHCI_CFG, MSDC_CQHCI_CRYPTO_ENABLE); + + return 0L; +} diff --git a/plat/mediatek/drivers/msdc/mt_msdc.h b/plat/mediatek/drivers/msdc/mt_msdc.h new file mode 100644 index 000000000..1c500c29d --- /dev/null +++ b/plat/mediatek/drivers/msdc/mt_msdc.h @@ -0,0 +1,15 @@ +/* + * Copyright (c) 2022, MediaTek Inc. All rights reserved. + * + * SPDX-License-Identifier: BSD-3-Clause + */ + +#ifndef MT_MSDC_H +#define MT_MSDC_H + +#include <mt_msdc_priv.h> + +uint64_t msdc_smc_dispatcher(uint64_t arg0, uint64_t arg1, + uint64_t arg2, uint64_t arg3); + +#endif diff --git a/plat/mediatek/include/mtk_sip_def.h b/plat/mediatek/include/mtk_sip_def.h index 7449371f4..907f0c1b9 100644 --- a/plat/mediatek/include/mtk_sip_def.h +++ b/plat/mediatek/include/mtk_sip_def.h @@ -11,6 +11,7 @@ #define MTK_SIP_SMC_FROM_NS_EL1_TABLE(_func) \ _func(MTK_SIP_KERNEL_TIME_SYNC, 0x202) \ _func(MTK_SIP_KERNEL_DFD, 0x205) \ + _func(MTK_SIP_KERNEL_MSDC, 0x273) \ _func(MTK_SIP_VCORE_CONTROL, 0x506) \ _func(MTK_SIP_IOMMU_CONTROL, 0x514) \ _func(MTK_SIP_APUSYS_CONTROL, 0x51E) \ diff --git a/plat/mediatek/mt8186/include/plat_sip_calls.h b/plat/mediatek/mt8186/include/plat_sip_calls.h index 2b99fdbcf..f5c15e38b 100644 --- a/plat/mediatek/mt8186/include/plat_sip_calls.h +++ b/plat/mediatek/mt8186/include/plat_sip_calls.h @@ -1,5 +1,5 @@ /* - * Copyright (c) 2021, MediaTek Inc. All rights reserved. + * Copyright (c) 2021-2022, MediaTek Inc. All rights reserved. * * SPDX-License-Identifier: BSD-3-Clause */ @@ -10,6 +10,6 @@ /******************************************************************************* * Plat SiP function constants ******************************************************************************/ -#define MTK_PLAT_SIP_NUM_CALLS (4) +#define MTK_PLAT_SIP_NUM_CALLS (6) #endif /* PLAT_SIP_CALLS_H */ diff --git a/plat/mediatek/mt8186/include/platform_def.h b/plat/mediatek/mt8186/include/platform_def.h index f3d15f35a..850ce2fc4 100644 --- a/plat/mediatek/mt8186/include/platform_def.h +++ b/plat/mediatek/mt8186/include/platform_def.h @@ -72,6 +72,11 @@ #define EMI_MPU_BASE (IO_PHYS + 0x0021B000) /******************************************************************************* + * MSDC related constants + ******************************************************************************/ +#define MSDC0_BASE (IO_PHYS + 0x01230000) + +/******************************************************************************* * GIC-600 & interrupt handling related constants ******************************************************************************/ /* Base MTK_platform compatible GIC memory map */ diff --git a/plat/mediatek/mt8186/plat_sip_calls.c b/plat/mediatek/mt8186/plat_sip_calls.c index d9144d875..0e9c27043 100644 --- a/plat/mediatek/mt8186/plat_sip_calls.c +++ b/plat/mediatek/mt8186/plat_sip_calls.c @@ -6,6 +6,8 @@ #include <common/debug.h> #include <common/runtime_svc.h> +#include <lib/mmio.h> +#include <mt_msdc.h> #include <mt_spm_vcorefs.h> #include <mtk_sip_svc.h> #include <plat_dfd.h> @@ -33,6 +35,11 @@ uintptr_t mediatek_plat_sip_handler(uint32_t smc_fid, ret = dfd_smc_dispatcher(x1, x2, x3, x4); SMC_RET1(handle, ret); break; + case MTK_SIP_KERNEL_MSDC_AARCH32: + case MTK_SIP_KERNEL_MSDC_AARCH64: + ret = msdc_smc_dispatcher(x1, x2, x3, x4); + SMC_RET1(handle, ret); + break; default: ERROR("%s: unhandled SMC (0x%x)\n", __func__, smc_fid); break; diff --git a/plat/mediatek/mt8186/platform.mk b/plat/mediatek/mt8186/platform.mk index 8717d7d3e..658797091 100644 --- a/plat/mediatek/mt8186/platform.mk +++ b/plat/mediatek/mt8186/platform.mk @@ -12,6 +12,8 @@ PLAT_INCLUDES := -I${MTK_PLAT}/common/ \ -I${MTK_PLAT}/drivers/gic600/ \ -I${MTK_PLAT}/drivers/gpio/ \ -I${MTK_PLAT}/drivers/lpm/ \ + -I${MTK_PLAT}/drivers/msdc/ \ + -I${MTK_PLAT}/drivers/msdc/${PLAT} \ -I${MTK_PLAT}/drivers/pmic_wrap/ \ -I${MTK_PLAT}/drivers/timer/ \ -I${MTK_PLAT}/drivers/uart/ \ @@ -53,6 +55,7 @@ BL31_SOURCES += common/desc_image_load.c \ ${MTK_PLAT}/drivers/gic600/mt_gic_v3.c \ ${MTK_PLAT}/drivers/gpio/mtgpio_common.c \ ${MTK_PLAT}/drivers/lpm/mt_lp_rm.c \ + ${MTK_PLAT}/drivers/msdc/mt_msdc.c \ ${MTK_PLAT}/drivers/pmic_wrap/pmic_wrap_init.c \ ${MTK_PLAT}/drivers/rtc/rtc_common.c \ ${MTK_PLAT}/drivers/timer/mt_timer.c \ |