ARM: tegra12: set CPU rate to 2.2GHz for sku 0x87
[linux-3.10.git] / arch / arm / mach-tegra / tegra11_soctherm.h
1 /*
2  * arch/arm/mach-tegra/tegra11_soctherm.h
3  *
4  * Copyright (c) 2011-2013, NVIDIA CORPORATION. All rights reserved.
5  *
6  * This program is free software; you can redistribute it and/or modify it
7  * under the terms and conditions of the GNU General Public License,
8  * version 2, as published by the Free Software Foundation.
9  *
10  * This program is distributed in the hope it will be useful, but WITHOUT
11  * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
12  * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License for
13  * more details.
14  *
15  * You should have received a copy of the GNU General Public License
16  * along with this program.  If not, see <http://www.gnu.org/licenses/>.
17  */
18
19 #ifndef __MACH_TEGRA_11x_SOCTHERM_H
20 #define __MACH_TEGRA_11x_SOCTHERM_H
21
22 /* This order must match the soc_therm HW register spec */
23 enum soctherm_sense {
24         TSENSE_CPU0 = 0,
25         TSENSE_CPU1,
26         TSENSE_CPU2,
27         TSENSE_CPU3,
28         TSENSE_MEM0,
29         TSENSE_MEM1,
30         TSENSE_GPU,
31         TSENSE_PLLX,
32         TSENSE_SIZE,
33 };
34
35 /* This order must match the soc_therm HW register spec */
36 enum soctherm_therm_id {
37         THERM_CPU = 0,
38         THERM_GPU,
39         THERM_MEM,
40         THERM_PLL,
41         THERM_SIZE,
42 };
43
44 enum soctherm_throttle_id {
45         THROTTLE_LIGHT = 0,
46         THROTTLE_HEAVY,
47         THROTTLE_OC1,
48         THROTTLE_OC2,
49         THROTTLE_OC3,
50         THROTTLE_OC4,
51         THROTTLE_OC5, /* OC5 is reserved for WAR to Bug 1415030 */
52         THROTTLE_SIZE,
53 };
54
55 enum soctherm_throttle_dev_id {
56         THROTTLE_DEV_CPU = 0,
57         THROTTLE_DEV_GPU,
58         THROTTLE_DEV_SIZE,
59         THROTTLE_DEV_NONE,
60 };
61
62 enum soctherem_oc_irq_id {
63         TEGRA_SOC_OC_IRQ_1,
64         TEGRA_SOC_OC_IRQ_2,
65         TEGRA_SOC_OC_IRQ_3,
66         TEGRA_SOC_OC_IRQ_4,
67         TEGRA_SOC_OC_IRQ_5,
68         TEGRA_SOC_OC_IRQ_MAX,
69 };
70
71 struct soctherm_sensor {
72         bool sensor_enable;
73         bool zone_enable;
74         int tall;
75         int tiddq;
76         int ten_count;
77         int tsample;
78         int tsamp_ATE;
79         u8 pdiv;
80         u8 pdiv_ATE;
81 };
82
83 struct soctherm_therm {
84         bool zone_enable;
85         int passive_delay;
86         int num_trips;
87         int hotspot_offset;
88         struct thermal_trip_info trips[THERMAL_MAX_TRIPS];
89         struct thermal_zone_params *tzp;
90 };
91
92 struct soctherm_throttle_dev {
93         bool enable;
94         u8 depth; /* if this is non-zero, the values below are ignored */
95         u8 dividend;
96         u8 divisor;
97         u16 duration;
98         u8 step;
99         char *throttling_depth;
100 };
101
102 enum throt_mode {
103         DISABLED = 0,
104         STICKY,
105         BRIEF,
106         RESERVED,
107 };
108
109 struct soctherm_throttle {
110         u8 pgmask;
111         u8 throt_mode;
112         u8 polarity;
113         u8 priority;
114         u8 period;
115         bool intr;
116         struct soctherm_throttle_dev devs[THROTTLE_DEV_SIZE];
117 };
118
119 struct soctherm_tsensor_pmu_data {
120         u8 poweroff_reg_data;
121         u8 poweroff_reg_addr;
122         u8 reset_tegra;
123         u8 controller_type;
124         u8 i2c_controller_id;
125         u8 pinmux;
126         u8 pmu_16bit_ops;
127         u8 pmu_i2c_addr;
128 };
129
130 struct soctherm_platform_data {
131         int oc_irq_base;
132         int num_oc_irqs;
133         unsigned long soctherm_clk_rate;
134         unsigned long tsensor_clk_rate;
135
136         struct soctherm_sensor sensor_data[TSENSE_SIZE];
137         struct soctherm_therm therm[THERM_SIZE];
138         struct soctherm_throttle throttle[THROTTLE_SIZE];
139         struct tegra_tsensor_pmu_data *tshut_pmu_trip_data;
140 };
141
142 #ifdef CONFIG_TEGRA_SOCTHERM
143 int __init tegra11_soctherm_init(struct soctherm_platform_data *data);
144 void tegra_soctherm_adjust_cpu_zone(bool high_voltage_range);
145 #else
146 static inline int tegra11_soctherm_init(struct soctherm_platform_data *data)
147 {
148         return 0;
149 }
150 static inline void tegra_soctherm_adjust_cpu_zone(bool high_voltage_range)
151 { }
152 #endif
153
154 #endif /* __MACH_TEGRA_11x_SOCTHERM_H */