diff options
Diffstat (limited to 'meta-amd-bsp/recipes-kernel/linux/linux-yocto-4.19.8/4363-drm-amdgpu-perform-p-state-switch-after-the-whole-hi.patch')
-rw-r--r-- | meta-amd-bsp/recipes-kernel/linux/linux-yocto-4.19.8/4363-drm-amdgpu-perform-p-state-switch-after-the-whole-hi.patch | 92 |
1 files changed, 92 insertions, 0 deletions
diff --git a/meta-amd-bsp/recipes-kernel/linux/linux-yocto-4.19.8/4363-drm-amdgpu-perform-p-state-switch-after-the-whole-hi.patch b/meta-amd-bsp/recipes-kernel/linux/linux-yocto-4.19.8/4363-drm-amdgpu-perform-p-state-switch-after-the-whole-hi.patch new file mode 100644 index 00000000..f96d7ef2 --- /dev/null +++ b/meta-amd-bsp/recipes-kernel/linux/linux-yocto-4.19.8/4363-drm-amdgpu-perform-p-state-switch-after-the-whole-hi.patch @@ -0,0 +1,92 @@ +From aa69b8c4902268b4cc26a99362ff758d03c2710c Mon Sep 17 00:00:00 2001 +From: Evan Quan <evan.quan@amd.com> +Date: Tue, 5 Nov 2019 15:15:33 +0800 +Subject: [PATCH 4363/4736] drm/amdgpu: perform p-state switch after the whole + hive initialized + +P-state switch should be performed after all devices from the hive +get initialized. + +Change-Id: Ifc7cac9ef0cf250447d2a412da35d601e2ac79ec +Signed-off-by: Evan Quan <evan.quan@amd.com> +Reviewed-by: Feifei Xu <Feifei.Xu@amd.com> +Reviewed-by: Jonathan Kim <Jonathan.Kim at amd.com> +--- + drivers/gpu/drm/amd/amdgpu/amdgpu_device.c | 47 ++++++++++++++++------ + 1 file changed, 35 insertions(+), 12 deletions(-) + +diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_device.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_device.c +index edc11fb2bf24..21ff9f6da355 100644 +--- a/drivers/gpu/drm/amd/amdgpu/amdgpu_device.c ++++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_device.c +@@ -2057,6 +2057,7 @@ static int amdgpu_device_enable_mgpu_fan_boost(void) + */ + static int amdgpu_device_ip_late_init(struct amdgpu_device *adev) + { ++ struct amdgpu_gpu_instance *gpu_instance; + int i = 0, r; + + for (i = 0; i < adev->num_ip_blocks; i++) { +@@ -2082,6 +2083,40 @@ static int amdgpu_device_ip_late_init(struct amdgpu_device *adev) + if (r) + DRM_ERROR("enable mgpu fan boost failed (%d).\n", r); + ++ ++ if (adev->gmc.xgmi.num_physical_nodes > 1) { ++ mutex_lock(&mgpu_info.mutex); ++ ++ /* ++ * Reset device p-state to low as this was booted with high. ++ * ++ * This should be performed only after all devices from the same ++ * hive get initialized. ++ * ++ * However, it's unknown how many device in the hive in advance. ++ * As this is counted one by one during devices initializations. ++ * ++ * So, we wait for all XGMI interlinked devices initialized. ++ * This may bring some delays as those devices may come from ++ * different hives. But that should be OK. ++ */ ++ if (mgpu_info.num_dgpu == adev->gmc.xgmi.num_physical_nodes) { ++ for (i = 0; i < mgpu_info.num_gpu; i++) { ++ gpu_instance = &(mgpu_info.gpu_ins[i]); ++ if (gpu_instance->adev->flags & AMD_IS_APU) ++ continue; ++ ++ r = amdgpu_xgmi_set_pstate(gpu_instance->adev, 0); ++ if (r) { ++ DRM_ERROR("pstate setting failed (%d).\n", r); ++ break; ++ } ++ } ++ } ++ ++ mutex_unlock(&mgpu_info.mutex); ++ } ++ + return 0; + } + +@@ -2193,18 +2228,6 @@ static void amdgpu_device_delayed_init_work_handler(struct work_struct *work) + r = amdgpu_ib_ring_tests(adev); + if (r) + DRM_ERROR("ib ring test failed (%d).\n", r); +- +- /* +- * set to low pstate by default +- * This should be performed after all devices from +- * XGMI finish their initializations. Thus it's moved +- * to here. +- * The time delay is 2S. TODO: confirm whether that +- * is enough for all possible XGMI setups. +- */ +- r = amdgpu_xgmi_set_pstate(adev, 0); +- if (r) +- DRM_ERROR("pstate setting failed (%d).\n", r); + } + + static void amdgpu_device_delay_enable_gfx_off(struct work_struct *work) +-- +2.17.1 + |