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