1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859 |
- /*
- * Copyright (c) 2015-2016 MediaTek Inc.
- * Author: Yong Wu <yong.wu@mediatek.com>
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- */
- #ifndef MTK_IOMMU_SMI_H
- #define MTK_IOMMU_SMI_H
- #include <linux/bitops.h>
- #include <linux/device.h>
- #ifdef CONFIG_MTK_SMI
- #define MTK_LARB_NR_MAX 16
- #define MTK_SMI_MMU_EN(port) BIT(port)
- struct mtk_smi_larb_iommu {
- struct device *dev;
- unsigned int mmu;
- };
- struct mtk_smi_iommu {
- unsigned int larb_nr;
- struct mtk_smi_larb_iommu larb_imu[MTK_LARB_NR_MAX];
- };
- /*
- * mtk_smi_larb_get: Enable the power domain and clocks for this local arbiter.
- * It also initialize some basic setting(like iommu).
- * mtk_smi_larb_put: Disable the power domain and clocks for this local arbiter.
- * Both should be called in non-atomic context.
- *
- * Returns 0 if successful, negative on failure.
- */
- int mtk_smi_larb_get(struct device *larbdev);
- void mtk_smi_larb_put(struct device *larbdev);
- #else
- static inline int mtk_smi_larb_get(struct device *larbdev)
- {
- return 0;
- }
- static inline void mtk_smi_larb_put(struct device *larbdev) { }
- #endif
- #endif
|