€•óiŒsphinx.addnodes”Œdocument”“”)”}”(Œ rawsource”Œ”Œchildren”]”(Œ translations”Œ LanguagesNode”“”)”}”(hhh]”(hŒ pending_xref”“”)”}”(hhh]”Œdocutils.nodes”ŒText”“”ŒChinese (Simplified)”…””}”Œparent”hsbaŒ attributes”}”(Œids”]”Œclasses”]”Œnames”]”Œdupnames”]”Œbackrefs”]”Œ refdomain”Œstd”Œreftype”Œdoc”Œ reftarget”Œ'/translations/zh_CN/power/powercap/dtpm”Œmodname”NŒ classname”NŒ refexplicit”ˆuŒtagname”hhh ubh)”}”(hhh]”hŒChinese (Traditional)”…””}”hh2sbah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”h)Œreftype”h+Œ reftarget”Œ'/translations/zh_TW/power/powercap/dtpm”Œmodname”NŒ classname”NŒ refexplicit”ˆuh1hhh ubh)”}”(hhh]”hŒItalian”…””}”hhFsbah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”h)Œreftype”h+Œ reftarget”Œ'/translations/it_IT/power/powercap/dtpm”Œmodname”NŒ classname”NŒ refexplicit”ˆuh1hhh ubh)”}”(hhh]”hŒJapanese”…””}”hhZsbah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”h)Œreftype”h+Œ reftarget”Œ'/translations/ja_JP/power/powercap/dtpm”Œmodname”NŒ classname”NŒ refexplicit”ˆuh1hhh ubh)”}”(hhh]”hŒKorean”…””}”hhnsbah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”h)Œreftype”h+Œ reftarget”Œ'/translations/ko_KR/power/powercap/dtpm”Œmodname”NŒ classname”NŒ refexplicit”ˆuh1hhh ubh)”}”(hhh]”hŒPortuguese (Brazilian)”…””}”hh‚sbah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”h)Œreftype”h+Œ reftarget”Œ'/translations/pt_BR/power/powercap/dtpm”Œmodname”NŒ classname”NŒ refexplicit”ˆuh1hhh ubh)”}”(hhh]”hŒSpanish”…””}”hh–sbah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”h)Œreftype”h+Œ reftarget”Œ'/translations/sp_SP/power/powercap/dtpm”Œmodname”NŒ classname”NŒ refexplicit”ˆuh1hhh ubeh}”(h]”h ]”h"]”h$]”h&]”Œcurrent_language”ŒEnglish”uh1h hhŒ _document”hŒsource”NŒline”NubhŒcomment”“”)”}”(hŒ SPDX-License-Identifier: GPL-2.0”h]”hŒ SPDX-License-Identifier: GPL-2.0”…””}”hh·sbah}”(h]”h ]”h"]”h$]”h&]”Œ xml:space”Œpreserve”uh1hµhhh²hh³ŒA/var/lib/git/docbuild/linux/Documentation/power/powercap/dtpm.rst”h´KubhŒsection”“”)”}”(hhh]”(hŒtitle”“”)”}”(hŒ*Dynamic Thermal Power Management framework”h]”hŒ*Dynamic Thermal Power Management framework”…””}”(hhÏh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÍhhÊh²hh³hÇh´KubhŒ paragraph”“”)”}”(hŒóOn the embedded world, the complexity of the SoC leads to an increasing number of hotspots which need to be monitored and mitigated as a whole in order to prevent the temperature to go above the normative and legally stated 'skin temperature'.”h]”hŒ÷On the embedded world, the complexity of the SoC leads to an increasing number of hotspots which need to be monitored and mitigated as a whole in order to prevent the temperature to go above the normative and legally stated ‘skin temperature’.”…””}”(hhßh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³hÇh´KhhÊh²hubhÞ)”}”(hXJAnother aspect is to sustain the performance for a given power budget, for example virtual reality where the user can feel dizziness if the performance is capped while a big CPU is processing something else. Or reduce the battery charging because the dissipated power is too high compared with the power consumed by other devices.”h]”hXJAnother aspect is to sustain the performance for a given power budget, for example virtual reality where the user can feel dizziness if the performance is capped while a big CPU is processing something else. Or reduce the battery charging because the dissipated power is too high compared with the power consumed by other devices.”…””}”(hhíh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³hÇh´K hhÊh²hubhÞ)”}”(hŒ±The user space is the most adequate place to dynamically act on the different devices by limiting their power given an application profile: it has the knowledge of the platform.”h]”hŒ±The user space is the most adequate place to dynamically act on the different devices by limiting their power given an application profile: it has the knowledge of the platform.”…””}”(hhûh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³hÇh´KhhÊh²hubhÞ)”}”(hŒšThe Dynamic Thermal Power Management (DTPM) is a technique acting on the device power by limiting and/or balancing a power budget among different devices.”h]”hŒšThe Dynamic Thermal Power Management (DTPM) is a technique acting on the device power by limiting and/or balancing a power budget among different devices.”…””}”(hj h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³hÇh´KhhÊh²hubhÞ)”}”(hŒLThe DTPM framework provides an unified interface to act on the device power.”h]”hŒLThe DTPM framework provides an unified interface to act on the device power.”…””}”(hjh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³hÇh´KhhÊh²hubhÉ)”}”(hhh]”(hÎ)”}”(hŒOverview”h]”hŒOverview”…””}”(hj(h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÍhj%h²hh³hÇh´KubhÞ)”}”(hŒÁThe DTPM framework relies on the powercap framework to create the powercap entries in the sysfs directory and implement the backend driver to do the connection with the power manageable device.”h]”hŒÁThe DTPM framework relies on the powercap framework to create the powercap entries in the sysfs directory and implement the backend driver to do the connection with the power manageable device.”…””}”(hj6h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³hÇh´K hj%h²hubhÞ)”}”(hŒxThe DTPM is a tree representation describing the power constraints shared between devices, not their physical positions.”h]”hŒxThe DTPM is a tree representation describing the power constraints shared between devices, not their physical positions.”…””}”(hjDh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³hÇh´K$hj%h²hubhÞ)”}”(hŒˆThe nodes of the tree are a virtual description aggregating the power characteristics of the children nodes and their power limitations.”h]”hŒˆThe nodes of the tree are a virtual description aggregating the power characteristics of the children nodes and their power limitations.”…””}”(hjRh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³hÇh´K'hj%h²hubhÞ)”}”(hŒ=The leaves of the tree are the real power manageable devices.”h]”hŒ=The leaves of the tree are the real power manageable devices.”…””}”(hj`h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³hÇh´K*hj%h²hubhÞ)”}”(hŒFor instance::”h]”hŒ For instance:”…””}”(hjnh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³hÇh´K,hj%h²hubhŒ literal_block”“”)”}”(hŒMSoC | `-- pkg | |-- pd0 (cpu0-3) | `-- pd1 (cpu4-5)”h]”hŒMSoC | `-- pkg | |-- pd0 (cpu0-3) | `-- pd1 (cpu4-5)”…””}”hj~sbah}”(h]”h ]”h"]”h$]”h&]”hÅhÆuh1j|h³hÇh´K.hj%h²hubhÞ)”}”(hŒ power_limit = 1681mW | | | |-- pd0 (w=231) --> power_limit = 378mW | | | `-- pd1 (w=794) --> power_limit = 1303mW | `-- pd2 (w=486) --> power_limit = 1519mW”h]”hŒíSoC (w=1024) <--- power_limit = 3200mW | |-- pkg (w=538) --> power_limit = 1681mW | | | |-- pd0 (w=231) --> power_limit = 378mW | | | `-- pd1 (w=794) --> power_limit = 1303mW | `-- pd2 (w=486) --> power_limit = 1519mW”…””}”hjîsbah}”(h]”h ]”h"]”h$]”h&]”hÅhÆuh1j|h³hÇh´K\hj%h²hubhÉ)”}”(hhh]”(hÎ)”}”(hŒFlat description”h]”hŒFlat description”…””}”(hjÿh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÍhjüh²hh³hÇh´KhubhÞ)”}”(hŒÿA root node is created and it is the parent of all the nodes. This description is the simplest one and it is supposed to give to user space a flat representation of all the devices supporting the power limitation without any power limitation distribution.”h]”hŒÿA root node is created and it is the parent of all the nodes. This description is the simplest one and it is supposed to give to user space a flat representation of all the devices supporting the power limitation without any power limitation distribution.”…””}”(hj h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³hÇh´Kjhjüh²hubeh}”(h]”Œflat-description”ah ]”h"]”Œflat description”ah$]”h&]”uh1hÈhj%h²hh³hÇh´KhubhÉ)”}”(hhh]”(hÎ)”}”(hŒHierarchical description”h]”hŒHierarchical description”…””}”(hj&h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÍhj#h²hh³hÇh´KpubhÞ)”}”(hŒ×The different devices supporting the power limitation are represented hierarchically. There is one root node, all intermediate nodes are grouping the child nodes which can be intermediate nodes also or real devices.”h]”hŒ×The different devices supporting the power limitation are represented hierarchically. There is one root node, all intermediate nodes are grouping the child nodes which can be intermediate nodes also or real devices.”…””}”(hj4h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³hÇh´Krhj#h²hubhÞ)”}”(hŒwThe intermediate nodes aggregate the power information and allows to set the power limit given the weight of the nodes.”h]”hŒwThe intermediate nodes aggregate the power information and allows to set the power limit given the weight of the nodes.”…””}”(hjBh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³hÇh´Kwhj#h²hubeh}”(h]”Œhierarchical-description”ah ]”h"]”Œhierarchical description”ah$]”h&]”uh1hÈhj%h²hh³hÇh´Kpubeh}”(h]”Œoverview”ah ]”h"]”h$]”Œoverview”ah&]”uh1hÈhhÊh²hh³hÇh´KŒ referenced”KubhÉ)”}”(hhh]”(hÎ)”}”(hŒUser space API”h]”hŒUser space API”…””}”(hjdh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÍhjah²hh³hÇh´K{ubhÞ)”}”(hŒ¾As stated in the overview, the DTPM framework is built on top of the powercap framework. Thus the sysfs interface is the same, please refer to the powercap documentation for further details.”h]”hŒ¾As stated in the overview, the DTPM framework is built on top of the powercap framework. Thus the sysfs interface is the same, please refer to the powercap documentation for further details.”…””}”(hjrh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³hÇh´K}hjah²hubhŒ block_quote”“”)”}”(hX6* power_uw: Instantaneous power consumption. If the node is an intermediate node, then the power consumption will be the sum of all children power consumption. * max_power_range_uw: The power range resulting of the maximum power minus the minimum power. * name: The name of the node. This is implementation dependent. Even if it is not recommended for the user space, several nodes can have the same name. * constraint_X_name: The name of the constraint. * constraint_X_max_power_uw: The maximum power limit to be applicable to the node. * constraint_X_power_limit_uw: The power limit to be applied to the node. If the value contained in constraint_X_max_power_uw is set, the constraint will be removed. * constraint_X_time_window_us: The meaning of this file will depend on the constraint number. ”h]”hŒ bullet_list”“”)”}”(hhh]”(hŒ list_item”“”)”}”(hŒžpower_uw: Instantaneous power consumption. If the node is an intermediate node, then the power consumption will be the sum of all children power consumption. ”h]”hÞ)”}”(hŒpower_uw: Instantaneous power consumption. If the node is an intermediate node, then the power consumption will be the sum of all children power consumption.”h]”hŒpower_uw: Instantaneous power consumption. If the node is an intermediate node, then the power consumption will be the sum of all children power consumption.”…””}”(hj‘h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³hÇh´Khjubah}”(h]”h ]”h"]”h$]”h&]”uh1j‹hjˆubjŒ)”}”(hŒ\max_power_range_uw: The power range resulting of the maximum power minus the minimum power. ”h]”hÞ)”}”(hŒ[max_power_range_uw: The power range resulting of the maximum power minus the minimum power.”h]”hŒ[max_power_range_uw: The power range resulting of the maximum power minus the minimum power.”…””}”(hj©h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³hÇh´K…hj¥ubah}”(h]”h ]”h"]”h$]”h&]”uh1j‹hjˆubjŒ)”}”(hŒ–name: The name of the node. This is implementation dependent. Even if it is not recommended for the user space, several nodes can have the same name. ”h]”hÞ)”}”(hŒ•name: The name of the node. This is implementation dependent. Even if it is not recommended for the user space, several nodes can have the same name.”h]”hŒ•name: The name of the node. This is implementation dependent. Even if it is not recommended for the user space, several nodes can have the same name.”…””}”(hjÁh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³hÇh´Kˆhj½ubah}”(h]”h ]”h"]”h$]”h&]”uh1j‹hjˆubjŒ)”}”(hŒ/constraint_X_name: The name of the constraint. ”h]”hÞ)”}”(hŒ.constraint_X_name: The name of the constraint.”h]”hŒ.constraint_X_name: The name of the constraint.”…””}”(hjÙh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³hÇh´KŒhjÕubah}”(h]”h ]”h"]”h$]”h&]”uh1j‹hjˆubjŒ)”}”(hŒQconstraint_X_max_power_uw: The maximum power limit to be applicable to the node. ”h]”hÞ)”}”(hŒPconstraint_X_max_power_uw: The maximum power limit to be applicable to the node.”h]”hŒPconstraint_X_max_power_uw: The maximum power limit to be applicable to the node.”…””}”(hjñh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³hÇh´KŽhjíubah}”(h]”h ]”h"]”h$]”h&]”uh1j‹hjˆubjŒ)”}”(hŒ¤constraint_X_power_limit_uw: The power limit to be applied to the node. If the value contained in constraint_X_max_power_uw is set, the constraint will be removed. ”h]”hÞ)”}”(hŒ£constraint_X_power_limit_uw: The power limit to be applied to the node. If the value contained in constraint_X_max_power_uw is set, the constraint will be removed.”h]”hŒ£constraint_X_power_limit_uw: The power limit to be applied to the node. If the value contained in constraint_X_max_power_uw is set, the constraint will be removed.”…””}”(hj h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³hÇh´K‘hjubah}”(h]”h ]”h"]”h$]”h&]”uh1j‹hjˆubjŒ)”}”(hŒ\constraint_X_time_window_us: The meaning of this file will depend on the constraint number. ”h]”hÞ)”}”(hŒ[constraint_X_time_window_us: The meaning of this file will depend on the constraint number.”h]”hŒ[constraint_X_time_window_us: The meaning of this file will depend on the constraint number.”…””}”(hj!h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³hÇh´K•hjubah}”(h]”h ]”h"]”h$]”h&]”uh1j‹hjˆubeh}”(h]”h ]”h"]”h$]”h&]”Œbullet”Œ*”uh1j†h³hÇh´Khj‚ubah}”(h]”h ]”h"]”h$]”h&]”uh1j€h³hÇh´Khjah²hubhÉ)”}”(hhh]”(hÎ)”}”(hŒ Constraints”h]”hŒ Constraints”…””}”(hjFh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÍhjCh²hh³hÇh´K™ubj)”}”(hŒ[* Constraint 0: The power limitation is immediately applied, without limitation in time. ”h]”j‡)”}”(hhh]”jŒ)”}”(hŒWConstraint 0: The power limitation is immediately applied, without limitation in time. ”h]”hÞ)”}”(hŒVConstraint 0: The power limitation is immediately applied, without limitation in time.”h]”hŒVConstraint 0: The power limitation is immediately applied, without limitation in time.”…””}”(hj_h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³hÇh´K›hj[ubah}”(h]”h ]”h"]”h$]”h&]”uh1j‹hjXubah}”(h]”h ]”h"]”h$]”h&]”j;j<uh1j†h³hÇh´K›hjTubah}”(h]”h ]”h"]”h$]”h&]”uh1j€h³hÇh´K›hjCh²hubeh}”(h]”Œ constraints”ah ]”h"]”Œ constraints”ah$]”h&]”uh1hÈhjah²hh³hÇh´K™ubeh}”(h]”Œuser-space-api”ah ]”h"]”Œuser space api”ah$]”h&]”uh1hÈhhÊh²hh³hÇh´K{ubhÉ)”}”(hhh]”(hÎ)”}”(hŒ Kernel API”h]”hŒ Kernel API”…””}”(hj’h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÍhjh²hh³hÇh´KŸubhÉ)”}”(hhh]”(hÎ)”}”(hŒOverview”h]”hŒOverview”…””}”(hj£h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÍhj h²hh³hÇh´K¢ubhÞ)”}”(hŒÜThe DTPM framework has no power limiting backend support. It is generic and provides a set of API to let the different drivers to implement the backend part for the power limitation and create the power constraints tree.”h]”hŒÜThe DTPM framework has no power limiting backend support. It is generic and provides a set of API to let the different drivers to implement the backend part for the power limitation and create the power constraints tree.”…””}”(hj±h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³hÇh´K¤hj h²hubhÞ)”}”(hŒuIt is up to the platform to provide the initialization function to allocate and link the different nodes of the tree.”h]”hŒuIt is up to the platform to provide the initialization function to allocate and link the different nodes of the tree.”…””}”(hj¿h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³hÇh´K©hj h²hubhÞ)”}”(hŒóA special macro has the role of declaring a node and the corresponding initialization function via a description structure. This one contains an optional parent field allowing to hook different devices to an already existing tree at boot time.”h]”hŒóA special macro has the role of declaring a node and the corresponding initialization function via a description structure. This one contains an optional parent field allowing to hook different devices to an already existing tree at boot time.”…””}”(hjÍh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³hÇh´K¬hj h²hubhÞ)”}”(hŒFor instance::”h]”hŒ For instance:”…””}”(hjÛh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³hÇh´K±hj h²hubj})”}”(hŒsstruct dtpm_descr my_descr = { .name = "my_name", .init = my_init_func, }; DTPM_DECLARE(my_descr);”h]”hŒsstruct dtpm_descr my_descr = { .name = "my_name", .init = my_init_func, }; DTPM_DECLARE(my_descr);”…””}”hjésbah}”(h]”h ]”h"]”h$]”h&]”hÅhÆuh1j|h³hÇh´K³hj h²hubhÞ)”}”(hŒƒThe nodes of the DTPM tree are described with dtpm structure. The steps to add a new power limitable device is done in three steps:”h]”hŒƒThe nodes of the DTPM tree are described with dtpm structure. The steps to add a new power limitable device is done in three steps:”…””}”(hj÷h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³hÇh´Kºhj h²hubj)”}”(hŒZ* Allocate the dtpm node * Set the power number of the dtpm node * Register the dtpm node ”h]”j‡)”}”(hhh]”(jŒ)”}”(hŒAllocate the dtpm node”h]”hÞ)”}”(hjh]”hŒAllocate the dtpm node”…””}”(hjh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³hÇh´K½hj ubah}”(h]”h ]”h"]”h$]”h&]”uh1j‹hj ubjŒ)”}”(hŒ%Set the power number of the dtpm node”h]”hÞ)”}”(hj%h]”hŒ%Set the power number of the dtpm node”…””}”(hj'h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³hÇh´K¾hj#ubah}”(h]”h ]”h"]”h$]”h&]”uh1j‹hj ubjŒ)”}”(hŒRegister the dtpm node ”h]”hÞ)”}”(hŒRegister the dtpm node”h]”hŒRegister the dtpm node”…””}”(hj>h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³hÇh´K¿hj:ubah}”(h]”h ]”h"]”h$]”h&]”uh1j‹hj ubeh}”(h]”h ]”h"]”h$]”h&]”j;j<uh1j†h³hÇh´K½hjubah}”(h]”h ]”h"]”h$]”h&]”uh1j€h³hÇh´K½hj h²hubhÞ)”}”(hŒ”The registration of the dtpm node is done with the powercap ops. Basically, it must implements the callbacks to get and set the power and the limit.”h]”hŒ”The registration of the dtpm node is done with the powercap ops. Basically, it must implements the callbacks to get and set the power and the limit.”…””}”(hj^h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³hÇh´KÁhj h²hubhÞ)”}”(hŒ†Alternatively, if the node to be inserted is an intermediate one, then a simple function to insert it as a future parent is available.”h]”hŒ†Alternatively, if the node to be inserted is an intermediate one, then a simple function to insert it as a future parent is available.”…””}”(hjlh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³hÇh´KÅhj h²hubhÞ)”}”(hŒyIf a device has its power characteristics changing, then the tree must be updated with the new power numbers and weights.”h]”hŒyIf a device has its power characteristics changing, then the tree must be updated with the new power numbers and weights.”…””}”(hjzh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³hÇh´KÈhj h²hubeh}”(h]”Œid1”ah ]”h"]”h$]”j^ah&]”uh1hÈhjh²hh³hÇh´K¢j`KubhÉ)”}”(hhh]”(hÎ)”}”(hŒ Nomenclature”h]”hŒ Nomenclature”…””}”(hj’h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÍhjh²hh³hÇh´KÌubj)”}”(hŒñ* dtpm_alloc() : Allocate and initialize a dtpm structure * dtpm_register() : Add the dtpm node to the tree * dtpm_unregister() : Remove the dtpm node from the tree * dtpm_update_power() : Update the power characteristics of the dtpm node”h]”j‡)”}”(hhh]”(jŒ)”}”(hŒ8dtpm_alloc() : Allocate and initialize a dtpm structure ”h]”hÞ)”}”(hŒ7dtpm_alloc() : Allocate and initialize a dtpm structure”h]”hŒ7dtpm_alloc() : Allocate and initialize a dtpm structure”…””}”(hj«h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³hÇh´KÎhj§ubah}”(h]”h ]”h"]”h$]”h&]”uh1j‹hj¤ubjŒ)”}”(hŒ0dtpm_register() : Add the dtpm node to the tree ”h]”hÞ)”}”(hŒ/dtpm_register() : Add the dtpm node to the tree”h]”hŒ/dtpm_register() : Add the dtpm node to the tree”…””}”(hjÃh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³hÇh´KÐhj¿ubah}”(h]”h ]”h"]”h$]”h&]”uh1j‹hj¤ubjŒ)”}”(hŒ7dtpm_unregister() : Remove the dtpm node from the tree ”h]”hÞ)”}”(hŒ6dtpm_unregister() : Remove the dtpm node from the tree”h]”hŒ6dtpm_unregister() : Remove the dtpm node from the tree”…””}”(hjÛh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³hÇh´KÒhj×ubah}”(h]”h ]”h"]”h$]”h&]”uh1j‹hj¤ubjŒ)”}”(hŒGdtpm_update_power() : Update the power characteristics of the dtpm node”h]”hÞ)”}”(hjñh]”hŒGdtpm_update_power() : Update the power characteristics of the dtpm node”…””}”(hjóh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³hÇh´KÔhjïubah}”(h]”h ]”h"]”h$]”h&]”uh1j‹hj¤ubeh}”(h]”h ]”h"]”h$]”h&]”j;j<uh1j†h³hÇh´KÎhj ubah}”(h]”h ]”h"]”h$]”h&]”uh1j€h³hÇh´KÎhjh²hubeh}”(h]”Œ nomenclature”ah ]”h"]”Œ nomenclature”ah$]”h&]”uh1hÈhjh²hh³hÇh´KÌubeh}”(h]”Œ kernel-api”ah ]”h"]”Œ kernel api”ah$]”h&]”uh1hÈhhÊh²hh³hÇh´KŸubeh}”(h]”Œ*dynamic-thermal-power-management-framework”ah ]”h"]”Œ*dynamic thermal power management framework”ah$]”h&]”uh1hÈhhh²hh³hÇh´Kubeh}”(h]”h ]”h"]”h$]”h&]”Œsource”hÇuh1hŒcurrent_source”NŒ current_line”NŒsettings”Œdocutils.frontend”ŒValues”“”)”}”(hÍNŒ generator”NŒ datestamp”NŒ source_link”NŒ source_url”NŒ toc_backlinks”Œentry”Œfootnote_backlinks”KŒ sectnum_xform”KŒstrip_comments”NŒstrip_elements_with_classes”NŒ strip_classes”NŒ report_level”KŒ halt_level”KŒexit_status_level”KŒdebug”NŒwarning_stream”NŒ traceback”ˆŒinput_encoding”Œ utf-8-sig”Œinput_encoding_error_handler”Œstrict”Œoutput_encoding”Œutf-8”Œoutput_encoding_error_handler”jMŒerror_encoding”Œutf-8”Œerror_encoding_error_handler”Œbackslashreplace”Œ language_code”Œen”Œrecord_dependencies”NŒconfig”NŒ id_prefix”hŒauto_id_prefix”Œid”Œ dump_settings”NŒdump_internals”NŒdump_transforms”NŒdump_pseudo_xml”NŒexpose_internals”NŒstrict_visitor”NŒ_disable_config”NŒ_source”hÇŒ _destination”NŒ _config_files”]”Œ7/var/lib/git/docbuild/linux/Documentation/docutils.conf”aŒfile_insertion_enabled”ˆŒ raw_enabled”KŒline_length_limit”M'Œpep_references”NŒ pep_base_url”Œhttps://peps.python.org/”Œpep_file_url_template”Œpep-%04d”Œrfc_references”NŒ rfc_base_url”Œ&https://datatracker.ietf.org/doc/html/”Œ tab_width”KŒtrim_footnote_reference_space”‰Œsyntax_highlight”Œlong”Œ smart_quotes”ˆŒsmartquotes_locales”]”Œcharacter_level_inline_markup”‰Œdoctitle_xform”‰Œ docinfo_xform”KŒsectsubtitle_xform”‰Œ image_loading”Œlink”Œembed_stylesheet”‰Œcloak_email_addresses”ˆŒsection_self_link”‰Œenv”NubŒreporter”NŒindirect_targets”]”Œsubstitution_defs”}”Œsubstitution_names”}”Œrefnames”}”Œrefids”}”Œnameids”}”(j'j$Œoverview”Nj jjUjRjŒj‰j„jjjjjuŒ nametypes”}”(j'‰j‘‰j ‰jU‰jŒ‰j„‰j‰j‰uh}”(j$hÊjZj%jjüjRj#j‰jajjCjjjŠj jjuŒ footnote_refs”}”Œ citation_refs”}”Œ autofootnotes”]”Œautofootnote_refs”]”Œsymbol_footnotes”]”Œsymbol_footnote_refs”]”Œ footnotes”]”Œ citations”]”Œautofootnote_start”KŒsymbol_footnote_start”KŒ id_counter”Œ collections”ŒCounter”“”}”j[Ks…”R”Œparse_messages”]”hŒsystem_message”“”)”}”(hhh]”hÞ)”}”(hŒ+Duplicate implicit target name: "overview".”h]”hŒ/Duplicate implicit target name: “overviewâ€.”…””}”(hjµh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝhj²ubah}”(h]”h ]”h"]”h$]”h&]”jŠaŒlevel”KŒtype”ŒINFO”Œsource”hÇŒline”K¢uh1j°hj h²hh³hÇh´K¢ubaŒtransform_messages”]”Œ transformer”NŒ include_log”]”Œ decoration”Nh²hub.