€•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Œ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.”…””}”(hhõ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”…””}”(hjhžhhŸNh Nubah}”(h]”h ]”h"]”h$]”h&]”uh1h¹hjhž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.”…””}”(hj"hžhhŸNh Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÉhŸh³h K hjhž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.”…””}”(hj0hžhhŸNh Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÉhŸh³h K$hjhž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.”…””}”(hj>hžhhŸNh Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÉhŸh³h K'hjhž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.”…””}”(hjLhžhhŸNh Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÉhŸh³h K*hjhžhubhÊ)”}”(hŒFor instance::”h]”hŒ For instance:”…””}”(hjZhžhhŸNh Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÉhŸh³h K,hjhžhubhŒ literal_block”“”)”}”(hŒMSoC | `-- pkg | |-- pd0 (cpu0-3) | `-- pd1 (cpu4-5)”h]”hŒMSoC | `-- pkg | |-- pd0 (cpu0-3) | `-- pd1 (cpu4-5)”…””}”hjjsbah}”(h]”h ]”h"]”h$]”h&]”h±h²uh1jhhŸh³h K.hjhž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²uh1jhhŸh³h K\hjhž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´hjhžhhŸh³h Khubhµ)”}”(hhh]”(hº)”}”(hŒHierarchical description”h]”hŒHierarchical description”…””}”(hjhžhhŸNh Nubah}”(h]”h ]”h"]”h$]”h&]”uh1h¹hjhž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.”…””}”(hj hžhhŸNh Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÉhŸh³h Krhjhž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.”…””}”(hj.hžhhŸNh Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÉhŸh³h Kwhjhžhubeh}”(h]”Œhierarchical-description”ah ]”h"]”Œhierarchical description”ah$]”h&]”uh1h´hjhž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”…””}”(hjPhžhhŸNh Nubah}”(h]”h ]”h"]”h$]”h&]”uh1h¹hjMhž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.”…””}”(hj^hžhhŸNh Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÉhŸh³h K}hjMhž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 Khjyubah}”(h]”h ]”h"]”h$]”h&]”uh1jwhjtubjx)”}”(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&]”uh1jwhjtubjx)”}”(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&]”uh1jwhjtubjx)”}”(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&]”uh1jwhjtubjx)”}”(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&]”uh1jwhjtubjx)”}”(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‘hjñubah}”(h]”h ]”h"]”h$]”h&]”uh1jwhjtubjx)”}”(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•hj ubah}”(h]”h ]”h"]”h$]”h&]”uh1jwhjtubeh}”(h]”h ]”h"]”h$]”h&]”Œbullet”Œ*”uh1jrhŸh³h Khjnubah}”(h]”h ]”h"]”h$]”h&]”uh1jlhŸh³h KhjMhžhubhµ)”}”(hhh]”(hº)”}”(hŒ Constraints”h]”hŒ Constraints”…””}”(hj2hžhhŸNh Nubah}”(h]”h ]”h"]”h$]”h&]”uh1h¹hj/hžhhŸh³h K™ubjm)”}”(hŒ[* Constraint 0: The power limitation is immediately applied, without limitation in time. ”h]”js)”}”(hhh]”jx)”}”(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.”…””}”(hjKhžhhŸNh Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÉhŸh³h K›hjGubah}”(h]”h ]”h"]”h$]”h&]”uh1jwhjDubah}”(h]”h ]”h"]”h$]”h&]”j'j(uh1jrhŸh³h K›hj@ubah}”(h]”h ]”h"]”h$]”h&]”uh1jlhŸh³h K›hj/hžhubeh}”(h]”Œ constraints”ah ]”h"]”Œ constraints”ah$]”h&]”uh1h´hjMhž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¹hj{hžhhŸh³h KŸubhµ)”}”(hhh]”(hº)”}”(hŒOverview”h]”hŒOverview”…””}”(hjhž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.”…””}”(hjhž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žhubji)”}”(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²uh1jhhŸ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žhubjm)”}”(hŒZ* Allocate the dtpm node * Set the power number of the dtpm node * Register the dtpm node ”h]”js)”}”(hhh]”(jx)”}”(hŒAllocate the dtpm node”h]”hÊ)”}”(hjúh]”hŒAllocate 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&]”uh1jwhjõubjx)”}”(hŒ%Set the power number of the dtpm node”h]”hÊ)”}”(hjh]”hŒ%Set the power number of the dtpm node”…””}”(hjhžhhŸNh Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÉhŸh³h K¾hjubah}”(h]”h ]”h"]”h$]”h&]”uh1jwhjõubjx)”}”(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&]”uh1jwhjõubeh}”(h]”h ]”h"]”h$]”h&]”j'j(uh1jrhŸh³h K½hjñubah}”(h]”h ]”h"]”h$]”h&]”uh1jlhŸ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.”…””}”(hjJhž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.”…””}”(hjXhž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.”…””}”(hjfhžhhŸNh Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÉhŸh³h KÈhjŒhžhubeh}”(h]”Œid1”ah ]”h"]”h$]”jJah&]”uh1h´hj{hžhhŸh³h K¢jLKubhµ)”}”(hhh]”(hº)”}”(hŒ Nomenclature”h]”hŒ Nomenclature”…””}”(hj~hžhhŸNh Nubah}”(h]”h ]”h"]”h$]”h&]”uh1h¹hj{hžhhŸh³h KÌubjm)”}”(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]”js)”}”(hhh]”(jx)”}”(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&]”uh1jwhjubjx)”}”(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&]”uh1jwhjubjx)”}”(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&]”uh1jwhjubjx)”}”(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&]”uh1jwhjubeh}”(h]”h ]”h"]”h$]”h&]”j'j(uh1jrhŸh³h KÎhjŒubah}”(h]”h ]”h"]”h$]”h&]”uh1jlhŸh³h KÎhj{hžhubeh}”(h]”Œ nomenclature”ah ]”h"]”Œ nomenclature”ah$]”h&]”uh1h´hj{hž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”j9Œ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”}”(jjŒoverview”Nj j jAj>jxjujpjmj jjjuŒ nametypes”}”(j‰j}‰j ‰jA‰jx‰jp‰j ‰j‰uh}”(jh¶jFjj jèj>jjujMjmj/jj{jvjŒjj{uŒ 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”“”}”jGKs…”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&]”jvaŒ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.