Hello,

I’m adjusting pp_table settings to get most out of my GPU (RX 6800 XT) and it works but every time I restart PC the changes revert back to default. Any idea how I could make them persist?

For me pp_table is located in /sys/class/drm/card1/device/pp_table

I have to use chmod to be able to make changes:

sudo chmod o+w /sys/class/drm/card1/device/pp_table

Then I’m able to write in changes with upp:

upp -p /sys/class/drm/card1/device/pp_table set --write smc_pptable/SocketPowerLimitAc/0=312 smc_pptable/SocketPowerLimitDc/0=293 smc_pptable/TdcLimit/0=300 smc_pptable/FreqTableSocclk/1=1350 smc_pptable/FreqTableFclk/1=2000 smc_pptable/FclkBoostFreq=2000

And just in case you’re wondering if the effort even makes sene, yes it does:

Max OC with LACT with max default limits (left) vs max OC with edited pp_table (right) in the picture.

  • vole@lemmy.world
    link
    fedilink
    English
    arrow-up
    8
    ·
    edit-2
    3 days ago

    I’m not familiar with Radeon PowerPlay, so I don’t know if there is a proper way to solve this, but you should be able to make a systemd system service to run the upp command on boot.

    To do so, I think you can use the following:

    [Unit]
    Description=Run my_user_script
    After=suspend.target hibernate.target hybrid-sleep.target suspend-then-hibernate.target
    
    
    [Service]
    Type=oneshot
    ExecStart=upp -p /sys/class/drm/card1/device/pp_table set --write smc_pptable/SocketPowerLimitAc/0=312 smc_pptable/SocketPowerLimitDc/0=293 smc_pptable/TdcLimit/0=300 smc_pptable/FreqTableSocclk/1=1350 smc_pptable/FreqTableFclk/1=2000 smc_pptable/FclkBoostFreq=2000
    
    [Install]
    WantedBy=suspend.target hibernate.target hybrid-sleep.target suspend-then-hibernate.target
    

    To configure this service:

    • Save the text (using sudo/root) to a new .service file in /etc/systemd/service. (e.g. /etc/systemd/system/my_update_pp.service)
    • run sudo systemctl daemon-reload to tell systemd to re-read the service files
    • run sudo systemctl restart my_update_pp.service to manually run the service
    • run sudo systemctl enable my_update_pp.service to tell systemd to run your service automatically on boot/wake (WantedBy tells systemd when it should include the unit/service, After, Wants, Requires, and Before help systemd decide the order to run all the units/services)

    Notes

    • Usually for simple systemd services, you can omit After and set WantedBy to just WantedBy=multi-user.target, but if you also need to run upp after sleep or hibernate, then you probably need something more complex. I copied the After and WantedBy from a stackexchange answer, but I haven’t tried using those targets before. You might have to add multi-user.target to the WantedBy list.
    • I don’t actually know if you need to run upp after sleep/hibernate. Running on boot might be sufficient.
    • I think you can skip the chmod if you run upp as sudo/root. Systemd system services run as root by default.
    • I don’t know how safe it is to mess with PowerPlay during boot. My gut says it’s probably fine, but it also seems like something that could cause graphics to not work. Tread carefully.

    References: