--- amdgpu_drv.c 2026-09-07 01:55:49.309043000 +0000 +++ amdgpu_drv.c 2026-09-07 01:49:39.373117000 +0000 @@ -53,9 +53,42 @@ #include "../amdxcp/amdgpu_xcp_drv.h" #ifdef __FreeBSD__ +#include + SYSCTL_NODE(_hw, OID_AUTO, amdgpu, CTLFLAG_RW | CTLFLAG_MPSAFE, 0, DRIVER_DESC " parameters"); + +static struct amdgpu_device *amdgpu_sysctl_adev; + +static int sysctl_hw_amdgpu_power1_cap(SYSCTL_HANDLER_ARGS) +{ + struct amdgpu_device *adev = amdgpu_sysctl_adev; + uint32_t limit; + int error, val; + + if (adev == NULL) + return (ENXIO); + + error = amdgpu_dpm_get_power_limit(adev, &limit, + PP_PWR_LIMIT_CURRENT, 0); + if (error) + return (error); + + val = (int)limit; + error = sysctl_handle_int(oidp, &val, 0, req); + if (error || !req->newptr) + return (error); + + limit = (uint32_t)val; + error = amdgpu_dpm_set_power_limit(adev, limit); + return (error); +} + +SYSCTL_PROC(_hw_amdgpu, OID_AUTO, power1_cap, + CTLTYPE_INT | CTLFLAG_RWTUN | CTLFLAG_MPSAFE, + NULL, 0, sysctl_hw_amdgpu_power1_cap, "I", + "GPU power cap in watts (power1_cap)"); #endif /* @@ -2364,6 +2397,7 @@ amdgpu_init_debug_options(adev); ret = amdgpu_driver_load_kms(adev, flags); + amdgpu_sysctl_adev = adev; if (ret) goto err_pci;