Ursprünglich ist es Teil des Quellcodes des Linux-Kernels, daher wird es als GPLv2 behandelt (Anerkennung, dass es sein sollte).
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 Ich werde lesen.
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.
Der CPUFreq-Kerncode befindet sich in der Derivers / cpufreq / cpufreq.c. Dieser CPUFreq-Kerncode bietet eine Standardschnittstelle für CPUFreq-Architekturtreiber. (Ein Teil des Codes führt Frequenzänderungen durch.) Enthält auch "Benachrichtiger". Gerätetreiber und Teile des Kernels erfordern möglicherweise Richtlinienänderungen (z. B. Wärmemodule wie ACPI), alle Frequenzänderungen (Zeitsteuerungscode usw.) oder eine bestimmte Durchsetzung von Geschwindigkeitsbegrenzungen (z. B. in der ARM-Architektur). LCD-Treiber) ist erforderlich. Außerdem wird die Kernelkonstante "loops_per_jiffy" aktualisiert, wenn die Frequenz geändert wird.
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.
Referenzzähler für cpufreq-Richtlinien werden von cpufreq_cpu_get () und cpufreq_cpu_put () bereitgestellt. Dadurch wird der cpufreq-Treiber ordnungsgemäß beim Core registriert und erst nach dem Aufruf von cpufreq_put_cpu () entladen. Dadurch wird sichergestellt, dass nicht jede cpufreq-Richtlinie während der Verwendung freigegeben wird.
CPUFreq notifiers conform to the standard kernel notifier interface. See linux/include/linux/notifier.h for details on notifiers.
CPUFreq-Notifier folgen der Standardschnittstelle für Kernel-Notifier. Weitere Informationen zu Benachrichtigern finden Sie unter linux / include / linux / notifier.h.
There are two different CPUFreq notifiers - policy notifiers and transition notifiers.
Es gibt zwei verschiedene CPU Freq-Benachrichtigungen. Einer ist Policy Notifiers und der andere sind Transition Notifier.
2.1 CPUFreq policy notifiers
These are notified when a new policy is created or removed. Es wird benachrichtigt, wenn eine neue Richtlinie erstellt oder gelöscht wird.
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.
Diese Phase wird im zweiten Argument an den Notifier gezeigt. Diese Phase ist CPUFREQ_CREATE_POLCY, als die Richtlinie zum ersten Mal erstellt wurde. Und CPUFREQ_REMOVE_POLICY, wenn die Richtlinie gelöscht wird.
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).
Das dritte Argument ist vom Typ void * pointer. Dies ist ein Zeiger auf die Struktur cpufreq_policy, die aus mehreren Werten besteht, einschließlich der minimalen und maximalen Frequenzen der neuen Richtlinie (minimale und maximale Frequenzen (in 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.
In der Richtlinie wird es möglicherweise erneut für jede Online-CPU benachrichtigt. Dies liegt daran, dass der CPU Freq-Treiber die CPU-Kernfrequenz umschaltet und diese Änderung keine externen Auswirkungen hat.
The second argument specifies the phase - CPUFREQ_PRECHANGE or CPUFREQ_POSTCHANGE.
Das zweite Argument gibt die Phase an. CPUFREQ_PRECHANGE oder CPUFREQ_POSTCHANGE.
The third argument is a struct cpufreq_freqs with the following values:
Das dritte Argument ist die Struktur cpufreq_freqs mit den folgenden Werten:
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
Weitere Informationen zu OPP finden Sie unter Dokumentation / power / opp.rst.
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.
Diese Funktion stellt eine Konvertierungsroutine zur Verfügung, die die internen Informationen von OPP-Schichten über die aktuell aktivierte Frequenz in ein Format konvertiert, das cpufreq entschlüsseln kann.
Warning Do not use this function in interrupt context.
Verwenden Sie diese Funktion nicht im Interrupt-Kontext.
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.
Diese Funktion ist nur gültig, wenn CONFIG_CPUFREQ aktiviert ist und CONFIG_PM_OPP ebenfalls hinzugefügt wird.
dev_pm_opp_free_cpufreq_table
Free up the table allocated by dev_pm_opp_init_cpufreq_table
Geben Sie die von dev_pm_opp_init_cpufreq_table zugewiesene Tabelle frei.
Recommended Posts