Blame view

arch/arm/plat-omap/sram.c 9.85 KB
92105bb70   Tony Lindgren   [ARM] 2887/1: OMA...
1
2
3
4
5
6
7
8
  /*
   * linux/arch/arm/plat-omap/sram.c
   *
   * OMAP SRAM detection and management
   *
   * Copyright (C) 2005 Nokia Corporation
   * Written by Tony Lindgren <tony@atomide.com>
   *
44169075e   Santosh Shilimkar   ARM: OMAP4: Add m...
9
10
11
   * Copyright (C) 2009 Texas Instruments
   * Added OMAP4 support - Santosh Shilimkar <santosh.shilimkar@ti.com>
   *
92105bb70   Tony Lindgren   [ARM] 2887/1: OMA...
12
13
14
15
   * This program is free software; you can redistribute it and/or modify
   * it under the terms of the GNU General Public License version 2 as
   * published by the Free Software Foundation.
   */
c2d43e39c   Tony Lindgren   ARM: OMAP: SRAM: ...
16
  #undef DEBUG
92105bb70   Tony Lindgren   [ARM] 2887/1: OMA...
17

92105bb70   Tony Lindgren   [ARM] 2887/1: OMA...
18
19
20
  #include <linux/module.h>
  #include <linux/kernel.h>
  #include <linux/init.h>
fced80c73   Russell King   [ARM] Convert asm...
21
  #include <linux/io.h>
92105bb70   Tony Lindgren   [ARM] 2887/1: OMA...
22

53d9cc739   Tony Lindgren   [ARM] 3279/1: OMA...
23
  #include <asm/tlb.h>
92105bb70   Tony Lindgren   [ARM] 2887/1: OMA...
24
  #include <asm/cacheflush.h>
670c104ae   Tony Lindgren   [ARM] 3430/1: ARM...
25
  #include <asm/mach/map.h>
ce491cf85   Tony Lindgren   omap: headers: Mo...
26
27
28
  #include <plat/sram.h>
  #include <plat/board.h>
  #include <plat/cpu.h>
1a8bfa1eb   Tony Lindgren   [ARM] 3142/1: OMA...
29

b0a330dc5   Manjunath Kondaiah G   OMAP: plat-omap: ...
30
  #include "sram.h"
59fb659b0   Paul Walmsley   OMAP2/3: PRCM: sp...
31
32
  
  /* XXX These "sideways" includes are a sign that something is wrong */
c2d43e39c   Tony Lindgren   ARM: OMAP: SRAM: ...
33
  #if defined(CONFIG_ARCH_OMAP2) || defined(CONFIG_ARCH_OMAP3)
59fb659b0   Paul Walmsley   OMAP2/3: PRCM: sp...
34
  # include "../mach-omap2/prm2xxx_3xxx.h"
c2d43e39c   Tony Lindgren   ARM: OMAP: SRAM: ...
35
36
  # include "../mach-omap2/sdrc.h"
  #endif
1a8bfa1eb   Tony Lindgren   [ARM] 3142/1: OMA...
37
  #define OMAP1_SRAM_PA		0x20000000
b4b36fd94   Jean Pihet   OMAP2+: use globa...
38
  #define OMAP2_SRAM_PUB_PA	(OMAP2_SRAM_PA + 0xf800)
b4b36fd94   Jean Pihet   OMAP2+: use globa...
39
  #define OMAP3_SRAM_PUB_PA       (OMAP3_SRAM_PA + 0x8000)
a7c3ae2cb   Santosh Shilimkar   OMAP4: Fix SRAM b...
40
  #define OMAP4_SRAM_PUB_PA	(OMAP4_SRAM_PA + 0x4000)
c2d43e39c   Tony Lindgren   ARM: OMAP: SRAM: ...
41

f47d8c694   Vikram Pandita   omap4: sram: Fix ...
42
  #if defined(CONFIG_ARCH_OMAP2PLUS)
670c104ae   Tony Lindgren   [ARM] 3430/1: ARM...
43
44
  #define SRAM_BOOTLOADER_SZ	0x00
  #else
92105bb70   Tony Lindgren   [ARM] 2887/1: OMA...
45
  #define SRAM_BOOTLOADER_SZ	0x80
670c104ae   Tony Lindgren   [ARM] 3430/1: ARM...
46
  #endif
233fd64e7   Santosh Shilimkar   omap: Split OMAP2...
47
48
49
  #define OMAP24XX_VA_REQINFOPERM0	OMAP2_L3_IO_ADDRESS(0x68005048)
  #define OMAP24XX_VA_READPERM0		OMAP2_L3_IO_ADDRESS(0x68005050)
  #define OMAP24XX_VA_WRITEPERM0		OMAP2_L3_IO_ADDRESS(0x68005058)
c2d43e39c   Tony Lindgren   ARM: OMAP: SRAM: ...
50

233fd64e7   Santosh Shilimkar   omap: Split OMAP2...
51
52
53
54
55
  #define OMAP34XX_VA_REQINFOPERM0	OMAP2_L3_IO_ADDRESS(0x68012848)
  #define OMAP34XX_VA_READPERM0		OMAP2_L3_IO_ADDRESS(0x68012850)
  #define OMAP34XX_VA_WRITEPERM0		OMAP2_L3_IO_ADDRESS(0x68012858)
  #define OMAP34XX_VA_ADDR_MATCH2		OMAP2_L3_IO_ADDRESS(0x68012880)
  #define OMAP34XX_VA_SMS_RG_ATT0		OMAP2_L3_IO_ADDRESS(0x6C000048)
c2d43e39c   Tony Lindgren   ARM: OMAP: SRAM: ...
56

670c104ae   Tony Lindgren   [ARM] 3430/1: ARM...
57
  #define GP_DEVICE		0x300
670c104ae   Tony Lindgren   [ARM] 3430/1: ARM...
58
59
  
  #define ROUND_DOWN(value,boundary)	((value) & (~((boundary)-1)))
92105bb70   Tony Lindgren   [ARM] 2887/1: OMA...
60

c40fae952   Tony Lindgren   ARM: OMAP: Sync c...
61
  static unsigned long omap_sram_start;
56849c743   Tony Lindgren   ARM: OMAP: Map SR...
62
  static void __iomem *omap_sram_base;
92105bb70   Tony Lindgren   [ARM] 2887/1: OMA...
63
  static unsigned long omap_sram_size;
92105bb70   Tony Lindgren   [ARM] 2887/1: OMA...
64

b7cc6d46b   Imre Deak   ARM: OMAP: FB syn...
65
66
  /*
   * Depending on the target RAMFS firewall setup, the public usable amount of
6cbdc8c53   Simon Arlott   [ARM] spelling fixes
67
68
   * SRAM varies.  The default accessible size for all device types is 2k. A GP
   * device allows ARM11 but not other initiators for full size. This
670c104ae   Tony Lindgren   [ARM] 3430/1: ARM...
69
70
71
72
   * functionality seems ok until some nice security API happens.
   */
  static int is_sram_locked(void)
  {
2a27753fd   Vikram Pandita   omap: sram: fix i...
73
  	if (OMAP2_DEVICE_TYPE_GP == omap_type()) {
6cbdc8c53   Simon Arlott   [ARM] spelling fixes
74
  		/* RAMFW: R/W access to all initiators for all qualifier sets */
670c104ae   Tony Lindgren   [ARM] 3430/1: ARM...
75
  		if (cpu_is_omap242x()) {
c2d43e39c   Tony Lindgren   ARM: OMAP: SRAM: ...
76
77
78
79
80
81
82
83
84
85
  			__raw_writel(0xFF, OMAP24XX_VA_REQINFOPERM0); /* all q-vects */
  			__raw_writel(0xCFDE, OMAP24XX_VA_READPERM0);  /* all i-read */
  			__raw_writel(0xCFDE, OMAP24XX_VA_WRITEPERM0); /* all i-write */
  		}
  		if (cpu_is_omap34xx()) {
  			__raw_writel(0xFFFF, OMAP34XX_VA_REQINFOPERM0); /* all q-vects */
  			__raw_writel(0xFFFF, OMAP34XX_VA_READPERM0);  /* all i-read */
  			__raw_writel(0xFFFF, OMAP34XX_VA_WRITEPERM0); /* all i-write */
  			__raw_writel(0x0, OMAP34XX_VA_ADDR_MATCH2);
  			__raw_writel(0xFFFFFFFF, OMAP34XX_VA_SMS_RG_ATT0);
670c104ae   Tony Lindgren   [ARM] 3430/1: ARM...
86
87
88
89
90
  		}
  		return 0;
  	} else
  		return 1; /* assume locked with no PPA or security driver */
  }
5961d0446   Jean-Christophe PLAGNIOL-VILLARD   Consolidate SRAM ...
91
  struct gen_pool *omap_gen_pool;
3feb24e03   Hebbar, Gururaja   arm:omap:am335x: ...
92
  EXPORT_SYMBOL_GPL(omap_gen_pool);
5961d0446   Jean-Christophe PLAGNIOL-VILLARD   Consolidate SRAM ...
93

92105bb70   Tony Lindgren   [ARM] 2887/1: OMA...
94
  /*
1a8bfa1eb   Tony Lindgren   [ARM] 3142/1: OMA...
95
   * The amount of SRAM depends on the core type.
92105bb70   Tony Lindgren   [ARM] 2887/1: OMA...
96
97
98
99
   * Note that we cannot try to test for SRAM here because writes
   * to secure SRAM will hang the system. Also the SRAM is not
   * yet mapped at this point.
   */
b0a330dc5   Manjunath Kondaiah G   OMAP: plat-omap: ...
100
  static void __init omap_detect_sram(void)
92105bb70   Tony Lindgren   [ARM] 2887/1: OMA...
101
  {
c2d43e39c   Tony Lindgren   ARM: OMAP: SRAM: ...
102
  	if (cpu_class_is_omap2()) {
670c104ae   Tony Lindgren   [ARM] 3430/1: ARM...
103
  		if (is_sram_locked()) {
c2d43e39c   Tony Lindgren   ARM: OMAP: SRAM: ...
104
  			if (cpu_is_omap34xx()) {
c2d43e39c   Tony Lindgren   ARM: OMAP: SRAM: ...
105
  				omap_sram_start = OMAP3_SRAM_PUB_PA;
5b0acc59d   Tero Kristo   OMAP3: SRAM size ...
106
107
108
109
110
111
  				if ((omap_type() == OMAP2_DEVICE_TYPE_EMU) ||
  				    (omap_type() == OMAP2_DEVICE_TYPE_SEC)) {
  					omap_sram_size = 0x7000; /* 28K */
  				} else {
  					omap_sram_size = 0x8000; /* 32K */
  				}
a7c3ae2cb   Santosh Shilimkar   OMAP4: Fix SRAM b...
112
  			} else if (cpu_is_omap44xx()) {
a7c3ae2cb   Santosh Shilimkar   OMAP4: Fix SRAM b...
113
114
  				omap_sram_start = OMAP4_SRAM_PUB_PA;
  				omap_sram_size = 0xa000; /* 40K */
c2d43e39c   Tony Lindgren   ARM: OMAP: SRAM: ...
115
  			} else {
c2d43e39c   Tony Lindgren   ARM: OMAP: SRAM: ...
116
117
118
  				omap_sram_start = OMAP2_SRAM_PUB_PA;
  				omap_sram_size = 0x800; /* 2K */
  			}
670c104ae   Tony Lindgren   [ARM] 3430/1: ARM...
119
  		} else {
c2d43e39c   Tony Lindgren   ARM: OMAP: SRAM: ...
120
  			if (cpu_is_omap34xx()) {
c2d43e39c   Tony Lindgren   ARM: OMAP: SRAM: ...
121
  				omap_sram_start = OMAP3_SRAM_PA;
670c104ae   Tony Lindgren   [ARM] 3430/1: ARM...
122
  				omap_sram_size = 0x10000; /* 64K */
44169075e   Santosh Shilimkar   ARM: OMAP4: Add m...
123
  			} else if (cpu_is_omap44xx()) {
44169075e   Santosh Shilimkar   ARM: OMAP4: Add m...
124
  				omap_sram_start = OMAP4_SRAM_PA;
a7c3ae2cb   Santosh Shilimkar   OMAP4: Fix SRAM b...
125
  				omap_sram_size = 0xe000; /* 56K */
c2d43e39c   Tony Lindgren   ARM: OMAP: SRAM: ...
126
  			} else {
c2d43e39c   Tony Lindgren   ARM: OMAP: SRAM: ...
127
128
129
130
131
132
  				omap_sram_start = OMAP2_SRAM_PA;
  				if (cpu_is_omap242x())
  					omap_sram_size = 0xa0000; /* 640K */
  				else if (cpu_is_omap243x())
  					omap_sram_size = 0x10000; /* 64K */
  			}
670c104ae   Tony Lindgren   [ARM] 3430/1: ARM...
133
134
  		}
  	} else {
c40fae952   Tony Lindgren   ARM: OMAP: Sync c...
135
  		omap_sram_start = OMAP1_SRAM_PA;
670c104ae   Tony Lindgren   [ARM] 3430/1: ARM...
136

557096fe2   Zebediah C. McClure   [OMAP850] Changes...
137
  		if (cpu_is_omap7xx())
670c104ae   Tony Lindgren   [ARM] 3430/1: ARM...
138
139
140
141
142
143
144
  			omap_sram_size = 0x32000;	/* 200K */
  		else if (cpu_is_omap15xx())
  			omap_sram_size = 0x30000;	/* 192K */
  		else if (cpu_is_omap1610() || cpu_is_omap1621() ||
  		     cpu_is_omap1710())
  			omap_sram_size = 0x4000;	/* 16K */
  		else if (cpu_is_omap1611())
28dd31983   Kevin Hilman   OMAP1: SRAM: fix ...
145
  			omap_sram_size = SZ_256K;
670c104ae   Tony Lindgren   [ARM] 3430/1: ARM...
146
  		else {
26a510ba1   Santosh Shilimkar   OMAP: SRAM: Fix w...
147
148
  			pr_err("Could not detect SRAM size
  ");
670c104ae   Tony Lindgren   [ARM] 3430/1: ARM...
149
150
  			omap_sram_size = 0x4000;
  		}
92105bb70   Tony Lindgren   [ARM] 2887/1: OMA...
151
  	}
5961d0446   Jean-Christophe PLAGNIOL-VILLARD   Consolidate SRAM ...
152
153
154
155
156
157
158
159
160
161
162
163
  	{
  		/* The first SRAM_BOOTLOADER_SZ of SRAM are reserved */
  		void *base = (void *)omap_sram_base + SRAM_BOOTLOADER_SZ;
  		phys_addr_t phys = omap_sram_start + SRAM_BOOTLOADER_SZ;
  		size_t len = omap_sram_size - SRAM_BOOTLOADER_SZ;
  
  		omap_gen_pool = gen_pool_create(ilog2(FNCPY_ALIGN), -1);
  		if (omap_gen_pool)
  			WARN_ON(gen_pool_add_virt(omap_gen_pool,
  					(unsigned long)base, phys, len, -1));
  		WARN_ON(!omap_gen_pool);
  	}
92105bb70   Tony Lindgren   [ARM] 2887/1: OMA...
164
  }
92105bb70   Tony Lindgren   [ARM] 2887/1: OMA...
165
  /*
ce2deca27   Tony Lindgren   ARM: OMAP: Fix SR...
166
   * Note that we cannot use ioremap for SRAM, as clock init needs SRAM early.
92105bb70   Tony Lindgren   [ARM] 2887/1: OMA...
167
   */
b0a330dc5   Manjunath Kondaiah G   OMAP: plat-omap: ...
168
  static void __init omap_map_sram(void)
92105bb70   Tony Lindgren   [ARM] 2887/1: OMA...
169
  {
56849c743   Tony Lindgren   ARM: OMAP: Map SR...
170
  	int cached = 1;
670c104ae   Tony Lindgren   [ARM] 3430/1: ARM...
171

92105bb70   Tony Lindgren   [ARM] 2887/1: OMA...
172
173
  	if (omap_sram_size == 0)
  		return;
c2d43e39c   Tony Lindgren   ARM: OMAP: SRAM: ...
174
  	if (cpu_is_omap34xx()) {
d9295746c   Paul Walmsley   OMAP3 SRAM: mark ...
175
176
177
178
179
180
181
  		/*
  		 * SRAM must be marked as non-cached on OMAP3 since the
  		 * CORE DPLL M2 divider change code (in SRAM) runs with the
  		 * SDRAM controller disabled, and if it is marked cached,
  		 * the ARM may attempt to write cache lines back to SDRAM
  		 * which will cause the system to hang.
  		 */
56849c743   Tony Lindgren   ARM: OMAP: Map SR...
182
  		cached = 0;
c2d43e39c   Tony Lindgren   ARM: OMAP: SRAM: ...
183
  	}
56849c743   Tony Lindgren   ARM: OMAP: Map SR...
184
185
186
187
188
189
190
191
  	omap_sram_start = ROUND_DOWN(omap_sram_start, PAGE_SIZE);
  	omap_sram_base = __arm_ioremap_exec(omap_sram_start, omap_sram_size,
  						cached);
  	if (!omap_sram_base) {
  		pr_err("SRAM: Could not map
  ");
  		return;
  	}
1a8bfa1eb   Tony Lindgren   [ARM] 3142/1: OMA...
192

53d9cc739   Tony Lindgren   [ARM] 3279/1: OMA...
193
  	/*
92105bb70   Tony Lindgren   [ARM] 2887/1: OMA...
194
195
196
197
198
199
  	 * Looks like we need to preserve some bootloader code at the
  	 * beginning of SRAM for jumping to flash for reboot to work...
  	 */
  	memset((void *)omap_sram_base + SRAM_BOOTLOADER_SZ, 0,
  	       omap_sram_size - SRAM_BOOTLOADER_SZ);
  }
1a8bfa1eb   Tony Lindgren   [ARM] 3142/1: OMA...
200
201
202
203
204
205
  #ifdef CONFIG_ARCH_OMAP1
  
  static void (*_omap_sram_reprogram_clock)(u32 dpllctl, u32 ckctl);
  
  void omap_sram_reprogram_clock(u32 dpllctl, u32 ckctl)
  {
da7a0649b   Santosh Shilimkar   ARM: OMAP: Remove...
206
  	BUG_ON(!_omap_sram_reprogram_clock);
020f97063   Russell King   [ARM] omap: fix a...
207
  	_omap_sram_reprogram_clock(dpllctl, ckctl);
1a8bfa1eb   Tony Lindgren   [ARM] 3142/1: OMA...
208
  }
e6f168212   Aaro Koskinen   arm: omap1: make ...
209
  static int __init omap1_sram_init(void)
92105bb70   Tony Lindgren   [ARM] 2887/1: OMA...
210
  {
c2d43e39c   Tony Lindgren   ARM: OMAP: SRAM: ...
211
212
213
  	_omap_sram_reprogram_clock =
  			omap_sram_push(omap1_sram_reprogram_clock,
  					omap1_sram_reprogram_clock_sz);
1a8bfa1eb   Tony Lindgren   [ARM] 3142/1: OMA...
214
215
216
217
218
219
220
  
  	return 0;
  }
  
  #else
  #define omap1_sram_init()	do {} while (0)
  #endif
cc26b3b01   Syed Mohammed, Khasim   ARM: OMAP3: Add m...
221
  #if defined(CONFIG_ARCH_OMAP2)
1a8bfa1eb   Tony Lindgren   [ARM] 3142/1: OMA...
222
223
224
225
226
227
228
  
  static void (*_omap2_sram_ddr_init)(u32 *slow_dll_ctrl, u32 fast_dll_ctrl,
  			      u32 base_cs, u32 force_unlock);
  
  void omap2_sram_ddr_init(u32 *slow_dll_ctrl, u32 fast_dll_ctrl,
  		   u32 base_cs, u32 force_unlock)
  {
da7a0649b   Santosh Shilimkar   ARM: OMAP: Remove...
229
  	BUG_ON(!_omap2_sram_ddr_init);
020f97063   Russell King   [ARM] omap: fix a...
230
231
  	_omap2_sram_ddr_init(slow_dll_ctrl, fast_dll_ctrl,
  			     base_cs, force_unlock);
1a8bfa1eb   Tony Lindgren   [ARM] 3142/1: OMA...
232
233
234
235
236
237
238
  }
  
  static void (*_omap2_sram_reprogram_sdrc)(u32 perf_level, u32 dll_val,
  					  u32 mem_type);
  
  void omap2_sram_reprogram_sdrc(u32 perf_level, u32 dll_val, u32 mem_type)
  {
da7a0649b   Santosh Shilimkar   ARM: OMAP: Remove...
239
  	BUG_ON(!_omap2_sram_reprogram_sdrc);
020f97063   Russell King   [ARM] omap: fix a...
240
  	_omap2_sram_reprogram_sdrc(perf_level, dll_val, mem_type);
1a8bfa1eb   Tony Lindgren   [ARM] 3142/1: OMA...
241
242
243
244
245
246
  }
  
  static u32 (*_omap2_set_prcm)(u32 dpll_ctrl_val, u32 sdrc_rfr_val, int bypass);
  
  u32 omap2_set_prcm(u32 dpll_ctrl_val, u32 sdrc_rfr_val, int bypass)
  {
da7a0649b   Santosh Shilimkar   ARM: OMAP: Remove...
247
  	BUG_ON(!_omap2_set_prcm);
1a8bfa1eb   Tony Lindgren   [ARM] 3142/1: OMA...
248
249
  	return _omap2_set_prcm(dpll_ctrl_val, sdrc_rfr_val, bypass);
  }
c2d43e39c   Tony Lindgren   ARM: OMAP: SRAM: ...
250
  #endif
59b479e09   Tony Lindgren   omap: Start using...
251
  #ifdef CONFIG_SOC_OMAP2420
b0a330dc5   Manjunath Kondaiah G   OMAP: plat-omap: ...
252
  static int __init omap242x_sram_init(void)
c2d43e39c   Tony Lindgren   ARM: OMAP: SRAM: ...
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
  {
  	_omap2_sram_ddr_init = omap_sram_push(omap242x_sram_ddr_init,
  					omap242x_sram_ddr_init_sz);
  
  	_omap2_sram_reprogram_sdrc = omap_sram_push(omap242x_sram_reprogram_sdrc,
  					    omap242x_sram_reprogram_sdrc_sz);
  
  	_omap2_set_prcm = omap_sram_push(omap242x_sram_set_prcm,
  					 omap242x_sram_set_prcm_sz);
  
  	return 0;
  }
  #else
  static inline int omap242x_sram_init(void)
  {
  	return 0;
  }
  #endif
59b479e09   Tony Lindgren   omap: Start using...
271
  #ifdef CONFIG_SOC_OMAP2430
b0a330dc5   Manjunath Kondaiah G   OMAP: plat-omap: ...
272
  static int __init omap243x_sram_init(void)
c2d43e39c   Tony Lindgren   ARM: OMAP: SRAM: ...
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
  {
  	_omap2_sram_ddr_init = omap_sram_push(omap243x_sram_ddr_init,
  					omap243x_sram_ddr_init_sz);
  
  	_omap2_sram_reprogram_sdrc = omap_sram_push(omap243x_sram_reprogram_sdrc,
  					    omap243x_sram_reprogram_sdrc_sz);
  
  	_omap2_set_prcm = omap_sram_push(omap243x_sram_set_prcm,
  					 omap243x_sram_set_prcm_sz);
  
  	return 0;
  }
  #else
  static inline int omap243x_sram_init(void)
  {
  	return 0;
  }
  #endif
  
  #ifdef CONFIG_ARCH_OMAP3
58cda884e   Jean Pihet   OMAP3 SDRC: add s...
293
294
295
296
297
298
299
300
301
302
303
304
  static u32 (*_omap3_sram_configure_core_dpll)(
  			u32 m2, u32 unlock_dll, u32 f, u32 inc,
  			u32 sdrc_rfr_ctrl_0, u32 sdrc_actim_ctrl_a_0,
  			u32 sdrc_actim_ctrl_b_0, u32 sdrc_mr_0,
  			u32 sdrc_rfr_ctrl_1, u32 sdrc_actim_ctrl_a_1,
  			u32 sdrc_actim_ctrl_b_1, u32 sdrc_mr_1);
  
  u32 omap3_configure_core_dpll(u32 m2, u32 unlock_dll, u32 f, u32 inc,
  			u32 sdrc_rfr_ctrl_0, u32 sdrc_actim_ctrl_a_0,
  			u32 sdrc_actim_ctrl_b_0, u32 sdrc_mr_0,
  			u32 sdrc_rfr_ctrl_1, u32 sdrc_actim_ctrl_a_1,
  			u32 sdrc_actim_ctrl_b_1, u32 sdrc_mr_1)
c2d43e39c   Tony Lindgren   ARM: OMAP: SRAM: ...
305
  {
da7a0649b   Santosh Shilimkar   ARM: OMAP: Remove...
306
  	BUG_ON(!_omap3_sram_configure_core_dpll);
58cda884e   Jean Pihet   OMAP3 SDRC: add s...
307
308
309
310
311
312
  	return _omap3_sram_configure_core_dpll(
  			m2, unlock_dll, f, inc,
  			sdrc_rfr_ctrl_0, sdrc_actim_ctrl_a_0,
  			sdrc_actim_ctrl_b_0, sdrc_mr_0,
  			sdrc_rfr_ctrl_1, sdrc_actim_ctrl_a_1,
  			sdrc_actim_ctrl_b_1, sdrc_mr_1);
c2d43e39c   Tony Lindgren   ARM: OMAP: SRAM: ...
313
  }
1a8bfa1eb   Tony Lindgren   [ARM] 3142/1: OMA...
314

3231fc889   Rajendra Nayak   OMAP3: PM: restor...
315
316
  #ifdef CONFIG_PM
  void omap3_sram_restore_context(void)
1a8bfa1eb   Tony Lindgren   [ARM] 3142/1: OMA...
317
  {
cc26b3b01   Syed Mohammed, Khasim   ARM: OMAP3: Add m...
318
319
320
  	_omap3_sram_configure_core_dpll =
  		omap_sram_push(omap3_sram_configure_core_dpll,
  			       omap3_sram_configure_core_dpll_sz);
3231fc889   Rajendra Nayak   OMAP3: PM: restor...
321
  	omap_push_sram_idle();
c2d43e39c   Tony Lindgren   ARM: OMAP: SRAM: ...
322
  }
3231fc889   Rajendra Nayak   OMAP3: PM: restor...
323
  #endif /* CONFIG_PM */
c2d43e39c   Tony Lindgren   ARM: OMAP: SRAM: ...
324

46e130d29   Jean Pihet   ARM: pm: omap3: r...
325
  #endif /* CONFIG_ARCH_OMAP3 */
c2d43e39c   Tony Lindgren   ARM: OMAP: SRAM: ...
326
327
  static inline int omap34xx_sram_init(void)
  {
46e130d29   Jean Pihet   ARM: pm: omap3: r...
328
329
330
  #if defined(CONFIG_ARCH_OMAP3) && defined(CONFIG_PM)
  	omap3_sram_restore_context();
  #endif
c2d43e39c   Tony Lindgren   ARM: OMAP: SRAM: ...
331
332
  	return 0;
  }
1a8bfa1eb   Tony Lindgren   [ARM] 3142/1: OMA...
333
334
335
  
  int __init omap_sram_init(void)
  {
e9c44c23b   Afzal Mohammed   arm:omap:am33xx: ...
336
337
  	if (cpu_is_am33xx())
  		return 0;
1a8bfa1eb   Tony Lindgren   [ARM] 3142/1: OMA...
338
339
  	omap_detect_sram();
  	omap_map_sram();
c2d43e39c   Tony Lindgren   ARM: OMAP: SRAM: ...
340
  	if (!(cpu_class_is_omap2()))
1a8bfa1eb   Tony Lindgren   [ARM] 3142/1: OMA...
341
  		omap1_sram_init();
c2d43e39c   Tony Lindgren   ARM: OMAP: SRAM: ...
342
343
344
345
346
347
  	else if (cpu_is_omap242x())
  		omap242x_sram_init();
  	else if (cpu_is_omap2430())
  		omap243x_sram_init();
  	else if (cpu_is_omap34xx())
  		omap34xx_sram_init();
1a8bfa1eb   Tony Lindgren   [ARM] 3142/1: OMA...
348
349
  
  	return 0;
92105bb70   Tony Lindgren   [ARM] 2887/1: OMA...
350
  }