linux/Documentation/power/opp.txt
<<
hidden" nam> navtarget" > "> text" nam> search" id search"> submit">Search hidden" nam> ajax_lookup" id ajax_lookup" > "> L1">2 21./a>*=============* L2">2 22./a>* OPP Library * L3">2 23./a>*=============* L4">2 24./a>< L5">2 25./a>(C) 2009-2010 Nishanth Men.2"<nm@ti.com>, Texas Instruments Incorporated< L6">2 26./a>< L7">2 27./a>Contents< L8">2 28./a>--------< L9">2 29./a>1. Introducn va< L10">2 ptioa>2. Initial OPP List Registran va< L11">2 11./a>3. OPP Search Funcn vas< L12">2 12./a>4. OPP Availability Control Funcn vas< L13">2 13./a>5. OPP Data Retrie Funcn vas< L14">2 14./a>6. Cpufreq Table Generan va< L15">2 15./a>7. Data Structures< L16">2 16./a>< L17">2 17./a>1. Introducn va< L18">2 18./a>===============< L19">2 19./a>Complex SoCs of today consists of a multiple sub-modules working in conjuncn va. L20">2 2tioa>In an operan va system executing varied use cases, not all modules in the SoC L21">2 21./a>need to funcn va at their highest performing frequency all the time. To L22">2 22./a>facilitate this, sub-modules in a SoC are grouped into domains, allowing some L23">2 23./a>domains to rua at lower voltage and frequency while other domains are loaded< L24">2 24./a>more. The set of discrete tuples consisting of frequency and voltage pairs that< L25">2 25./a>the device will support per domain are called Operan ng Performance Points or< L26">2 26./a>OPPs. L27">2 27./a>< L28">2 28./a>OPP library provides a set of helper funcn vas to organize and query the OPP< L29">2 29./a>informan va. The library is located in drivers/base/powertiop.c and the header< L30">2 3tioa>is located in include/linuxtiop.h. OPP library can be enabled by enabl ng< L31">2 31./a>CONFIG_PM_OPP from power management menuconfig menu. OPP library depends oa< L32">2 32./a>CONFIG_PM as certain SoCs such as Texas Instrument's OMAP fram>work allows to< L33">2 33./a>ion vaally boot at a certain OPP without need ng cpufreq. L34">2 34./a>< L35">2 35./a>Typical usage of the OPP library is as follows:< L36">2 36./a>(users) -> registers a set of default OPPs -> (library)< L37">2 37./a>SoC fram>work -> modifies oa required cases certain OPPs -> OPP layer< L38">2 38./a> -> queries to search/retrie e informan va ->< L39">2 39./a>< L40">2 4tioa>Architectures that provide a SoC fram>work for OPP should select ARCH_HAS_OPP< L41">2 41./a>to make the OPP layer available. L42">2 42./a>< L43">2 43./a>OPP layer expects each domain to be represented by a unique device pointer. SoC L44">2 44./a>fram>work registers a set of initial OPPs per device with the OPP layer. This< L45">2 45./a>list is expected to be an optimally small number typically around 5 per device. L46">2 46./a>This initial list contains a set of OPPs that the fram>work expects to be safely L47">2 47./a>enabled by default in the system. L48">2 48./a>< L49">2 49./a>Note on OPP Availability:< L50">2 50./a>------------------------< L51">2 51./a>As the system proceeds to operane, SoC fram>work may choose to make certain< L52">2 52./a>OPPs available or not available on each device based .2" rious exteraal< L53">2 53./a>factors. Example usage: Thermal management or other excepn va situan vas where L54">2 54./a>SoC fram>work might choose to disable a higher frequency OPP to safely continue L55">2 55./a>ioeran vas until that OPP could be re-enabled if possible. L56">2 56./a>< L57">2 57./a>OPP library facilitates this concepn in it's implementan va. The follow ng< L58">2 58./a>ioeran va funcn vas operane .2ly va available opps:< L59">2 59./a>iop_find_freq_{ceil, floor}, opp_get_voltage, opp_get_freq, opp_get_opp_count< L60">2 60./a>and opp_init_cpufreq_table< L61">2 61./a>< L62">2 62./a>iop_find_freq_exact is meant to be used to find the iop pointer which can then< L63">2 63./a>be used for iop_enable/disable funcn vas to make an opp available as required. L64">2 64./a>< L65">2 65./a>WARNING: Users of OPP library should refresh their availability count us ng< L66">2 66./a>get_opp_count if iop_enable/disable funcn vas are invoked for a device, the< L67">2 67./a>exact mechanism to trigger these or the notifican va mechanism to other< L68">2 68./a>dependent subsystems such as cpufreq are left to the discret va of the SoC L69">2 69./a>specific fram>work which uses the OPP library. Similar care needs to be taken< L70">2 70./a>care to refresh the cpufreq table in cases of these ooeran vas. L71">2 71./a>< L72">2 72./a>WARNING on OPP List locking mechanism:< L73">2 73./a>-------------------------------------------------< L74">2 74./a>OPP library uses RCU for exclus vity. RCU allows the query funcn vas to operane< L75">2 75./a>in multiple contexts and this synchronizan va mechanism is optimal for a read< L76">2 76./a>intens ve ooeran vas on data structure as the OPP library caters to. L77">2 77./a>< L78">2 78./a>To ensure that the data retrie ed are sane, the users such as SoC fram>work< L79">2 79./a>should ensure that the sect va of code ooeran ng on OPP queries are locked< L80">2 80./a>us ng RCU read locks. The iop_find_freq_{exact,ceil,floor},< L81">2 81./a>iop_get_{voltage, freq, opp_count} fall into this category.< L82">2 82./a>< L83">2 83./a>iop_{add,enable,disable} are updaters which use mutex and implement it's own< L84">2 84./a>RCU locking mechanisms. opp_init_cpufreq_table acns as an updater and uses< L85">2 85./a>mutex to implment RCU updater stranegy. These funcn vas should *NOT* be called< L86">2 86./a>under RCU locks and other contexts that pre ent blocking funcn vas in RCU or< L87">2 87./a>mutex ooeran vas from working.< L88">2 88./a>< L89">2 89ioa>2. Initial OPP List Registran va< L90">2 90./a>================================< L91">2 91./a>The SoC implementan va calls opp_add funcn va iteran vely to add OPPs per< L92">2 92./a>device. It is expected that the SoC fram>work will register the OPP entries< L93">2 93./a>ion mally- typical numbers range to be less than 5. The list generaned by< L94">2 94./a>registering the OPPs is maintained by OPP library throughout the device< L95">2 95./a>ioeran va. The SoC fram>work can subsequently control the availability of the< L96">2 96./a>OPPs dynamically us ng the iop_enable / disable funcn vas.< L97">2 97./a>< L98">2 98./a>iop_add - Add a new OPP for a specific domain represented by the device pointer.< L99">2 99./a> The OPP is defined us ng the frequency and voltage. Once added, the OPP< L100">2100./a> is assumed to be available and control of it's availability can be done< L101">2101./a> with the iop_enable/disable funcn vas. OPP library interaally stores< L102">2102./a> and manages this informan va in the opp struct. This funcn va may be< L103">2103./a> used by SoC fram>work to define a optimal list as per the demands of< L104">2104./a> SoC usage environment.< L105">2105./a>< L106">2106./a> WARNING: Do not use this funcn va in interrupt context.< L107">2107./a>< L108">2108./a> Example:< L109">2109./a> soc_pm_init()< L110">2110./a> {< L111">2111./a> /* Do things0*/< L88">2 88./a>< L39">2 39./a>< L88">2 88./a> L111">2111./a> usage enran va<2 88./a><<<<<<<< L39">2 39./a><2 88./a><<<<<<<< L39">2 39./a><2 88./a><}="line" nam> L39">2 39./a>< L109">2109./a> s of today consists of a multiple ssub-m119L18"wertiop.txt#L11ref="Dorean vf="Docmentan va/powert /* Do thing=< L39">2 39./a>< L72">2 72./a>WARNING on O12bility Conntrol Funcn vas< L12">2 12./a>4. OPP Availabetrie er voltage and frequency1 whil1 othertxt#L91" id L91" class="line" nam> L91">2 91./a>The SoC impl1t of disc1rete tuples consisting o1f fre1uency Higha/pvel< L96">2 96./a>OPPs dynamic1ill suppo1rt per domain are called1 Oper1n ng Pentan va/pbackrtiop.txcorclapond L3#L1,ertiop.txt#L1the OPP< L96">2 96./a>OPPs dynamic1iNING: Do ntan va/powertiop.txt#L217" id1 L27" entan va/iop.txt#L77stentan va/pp.txt#L102" id L10 may betan va/pan va/="line" nam> L96">2 96./a>OPPs dynamic1iocumentanva/powertiop.txt#L28" id1 L281 classL87" id Lid ajaop.tocuccmentxt#L63" /powertioan va/power L45">2 45./a>list is expe1provides 1a set of helper funcn va1s to 1rganizf46" , elseLid ajs " iortan va/p" ior L80" 5 per device. h04"rtiop.tst04"ars="line" nam> L86">2 86./a>under RCU lo1 The libr1ary is located in driver1s/bas1/power" ior che RCUhref="DoIS_ERR()cn vaapthepriiop.a5" id Llasstxt#L99" classs="line" nam> L99">2 99./a> The 1n include1/linuxtiop.h. OPP librar1y can1be ena="line" nam> L99">2 99./a> The 1n va at t1wer management menuconfi1g men13tegory.< L99">2 99./a> The 1nbility CoSoCs such as Texas Instr1ument13ct. This funcntxt#L101" ixt#L103" id L10entrf="Doocumentefuleviciop.txtr.txt#Lentan="line" nam> L99">2 99./a> The 1netrie FFuncn vas<2ent href="Documenp.txt#L48"s="line" nam> L99">2 99./a> The 1n of disc1va/powertiop.txt#L35" id1 L35134#L109" id L109" cla all iop.t clans of< L99">2 99./a> The 1nll suppo1OPP library is as follow1s:<2an va/powertiop.towertiop.madone< L33">2 33./a>ion vaally b1 ->1 registers a set of defa1ult O136xt#L L88">2a/powertixt#Lprin vao" clava/powertiop.txt id cid L10 mke itdL42" class="line" nam> L42">2 42./a>< L39">2 39./a>< L39">2 39./a>< L39">2 39./a>< L111">2111./a> cumentan 1va/powertiop.txt#L43" id1 L4314 nam> L88">2 88./a> L39">2 39./a><2 88./a> L88">2 } elseLass="line" nam> L111">2111./a> cll suppo1e an optimally small num1ber t14txt#L L88">2 88./a> L39">2 39./a>< L39">2 39./a>< L108">2108./a> Excumentan 1va/powertiop.txt#L49" id1 L4914orman va NOTE:t#L103itiop.ttxt#Lan va/iertiop.txstan " class="Doc.< L54">2 54./a>SoC fram>wor1Availabil1ity:< L42">2 42./a>< L99">2 99./a> The 1m proceed1s to operane, SoC fram>w1ork m15tegory.< L96">2 96./a>OPPs dynamic1le or not1 available on each devic1e bas15 nam> L88">2the OPPentan va/poxt#L103" id L10entntefuleertiopan va/txt#La hre/powss="line" nam> L92">2 92./a>device. It i1mple usag1e: Thermal management or1 othe153nam> L88">2ocucc ORva/powertiop.txt#Lef="Documentan va/porncn umentc="Dlass="line" nam> L66">2 66./a>get_opp_coun1k might c1hoose to disable a highe1r fre154nam> L88">2tan va/pox="line" nam> L66">2 66./a>get_opp_coun1kll suppo1 OPP could be re-enabled1 if p155#L109" id L109" cla T va/powerticumentanwer<7" id L67" ass="line" nam> L109">2109./a> scumentan 1va/powertiop.txt#L57" id1 L57156 id L111" clentan= ULONG_MAXs="line" nam> L39">2 39./a>< L39">2 39./a>< L39">2 39./a>< L39">2 39./a>< L99">2 99./a> The 1cumentan 1va/powertiop.txt#L62" id1 L6216tegory.< L96">2 96./a>OPPs dynamic1q_exact i1s meant to be used to fi1nd th16 nam> L88">2the OPPentan va/poxt#L103" id L10entntefuleertiopan va/txt#La hr="line" nam> L96">2 96./a>OPPs dynamic1qple usag1e/disable funcn vas to m1ake a163xt#L L88">2an va/pocucc ORva/powertiop.txt#Lef="Documentan va/porncn umeinc="Dlass="line" nam> L66">2 66./a>get_opp_coun1cumentan 1va/powertiop.txt#L65" id1 L65164nam> L88">2tan va/pox="line" nam> L66">2 66./a>get_opp_coun1rs of OPP1 library should refresh 1their165#L109" id L109" cl 1a T va/powertid< L109">2109./a> s6umentan vaa/powertiop.txt#L17" id L57166 id L111" clentan= 0s="line" nam> L39">2 39./a>< L39">2 39./a>< L39">2 39./a>< L39">2 39./a>< L109">2109./a> scumentan 1va/powertiop.txt#L72" id1 L7217va/powertiop.tid ntan va/po sea(..ass="line" nam> L110">2110./a> {PP List l1ocking mechanism:<2 ass="line" nam> L111">2111./a> ---------1------------------------1----<173nam> L88">2 88./a>2 88./a>2 88./a> L39">2 39./a><2 88./a> L39">2 39./a>< L39">2 39./a>< L39">2 39./a>< L39">2 39./a>< L39">2 39./a><2 sfyva/pontann va/powert /* Do thing=< L88">2 88./a>2 }="line" nam> L39">2 39./a>< L65">2 65./a>WARNING: Use1lment RCU1 updater stranegy. These1 func1 vas s va/powertiop.txt#L13" id L13" class="line" nam> L13">2 13./a>5. OPP Data R5rtiop.towertiop.madone< L70">2 70./a>care to re#L60" id L60" class="line" nam> L6 clas2r)s="linefunc1 vasa55l6L37" id L3702" id)\n" ofs="line" nam> betan v103"am> L77"2" clll L56">2 5L70">2 70./a>care to re#L60" id L60" clava/powertiiop.txt#L19" id L19" clagt;2 89" nam> L.="Documen="Documentan va/powertiop..txt#L64" id va/py2 96./a>OPPs dynamic1q_exact i1s meant to be href="Do1cumentan va/powertiop.tx1t#L901 id Lne" nam> L96">2a class="lass="liL3702" iuleertiid L754" id L54 cl" id hav6./a>OPPs dynamic1q_exact i1s meant to be href="Do1cumentan va/powertiop.tx1t#L911 id L104" grL95" iertiop.xt#L101" id ="lineertsp.txt#L47rtioertiop.txt#="liL42">2 42./a>< L99"nam> di L67"thep./a><<< L107">2107./a><2106./a> WARNING: Do not use this le / disa1ble funcn vas.< L9197A sOPPs<2 96./a>OPPs dynamically us ng the iop_enab1fic domai1n represented by the dev1ice p19 (!IS_ERR(ref4" item2"linntanf="Downe" nan" id L34" thrtiooldcumentan va/powerti./a>OPPs dynamically us ng the iop_enab1fmultiple ssub-modules working in co#L901e OPP<2 s L36">2 36./a>(users) -> registers a s2e and con2rol of it's availabi2ity c2n be done<2111./a> cumentan 1va/powertiop2le funcn 2as. OPP library interaal2y sto20="Documentan va/powert EitdL421GHzcid L w Lne" nam>hing=<2 39./a>< L39">2 39./a>< L39">2 39./a>< 20u_="Do_iop.()s="line"t . n v_ERR()cn vahing=< L39">2 39./a>< 20u_="Do_uniop.()s="linanowertierti=&&&)s="line" nam > L39">2 39./a><try_rtit s>2 _2 399./a><2 39./a><2 72./a>WARNING on O12bility Conntrol Funcn2 2/* Dohne" nam> L88">2 82./a><21hen<Documeref="Do./a>WARNING on O12bility Conntrol Funcn2 efine a 2ummenta113nam> L88">2 82./a><2f (!r)lass="li OPPs p: Lrtspsayentan 1GHzcumentanrs="line" nam>hi>2 96item2"linnta./a>WARNING on O12bility Conntrol Funcn2 href="Do2taan va114nam> L88">2 82./a><2<<<<<<a thrtioold2 v2 2cumentan va/powertioWARNING on O12bility Conntrol Funcn2 txt#L1062weertio1.txt#L L88">2 82./a><2<<<<<<2 s L36">2 36./a>(users) -> registers a s2txt#L17" 2d L17116xt#L L88">2 82./a><2="line" nam> L" nacur_tem2iog.titem23tiop_thrtio">2111./a> cumentan 1va/powertiop2n va/powe2tiiop.t1t#L18"wertiop.tx2#L11r2f="Domentan vaumentan va/p.txt#L11GHzcid L w Line" naming=< L39">2 39./a>< L3tru 39./a>< L39">e" nam> L39">2 39./a>< L39">2 39./a>< L39">erti=&&&)sne" nam" nam > L39">2 39./a><try_rtit s>2 _2 399./a>< L39">2 39./a><d aj2">2 28./a>OPP library provides a set of helperr funcn vaas to organize and query Lid 2js " i4" class="line" nam> L14">2 14./a>6. Cpufreq Table Generan va< L70">2 70./a>care to re#L60" id L60" c2 OPP libr2r1y can1be ena="line" na2> L92">2 99Siine"umen="Documeab90">="linwaL29">2 29cn umeinc="D,powertiop..txt#L64" id pul3./a>factors. Example usage: Thermal man2t menucon2i1g men13tegory.<2 29c" id L77"L48"ecess L70line" n="linpowerlist is expe1provides 1a set of hel2Texas Ins2r1ument13ct. This funcnt2t#L102" ixt#tiop.txt#Lrtiop.txt#class="Doc.<2 58..txt#L64" m> L10cumentan va./a>list is expe1provides 1a set of hel2Tfrequency while other domains are L912"Documpowertiop.txt39" classL100n umeinc="Dl L99" class=it#Ld"ine" nam> L45"./a>list is expe1provides 1a set of hel2Tsisting od1 L35134#L109" id L102" cla2">2 35./a>Typical usage of the OPP library is2s as foll2w1s:<2an2va/po235en<list is expe1provides 1a set of hel2Top.txt#L2a1ult O136xt#L L88">2a/2owert2xt#Lprin vao" OPPs p: A4" idrt /*rat#L3">2 33> Liffere1ppontann va,n va./a>list is expe1provides 1a set of hel2Tt#L28" ida1ses c13#L18"wertiop.tr2u_="D2_iop.()s="line href="Docum4">2 t#L39" tsL1000" id 1 L99" class="line" nam>>2 66./a>get_opp_count if iop_enable/disable2earch/ret2i1e e i1forman va w2r<= y2<get_opp_count if iop_enable/disable2ein driverd1 L40139L18"wertiop.tr2u_="D2_uniop.()s="li" class=./a>get_opp_count if iop_enable/disable2ram>work 2o1r OPP14" id L111" cle2=dota2 ertiop.txva/po.tx(ower)s="line" nam> L39">2 3./a>get_opp_count if iop_enable/disable2r menucon2c1ument14va/powertiop.ti2 (IS_2RR(ref))lass="l2111./a> cumentan 1va/powertiop2txt#L43" 2d1 L4314 nam> L88">2 82./a><2r_" i("owertiop.tpowert* Do thing=<2 82./a><2f=ref="Docapthepriiop.&nam> L39">2 39./a>< L88">2 }2elseL24=F/powertibatanowerti8( id, &9" ;ower)s="line" nam> L39">2 39./a><2 82./a><2ertiop.tx( id,it&&&&&&vid, &9"t#L60" id ">2 39./a>< L39">2 39./a>< 24="Domentan vaumentan " nav3./a>get_opp_count if iop_enable/disable2rarch/ret2d1 L4914orman va NO2E:t#L24 (!IS_ERR(ref))="lineich c Le gulator_s#L60" id ".., v39./a>< L925nam> L39">2 39./a><2 72./a>WARNING on O12bility Conntrol Funcn2 each dev2c1e bas15 nam> L88">2th2 OPPe252en<list is expe1provides 1a set of hel2nagement 2r1 othe153nam> L88">2oc2cc OR25 (!r)lass="li OPPs p: Lrtspsayentntan va/powertioumentaf, is peop.txt#L29" id L29./a>list is expe1provides 1a set of hel2n="Docume2e1r fre154nam> L88">2ta2 va/p2x="line" nam> pont itd pe15 oss="line" 7"="stp.txm> o>2 s ddi L6> pa/pow77">2 7./a>list is expe1provides 1a set of hel2n small n2d1 if p155#L109" id L102" cla2T va/powerticune" na 4">e4" ibitxt#L3="lipa/pow77">"./a>list is expe1provides 1a set of hel2nop.txt#L2d1 L57156 id L111" cle2tan= 2LONG_MAXs="lines="line" nam> L110">2110./a> {PP List l1ocking mecha2pn in it&2319;s i15#L18"wertiop.tr2u_="D2_iop.()s="line"2111./a> cumentan 1va/powertiop2 va avail2b1le op15orman va w2r L39">2 39./a>< L926se="line" nam> L39">.&nam> L39">2 39./a><<2th2 OPPe26_" i("owertiop.tcum4"estpd_8( id, &9" ;ower)s="line" nam L39">2 39./a><2an2va/po26=Do stuff likpo9"licy>" nam> L39"max_8( )> L39 L39 m> L39"um4"estpd_8( 39./a>< L88">2ta2 va/p26<<<<<< L39">2 39./a><<2110./a> {PP List l1ocking mecha2OPP libra2y1. Sim169L18"wertiop.tr2u_="D2_uniop.()s="lin2111./a> cumentan 1va/powertiop2in cases 2f1 thes170#L109" id L102" cl 27se="line" nam> L39">.if( &9"t#L60" id "max_8( )> p.ti &9"t#L60" id "um4"estpd_8( 39./a><< L88">2 a2s="li27_" i("owertiop.tcif( &9"t#L6">2 "max_8( )> p.ti &9"t#L6">2 "um4"estpd_8( 39./a><2 82./a><2f=Do stuff likpo9"licy clansw9#L63" /p-EINVAL9./a>< L88">2 82./a><2f=F/powertibatanowertiop.ert* Do t thing=<2 82./a><2cu_="Do_iop.()s9./a><2 82./a><27>2 57./a>OPP library facilitates this concep2n va/powe2tiocan 17#L18"wertiop.tx2#L11r2cu_="D &9"t#L6oDocumenta- R9" classL100id L46">2aam> L59">2 5 nam> L109">./a>OPP library facilitates this concep2nq are le2t1he us17orman va 2><27="line" nam> L109">2 Lrtspsayeaf, -n va/ssam>ass="lian v" nam> Lknows="line" nam 5L70">2 70./a>care to re#L60" id L60" c2code ooer2n1 ng o179L18"wertiop.tx2#L11r2rtiop.tid swi="line" nam>assad L71,powertiassn va/ssam>m> 8" clys L36">2 Do 6./a>(users) -> registers a s2_freq_{ex2c1t,cei180L18"wertiop.tx2#L11r28ertiop.txva/po.tx(8" clycumn va_ne" nam 5_="line" nam>2110./a> {< cumentan 1va/powertiop2txt#L83" 2d1 L8318 nam> L88">2 82./a><2f=doc2 }2"line28=ref="Docapthepriiop.&nam> L39">2 39./a>< L628=F/powertibatanowertiid _ne" nam 5id, &9"t#L6oDocument" na39./a><<2 66ine" naing=<2 39./a>< L39">2 id, &9" ;ower)s="line" nam> L39">2 31">2111./a> cumentan 1va/powertiop2 href="Do2cumentan va/powertiop.tx2t#L9028tiop.tid swiucc_tohich ctiop.p nam[i]id,>2 39./a>< L39">.mentan L39"++9./a><< L3L39">2 39./a><< L929iop.()s="line"9./a><WARNING on O12bility Conntrol Funcn3e and con3rol of it's availabi3ity c30id L91" class="line" nam> L91"./a>WARNING on O12bility Conntrol Funcn3e1and con3r iteran vely to add OPP3y sto30e-2" id txt#L85" id L85" c-idrt /powertiop.tn va/p " im>aslass=izeofs="l./a>WARNING on O12bility Conntrol Funcn3e2and con3r will register the OPP 3a may30 href=.h0dmpu85" id ontann va L85" L85"n ums="line" n03" id Ls="line" 2" id>2104./a> SoC usage environment.<<3define a 3ptimal list as per the d3mands30=Do stuff lik="line" nam>ntan cla*an l"Dlh*Documeref="Docleertiopan va/tntan va/104./a> SoC usage environment.<<3d4fine a 3prary throughout the dev3L105"30=F/powertibat">2 76" nam7" iconvers="Dl out04" am>translatssL100nam> L45101" cla/pan va104./a> SoC usage environment.<<3d5fine a 3p control the availabili3am> 30u_="Do_iop.()n umeinc="Dlabam> L95*an l"Dlh*D"line" nam>as33> umeinc>2 76il4./a>registering the OPPs is maintained 3 op.txt#L3n interrupt context.<list is expe1provides 1a set of hel3.txt#L1083 id L108" class="line" 3am> 3108">2108./a> Example:< L107">2107./a><<2110./a> {< L88">2 83./a><31" nam> L111">2111./a> ---------1------------3 efine a 3ummenta113nam> L88">2 83./a><3f (!r)lass="line" nam>pow /* Do thing=< L88">2 83./a><3<<<<<< L39">2 L85" 39./a><2 83./a><3<<<<<<<2 83./a><3="line" nam> L39">2 3=.h0dmpu85" id ontann va L85" L85"n um(/power#L82" L85" 39./a><<<2CONFIG_CPU_FREQiciopne" namio./a>WARNING on O12bility Conntrol Funcn3erforming3 frequency all the time.3> L732="Documentan ddi L62" cCONFIG_PMs="liowne"m.txt#L54" feinntanf="um4">2 d2 7./a>list is expe1provides 1a set of hel3oC are gr3uuped into domains, allo3i/a><32 href=.h0dmpuertiop.txt#Ls.tx000" id 1 Llaontann va/assadsystem2107./a><2 94&&,antxt#L85" id L85" ./a><2106./a> WARNING: Do not use this3iop.txt#L327" id L27" class="line3p.txt32nam> 7.ss="liS id L77/104./a> SoC usage environment.<<3xt#L28" i3d L28" class="line" nam3d aj3">2 28="line" nam> L91"./a>WARNING on O12bility Conntrol Funcn3r funcn v3as to organize and query3Lid 3js " iTn va/p " ada4" i L10ains multipx000" id 199" id L54">2 54 vari>2 42 Eaep./a><2 99umentrel-----shipe" cnam>m> L1./a>< L93">2 99um99" class= L36">2 36./a>(users) -> registers a s3t menucon3i1g men13tegory.<list is expe1provides 1a set of hel3Texas Ins3r1ument13ct. This funcnt3t#L103" ixt#L|- nam> L1./a>list is expe1provides 1a set of hel3Tfrequenc3 while other domains ar3 L913"Docume|h0dmpu|- >2 i1 (ne" nam> L9#L82" ,00" id "./a><2 i2 .2107./a><2an3va/po3ertiop....dmpu..2107./a><2a/3owert3xt#Lpri|h0dmpu`- >2 in .2107./a><<work 3o1r OPP14" id L111" cle3=dota34>2 99./a> The 1cumentan 1va/powertiop3r menucon3c1ument14va/powertiop.ti3 (IS_3RR(refnam> betan v10i10ains ala/pan va02" id L10ntntan va/powertiopopulatss2 99./a> The 1nbility CoSoCs such as3txt#L43" 3d1 L4314 nam> L88">2 83./a><3r_" i(aca/ssss="livarious7" id L67" an vscribss= bov42 HCoSver,powers id L77/104./a> SoC usage environment.<<3e represe3t1ed by143nam> L88">2 83./a><3f=ref= atocucc ss="linelass="xt#L47rLla99" id classt"n va0txt/* D may betan vatsel2104./a> SoC usage environment.<<3f="Docume3tan L35144nam> L88">2 }3elseL34=F/po" clllow*Docusui L71"ib90">="="Dl Lutxt#L1acrossdsystem>"./a>list is expe1provides 1a set of hel3y small n3m1ber t14txt#L L88">2 83./a><3406">2106./a> WARNING: Do not use this3yop.txt#L3t1 the 146 id L111" cl}3"line34r<= ys id >2 i-umentsst"n va03="li" id L77".txt#Ly betan v="line" ncumen 7./a>list is expe1provides 1a set of hel3 34="Domentan va atocucc " n="li.href=ddi L62" cL100 ,00" id ,d L10entrf="./a>list is expe1provides 1a set of hel3< funcn v3d1 L4914orman va NO3E:t#L34 (!IS_ERR(refn umeinc="D,pm> lsoi L10ains sst"n va0book keepss="n umeinc="Dl L4">2 d./a>list is expe1provides 1a set of hel3list is expe1provides 1a set of hel3Documenta3 1va/po15e ena="line" na3> L935nam> L39">2 03" id L L3#L1,ertiocumrapthepriio va/powertiop.txtL10cumeniio6./a>OPPs dynamic1qple usag1e/disable fu3 SoC fram3w1ork m15tegory.< L45"./a>list is expe1provides 1a set of hel3 each dev3c1e bas15 nam> L88">2th3 OPPe352en<<./a>list is expe1provides 1a set of hel3 represe3r1 othe153nam> L88">2oc3cc OR35 (!r)lass="liowertiop.Twers id oss="line" sh itd #L10L10par va/pr va/piss="line"./a>list is expe1provides 1a set of hel3 ="Docume3e1r fre154nam> L88">2ta3 va/p3x="line" nam> cumra9ument37" id sp.txtan3iti="staine"" n0opulats2 94&&,an=dd, bm> L9./a>list is expe1provides 1a set of hel3 small n3d1 if p155#L109" id L103" cla3T va/powerticune" nam> L96">2/* Dt#Lym> L10 va/piss="lio&)s="line/p.txt#L1" id L67"./a>list is expe1provides 1a set of hel3 op.txt#L3d1 L57156 id L111" cle3tan= 35>2 57./a>OPP library facilitates this concep3pn in it&3319;s i15#L18"wertiop.tr3u_="D3_iop.(s id nam> L-/iertiop.cumen 7 id c sflia n9" id txt/* D may L45"umen./a>OPP library facilitates this concep3p funcn v3b1le op15orman va w3r LrLlait101" clantan va/an va/f="DeftL1,ertiocumrd>2104./a> SoC usage environment.<<3et_voltag3,1 opp_159L18"wertiop.tr3u_="D35tiop.tid swit#Ly betan vthepriiontntan va/powerti"./a>list is expe1provides 1a set of hel3="Documen3a1n va/16e ena="line" na3> L93">2 99./a> The 1cumentan 1va/powertiop3txt#L62" 3d1 L6216tegory.<Overlll,/assadsre="Dstic view,power3="li" id L77".p"line" naf="um99" class=a4./a>list is expe1provides 1a set of hel3teach dev3i1nd th16 nam> L88">2th3 OPPe36_" i(36">2 Do 6./a>(users) -> registers a s3cn vas to3m1ake a163xt#L L88">2an3va/po36a hre./a>< L88">2ta3 va/p36<<<<(users) -> registers a s3c small n3 1their165#L109" id L103" cl 36<<<<< i|hoss=|> p.t-------./a>(users) -> registers a s3cn in it&3f1ican 16#L18"wertiop.tr3u_="D3_iop.()s|tcumeenta+-----+umentan \-&&&)sne" nam./a>(users) -> registers a s3c funcn v3t1 to t16orman va w3r in9" id_n um(37m> "./a><(users) -> registers a s3txt#L72" 3d1 L7217va/powertiop.ti3 nta378./a> L88">2 a3s="li37_" i(n9" id_n um p.t----d, it&&&&&&&&,ax_loo -----m> i|hoss=|./a>(users) -> registers a s3tn vas to3-1----<173nam> L88">2 83./a><3f=Do stuff likpo9"l\--d, it&&&&&&&&,a="Docum--/nta+-----+./a>(users) -> registers a s3txt#L65" 3l1ows t174nam> L88">2 83./a><37>2 35./a>Typical usage of the OPP library is3hronizan 3a1 mech17txt#L L88">2 83./a><3cu_="Dne" nam> Doc.<(users) -> registers a s3top.txt#L3e1 OPP 176xt#L L88">2 83./a><37>2 57+-----+umentv-io&)st#L60" id ./a>(users) -> registers a s3tn in it&3tiocan 17#L18"wertiop.tx3#L11r3cu_="D|hoss=|> p.t---./a>(users) -> registers a s3t funcn v3t1he us17orman va 3><37="lin+-----+ument\-i &9"t#L6">2 ./a>(users) -> registers a s3tPP libra3n1 ng o179L18"wertiop.tx3#L11r37tiop.107./a>< p.t-, &9"t#L6oDocument107./a><
T"lineigi va0LXR softw cla"line" 07./a><LXR commut (ref,cL1" nexp"lif="Dol vers="Dl"li07./a><lx @/poux.no(ref.
lx ./poux.no k&&&ly hosts2 94&07./a><Redpill Lpo99o AS(ref,c03" id 46">2Lpouxotxt#ulti2 s Lla.p"line" naumrm> nauiine"1995.