À l'origine, il fait partie du code source du noyau Linux, il sera donc traité comme GPLv2 (reconnaissance qu'il devrait l'être).
https://www.kernel.org/doc/html/latest/index.html
Licensing documentation
The following describes the license of the Linux kernel source code (GPLv2), how to properly mark the license of individual files in the source tree, as well as links to the full license text.
https://www.kernel.org/doc/html/latest/process/license-rules.html#kernel-licensing
https://www.kernel.org/doc/html/latest/cpu-freq/core.html Je lirai.
General description of the CPUFreq core and CPUFreq notifiers
Authors: Dominik Brodowski [email protected] David Kimdon [email protected] Rafael J. Wysocki [email protected] Viresh Kumar [email protected]
The CPUFreq core code is located in drivers/cpufreq/cpufreq.c. This cpufreq code offers a standardized interface for the CPUFreq architecture drivers (those pieces of code that do actual frequency transitions), as well as to “notifiers”. These are device drivers or other part of the kernel that need to be informed of policy changes (ex. thermal modules like ACPI) or of all frequency changes (ex. timing code) or even need to force certain speed limits (like LCD drivers on ARM architecture). Additionally, the kernel “constant” loops_per_jiffy is updated on frequency changes here.
Le code principal de CPUFreq se trouve dans derivers / cpufreq / cpufreq.c. Ce code de base CPUFreq fournit une interface standard pour les pilotes d'architecture CPUFreq. (Une partie du code effectue des changements de fréquence) Il inclut également les «notificateurs». Les pilotes de périphériques et des parties du noyau peuvent nécessiter des changements de politique (par exemple, des modules thermiques comme ACPI), tous les changements de fréquence (code de synchronisation, etc.) ou certaines restrictions de vitesse (par exemple dans l'architecture ARM). Pilote LCD) est requis. De plus, la constante du noyau "loops_per_jiffy" est mise à jour lorsque la fréquence est modifiée.
Reference counting of the cpufreq policies is done by cpufreq_cpu_get and cpufreq_cpu_put, which make sure that the cpufreq driver is correctly registered with the core, and will not be unloaded until cpufreq_put_cpu is called. That also ensures that the respective cpufreq policy doesn’t get freed while being used.
Les compteurs de référence pour les politiques cpufreq sont fournis par cpufreq_cpu_get () et cpufreq_cpu_put (). Cela entraînera l'enregistrement correct du pilote cpufreq avec le noyau et ne sera pas déchargé tant que cpufreq_put_cpu () ne sera pas appelé. Cela garantit que chaque stratégie cpufreq n'est pas publiée pendant l'utilisation.
CPUFreq notifiers conform to the standard kernel notifier interface. See linux/include/linux/notifier.h for details on notifiers.
Les notificateurs CPUFreq suivent l'interface standard des notificateurs du noyau. Pour plus d'informations sur les notificateurs, consultez linux / include / linux / notifier.h.
There are two different CPUFreq notifiers - policy notifiers and transition notifiers.
Il existe deux notificateurs CPU Freq différents. L'un concerne les notificateurs de politique et l'autre les notificateurs de transition.
2.1 CPUFreq policy notifiers
These are notified when a new policy is created or removed. Il y a une notification lorsqu'une nouvelle politique est créée ou supprimée.
The phase is specified in the second argument to the notifier. The phase is CPUFREQ_CREATE_POLICY when the policy is first created and it is CPUFREQ_REMOVE_POLICY when the policy is removed.
Cette phase est illustrée dans le deuxième argument du notifiant. Cette phase est CPUFREQ_CREATE_POLCY lorsque la stratégie a été créée pour la première fois. Et CPUFREQ_REMOVE_POLICY lorsque la politique est supprimée.
The third argument, a void *pointer, points to a struct cpufreq_policy consisting of several values, including min, max (the lower and upper frequencies (in kHz) of the new policy).
Le troisième argument est de type pointeur void *. Il s'agit d'un pointeur vers la structure cpufreq_policy, qui se compose de plusieurs valeurs, y compris les fréquences min, max de la nouvelle politique (fréquences minimale et maximale (en kHz)).
2.2 CPUFreq transition notifiers
These are notified twice for each online CPU in the policy, when the CPUfreq driver switches the CPU core frequency and this change has no any external implications.
Dans la politique, il peut à nouveau notifier pour chaque CPU en ligne. Cela est dû au fait que le pilote CPU Freq modifie la fréquence du cœur du processeur et que ce changement n'a aucun impact externe.
The second argument specifies the phase - CPUFREQ_PRECHANGE or CPUFREQ_POSTCHANGE.
Le deuxième argument indique la phase. CPUFREQ_PRECHANGE ou CPUFREQ_POSTCHANGE.
The third argument is a struct cpufreq_freqs with the following values:
Le troisième argument est la structure cpufreq_freqs avec les valeurs suivantes:
cpu number of the affected CPU
old old frequency
new new frequency
flags flags of the cpufreq driver
For details about OPP, see Documentation/power/opp.rst
Voir Documentation / power / opp.rst pour plus d'informations sur OPP.
dev_pm_opp_init_cpufreq_table -
This function provides a ready to use conversion routine to translate the OPP layer’s internal information about the available frequencies into a format readily providable to cpufreq.
Cette fonction met à disposition une routine de conversion qui convertit les informations internes des couches OPP sur la fréquence actuellement activée dans un format que cpufreq peut déchiffrer.
Warning Do not use this function in interrupt context.
N'utilisez pas cette fonction dans le contexte d'interruption.
Example
soc_pm_init()
{
/* Do things */
r = dev_pm_opp_init_cpufreq_table(dev, &freq_table);
if (!r)
policy->freq_table = freq_table;
/* Do other things */
}
Note This function is available only if CONFIG_CPU_FREQ is enabled in addition to CONFIG_PM_OPP.
Cette fonction n'est valide que lorsque CONFIG_CPUFREQ est activé et CONFIG_PM_OPP est également ajouté.
dev_pm_opp_free_cpufreq_table
Free up the table allocated by dev_pm_opp_init_cpufreq_table
Libérez la table allouée par dev_pm_opp_init_cpufreq_table.
Recommended Posts