1 /* 2 * Copyright (c) 2015-2016 MediaTek Inc. 3 * Author: Yong Wu <yong.wu@mediatek.com> 4 * 5 * This program is free software; you can redistribute it and/or modify 6 * it under the terms of the GNU General Public License version 2 as 7 * published by the Free Software Foundation. 8 * 9 * This program is distributed in the hope that it will be useful, 10 * but WITHOUT ANY WARRANTY; without even the implied warranty of 11 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 12 * GNU General Public License for more details. 13 */ 14 #ifndef MTK_IOMMU_SMI_H 15 #define MTK_IOMMU_SMI_H 16 17 #include <linux/bitops.h> 18 #include <linux/device.h> 19 20 #ifdef CONFIG_MTK_SMI 21 22 #define MTK_LARB_NR_MAX 8 23 24 #define MTK_SMI_MMU_EN(port) BIT(port) 25 26 struct mtk_smi_larb_iommu { 27 struct device *dev; 28 unsigned int mmu; 29 }; 30 31 struct mtk_smi_iommu { 32 unsigned int larb_nr; 33 struct mtk_smi_larb_iommu larb_imu[MTK_LARB_NR_MAX]; 34 }; 35 36 /* 37 * mtk_smi_larb_get: Enable the power domain and clocks for this local arbiter. 38 * It also initialize some basic setting(like iommu). 39 * mtk_smi_larb_put: Disable the power domain and clocks for this local arbiter. 40 * Both should be called in non-atomic context. 41 * 42 * Returns 0 if successful, negative on failure. 43 */ 44 int mtk_smi_larb_get(struct device *larbdev); 45 void mtk_smi_larb_put(struct device *larbdev); 46 47 #else 48 49 static inline int mtk_smi_larb_get(struct device *larbdev) 50 { 51 return 0; 52 } 53 54 static inline void mtk_smi_larb_put(struct device *larbdev) { } 55 56 #endif 57 58 #endif 59