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> 11*00105882SYidi 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 63*00105882SYidi Lin /* EMI interfaces */ 64*00105882SYidi Lin uint64_t emi_mpu_read_addr(unsigned int region, unsigned int offset); 65*00105882SYidi Lin uint64_t emi_mpu_read_enable(unsigned int region); 66*00105882SYidi Lin uint64_t emi_mpu_read_aid(unsigned int region, unsigned int aid_shift); 67*00105882SYidi Lin uint64_t emi_mpu_check_ns_cpu(void); 68*00105882SYidi Lin enum mtk_bl31_status emi_mpu_set_protection(uint32_t start, uint32_t end, 69*00105882SYidi Lin unsigned int region); 70*00105882SYidi Lin enum mtk_bl31_status emi_kp_set_protection(size_t start, size_t end, unsigned int region); 71*00105882SYidi Lin enum mtk_bl31_status emi_kp_clear_violation(unsigned int emiid); 72*00105882SYidi Lin enum mtk_bl31_status emi_clear_protection(unsigned int region); 73*00105882SYidi Lin enum mtk_bl31_status emi_clear_md_violation(void); 74*00105882SYidi Lin uint64_t emi_mpu_check_region_info(unsigned int region, uint64_t *sa, uint64_t *ea); 75*00105882SYidi Lin uint64_t emi_mpu_page_base_region(void); 76*00105882SYidi Lin uint64_t emi_mpu_smc_hp_mod_check(void); 77*00105882SYidi Lin enum mtk_bl31_status slb_clear_violation(unsigned int id); 78*00105882SYidi Lin enum mtk_bl31_status emi_clear_violation(unsigned int id, unsigned int type); 79*00105882SYidi Lin enum mtk_bl31_status slc_parity_select(unsigned int id, unsigned int port); 80*00105882SYidi Lin enum mtk_bl31_status slc_parity_clear(unsigned int id); 81*00105882SYidi Lin enum mtk_bl31_status emi_mpu_set_aid(unsigned int region, unsigned int num); 82*00105882SYidi Lin void emi_protection_init(void); 83*00105882SYidi Lin 8457c73515SYidi Lin #endif /* __MTK_BL31_INTERFACE_H__ */ 85