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_LARB_NR_MAX 16 15 16#define MTK_SMI_MMU_EN(port) BIT(port) 17 18struct mtk_smi_larb_iommu { 19 struct device *dev; 20 unsigned int mmu; 21}; 22 23struct mtk_smi_iommu { 24 unsigned int larb_nr; 25 struct mtk_smi_larb_iommu larb_imu[MTK_LARB_NR_MAX]; 26}; 27 28/* 29 * mtk_smi_larb_get: Enable the power domain and clocks for this local arbiter. 30 * It also initialize some basic setting(like iommu). 31 * mtk_smi_larb_put: Disable the power domain and clocks for this local arbiter. 32 * Both should be called in non-atomic context. 33 * 34 * Returns 0 if successful, negative on failure. 35 */ 36int mtk_smi_larb_get(struct device *larbdev); 37void mtk_smi_larb_put(struct device *larbdev); 38 39#else 40 41static inline int mtk_smi_larb_get(struct device *larbdev) 42{ 43 return 0; 44} 45 46static inline void mtk_smi_larb_put(struct device *larbdev) { } 47 48#endif 49 50#endif 51