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 138