123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137 |
- S3C24XX Suspend Support
- =======================
- Introduction
- ------------
- The S3C24XX supports a low-power suspend mode, where the SDRAM is kept
- in Self-Refresh mode, and all but the essential peripheral blocks are
- powered down. For more information on how this works, please look
- at the relevant CPU datasheet from Samsung.
- Requirements
- ------------
- 1) A bootloader that can support the necessary resume operation
- 2) Support for at least 1 source for resume
- 3) CONFIG_PM enabled in the kernel
- 4) Any peripherals that are going to be powered down at the same
- time require suspend/resume support.
- Resuming
- --------
- The S3C2410 user manual defines the process of sending the CPU to
- sleep and how it resumes. The default behaviour of the Linux code
- is to set the GSTATUS3 register to the physical address of the
- code to resume Linux operation.
- GSTATUS4 is currently left alone by the sleep code, and is free to
- use for any other purposes (for example, the EB2410ITX uses this to
- save memory configuration in).
- Machine Support
- ---------------
- The machine specific functions must call the s3c_pm_init() function
- to say that its bootloader is capable of resuming. This can be as
- simple as adding the following to the machine's definition:
- INITMACHINE(s3c_pm_init)
- A board can do its own setup before calling s3c_pm_init, if it
- needs to setup anything else for power management support.
- There is currently no support for over-riding the default method of
- saving the resume address, if your board requires it, then contact
- the maintainer and discuss what is required.
- Note, the original method of adding an late_initcall() is wrong,
- and will end up initialising all compiled machines' pm init!
- The following is an example of code used for testing wakeup from
- an falling edge on IRQ_EINT0:
- static irqreturn_t button_irq(int irq, void *pw)
- {
- return IRQ_HANDLED;
- }
- statuc void __init machine_init(void)
- {
- ...
- request_irq(IRQ_EINT0, button_irq, IRQF_TRIGGER_FALLING,
- "button-irq-eint0", NULL);
- enable_irq_wake(IRQ_EINT0);
- s3c_pm_init();
- }
- Debugging
- ---------
- There are several important things to remember when using PM suspend:
- 1) The uart drivers will disable the clocks to the UART blocks when
- suspending, which means that use of printascii() or similar direct
- access to the UARTs will cause the debug to stop.
- 2) Whilst the pm code itself will attempt to re-enable the UART clocks,
- care should be taken that any external clock sources that the UARTs
- rely on are still enabled at that point.
- 3) If any debugging is placed in the resume path, then it must have the
- relevant clocks and peripherals setup before use (ie, bootloader).
- For example, if you transmit a character from the UART, the baud
- rate and uart controls must be setup beforehand.
- Configuration
- -------------
- The S3C2410 specific configuration in `System Type` defines various
- aspects of how the S3C2410 suspend and resume support is configured
- `S3C2410 PM Suspend debug`
- This option prints messages to the serial console before and after
- the actual suspend, giving detailed information on what is
- happening
- `S3C2410 PM Suspend Memory CRC`
- Allows the entire memory to be checksummed before and after the
- suspend to see if there has been any corruption of the contents.
- Note, the time to calculate the CRC is dependent on the CPU speed
- and the size of memory. For an 64Mbyte RAM area on an 200MHz
- S3C2410, this can take approximately 4 seconds to complete.
- This support requires the CRC32 function to be enabled.
- `S3C2410 PM Suspend CRC Chunksize (KiB)`
- Defines the size of memory each CRC chunk covers. A smaller value
- will mean that the CRC data block will take more memory, but will
- identify any faults with better precision
- Document Author
- ---------------
- Ben Dooks, Copyright 2004 Simtec Electronics
|