ARM: tegra12: set CPU rate to 2.2GHz for sku 0x87
[linux-3.10.git] / arch / arm / mach-tegra / include / mach / tegra_smmu.h
1 /*
2  * arch/arm/mach-tegra/include/mach/tegra_smmu.h
3  *
4  * Copyright (c) 2011-2013, NVIDIA CORPORATION.  All rights reserved.
5  *
6  * This software is licensed under the terms of the GNU General Public
7  * License version 2, as published by the Free Software Foundation, and
8  * may be copied, distributed, and modified under those terms.
9  *
10  * This program is distributed in the hope that it will be useful,
11  * but WITHOUT ANY WARRANTY; without even the implied warranty of
12  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
13  * GNU General Public License for more details.
14  *
15  */
16
17 #ifndef __ARCH_ARM_MACH_TEGRA_SMMU_H
18 #define __ARCH_ARM_MACH_TEGRA_SMMU_H
19
20 int tegra_smmu_save(void);
21 int tegra_smmu_restore(void);
22
23 #if defined(CONFIG_TEGRA_IOVMM_SMMU) || defined(CONFIG_TEGRA_IOMMU_SMMU)
24 extern struct resource *tegra_smmu_window(int wnum);
25 extern int tegra_smmu_window_count(void);
26 #endif
27
28 struct iommu_linear_map {
29         dma_addr_t start;
30         size_t size;
31 };
32
33 #ifdef CONFIG_PLATFORM_ENABLE_IOMMU
34 /*
35  * ASID[0] for the system default
36  * ASID[1] for PPCS, which has SDMMC
37  * ASID[3][4] open for drivers, first come, first served.
38  */
39 enum {
40         SYSTEM_DEFAULT,
41         SYSTEM_PROTECTED,
42         SYSTEM_DC,
43         SYSTEM_DCB,
44         SYSTEM_GK20A,
45         NUM_ASIDS,
46 };
47
48 /* Maximum number of iommu address spaces in the system */
49 #define TEGRA_IOMMU_NUM_ASIDS NUM_ASIDS
50 extern struct dma_iommu_mapping *tegra_smmu_get_map(struct device *dev,
51                                                     u64 swgids);
52 void tegra_smmu_unmap_misc_device(struct device *dev);
53 void tegra_smmu_map_misc_device(struct device *dev);
54 int tegra_smmu_get_asid(struct device *dev);
55 #else
56 #define TEGRA_IOMMU_NUM_ASIDS 1
57
58 static inline struct dma_iommu_mapping *tegra_smmu_get_map(struct device *dev,
59                                                            u64 swgids)
60 {
61         return NULL;
62 }
63
64 static inline void tegra_smmu_unmap_misc_device(struct device *dev)
65 {
66 }
67
68 static inline void tegra_smmu_map_misc_device(struct device *dev)
69 {
70 }
71
72 static inline int tegra_smmu_get_asid(struct device *dev)
73 {
74         return 0;
75 }
76 #endif
77
78
79 extern u64 tegra_smmu_fixup_swgids(struct device *dev,
80                                    struct iommu_linear_map **map);
81
82 #endif /* __ARCH_ARM_MACH_TEGRA_SMMU_H */