| /* SPDX-License-Identifier: GPL-2.0 */ |
| /* |
| * Copyright (C) 2022 MediaTek Inc. |
| * Copyright (c) 2025, Igor Belwon <igor.belwon@mentallysanemainliners.org> |
| * |
| * Slimmed down header from Linux: drivers/ufs/host/ufs-mediatek-sip.h |
| */ |
| |
| #ifndef _UFS_MEDIATEK_SIP_H |
| #define _UFS_MEDIATEK_SIP_H |
| |
| #include <linux/arm-smccc.h> |
| |
| /* |
| * SiP (Slicon Partner) commands |
| */ |
| #define MTK_SIP_UFS_CONTROL ARM_SMCCC_CALL_VAL(ARM_SMCCC_FAST_CALL, \ |
| ARM_SMCCC_SMC_64, \ |
| ARM_SMCCC_OWNER_SIP, 0x276) |
| #define UFS_MTK_SIP_DEVICE_RESET BIT(1) |
| #define UFS_MTK_SIP_REF_CLK_NOTIFICATION BIT(3) |
| |
| /* |
| * SMC call wrapper function |
| */ |
| struct ufs_mtk_smc_arg { |
| unsigned long cmd; |
| struct arm_smccc_res *res; |
| unsigned long v1; |
| unsigned long v2; |
| unsigned long v3; |
| unsigned long v4; |
| unsigned long v5; |
| unsigned long v6; |
| unsigned long v7; |
| }; |
| |
| static inline void _ufs_mtk_smc(struct ufs_mtk_smc_arg s) |
| { |
| arm_smccc_smc(MTK_SIP_UFS_CONTROL, |
| s.cmd, |
| s.v1, s.v2, s.v3, s.v4, s.v5, s.v6, s.res); |
| } |
| |
| #define ufs_mtk_smc(...) \ |
| _ufs_mtk_smc((struct ufs_mtk_smc_arg) {__VA_ARGS__}) |
| |
| /* SIP interface */ |
| |
| #define ufs_mtk_ref_clk_notify(on, stage, res) \ |
| ufs_mtk_smc(UFS_MTK_SIP_REF_CLK_NOTIFICATION, &(res), on, stage) |
| |
| #define ufs_mtk_device_reset_ctrl(high, res) \ |
| ufs_mtk_smc(UFS_MTK_SIP_DEVICE_RESET, &(res), high) |
| |
| #endif /* !_UFS_MEDIATEK_SIP_H */ |