diff options
| author | Yong Wu <yong.wu@mediatek.com> | 2016-02-22 12:20:49 -0500 |
|---|---|---|
| committer | Joerg Roedel <jroedel@suse.de> | 2016-02-25 10:49:08 -0500 |
| commit | cc8bbe1a83128ad06457e4dc69907c4f9a6fc1a7 (patch) | |
| tree | e9ba4a6dfce5064c0a7f153fba91f902b11fc517 /include/soc | |
| parent | fb6e2ceee3e634e42405d9b47080ed21442964d9 (diff) | |
memory: mediatek: Add SMI driver
This patch add SMI(Smart Multimedia Interface) driver. This driver
is responsible to enable/disable iommu and control the power domain
and clocks of each local arbiter.
Signed-off-by: Yong Wu <yong.wu@mediatek.com>
Tested-by: Philipp Zabel <p.zabel@pengutronix.de>
Reviewed-by: Daniel Kurtz <djkurtz@chromium.org>
Tested-by: Daniel Kurtz <djkurtz@chromium.org>
Signed-off-by: Matthias Brugger <matthias.bgg@gmail.com>
Signed-off-by: Joerg Roedel <jroedel@suse.de>
Diffstat (limited to 'include/soc')
| -rw-r--r-- | include/soc/mediatek/smi.h | 58 |
1 files changed, 58 insertions, 0 deletions
diff --git a/include/soc/mediatek/smi.h b/include/soc/mediatek/smi.h new file mode 100644 index 000000000000..8893c5eacd07 --- /dev/null +++ b/include/soc/mediatek/smi.h | |||
| @@ -0,0 +1,58 @@ | |||
| 1 | /* | ||
| 2 | * Copyright (c) 2015-2016 MediaTek Inc. | ||
| 3 | * Author: Yong Wu <yong.wu@mediatek.com> | ||
| 4 | * | ||
| 5 | * This program is free software; you can redistribute it and/or modify | ||
| 6 | * it under the terms of the GNU General Public License version 2 as | ||
| 7 | * published by the Free Software Foundation. | ||
| 8 | * | ||
| 9 | * This program is distributed in the hope that it will be useful, | ||
| 10 | * but WITHOUT ANY WARRANTY; without even the implied warranty of | ||
| 11 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | ||
| 12 | * GNU General Public License for more details. | ||
| 13 | */ | ||
| 14 | #ifndef MTK_IOMMU_SMI_H | ||
| 15 | #define MTK_IOMMU_SMI_H | ||
| 16 | |||
| 17 | #include <linux/bitops.h> | ||
| 18 | #include <linux/device.h> | ||
| 19 | |||
| 20 | #ifdef CONFIG_MTK_SMI | ||
| 21 | |||
| 22 | #define MTK_LARB_NR_MAX 8 | ||
| 23 | |||
| 24 | #define MTK_SMI_MMU_EN(port) BIT(port) | ||
| 25 | |||
| 26 | struct mtk_smi_larb_iommu { | ||
| 27 | struct device *dev; | ||
| 28 | unsigned int mmu; | ||
| 29 | }; | ||
| 30 | |||
| 31 | struct mtk_smi_iommu { | ||
| 32 | unsigned int larb_nr; | ||
| 33 | struct mtk_smi_larb_iommu larb_imu[MTK_LARB_NR_MAX]; | ||
| 34 | }; | ||
| 35 | |||
| 36 | /* | ||
| 37 | * mtk_smi_larb_get: Enable the power domain and clocks for this local arbiter. | ||
| 38 | * It also initialize some basic setting(like iommu). | ||
| 39 | * mtk_smi_larb_put: Disable the power domain and clocks for this local arbiter. | ||
| 40 | * Both should be called in non-atomic context. | ||
| 41 | * | ||
| 42 | * Returns 0 if successful, negative on failure. | ||
| 43 | */ | ||
| 44 | int mtk_smi_larb_get(struct device *larbdev); | ||
| 45 | void mtk_smi_larb_put(struct device *larbdev); | ||
| 46 | |||
| 47 | #else | ||
| 48 | |||
| 49 | static inline int mtk_smi_larb_get(struct device *larbdev) | ||
| 50 | { | ||
| 51 | return 0; | ||
| 52 | } | ||
| 53 | |||
| 54 | static inline void mtk_smi_larb_put(struct device *larbdev) { } | ||
| 55 | |||
| 56 | #endif | ||
| 57 | |||
| 58 | #endif | ||
