stable_pstate/
stable_pstate.rs1use libdrm_amdgpu_sys::*;
2use AMDGPU::GPU_INFO;
3
4fn info(pci_bus: &PCI::BUS_INFO) {
5 let libdrm_amdgpu = LibDrmAmdgpu::new().unwrap();
6 let Ok(device_path) = pci_bus.get_drm_render_path() else { return };
7 let (amdgpu_dev, _major, _minor) = {
8 use std::fs::File;
9 use std::os::fd::IntoRawFd;
10
11 let fd = File::open(device_path).unwrap();
12
13 libdrm_amdgpu.init_device_handle(fd.into_raw_fd()).unwrap()
14 };
15
16 let ext_info = amdgpu_dev.device_info().unwrap();
17 println!("Marketing Name: [{}]", ext_info.find_device_name_or_default());
18
19 {
20 let ctx = amdgpu_dev.create_context().unwrap();
21 let current_stable_pstate = ctx.get_stable_pstate().unwrap();
22 println!("Current Stable PState: {current_stable_pstate:?}");
23
24 println!("Set STANDARD PState");
25
26 match ctx.set_stable_pstate(AMDGPU::StablePstateFlag::STANDARD) {
27 Ok(_) => {
28 },
29 Err(err) => println!(" Error: {err}"),
30 }
31
32 println!("Press enter to revert stable_pstate");
33
34 let mut input = String::new();
35 std::io::stdin().read_line(&mut input).unwrap();
36 }
37
38 println!(" stable_pstate is reverted.");
39}
40
41fn main() {
42 let pci_devs = AMDGPU::get_all_amdgpu_pci_bus();
43
44 if pci_devs.is_empty() {
45 panic!("No AMDGPU devices.");
46 }
47
48 for pci_bus in &pci_devs {
49 info(pci_bus);
50 }
51}