			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) While 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

