ARM: tegra: emc: Derating support
[linux-3.10.git] / include / linux / platform_data / tegra_emc.h
1 /*
2  * Copyright (C) 2011 Google, Inc.
3  * Copyright (C) 2012-2013 NVIDIA Corporation. All rights reserved.
4  *
5  * Author:
6  *      Colin Cross <ccross@android.com>
7  *      Olof Johansson <olof@lixom.net>
8  *
9  * This software is licensed under the terms of the GNU General Public
10  * License version 2, as published by the Free Software Foundation, and
11  * may be copied, distributed, and modified under those terms.
12  *
13  * This program is distributed in the hope that it will be useful,
14  * but WITHOUT ANY WARRANTY; without even the implied warranty of
15  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
16  * GNU General Public License for more details.
17  *
18  */
19
20 #ifndef __TEGRA_EMC_H_
21 #define __TEGRA_EMC_H_
22
23 #define TEGRA_MAX_TABLE_ID_LEN  16
24
25 #define TEGRA_EMC_NUM_REGS 46
26 #define TEGRA30_EMC_NUM_REGS 110
27
28 struct tegra_emc_table {
29         unsigned long rate;
30         u32 regs[TEGRA_EMC_NUM_REGS];
31 };
32
33 struct tegra_emc_pdata {
34         const char *description;
35         int mem_manufacturer_id; /* LPDDR2 MR5 or -1 to ignore */
36         int mem_revision_id1;    /* LPDDR2 MR6 or -1 to ignore */
37         int mem_revision_id2;    /* LPDDR2 MR7 or -1 to ignore */
38         int mem_pid;             /* LPDDR2 MR8 or -1 to ignore */
39         int num_tables;
40         struct tegra_emc_table *tables;
41 };
42
43 struct tegra30_emc_table {
44         u8 rev;
45         unsigned long rate;
46
47         /* unconditionally updated in one burst shot */
48         u32 burst_regs[TEGRA30_EMC_NUM_REGS];
49
50         /* updated separately under some conditions */
51         u32 emc_zcal_cnt_long;
52         u32 emc_acal_interval;
53         u32 emc_periodic_qrst;
54         u32 emc_mode_reset;
55         u32 emc_mode_1;
56         u32 emc_mode_2;
57         u32 emc_dsr;
58         int emc_min_mv;
59 };
60
61 struct tegra30_emc_pdata {
62         const char *description;
63         int num_tables;
64         struct tegra30_emc_table *tables;
65 };
66
67 /* !!!FIXME!!! Need actual Tegra11x values */
68 #define TEGRA11_EMC_MAX_NUM_REGS        120
69
70 struct tegra11_emc_table {
71         u8 rev;
72         unsigned long rate;
73         int emc_min_mv;
74         const char *src_name;
75         u32 src_sel_reg;
76
77         int burst_regs_num;
78         int emc_trimmers_num;
79         int burst_up_down_regs_num;
80
81         /* unconditionally updated in one burst shot */
82         u32 burst_regs[TEGRA11_EMC_MAX_NUM_REGS];
83
84         /* unconditionally updated in one burst shot to particular channel */
85         u32 emc_trimmers_0[TEGRA11_EMC_MAX_NUM_REGS];
86         u32 emc_trimmers_1[TEGRA11_EMC_MAX_NUM_REGS];
87
88         /* one burst shot, but update time depends on rate change direction */
89         u32 burst_up_down_regs[TEGRA11_EMC_MAX_NUM_REGS];
90
91         /* updated separately under some conditions */
92         u32 emc_zcal_cnt_long;
93         u32 emc_acal_interval;
94         u32 emc_cfg;
95         u32 emc_mode_reset;
96         u32 emc_mode_1;
97         u32 emc_mode_2;
98         u32 emc_mode_4;
99         u32 clock_change_latency;
100 };
101
102 struct tegra11_emc_pdata {
103         const char *description;
104         int num_tables;
105         struct tegra11_emc_table *tables;
106 };
107
108 /* !!!FIXME!!! Need actual Tegra14x values */
109 #define TEGRA14_EMC_MAX_NUM_REGS        200
110 #define TEGRA14_EMC_MAX_UP_DOWN_REGS    20
111
112 struct tegra14_emc_table {
113         u8 rev;
114         char table_id[TEGRA_MAX_TABLE_ID_LEN];
115         unsigned long rate;
116         int emc_min_mv;
117         const char *src_name;
118         u32 src_sel_reg;
119
120         int burst_regs_num;
121         int burst_up_down_regs_num;
122
123         /* unconditionally updated in one burst shot */
124         u32 burst_regs[TEGRA14_EMC_MAX_NUM_REGS];
125
126         /* one burst shot, but update time depends on rate change direction */
127         u32 burst_up_down_regs[TEGRA14_EMC_MAX_UP_DOWN_REGS];
128
129         /* updated separately under some conditions */
130         u32 emc_zcal_cnt_long;
131         u32 emc_acal_interval;
132         u32 emc_cfg;
133         u32 emc_cfg_dig_dll;
134         u32 emc_mode_reset;
135         u32 emc_mode_1;
136         u32 emc_mode_2;
137         u32 emc_mode_4;
138         u32 clock_change_latency;
139 };
140
141 struct tegra14_emc_pdata {
142         const char *description;
143         int num_tables;
144         struct tegra14_emc_table *tables;
145         struct tegra14_emc_table *tables_derated;
146 };
147
148 #define TEGRA12_EMC_MAX_NUM_REGS        300
149 #define TEGRA12_EMC_MAX_UP_DOWN_REGS    20
150
151 struct tegra12_emc_table {
152         u8 rev;
153         unsigned long rate;
154         int emc_min_mv;
155         int gk20a_min_mv;
156         const char *src_name;
157         u32 src_sel_reg;
158
159         int burst_regs_num;
160         int burst_up_down_regs_num;
161
162         /* unconditionally updated in one burst shot */
163         u32 burst_regs[TEGRA12_EMC_MAX_NUM_REGS];
164
165         /* one burst shot, but update time depends on rate change direction */
166         u32 burst_up_down_regs[TEGRA12_EMC_MAX_UP_DOWN_REGS];
167
168         /* updated separately under some conditions */
169         u32 emc_zcal_cnt_long;
170         u32 emc_acal_interval;
171         u32 emc_ctt_term_ctrl;
172         u32 emc_cfg;
173         u32 emc_cfg_dig_dll;
174         u32 emc_mode_reset;
175         u32 emc_mode_1;
176         u32 emc_mode_2;
177         u32 emc_mode_4;
178         u32 clock_change_latency;
179 };
180
181 struct tegra12_emc_pdata {
182         const char *description;
183         int num_tables;
184         struct tegra12_emc_table *tables;
185 };
186
187 #endif