From 6dc0f7b13fc7e7821340980d8014604014b3d805 Mon Sep 17 00:00:00 2001 From: Ilya Zlobintsev Date: Sun, 22 Nov 2020 13:29:05 +0200 Subject: [PATCH] Save clocks/voltage modification --- daemon/src/config.rs | 4 ++++ daemon/src/gpu_controller.rs | 14 +++++++++++++- 2 files changed, 17 insertions(+), 1 deletion(-) diff --git a/daemon/src/config.rs b/daemon/src/config.rs index cbc832a..14efdf0 100644 --- a/daemon/src/config.rs +++ b/daemon/src/config.rs @@ -41,6 +41,8 @@ pub struct GpuConfig { pub fan_curve: BTreeMap, pub power_cap: i32, pub power_profile: PowerProfile, + pub gpu_power_states: BTreeMap, // + pub vram_power_states: BTreeMap, } impl GpuConfig { @@ -57,6 +59,8 @@ impl GpuConfig { fan_control_enabled: false, power_cap: -1, power_profile: PowerProfile::Auto, + gpu_power_states: BTreeMap::new(), + vram_power_states: BTreeMap::new(), } } } diff --git a/daemon/src/gpu_controller.rs b/daemon/src/gpu_controller.rs index b055418..9a1e326 100644 --- a/daemon/src/gpu_controller.rs +++ b/daemon/src/gpu_controller.rs @@ -157,7 +157,15 @@ impl GpuController { _ => None, }; - self.set_power_profile(config.power_profile).unwrap(); + self.set_power_profile(config.power_profile.clone()).unwrap(); + + for (num, (clockspeed, voltage)) in &config.gpu_power_states { + self.set_gpu_power_state(*num, *clockspeed, Some(*voltage)).expect("Failed to load power states"); + } + + for (num, (clockspeed, voltage)) in &config.vram_power_states { + self.set_vram_power_state(*num, *clockspeed, Some(*voltage)).expect("Failed to load power states"); + } } pub fn get_config(&self) -> GpuConfig { @@ -520,6 +528,8 @@ impl GpuController { log::trace!("Writing {} to pp_od_clk_voltage", line); fs::write(self.hw_path.join("pp_od_clk_voltage"), line)?; + + self.config.gpu_power_states.insert(num, (clockspeed, voltage.unwrap())); Ok(()) } @@ -536,6 +546,8 @@ impl GpuController { log::trace!("Writing {} to pp_od_clk_voltage", line); fs::write(self.hw_path.join("pp_od_clk_voltage"), line)?; + + self.config.vram_power_states.insert(num, (clockspeed, voltage.unwrap())); Ok(()) }