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