ARM: tegra: Add emc files for Tegra12x
[linux-3.10.git] / arch / arm / mach-tegra / tegra12_emc.h
1 /*
2  * arch/arm/mach-tegra/tegra12_emc.h
3  *
4  * Copyright (C) 2011-2012 NVIDIA Corporation
5  *
6  * This program is free software; you can redistribute it and/or modify
7  * it under the terms of the GNU General Public License as published by
8  * the Free Software Foundation; either version 2 of the License, or
9  * (at your option) any later version.
10  *
11  * This program is distributed in the hope that it will be useful, but WITHOUT
12  * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
13  * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License for
14  * more details.
15  *
16  * You should have received a copy of the GNU General Public License along
17  * with this program; if not, write to the Free Software Foundation, Inc.,
18  * 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA.
19  *
20  */
21
22 #ifndef _MACH_TEGRA_TEGRA11_EMC_H
23 #define _MACH_TEGRA_TEGRA11_EMC_H
24
25 /* !!!FIXME!!! Need actual Tegra11x values */
26 #define TEGRA_EMC_NUM_REGS              110
27
28 #define TEGRA_EMC_BRIDGE_RATE_MIN       300000000
29 #define TEGRA_EMC_BRIDGE_MVOLTS_MIN     1200
30
31 struct tegra_emc_table {
32         u8 rev;
33         unsigned long rate;
34
35         /* unconditionally updated in one burst shot */
36         u32 burst_regs[TEGRA_EMC_NUM_REGS];
37
38         /* updated separately under some conditions */
39         u32 emc_zcal_cnt_long;
40         u32 emc_acal_interval;
41         u32 emc_periodic_qrst;
42         u32 emc_mode_reset;
43         u32 emc_mode_1;
44         u32 emc_mode_2;
45         u32 emc_dsr;
46         int emc_min_mv;
47 };
48
49 struct clk;
50
51 void tegra_init_emc(const struct tegra_emc_table *table, int table_size);
52
53 void tegra_emc_dram_type_init(struct clk *c);
54 int tegra_emc_get_dram_type(void);
55
56 #ifdef CONFIG_PM_SLEEP
57 void tegra_mc_timing_restore(void);
58 #else
59 static inline void tegra_mc_timing_restore(void)
60 { }
61 #endif
62
63 #define EMC_FBIO_CFG5                           0x104
64 #define EMC_CFG5_TYPE_SHIFT                     0x0
65 #define EMC_CFG5_TYPE_MASK                      (0x3 << EMC_CFG5_TYPE_SHIFT)
66 enum {
67         DRAM_TYPE_DDR3   = 0,
68         DRAM_TYPE_LPDDR2 = 2,
69 };
70
71 #endif