summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--interface-definitions/system_option.xml.in20
-rwxr-xr-xsrc/conf_mode/system_option.py14
2 files changed, 34 insertions, 0 deletions
diff --git a/interface-definitions/system_option.xml.in b/interface-definitions/system_option.xml.in
index e78a53552..d15e391f5 100644
--- a/interface-definitions/system_option.xml.in
+++ b/interface-definitions/system_option.xml.in
@@ -49,6 +49,26 @@
<valueless/>
</properties>
</leafNode>
+ <leafNode name="amd-pstate-driver">
+ <properties>
+ <help>Enables and configures pstate driver for AMD Ryzen and Epyc CPUs</help>
+ <completionHelp>
+ <list>active passive guided</list>
+ </completionHelp>
+ <valueHelp>
+ <format>active</format>
+ <description>This is the low-level firmware control mode based on the profile set and the system governor has no effect</description>
+ </valueHelp>
+ <valueHelp>
+ <format>passive</format>
+ <description>The driver allows the system governor to manage CPU frequency while providing available performance states</description>
+ </valueHelp>
+ <valueHelp>
+ <format>guided</format>
+ <description>The driver allows to set desired performance levels and the firmware selects a performance level in this range and fitting to the current workload</description>
+ </valueHelp>
+ </properties>
+ </leafNode>
<node name="debug">
<properties>
<help>Dynamic debugging for kernel module</help>
diff --git a/src/conf_mode/system_option.py b/src/conf_mode/system_option.py
index 52d0b7cda..1d6ab83af 100755
--- a/src/conf_mode/system_option.py
+++ b/src/conf_mode/system_option.py
@@ -19,11 +19,13 @@ import os
from sys import exit
from time import sleep
+
from vyos.config import Config
from vyos.configverify import verify_source_interface
from vyos.configverify import verify_interface_exists
from vyos.system import grub_util
from vyos.template import render
+from vyos.utils.cpu import get_cpus
from vyos.utils.dict import dict_search
from vyos.utils.file import write_file
from vyos.utils.kernel import check_kmod
@@ -94,6 +96,13 @@ def verify(options):
if not is_intf_addr_assigned(interface, address):
raise ConfigError(f'Address "{address}" not assigned on interface "{interface}"!')
+ if 'kernel' in options:
+ cpu_vendor = get_cpus()[0]['vendor_id']
+ if 'amd_pstate_driver' in options['kernel'] and cpu_vendor != 'AuthenticAMD':
+ raise ConfigError(
+ f'AMD pstate driver cannot be used with "{cpu_vendor}" CPU!'
+ )
+
return None
def generate(options):
@@ -107,6 +116,11 @@ def generate(options):
cmdline_options.append('mitigations=off')
if 'disable_power_saving' in options['kernel']:
cmdline_options.append('intel_idle.max_cstate=0 processor.max_cstate=1')
+ if 'amd_pstate_driver' in options['kernel']:
+ mode = options['kernel']['amd_pstate_driver']
+ cmdline_options.append(
+ f'initcall_blacklist=acpi_cpufreq_init amd_pstate={mode}'
+ )
grub_util.update_kernel_cmdline_options(' '.join(cmdline_options))
return None