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