1 /* SPDX-License-Identifier: GPL-2.0-only */ 2 /* 3 * Copyright (c) 2015-2016 MediaTek Inc. 4 * Author: Yong Wu <yong.wu@mediatek.com> 5 */ 6 #ifndef MTK_IOMMU_SMI_H 7 #define MTK_IOMMU_SMI_H 8 9 #include <linux/bitops.h> 10 #include <linux/device.h> 11 12 #ifdef CONFIG_MTK_SMI 13 14 #define MTK_SMI_MMU_EN(port) BIT(port) 15 16 struct mtk_smi_larb_iommu { 17 struct device *dev; 18 unsigned int mmu; 19 }; 20 21 /* 22 * mtk_smi_larb_get: Enable the power domain and clocks for this local arbiter. 23 * It also initialize some basic setting(like iommu). 24 * mtk_smi_larb_put: Disable the power domain and clocks for this local arbiter. 25 * Both should be called in non-atomic context. 26 * 27 * Returns 0 if successful, negative on failure. 28 */ 29 int mtk_smi_larb_get(struct device *larbdev); 30 void mtk_smi_larb_put(struct device *larbdev); 31 32 #else 33 34 static inline int mtk_smi_larb_get(struct device *larbdev) 35 { 36 return 0; 37 } 38 39 static inline void mtk_smi_larb_put(struct device *larbdev) { } 40 41 #endif 42 43 #endif 44