diff options
author | Ben Dooks <ben-linux@fluff.org> | 2008-12-11 19:24:07 -0500 |
---|---|---|
committer | Ben Dooks <ben-linux@fluff.org> | 2009-03-08 08:33:39 -0400 |
commit | 549c7e33aeb9bfe441ecf68639d2227bb90978e7 (patch) | |
tree | f5aa85c1c0a4f581273814cd5a62510d40e7117f /arch | |
parent | 6419711a164ba1304fa8fbb75ae9485455e04dcd (diff) |
[ARM] S3C: Split the resume memory check code from pm.c
Split the optional memory check code out of the pm.c file
as it is quite a big #ifdef block and as-such can be moved
out and simply compiled when the configuration is set.
Signed-off-by: Ben Dooks <ben-linux@fluff.org>
Diffstat (limited to 'arch')
-rw-r--r-- | arch/arm/plat-s3c/Makefile | 1 | ||||
-rw-r--r-- | arch/arm/plat-s3c/include/plat/pm.h | 12 | ||||
-rw-r--r-- | arch/arm/plat-s3c/pm-check.c | 220 | ||||
-rw-r--r-- | arch/arm/plat-s3c24xx/pm.c | 210 |
4 files changed, 240 insertions, 203 deletions
diff --git a/arch/arm/plat-s3c/Makefile b/arch/arm/plat-s3c/Makefile index afd8d089ba16..8d7815d25a51 100644 --- a/arch/arm/plat-s3c/Makefile +++ b/arch/arm/plat-s3c/Makefile | |||
@@ -21,6 +21,7 @@ obj-y += gpio-config.o | |||
21 | # PM support | 21 | # PM support |
22 | 22 | ||
23 | obj-$(CONFIG_PM) += pm.o | 23 | obj-$(CONFIG_PM) += pm.o |
24 | obj-$(CONFIG_S3C2410_PM_CHECK) += pm-check.o | ||
24 | 25 | ||
25 | # devices | 26 | # devices |
26 | 27 | ||
diff --git a/arch/arm/plat-s3c/include/plat/pm.h b/arch/arm/plat-s3c/include/plat/pm.h index a1520997ab82..95c2612d4976 100644 --- a/arch/arm/plat-s3c/include/plat/pm.h +++ b/arch/arm/plat-s3c/include/plat/pm.h | |||
@@ -101,3 +101,15 @@ extern void s3c_pm_dbg(const char *msg, ...); | |||
101 | #else | 101 | #else |
102 | #define S3C_PMDBG(fmt...) printk(KERN_DEBUG fmt) | 102 | #define S3C_PMDBG(fmt...) printk(KERN_DEBUG fmt) |
103 | #endif | 103 | #endif |
104 | |||
105 | /* suspend memory checking */ | ||
106 | |||
107 | #ifdef CONFIG_S3C2410_PM_CHECK | ||
108 | extern void s3c_pm_check_prepare(void); | ||
109 | extern void s3c_pm_check_restore(void); | ||
110 | extern void s3c_pm_check_store(void); | ||
111 | #else | ||
112 | #define s3c_pm_check_prepare() do { } while(0) | ||
113 | #define s3c_pm_check_restore() do { } while(0) | ||
114 | #define s3c_pm_check_store() do { } while(0) | ||
115 | #endif | ||
diff --git a/arch/arm/plat-s3c/pm-check.c b/arch/arm/plat-s3c/pm-check.c new file mode 100644 index 000000000000..95ba7693b5af --- /dev/null +++ b/arch/arm/plat-s3c/pm-check.c | |||
@@ -0,0 +1,220 @@ | |||
1 | /* linux/arch/arm/plat-s3c/pm-check.c | ||
2 | * originally in linux/arch/arm/plat-s3c24xx/pm.c | ||
3 | * | ||
4 | * Copyright (c) 2004,2006,2008 Simtec Electronics | ||
5 | * http://armlinux.simtec.co.uk | ||
6 | * Ben Dooks <ben@simtec.co.uk> | ||
7 | * | ||
8 | * S3C Power Mangament - suspend/resume memory corruptiuon check. | ||
9 | * | ||
10 | * This program is free software; you can redistribute it and/or modify | ||
11 | * it under the terms of the GNU General Public License version 2 as | ||
12 | * published by the Free Software Foundation. | ||
13 | */ | ||
14 | |||
15 | #include <linux/kernel.h> | ||
16 | #include <linux/suspend.h> | ||
17 | #include <linux/init.h> | ||
18 | #include <linux/crc32.h> | ||
19 | #include <linux/ioport.h> | ||
20 | |||
21 | #include <plat/pm.h> | ||
22 | |||
23 | #if CONFIG_S3C2410_PM_CHECK_CHUNKSIZE < 1 | ||
24 | #error CONFIG_S3C2410_PM_CHECK_CHUNKSIZE must be a positive non-zero value | ||
25 | #endif | ||
26 | |||
27 | /* suspend checking code... | ||
28 | * | ||
29 | * this next area does a set of crc checks over all the installed | ||
30 | * memory, so the system can verify if the resume was ok. | ||
31 | * | ||
32 | * CONFIG_S3C2410_PM_CHECK_CHUNKSIZE defines the block-size for the CRC, | ||
33 | * increasing it will mean that the area corrupted will be less easy to spot, | ||
34 | * and reducing the size will cause the CRC save area to grow | ||
35 | */ | ||
36 | |||
37 | #define CHECK_CHUNKSIZE (CONFIG_S3C2410_PM_CHECK_CHUNKSIZE * 1024) | ||
38 | |||
39 | static u32 crc_size; /* size needed for the crc block */ | ||
40 | static u32 *crcs; /* allocated over suspend/resume */ | ||
41 | |||
42 | typedef u32 *(run_fn_t)(struct resource *ptr, u32 *arg); | ||
43 | |||
44 | /* s3c_pm_run_res | ||
45 | * | ||
46 | * go through the given resource list, and look for system ram | ||
47 | */ | ||
48 | |||
49 | static void s3c_pm_run_res(struct resource *ptr, run_fn_t fn, u32 *arg) | ||
50 | { | ||
51 | while (ptr != NULL) { | ||
52 | if (ptr->child != NULL) | ||
53 | s3c_pm_run_res(ptr->child, fn, arg); | ||
54 | |||
55 | if ((ptr->flags & IORESOURCE_MEM) && | ||
56 | strcmp(ptr->name, "System RAM") == 0) { | ||
57 | S3C_PMDBG("Found system RAM at %08lx..%08lx\n", | ||
58 | ptr->start, ptr->end); | ||
59 | arg = (fn)(ptr, arg); | ||
60 | } | ||
61 | |||
62 | ptr = ptr->sibling; | ||
63 | } | ||
64 | } | ||
65 | |||
66 | static void s3c_pm_run_sysram(run_fn_t fn, u32 *arg) | ||
67 | { | ||
68 | s3c_pm_run_res(&iomem_resource, fn, arg); | ||
69 | } | ||
70 | |||
71 | static u32 *s3c_pm_countram(struct resource *res, u32 *val) | ||
72 | { | ||
73 | u32 size = (u32)(res->end - res->start)+1; | ||
74 | |||
75 | size += CHECK_CHUNKSIZE-1; | ||
76 | size /= CHECK_CHUNKSIZE; | ||
77 | |||
78 | S3C_PMDBG("Area %08lx..%08lx, %d blocks\n", res->start, res->end, size); | ||
79 | |||
80 | *val += size * sizeof(u32); | ||
81 | return val; | ||
82 | } | ||
83 | |||
84 | /* s3c_pm_prepare_check | ||
85 | * | ||
86 | * prepare the necessary information for creating the CRCs. This | ||
87 | * must be done before the final save, as it will require memory | ||
88 | * allocating, and thus touching bits of the kernel we do not | ||
89 | * know about. | ||
90 | */ | ||
91 | |||
92 | void s3c_pm_check_prepare(void) | ||
93 | { | ||
94 | crc_size = 0; | ||
95 | |||
96 | s3c_pm_run_sysram(s3c_pm_countram, &crc_size); | ||
97 | |||
98 | S3C_PMDBG("s3c_pm_prepare_check: %u checks needed\n", crc_size); | ||
99 | |||
100 | crcs = kmalloc(crc_size+4, GFP_KERNEL); | ||
101 | if (crcs == NULL) | ||
102 | printk(KERN_ERR "Cannot allocated CRC save area\n"); | ||
103 | } | ||
104 | |||
105 | static u32 *s3c_pm_makecheck(struct resource *res, u32 *val) | ||
106 | { | ||
107 | unsigned long addr, left; | ||
108 | |||
109 | for (addr = res->start; addr < res->end; | ||
110 | addr += CHECK_CHUNKSIZE) { | ||
111 | left = res->end - addr; | ||
112 | |||
113 | if (left > CHECK_CHUNKSIZE) | ||
114 | left = CHECK_CHUNKSIZE; | ||
115 | |||
116 | *val = crc32_le(~0, phys_to_virt(addr), left); | ||
117 | val++; | ||
118 | } | ||
119 | |||
120 | return val; | ||
121 | } | ||
122 | |||
123 | /* s3c_pm_check_store | ||
124 | * | ||
125 | * compute the CRC values for the memory blocks before the final | ||
126 | * sleep. | ||
127 | */ | ||
128 | |||
129 | void s3c_pm_check_store(void) | ||
130 | { | ||
131 | if (crcs != NULL) | ||
132 | s3c_pm_run_sysram(s3c_pm_makecheck, crcs); | ||
133 | } | ||
134 | |||
135 | /* in_region | ||
136 | * | ||
137 | * return TRUE if the area defined by ptr..ptr+size contains the | ||
138 | * what..what+whatsz | ||
139 | */ | ||
140 | |||
141 | static inline int in_region(void *ptr, int size, void *what, size_t whatsz) | ||
142 | { | ||
143 | if ((what+whatsz) < ptr) | ||
144 | return 0; | ||
145 | |||
146 | if (what > (ptr+size)) | ||
147 | return 0; | ||
148 | |||
149 | return 1; | ||
150 | } | ||
151 | |||
152 | /** | ||
153 | * s3c_pm_runcheck*() - helper to check a resource on restore. | ||
154 | * @res: The resource to check | ||
155 | * @vak: Pointer to list of CRC32 values to check. | ||
156 | * | ||
157 | * Called from the s3c_pm_check_restore() via s3c_pm_run_sysram(), this | ||
158 | * function runs the given memory resource checking it against the stored | ||
159 | * CRC to ensure that memory is restored. The function tries to skip as | ||
160 | * many of the areas used during the suspend process. | ||
161 | */ | ||
162 | static u32 *s3c_pm_runcheck(struct resource *res, u32 *val) | ||
163 | { | ||
164 | void *save_at = phys_to_virt(s3c_sleep_save_phys); | ||
165 | unsigned long addr; | ||
166 | unsigned long left; | ||
167 | void *ptr; | ||
168 | u32 calc; | ||
169 | |||
170 | for (addr = res->start; addr < res->end; | ||
171 | addr += CHECK_CHUNKSIZE) { | ||
172 | left = res->end - addr; | ||
173 | |||
174 | if (left > CHECK_CHUNKSIZE) | ||
175 | left = CHECK_CHUNKSIZE; | ||
176 | |||
177 | ptr = phys_to_virt(addr); | ||
178 | |||
179 | if (in_region(ptr, left, crcs, crc_size)) { | ||
180 | S3C_PMDBG("skipping %08lx, has crc block in\n", addr); | ||
181 | goto skip_check; | ||
182 | } | ||
183 | |||
184 | if (in_region(ptr, left, save_at, 32*4 )) { | ||
185 | S3C_PMDBG("skipping %08lx, has save block in\n", addr); | ||
186 | goto skip_check; | ||
187 | } | ||
188 | |||
189 | /* calculate and check the checksum */ | ||
190 | |||
191 | calc = crc32_le(~0, ptr, left); | ||
192 | if (calc != *val) { | ||
193 | printk(KERN_ERR "Restore CRC error at " | ||
194 | "%08lx (%08x vs %08x)\n", addr, calc, *val); | ||
195 | |||
196 | S3C_PMDBG("Restore CRC error at %08lx (%08x vs %08x)\n", | ||
197 | addr, calc, *val); | ||
198 | } | ||
199 | |||
200 | skip_check: | ||
201 | val++; | ||
202 | } | ||
203 | |||
204 | return val; | ||
205 | } | ||
206 | |||
207 | /** | ||
208 | * s3c_pm_check_restore() - memory check called on resume | ||
209 | * | ||
210 | * check the CRCs after the restore event and free the memory used | ||
211 | * to hold them | ||
212 | */ | ||
213 | void s3c_pm_check_restore(void) | ||
214 | { | ||
215 | if (crcs != NULL) { | ||
216 | s3c_pm_run_sysram(s3c_pm_runcheck, crcs); | ||
217 | kfree(crcs); | ||
218 | crcs = NULL; | ||
219 | } | ||
220 | } | ||
diff --git a/arch/arm/plat-s3c24xx/pm.c b/arch/arm/plat-s3c24xx/pm.c index c161f9c9a1d4..e2ae12da16e7 100644 --- a/arch/arm/plat-s3c24xx/pm.c +++ b/arch/arm/plat-s3c24xx/pm.c | |||
@@ -31,8 +31,6 @@ | |||
31 | #include <linux/errno.h> | 31 | #include <linux/errno.h> |
32 | #include <linux/time.h> | 32 | #include <linux/time.h> |
33 | #include <linux/interrupt.h> | 33 | #include <linux/interrupt.h> |
34 | #include <linux/crc32.h> | ||
35 | #include <linux/ioport.h> | ||
36 | #include <linux/serial_core.h> | 34 | #include <linux/serial_core.h> |
37 | #include <linux/io.h> | 35 | #include <linux/io.h> |
38 | 36 | ||
@@ -159,200 +157,6 @@ static void s3c2410_pm_debug_init(void) | |||
159 | static struct sleep_save uart_save[] = {}; | 157 | static struct sleep_save uart_save[] = {}; |
160 | #endif | 158 | #endif |
161 | 159 | ||
162 | #if defined(CONFIG_S3C2410_PM_CHECK) && CONFIG_S3C2410_PM_CHECK_CHUNKSIZE != 0 | ||
163 | |||
164 | /* suspend checking code... | ||
165 | * | ||
166 | * this next area does a set of crc checks over all the installed | ||
167 | * memory, so the system can verify if the resume was ok. | ||
168 | * | ||
169 | * CONFIG_S3C2410_PM_CHECK_CHUNKSIZE defines the block-size for the CRC, | ||
170 | * increasing it will mean that the area corrupted will be less easy to spot, | ||
171 | * and reducing the size will cause the CRC save area to grow | ||
172 | */ | ||
173 | |||
174 | #define CHECK_CHUNKSIZE (CONFIG_S3C2410_PM_CHECK_CHUNKSIZE * 1024) | ||
175 | |||
176 | static u32 crc_size; /* size needed for the crc block */ | ||
177 | static u32 *crcs; /* allocated over suspend/resume */ | ||
178 | |||
179 | typedef u32 *(run_fn_t)(struct resource *ptr, u32 *arg); | ||
180 | |||
181 | /* s3c2410_pm_run_res | ||
182 | * | ||
183 | * go thorugh the given resource list, and look for system ram | ||
184 | */ | ||
185 | |||
186 | static void s3c2410_pm_run_res(struct resource *ptr, run_fn_t fn, u32 *arg) | ||
187 | { | ||
188 | while (ptr != NULL) { | ||
189 | if (ptr->child != NULL) | ||
190 | s3c2410_pm_run_res(ptr->child, fn, arg); | ||
191 | |||
192 | if ((ptr->flags & IORESOURCE_MEM) && | ||
193 | strcmp(ptr->name, "System RAM") == 0) { | ||
194 | S3C_PMDBG("Found system RAM at %08lx..%08lx\n", | ||
195 | ptr->start, ptr->end); | ||
196 | arg = (fn)(ptr, arg); | ||
197 | } | ||
198 | |||
199 | ptr = ptr->sibling; | ||
200 | } | ||
201 | } | ||
202 | |||
203 | static void s3c2410_pm_run_sysram(run_fn_t fn, u32 *arg) | ||
204 | { | ||
205 | s3c2410_pm_run_res(&iomem_resource, fn, arg); | ||
206 | } | ||
207 | |||
208 | static u32 *s3c2410_pm_countram(struct resource *res, u32 *val) | ||
209 | { | ||
210 | u32 size = (u32)(res->end - res->start)+1; | ||
211 | |||
212 | size += CHECK_CHUNKSIZE-1; | ||
213 | size /= CHECK_CHUNKSIZE; | ||
214 | |||
215 | S3C_PMDBG("Area %08lx..%08lx, %d blocks\n", res->start, res->end, size); | ||
216 | |||
217 | *val += size * sizeof(u32); | ||
218 | return val; | ||
219 | } | ||
220 | |||
221 | /* s3c2410_pm_prepare_check | ||
222 | * | ||
223 | * prepare the necessary information for creating the CRCs. This | ||
224 | * must be done before the final save, as it will require memory | ||
225 | * allocating, and thus touching bits of the kernel we do not | ||
226 | * know about. | ||
227 | */ | ||
228 | |||
229 | static void s3c2410_pm_check_prepare(void) | ||
230 | { | ||
231 | crc_size = 0; | ||
232 | |||
233 | s3c2410_pm_run_sysram(s3c2410_pm_countram, &crc_size); | ||
234 | |||
235 | S3C_PMDBG("s3c2410_pm_prepare_check: %u checks needed\n", crc_size); | ||
236 | |||
237 | crcs = kmalloc(crc_size+4, GFP_KERNEL); | ||
238 | if (crcs == NULL) | ||
239 | printk(KERN_ERR "Cannot allocated CRC save area\n"); | ||
240 | } | ||
241 | |||
242 | static u32 *s3c2410_pm_makecheck(struct resource *res, u32 *val) | ||
243 | { | ||
244 | unsigned long addr, left; | ||
245 | |||
246 | for (addr = res->start; addr < res->end; | ||
247 | addr += CHECK_CHUNKSIZE) { | ||
248 | left = res->end - addr; | ||
249 | |||
250 | if (left > CHECK_CHUNKSIZE) | ||
251 | left = CHECK_CHUNKSIZE; | ||
252 | |||
253 | *val = crc32_le(~0, phys_to_virt(addr), left); | ||
254 | val++; | ||
255 | } | ||
256 | |||
257 | return val; | ||
258 | } | ||
259 | |||
260 | /* s3c2410_pm_check_store | ||
261 | * | ||
262 | * compute the CRC values for the memory blocks before the final | ||
263 | * sleep. | ||
264 | */ | ||
265 | |||
266 | static void s3c2410_pm_check_store(void) | ||
267 | { | ||
268 | if (crcs != NULL) | ||
269 | s3c2410_pm_run_sysram(s3c2410_pm_makecheck, crcs); | ||
270 | } | ||
271 | |||
272 | /* in_region | ||
273 | * | ||
274 | * return TRUE if the area defined by ptr..ptr+size contatins the | ||
275 | * what..what+whatsz | ||
276 | */ | ||
277 | |||
278 | static inline int in_region(void *ptr, int size, void *what, size_t whatsz) | ||
279 | { | ||
280 | if ((what+whatsz) < ptr) | ||
281 | return 0; | ||
282 | |||
283 | if (what > (ptr+size)) | ||
284 | return 0; | ||
285 | |||
286 | return 1; | ||
287 | } | ||
288 | |||
289 | static u32 *s3c2410_pm_runcheck(struct resource *res, u32 *val) | ||
290 | { | ||
291 | void *save_at = phys_to_virt(s3c_sleep_save_phys); | ||
292 | unsigned long addr; | ||
293 | unsigned long left; | ||
294 | void *ptr; | ||
295 | u32 calc; | ||
296 | |||
297 | for (addr = res->start; addr < res->end; | ||
298 | addr += CHECK_CHUNKSIZE) { | ||
299 | left = res->end - addr; | ||
300 | |||
301 | if (left > CHECK_CHUNKSIZE) | ||
302 | left = CHECK_CHUNKSIZE; | ||
303 | |||
304 | ptr = phys_to_virt(addr); | ||
305 | |||
306 | if (in_region(ptr, left, crcs, crc_size)) { | ||
307 | S3C_PMDBG("skipping %08lx, has crc block in\n", addr); | ||
308 | goto skip_check; | ||
309 | } | ||
310 | |||
311 | if (in_region(ptr, left, save_at, 32*4 )) { | ||
312 | S3C_PMDBG("skipping %08lx, has save block in\n", addr); | ||
313 | goto skip_check; | ||
314 | } | ||
315 | |||
316 | /* calculate and check the checksum */ | ||
317 | |||
318 | calc = crc32_le(~0, ptr, left); | ||
319 | if (calc != *val) { | ||
320 | printk(KERN_ERR PFX "Restore CRC error at " | ||
321 | "%08lx (%08x vs %08x)\n", addr, calc, *val); | ||
322 | |||
323 | S3C_PMDBG("Restore CRC error at %08lx (%08x vs %08x)\n", | ||
324 | addr, calc, *val); | ||
325 | } | ||
326 | |||
327 | skip_check: | ||
328 | val++; | ||
329 | } | ||
330 | |||
331 | return val; | ||
332 | } | ||
333 | |||
334 | /* s3c2410_pm_check_restore | ||
335 | * | ||
336 | * check the CRCs after the restore event and free the memory used | ||
337 | * to hold them | ||
338 | */ | ||
339 | |||
340 | static void s3c2410_pm_check_restore(void) | ||
341 | { | ||
342 | if (crcs != NULL) { | ||
343 | s3c2410_pm_run_sysram(s3c2410_pm_runcheck, crcs); | ||
344 | kfree(crcs); | ||
345 | crcs = NULL; | ||
346 | } | ||
347 | } | ||
348 | |||
349 | #else | ||
350 | |||
351 | #define s3c2410_pm_check_prepare() do { } while(0) | ||
352 | #define s3c2410_pm_check_restore() do { } while(0) | ||
353 | #define s3c2410_pm_check_store() do { } while(0) | ||
354 | #endif | ||
355 | |||
356 | /* s3c2410_pm_show_resume_irqs | 160 | /* s3c2410_pm_show_resume_irqs |
357 | * | 161 | * |
358 | * print any IRQs asserted at resume time (ie, we woke from) | 162 | * print any IRQs asserted at resume time (ie, we woke from) |
@@ -372,13 +176,13 @@ static void s3c2410_pm_show_resume_irqs(int start, unsigned long which, | |||
372 | } | 176 | } |
373 | } | 177 | } |
374 | 178 | ||
375 | /* s3c2410_pm_check_resume_pin | 179 | /* s3c_pm_check_resume_pin |
376 | * | 180 | * |
377 | * check to see if the pin is configured correctly for sleep mode, and | 181 | * check to see if the pin is configured correctly for sleep mode, and |
378 | * make any necessary adjustments if it is not | 182 | * make any necessary adjustments if it is not |
379 | */ | 183 | */ |
380 | 184 | ||
381 | static void s3c2410_pm_check_resume_pin(unsigned int pin, unsigned int irqoffs) | 185 | static void s3c_pm_check_resume_pin(unsigned int pin, unsigned int irqoffs) |
382 | { | 186 | { |
383 | unsigned long irqstate; | 187 | unsigned long irqstate; |
384 | unsigned long pinstate; | 188 | unsigned long pinstate; |
@@ -417,11 +221,11 @@ static void s3c2410_pm_configure_extint(void) | |||
417 | */ | 221 | */ |
418 | 222 | ||
419 | for (pin = S3C2410_GPF0; pin <= S3C2410_GPF7; pin++) { | 223 | for (pin = S3C2410_GPF0; pin <= S3C2410_GPF7; pin++) { |
420 | s3c2410_pm_check_resume_pin(pin, pin - S3C2410_GPF0); | 224 | s3c_pm_check_resume_pin(pin, pin - S3C2410_GPF0); |
421 | } | 225 | } |
422 | 226 | ||
423 | for (pin = S3C2410_GPG0; pin <= S3C2410_GPG7; pin++) { | 227 | for (pin = S3C2410_GPG0; pin <= S3C2410_GPG7; pin++) { |
424 | s3c2410_pm_check_resume_pin(pin, (pin - S3C2410_GPG0)+8); | 228 | s3c_pm_check_resume_pin(pin, (pin - S3C2410_GPG0)+8); |
425 | } | 229 | } |
426 | } | 230 | } |
427 | 231 | ||
@@ -642,7 +446,7 @@ static int s3c2410_pm_enter(suspend_state_t state) | |||
642 | 446 | ||
643 | /* prepare check area if configured */ | 447 | /* prepare check area if configured */ |
644 | 448 | ||
645 | s3c2410_pm_check_prepare(); | 449 | s3c_pm_check_prepare(); |
646 | 450 | ||
647 | /* store the physical address of the register recovery block */ | 451 | /* store the physical address of the register recovery block */ |
648 | 452 | ||
@@ -681,7 +485,7 @@ static int s3c2410_pm_enter(suspend_state_t state) | |||
681 | 485 | ||
682 | flush_cache_all(); | 486 | flush_cache_all(); |
683 | 487 | ||
684 | s3c2410_pm_check_store(); | 488 | s3c_pm_check_store(); |
685 | 489 | ||
686 | /* send the cpu to sleep... */ | 490 | /* send the cpu to sleep... */ |
687 | 491 | ||
@@ -723,7 +527,7 @@ static int s3c2410_pm_enter(suspend_state_t state) | |||
723 | 527 | ||
724 | S3C_PMDBG("post sleep, preparing to return\n"); | 528 | S3C_PMDBG("post sleep, preparing to return\n"); |
725 | 529 | ||
726 | s3c2410_pm_check_restore(); | 530 | s3c_pm_check_restore(); |
727 | 531 | ||
728 | /* ok, let's return from sleep */ | 532 | /* ok, let's return from sleep */ |
729 | 533 | ||