]> bbs.cooldavid.org Git - net-next-2.6.git/blame - Documentation/arm/Samsung-S3C24XX/Suspend.txt
gianfar: fix signedness issue
[net-next-2.6.git] / Documentation / arm / Samsung-S3C24XX / Suspend.txt
CommitLineData
1da177e4
LT
1 S3C24XX Suspend Support
2 =======================
3
4
5Introduction
6------------
7
540988eb 8 The S3C24XX supports a low-power suspend mode, where the SDRAM is kept
1da177e4
LT
9 in Self-Refresh mode, and all but the essential peripheral blocks are
10 powered down. For more information on how this works, please look
540988eb 11 at the relevant CPU datasheet from Samsung.
1da177e4
LT
12
13
14Requirements
15------------
16
17 1) A bootloader that can support the necessary resume operation
18
19 2) Support for at least 1 source for resume
20
21 3) CONFIG_PM enabled in the kernel
22
23 4) Any peripherals that are going to be powered down at the same
24 time require suspend/resume support.
25
26
27Resuming
28--------
29
30 The S3C2410 user manual defines the process of sending the CPU to
31 sleep and how it resumes. The default behaviour of the Linux code
32 is to set the GSTATUS3 register to the physical address of the
33 code to resume Linux operation.
34
35 GSTATUS4 is currently left alone by the sleep code, and is free to
36 use for any other purposes (for example, the EB2410ITX uses this to
37 save memory configuration in).
38
39
40Machine Support
41---------------
42
4e59c25d 43 The machine specific functions must call the s3c_pm_init() function
1da177e4
LT
44 to say that its bootloader is capable of resuming. This can be as
45 simple as adding the following to the machine's definition:
46
4e59c25d 47 INITMACHINE(s3c_pm_init)
1da177e4 48
4e59c25d 49 A board can do its own setup before calling s3c_pm_init, if it
1da177e4
LT
50 needs to setup anything else for power management support.
51
52 There is currently no support for over-riding the default method of
53 saving the resume address, if your board requires it, then contact
54 the maintainer and discuss what is required.
55
56 Note, the original method of adding an late_initcall() is wrong,
57 and will end up initialising all compiled machines' pm init!
58
540988eb
BD
59 The following is an example of code used for testing wakeup from
60 an falling edge on IRQ_EINT0:
61
62
63static irqreturn_t button_irq(int irq, void *pw)
64{
65 return IRQ_HANDLED;
66}
67
68statuc void __init machine_init(void)
69{
70 ...
71
72 request_irq(IRQ_EINT0, button_irq, IRQF_TRIGGER_FALLING,
73 "button-irq-eint0", NULL);
74
75 enable_irq_wake(IRQ_EINT0);
76
4e59c25d 77 s3c_pm_init();
540988eb
BD
78}
79
1da177e4
LT
80
81Debugging
82---------
83
84 There are several important things to remember when using PM suspend:
85
86 1) The uart drivers will disable the clocks to the UART blocks when
87 suspending, which means that use of printascii() or similar direct
88 access to the UARTs will cause the debug to stop.
89
90 2) Whilst the pm code itself will attempt to re-enable the UART clocks,
91 care should be taken that any external clock sources that the UARTs
92 rely on are still enabled at that point.
93
540988eb
BD
94 3) If any debugging is placed in the resume path, then it must have the
95 relevant clocks and peripherals setup before use (ie, bootloader).
96
97 For example, if you transmit a character from the UART, the baud
98 rate and uart controls must be setup beforehand.
99
1da177e4
LT
100
101Configuration
102-------------
103
104 The S3C2410 specific configuration in `System Type` defines various
105 aspects of how the S3C2410 suspend and resume support is configured
106
107 `S3C2410 PM Suspend debug`
108
109 This option prints messages to the serial console before and after
110 the actual suspend, giving detailed information on what is
111 happening
112
113
114 `S3C2410 PM Suspend Memory CRC`
115
116 Allows the entire memory to be checksummed before and after the
117 suspend to see if there has been any corruption of the contents.
118
540988eb
BD
119 Note, the time to calculate the CRC is dependant on the CPU speed
120 and the size of memory. For an 64Mbyte RAM area on an 200MHz
121 S3C2410, this can take approximately 4 seconds to complete.
122
1da177e4
LT
123 This support requires the CRC32 function to be enabled.
124
125
126 `S3C2410 PM Suspend CRC Chunksize (KiB)`
127
128 Defines the size of memory each CRC chunk covers. A smaller value
129 will mean that the CRC data block will take more memory, but will
130 identify any faults with better precision
131
132
133Document Author
134---------------
135
50f430e3 136Ben Dooks, Copyright 2004 Simtec Electronics
1da177e4 137