summaryrefslogtreecommitdiff
path: root/docs/docs.kernel.org_power_s2ram.txt
blob: 1113b00b81d333ccb2a276fa56459d73fc470c09 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
   #[1]Index [2]Search [3]Interaction of Suspend code (S3) with the CPU
   hotplug infrastructure [4]Runtime Power Management Framework for I/O
   Devices

[5]The Linux Kernel

   6.7.0

Quick search

   ____________________ Go

Contents

   [X]
     * [6]A guide to the Kernel Development Process
     * [7]Submitting patches: the essential guide to getting your code
       into the kernel
     * [8]Code of conduct
     * [9]Kernel Maintainer Handbook
     * [10]All development-process docs

     * [11]Core API Documentation
     * [12]Driver implementer's API guide
     * [13]Kernel subsystem documentation
          + [14]Core subsystems
               o [15]Core API Documentation
               o [16]Driver implementer's API guide
               o [17]Memory Management Documentation
               o [18]Power Management
               o [19]Scheduler
               o [20]Timers
               o [21]Locking
          + [22]Human interfaces
          + [23]Networking interfaces
          + [24]Storage interfaces
     * [25]Locking in the kernel

     * [26]Linux kernel licensing rules
     * [27]How to write kernel documentation
     * [28]Development tools for the kernel
     * [29]Kernel Testing Guide
     * [30]Kernel Hacking Guides
     * [31]Linux Tracing Technologies
     * [32]fault-injection
     * [33]Kernel Livepatching
     * [34]Rust

     * [35]The Linux kernel user's and administrator's guide
     * [36]The kernel build system
     * [37]Reporting issues
     * [38]User-space tools
     * [39]The Linux kernel user-space API guide

     * [40]The Linux kernel firmware guide
     * [41]Open Firmware and Devicetree

     * [42]CPU Architectures

     * [43]Unsorted Documentation

     * [44]Translations

This Page

     * [45]Show Source

How to get s2ram working[46]¶

   2006 Linus Torvalds 2006 Pavel Machek
    1. Check suspend.sf.net, program s2ram there has long whitelist of
       "known ok" machines, along with tricks to use on each one.
    2. If that does not help, try reading [47]swsusp/S3 tricks and
       [48]Video issues with S3 resume. Perhaps problem is as simple as
       broken module, and simple module unload can fix it.
    3. You can use Linus' TRACE_RESUME infrastructure, described below.

Using TRACE_RESUME[49]¶

   I've been working at making the machines I have able to STR, and almost
   always it's a driver that is buggy. Thank God for the suspend/resume
   debugging - the thing that Chuck tried to disable. That's often the
   _only_ way to debug these things, and it's actually pretty powerful
   (but time-consuming - having to insert TRACE_RESUME() markers into the
   device driver that doesn't resume and recompile and reboot).

   Anyway, the way to debug this for people who are interested (have a
   machine that doesn't boot) is:

     * enable PM_DEBUG, and PM_TRACE
     * use a script like this:
#!/bin/sh
sync
echo 1 > /sys/power/pm_trace
echo mem > /sys/power/state

       to suspend
     * if it doesn't come back up (which is usually the problem), reboot
       by holding the power button down, and look at the dmesg output for
       things like:
Magic number: 4:156:725
hash matches drivers/base/power/resume.c:28
hash matches device 0000:01:00.0

       which means that the last trace event was just before trying to
       resume device 0000:01:00.0. Then figure out what driver is
       controlling that device (lspci and /sys/devices/pci* is your
       friend), and see if you can fix it, disable it, or trace into its
       resume function.
       If no device matches the hash (or any matches appear to be false
       positives), the culprit may be a device from a loadable kernel
       module that is not loaded until after the hash is checked. You can
       check the hash against the current devices again after more modules
       are loaded using sysfs:
cat /sys/power/pm_trace_dev_match

   For example, the above happens to be the VGA device on my EVO, which I
   used to run with "radeonfb" (it's an ATI Radeon mobility). It turns out
   that "radeonfb" simply cannot resume that device - it tries to set the
   PLL's, and it just _hangs_. Using the regular VGA console and letting X
   resume it instead works fine.

NOTE[50]¶

   pm_trace uses the system's Real Time Clock (RTC) to save the magic
   number. Reason for this is that the RTC is the only reliably available
   piece of hardware during resume operations where a value can be set
   that will survive a reboot.

   pm_trace is not compatible with asynchronous suspend, so it turns
   asynchronous suspend off (which may work around timing or
   ordering-sensitive bugs).

   Consequence is that after a resume (even if it is successful) your
   system clock will have a value corresponding to the magic number
   instead of the correct date/time! It is therefore advisable to use a
   program like ntp-date or rdate to reset the correct date/time from an
   external time source when using this trace option.

   As the clock keeps ticking it is also essential that the reboot is done
   quickly after the resume failure. The trace option does not use the
   seconds or the low order bits of the minutes of the RTC, but a too long
   delay will corrupt the magic value.

   ©The kernel development community. | Powered by [51]Sphinx 5.0.1 &
   [52]Alabaster 0.7.12 | [53]Page source

References

   1. https://docs.kernel.org/genindex.html
   2. https://docs.kernel.org/search.html
   3. https://docs.kernel.org/power/suspend-and-cpuhotplug.html
   4. https://docs.kernel.org/power/runtime_pm.html
   5. https://docs.kernel.org/index.html
   6. https://docs.kernel.org/process/development-process.html
   7. https://docs.kernel.org/process/submitting-patches.html
   8. https://docs.kernel.org/process/code-of-conduct.html
   9. https://docs.kernel.org/maintainer/index.html
  10. https://docs.kernel.org/process/index.html
  11. https://docs.kernel.org/core-api/index.html
  12. https://docs.kernel.org/driver-api/index.html
  13. https://docs.kernel.org/subsystem-apis.html
  14. https://docs.kernel.org/subsystem-apis.html#core-subsystems
  15. https://docs.kernel.org/core-api/index.html
  16. https://docs.kernel.org/driver-api/index.html
  17. https://docs.kernel.org/mm/index.html
  18. https://docs.kernel.org/power/index.html
  19. https://docs.kernel.org/scheduler/index.html
  20. https://docs.kernel.org/timers/index.html
  21. https://docs.kernel.org/locking/index.html
  22. https://docs.kernel.org/subsystem-apis.html#human-interfaces
  23. https://docs.kernel.org/subsystem-apis.html#networking-interfaces
  24. https://docs.kernel.org/subsystem-apis.html#storage-interfaces
  25. https://docs.kernel.org/locking/index.html
  26. https://docs.kernel.org/process/license-rules.html
  27. https://docs.kernel.org/doc-guide/index.html
  28. https://docs.kernel.org/dev-tools/index.html
  29. https://docs.kernel.org/dev-tools/testing-overview.html
  30. https://docs.kernel.org/kernel-hacking/index.html
  31. https://docs.kernel.org/trace/index.html
  32. https://docs.kernel.org/fault-injection/index.html
  33. https://docs.kernel.org/livepatch/index.html
  34. https://docs.kernel.org/rust/index.html
  35. https://docs.kernel.org/admin-guide/index.html
  36. https://docs.kernel.org/kbuild/index.html
  37. https://docs.kernel.org/admin-guide/reporting-issues.html
  38. https://docs.kernel.org/tools/index.html
  39. https://docs.kernel.org/userspace-api/index.html
  40. https://docs.kernel.org/firmware-guide/index.html
  41. https://docs.kernel.org/devicetree/index.html
  42. https://docs.kernel.org/arch/index.html
  43. https://docs.kernel.org/staging/index.html
  44. https://docs.kernel.org/translations/index.html
  45. https://docs.kernel.org/_sources/power/s2ram.rst.txt
  46. https://docs.kernel.org/power/s2ram.html#how-to-get-s2ram-working
  47. https://docs.kernel.org/power/tricks.html
  48. https://docs.kernel.org/power/video.html
  49. https://docs.kernel.org/power/s2ram.html#using-trace-resume
  50. https://docs.kernel.org/power/s2ram.html#note
  51. http://sphinx-doc.org/
  52. https://github.com/bitprophet/alabaster
  53. https://docs.kernel.org/_sources/power/s2ram.rst.txt