1 ===================== 2 The OMAP PM interface 3 ===================== 4 5 This document describes the temporary OMAP PM 6 authors use these functions to communicate min 7 throughput constraints to the kernel power man 8 Over time, the intention is to merge features 9 interface into the Linux PM QoS code. 10 11 Drivers need to express PM parameters which: 12 13 - support the range of power management parame 14 15 - separate the drivers from the underlying PM 16 implementation, whether it is the TI SRF or 17 latency framework or something else; 18 19 - specify PM parameters in terms of fundamenta 20 latency and throughput, rather than units wh 21 or to particular OMAP variants; 22 23 - allow drivers which are shared with other ar 24 DaVinci) to add these constraints in a way w 25 systems, 26 27 - can be implemented immediately with minimal 28 architectures. 29 30 31 This document proposes the OMAP PM interface, 32 five power management functions for driver cod 33 34 1. Set the maximum MPU wakeup latency:: 35 36 (*pdata->set_max_mpu_wakeup_lat)(struct dev 37 38 2. Set the maximum device wakeup latency:: 39 40 (*pdata->set_max_dev_wakeup_lat)(struct dev 41 42 3. Set the maximum system DMA transfer start l 43 44 (*pdata->set_max_sdma_lat)(struct device *d 45 46 4. Set the minimum bus throughput needed by a 47 48 (*pdata->set_min_bus_tput)(struct device *d 49 50 5. Return the number of times the device has l 51 52 (*pdata->get_dev_context_loss_count)(struct 53 54 55 Further documentation for all OMAP PM interfac 56 found in arch/arm/plat-omap/include/mach/omap- 57 58 59 The OMAP PM layer is intended to be temporary 60 --------------------------------------------- 61 62 The intention is that eventually the Linux PM 63 the range of power management features present 64 happens, existing drivers using the OMAP PM in 65 to use the Linux PM QoS code; and the OMAP PM 66 67 68 Driver usage of the OMAP PM functions 69 ------------------------------------- 70 71 As the 'pdata' in the above examples indicates 72 exposed to drivers through function pointers i 73 structures. The function pointers are initial 74 files to point to the corresponding OMAP PM fu 75 76 - set_max_dev_wakeup_lat will point to 77 omap_pm_set_max_dev_wakeup_lat(), etc. Othe 78 not support these functions should leave the 79 to NULL. Drivers should use the following i 80 81 if (pdata->set_max_dev_wakeup_lat) 82 (*pdata->set_max_dev_wakeup_lat)(d 83 84 The most common usage of these functions will 85 the maximum time from when an interrupt occurs 86 becomes accessible. To accomplish this, drive 87 set_max_mpu_wakeup_lat() function to constrain 88 latency, and the set_max_dev_wakeup_lat() func 89 device wakeup latency (from clk_enable() to ac 90 example:: 91 92 /* Limit MPU wakeup latency */ 93 if (pdata->set_max_mpu_wakeup_lat) 94 (*pdata->set_max_mpu_wakeup_lat)(d 95 96 /* Limit device powerdomain wakeup lat 97 if (pdata->set_max_dev_wakeup_lat) 98 (*pdata->set_max_dev_wakeup_lat)(d 99 100 /* total wakeup latency in this exampl 101 102 The PM parameters can be overwritten by callin 103 with the new value. The settings can be remov 104 function with a t argument of -1 (except in th 105 set_max_bus_tput(), which should be called wit 106 107 The fifth function above, omap_pm_get_dev_cont 108 is intended as an optimization to allow driver 109 device has lost its internal context. If cont 110 driver must restore its internal context befor 111 112 113 Other specialized interface functions 114 ------------------------------------- 115 116 The five functions listed above are intended t 117 device driver. DSPBridge and CPUFreq have a f 118 DSPBridge expresses target DSP performance lev 119 CPUFreq expresses target MPU performance level 120 frequency. The OMAP PM interface contains fun 121 specialized cases to convert that input inform 122 frequency) into the form that the underlying p 123 implementation needs: 124 125 6. `(*pdata->dsp_get_opp_table)(void)` 126 127 7. `(*pdata->dsp_set_min_opp)(u8 opp_id)` 128 129 8. `(*pdata->dsp_get_opp)(void)` 130 131 9. `(*pdata->cpu_get_freq_table)(void)` 132 133 10. `(*pdata->cpu_set_freq)(unsigned long f)` 134 135 11. `(*pdata->cpu_get_freq)(void)` 136 137 Customizing OPP for platform 138 ============================ 139 Defining CONFIG_PM should enable OPP layer for 140 and the registration of OPP table should take 141 However, in special cases, the default OPP tab 142 tweaked, for e.g.: 143 144 * enable default OPPs which are disabled by d 145 could be enabled on a platform 146 * Disable an unsupported OPP on the platform 147 * Define and add a custom opp table entry 148 in these cases, the board file needs to do 149 150 arch/arm/mach-omapx/board-xyz.c:: 151 152 #include "pm.h" 153 .... 154 static void __init omap_xyz_init_irq(v 155 { 156 .... 157 /* Initialize the default tabl 158 omapx_opp_init(); 159 /* Do customization to the def 160 .... 161 } 162 163 NOTE: 164 omapx_opp_init will be omap3_opp_init or as 165 based on the omap family.
Linux® is a registered trademark of Linus Torvalds in the United States and other countries.
TOMOYO® is a registered trademark of NTT DATA CORPORATION.