stable_pstate/
stable_pstate.rs

1use 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}