xref: /rk3399_ARM-atf/plat/mediatek/include/mtk_bl31_interface.h (revision 02309a84fbfb8b3469aa7dba52ea15c9bf2a768d)
157c73515SYidi Lin /*
257c73515SYidi Lin  * Copyright (c) 2025, MediaTek Inc. All rights reserved.
357c73515SYidi Lin  *
457c73515SYidi Lin  * SPDX-License-Identifier: BSD-3-Clause
557c73515SYidi Lin  */
657c73515SYidi Lin 
757c73515SYidi Lin #ifndef __MTK_BL31_INTERFACE_H__
857c73515SYidi Lin #define __MTK_BL31_INTERFACE_H__
957c73515SYidi Lin 
1057c73515SYidi Lin #include <stdbool.h>
1100105882SYidi Lin #include <stddef.h>
1257c73515SYidi Lin #include <stdint.h>
1357c73515SYidi Lin 
1497881aacSYidi Lin enum mtk_bl31_status {
1597881aacSYidi Lin 	MTK_BL31_STATUS_SUCCESS = 0,
1697881aacSYidi Lin 	MTK_BL31_STATUS_INVALID_PARAM = -1,
1797881aacSYidi Lin 	MTK_BL31_STATUS_NOT_SUPPORTED = -2,
1897881aacSYidi Lin 	MTK_BL31_STATUS_INVALID_RANGE = -3,
1997881aacSYidi Lin 	MTK_BL31_STATUS_PERMISSION_DENY = -4,
2097881aacSYidi Lin 	MTK_BL31_STATUS_LOCK_FAIL = -5,
2197881aacSYidi Lin };
2297881aacSYidi Lin 
2397881aacSYidi Lin int mtk_bl31_map_to_sip_error(enum mtk_bl31_status status);
2497881aacSYidi Lin 
2597881aacSYidi Lin enum mtk_bl31_memory_type {
2697881aacSYidi Lin 	MTK_BL31_DEV_RW_SEC = 0,
2797881aacSYidi Lin };
2897881aacSYidi Lin 
2997881aacSYidi Lin int mtk_bl31_mmap_add_dynamic_region(unsigned long long base_pa, size_t size,
3097881aacSYidi Lin 				     enum mtk_bl31_memory_type attr);
3197881aacSYidi Lin int mtk_bl31_mmap_remove_dynamic_region(uintptr_t base_va, size_t size);
3297881aacSYidi Lin 
3357c73515SYidi Lin /* UFS definitions */
3457c73515SYidi Lin enum ufs_mtk_mphy_op {
3557c73515SYidi Lin 	UFS_MPHY_BACKUP = 0,
3657c73515SYidi Lin 	UFS_MPHY_RESTORE,
3757c73515SYidi Lin };
3857c73515SYidi Lin 
3957c73515SYidi Lin enum ufs_notify_change_status {
4057c73515SYidi Lin 	PRE_CHANGE,
4157c73515SYidi Lin 	POST_CHANGE,
4257c73515SYidi Lin };
4357c73515SYidi Lin 
4457c73515SYidi Lin /* UFS interfaces */
4557c73515SYidi Lin void ufs_mphy_va09_cg_ctrl(bool enable);
4657c73515SYidi Lin void ufs_device_reset_ctrl(bool rst_n);
4757c73515SYidi Lin void ufs_crypto_hie_init(void);
4857c73515SYidi Lin void ufs_ref_clk_status(uint32_t on, enum ufs_notify_change_status stage);
4957c73515SYidi Lin void ufs_sram_pwr_ctrl(bool on);
5057c73515SYidi Lin void ufs_device_pwr_ctrl(bool vcc_on, uint64_t ufs_version);
5157c73515SYidi Lin void ufs_mphy_ctrl(enum ufs_mtk_mphy_op op);
5257c73515SYidi Lin void ufs_mtcmos_ctrl(bool on);
5357c73515SYidi Lin 
5431a69d9aSYidi Lin /* UFS functions implemented in the public ATF repo */
5531a69d9aSYidi Lin int ufs_rsc_ctrl_mem(bool hold);
5631a69d9aSYidi Lin int ufs_rsc_ctrl_pmic(bool hold);
5731a69d9aSYidi Lin void ufs_device_pwr_ctrl_soc(bool vcc_on, uint64_t ufs_version);
5831a69d9aSYidi Lin int ufs_spm_mtcmos_power(bool on);
5931a69d9aSYidi Lin int ufs_phy_spm_mtcmos_power(bool on);
6031a69d9aSYidi Lin bool ufs_is_clk_status_off(void);
6131a69d9aSYidi Lin void ufs_set_clk_status(bool on);
6231a69d9aSYidi Lin 
6300105882SYidi Lin /* EMI interfaces */
6400105882SYidi Lin uint64_t emi_mpu_read_addr(unsigned int region, unsigned int offset);
6500105882SYidi Lin uint64_t emi_mpu_read_enable(unsigned int region);
6600105882SYidi Lin uint64_t emi_mpu_read_aid(unsigned int region, unsigned int aid_shift);
6700105882SYidi Lin uint64_t emi_mpu_check_ns_cpu(void);
6800105882SYidi Lin enum mtk_bl31_status emi_mpu_set_protection(uint32_t start, uint32_t end,
6900105882SYidi Lin 					    unsigned int region);
7000105882SYidi Lin enum mtk_bl31_status emi_kp_set_protection(size_t start, size_t end, unsigned int region);
7100105882SYidi Lin enum mtk_bl31_status emi_kp_clear_violation(unsigned int emiid);
7200105882SYidi Lin enum mtk_bl31_status emi_clear_protection(unsigned int region);
7300105882SYidi Lin enum mtk_bl31_status emi_clear_md_violation(void);
7400105882SYidi Lin uint64_t emi_mpu_check_region_info(unsigned int region, uint64_t *sa, uint64_t *ea);
7500105882SYidi Lin uint64_t emi_mpu_page_base_region(void);
7600105882SYidi Lin uint64_t emi_mpu_smc_hp_mod_check(void);
7700105882SYidi Lin enum mtk_bl31_status slb_clear_violation(unsigned int id);
7800105882SYidi Lin enum mtk_bl31_status emi_clear_violation(unsigned int id, unsigned int type);
7900105882SYidi Lin enum mtk_bl31_status slc_parity_select(unsigned int id, unsigned int port);
8000105882SYidi Lin enum mtk_bl31_status slc_parity_clear(unsigned int id);
8100105882SYidi Lin enum mtk_bl31_status emi_mpu_set_aid(unsigned int region, unsigned int num);
8200105882SYidi Lin void emi_protection_init(void);
8300105882SYidi Lin 
844488b229SYidi Lin /* CPU QoS interfaces */
854488b229SYidi Lin void cpu_qos_change_dcc(uint32_t on, uint32_t is_auto);
864488b229SYidi Lin void *cpu_qos_handle_cluster_on_event(const void *arg);
874488b229SYidi Lin 
88*5be0e225SYidi Lin /* SMMU sid interfaces */
89*5be0e225SYidi Lin int smmu_sid_init(void);
90*5be0e225SYidi Lin 
9157c73515SYidi Lin #endif /* __MTK_BL31_INTERFACE_H__ */
92