diff --git a/src/amd/vulkan/radv_device.c b/src/amd/vulkan/radv_device.c
index a00721a2f86..3d79747fb7f 100644
--- a/src/amd/vulkan/radv_device.c
+++ b/src/amd/vulkan/radv_device.c
@@ -1067,6 +1067,12 @@ radv_CreateDevice(VkPhysicalDevice physicalDevice, const VkDeviceCreateInfo *pCr
if (result != VK_SUCCESS)
goto fail_cache;
+ if (device->physical_device->rad_info.gfx_level == GFX11 && device->physical_device->rad_info.has_dedicated_vram &&
+ device->instance->drirc.force_pstate_peak_gfx11_dgpu) {
+ if (!radv_device_acquire_performance_counters(device))
+ fprintf(stderr, "radv: failed to set pstate to profile_peak.\n");
+ }
+
*pDevice = radv_device_to_handle(device);
return VK_SUCCESS;
diff --git a/src/amd/vulkan/radv_instance.c b/src/amd/vulkan/radv_instance.c
index 89e3b36c90f..bc67613a902 100644
--- a/src/amd/vulkan/radv_instance.c
+++ b/src/amd/vulkan/radv_instance.c
@@ -162,6 +162,7 @@ static const driOptionDescription radv_dri_options[] = {
DRI_CONF_RADV_FLUSH_BEFORE_TIMESTAMP_WRITE(false)
DRI_CONF_RADV_RT_WAVE64(false)
DRI_CONF_RADV_LEGACY_SPARSE_BINDING(false)
+ DRI_CONF_RADV_FORCE_PSTATE_PEAK_GFX11_DGPU(false)
DRI_CONF_DUAL_COLOR_BLEND_BY_LOCATION(false)
DRI_CONF_RADV_OVERRIDE_GRAPHICS_SHADER_VERSION(0)
DRI_CONF_RADV_OVERRIDE_COMPUTE_SHADER_VERSION(0)
@@ -240,6 +241,9 @@ radv_init_dri_options(struct radv_instance *instance)
instance->drirc.legacy_sparse_binding = driQueryOptionb(&instance->drirc.options, "radv_legacy_sparse_binding");
+ instance->drirc.force_pstate_peak_gfx11_dgpu =
+ driQueryOptionb(&instance->drirc.options, "radv_force_pstate_peak_gfx11_dgpu");
+
instance->drirc.override_graphics_shader_version =
driQueryOptioni(&instance->drirc.options, "radv_override_graphics_shader_version");
instance->drirc.override_compute_shader_version =
diff --git a/src/amd/vulkan/radv_private.h b/src/amd/vulkan/radv_private.h
index 355d484e588..0f88f49cadd 100644
--- a/src/amd/vulkan/radv_private.h
+++ b/src/amd/vulkan/radv_private.h
@@ -419,6 +419,7 @@ struct radv_instance {
bool force_rt_wave64;
bool dual_color_blend_by_location;
bool legacy_sparse_binding;
+ bool force_pstate_peak_gfx11_dgpu;
bool clear_lds;
bool enable_dgc;
bool enable_khr_present_wait;
diff --git a/src/util/00-radv-defaults.conf b/src/util/00-radv-defaults.conf
index c19f895b533..b451e214976 100644
--- a/src/util/00-radv-defaults.conf
+++ b/src/util/00-radv-defaults.conf
@@ -163,6 +163,10 @@ Application bugs worked around in this file:
+
+
+
+
diff --git a/src/util/driconf.h b/src/util/driconf.h
index ca3498da709..7815beadc6e 100644
--- a/src/util/driconf.h
+++ b/src/util/driconf.h
@@ -702,6 +702,10 @@
DRI_CONF_OPT_B(radv_legacy_sparse_binding, def, \
"Enable legacy sparse binding (with implicit synchronization) on the graphics and compute queue")
+#define DRI_CONF_RADV_FORCE_PSTATE_PEAK_GFX11_DGPU(def) \
+ DRI_CONF_OPT_B(radv_force_pstate_peak_gfx11_dgpu, def, \
+ "Force the performance level to profile_peak (all clocks to the highest levels) for RDNA3 dGPUs")
+
/**
* Overrides for forcing re-compilation of pipelines when RADV_BUILD_ID_OVERRIDE is enabled.
* These need to be bumped every time a compiler bugfix is backported (up to 8 shader