ARM: tegra: Add emc files for Tegra12x
[linux-3.10.git] / arch / arm / mach-tegra / tegra12_emc.c
1 /*
2  * arch/arm/mach-tegra/tegra12_emc.c
3  *
4  * Copyright (C) 2011 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 version 2 as
8  * published by the Free Software Foundation.
9  *
10  * This program is distributed in the hope that 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 along
16  * with this program; if not, write to the Free Software Foundation, Inc.,
17  * 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA.
18  *
19  */
20
21 #include <linux/kernel.h>
22 #include <linux/clk.h>
23 #include <linux/err.h>
24 #include <linux/io.h>
25
26 #include "clock.h"
27 #include "iomap.h"
28 #include "tegra12_emc.h"
29
30 static u32 dram_type = -1;
31
32 static struct clk *emc;
33
34 struct tegra_emc_table;
35
36 static void __iomem *emc_base = IO_ADDRESS(TEGRA_EMC_BASE);
37 static void __iomem *mc_base = IO_ADDRESS(TEGRA_MC_BASE);
38
39 static inline void emc_writel(u32 val, unsigned long addr)
40 {
41         writel(val, (u32)emc_base + addr);
42         barrier();
43 }
44 static inline u32 emc_readl(unsigned long addr)
45 {
46         return readl((u32)emc_base + addr);
47 }
48 static inline void mc_writel(u32 val, unsigned long addr)
49 {
50         writel(val, (u32)mc_base + addr);
51         barrier();
52 }
53 static inline u32 mc_readl(unsigned long addr)
54 {
55         return readl((u32)mc_base + addr);
56 }
57
58 int tegra_emc_set_rate(unsigned long rate)
59 {
60         /* FIXME: This is just a stub */
61         return 0;
62 }
63
64 long tegra_emc_round_rate(unsigned long rate)
65 {
66         /* FIXME: This is just a stub */
67         return -EINVAL;
68 }
69
70 struct clk *tegra_emc_predict_parent(unsigned long rate, u32 *div_value)
71 {
72         /* FIXME: This is just a stub */
73         return NULL;
74 }
75
76 void tegra_init_emc(const struct tegra_emc_table *table, int table_size)
77 {
78         /* FIXME: This is just a stub */
79 }
80
81 void tegra_emc_timing_invalidate(void)
82 {
83         /* FIXME: This is just a stub */
84 }
85
86 void tegra_emc_dram_type_init(struct clk *c)
87 {
88         emc = c;
89
90         dram_type = (emc_readl(EMC_FBIO_CFG5) &
91                      EMC_CFG5_TYPE_MASK) >> EMC_CFG5_TYPE_SHIFT;
92 }
93
94 int tegra_emc_get_dram_type(void)
95 {
96         return dram_type;
97 }