			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

