cachepc-linux

Fork of AMDESE/linux with modifications for CachePC side-channel attack
git clone https://git.sinitax.com/sinitax/cachepc-linux
Log | Files | Refs | README | LICENSE | sfeed.txt

suspend.rst (4029B)


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