diff options
Diffstat (limited to 'meta-amd-bsp/recipes-kernel/linux-4.19/linux-yocto-4.19.8/0840-drm-amd-Enable-Disable-NBPSTATE-on-On-OFF-of-UVD.patch')
-rw-r--r-- | meta-amd-bsp/recipes-kernel/linux-4.19/linux-yocto-4.19.8/0840-drm-amd-Enable-Disable-NBPSTATE-on-On-OFF-of-UVD.patch | 81 |
1 files changed, 81 insertions, 0 deletions
diff --git a/meta-amd-bsp/recipes-kernel/linux-4.19/linux-yocto-4.19.8/0840-drm-amd-Enable-Disable-NBPSTATE-on-On-OFF-of-UVD.patch b/meta-amd-bsp/recipes-kernel/linux-4.19/linux-yocto-4.19.8/0840-drm-amd-Enable-Disable-NBPSTATE-on-On-OFF-of-UVD.patch new file mode 100644 index 00000000..c7477dd3 --- /dev/null +++ b/meta-amd-bsp/recipes-kernel/linux-4.19/linux-yocto-4.19.8/0840-drm-amd-Enable-Disable-NBPSTATE-on-On-OFF-of-UVD.patch @@ -0,0 +1,81 @@ +From 57c1512021f51bf041d1bc1600ac6539854ad150 Mon Sep 17 00:00:00 2001 +From: "Guttula, Suresh" <Suresh.Guttula@amd.com> +Date: Fri, 16 Nov 2018 06:50:37 +0000 +Subject: [PATCH 0840/2940] drm/amd:Enable/Disable NBPSTATE on On/OFF of UVD + +We observe black lines (underflow) on display when playing a +4K video with UVD. On Disabling Low memory P state this issue is +not seen. +In this patch ,disabling low memory P state only when video +size >= 4k. +Multiple runs of power measurement shows no impact + +Signed-off-by: suresh guttula <suresh.guttula@amd.com> +Reviewed-by: Alex Deucher <alexander.deucher@amd.com> +Signed-off-by: Alex Deucher <alexander.deucher@amd.com> +--- + drivers/gpu/drm/amd/amdgpu/amdgpu_pm.c | 13 +++++++++++++ + drivers/gpu/drm/amd/amdgpu/amdgpu_uvd.c | 2 ++ + drivers/gpu/drm/amd/amdgpu/amdgpu_uvd.h | 2 ++ + 3 files changed, 17 insertions(+) + +diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_pm.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_pm.c +index 7235cd0b0fa9..0de8650c5d6e 100644 +--- a/drivers/gpu/drm/amd/amdgpu/amdgpu_pm.c ++++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_pm.c +@@ -33,6 +33,8 @@ + #include <linux/hwmon.h> + #include <linux/hwmon-sysfs.h> + #include <linux/nospec.h> ++#include "hwmgr.h" ++#define WIDTH_4K 3840 + + static int amdgpu_debugfs_pm_init(struct amdgpu_device *adev); + +@@ -1956,6 +1958,17 @@ void amdgpu_dpm_enable_uvd(struct amdgpu_device *adev, bool enable) + amdgpu_dpm_set_powergating_by_smu(adev, AMD_IP_BLOCK_TYPE_UVD, !enable); + mutex_unlock(&adev->pm.mutex); + } ++ /* enable/disable Low Memory PState for UVD (4k videos) */ ++ if (adev->asic_type == CHIP_STONEY && ++ adev->uvd.decode_image_width >= WIDTH_4K) { ++ struct pp_hwmgr *hwmgr = adev->powerplay.pp_handle; ++ ++ if (hwmgr && hwmgr->hwmgr_func && ++ hwmgr->hwmgr_func->update_nbdpm_pstate) ++ hwmgr->hwmgr_func->update_nbdpm_pstate(hwmgr, ++ !enable, ++ true); ++ } + } + + void amdgpu_dpm_enable_vce(struct amdgpu_device *adev, bool enable) +diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_uvd.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_uvd.c +index 69896f451e8a..4e5d13e41f6a 100644 +--- a/drivers/gpu/drm/amd/amdgpu/amdgpu_uvd.c ++++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_uvd.c +@@ -692,6 +692,8 @@ static int amdgpu_uvd_cs_msg_decode(struct amdgpu_device *adev, uint32_t *msg, + buf_sizes[0x1] = dpb_size; + buf_sizes[0x2] = image_size; + buf_sizes[0x4] = min_ctx_size; ++ /* store image width to adjust nb memory pstate */ ++ adev->uvd.decode_image_width = width; + return 0; + } + +diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_uvd.h b/drivers/gpu/drm/amd/amdgpu/amdgpu_uvd.h +index a3ab1a41060f..5eb63288d157 100644 +--- a/drivers/gpu/drm/amd/amdgpu/amdgpu_uvd.h ++++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_uvd.h +@@ -65,6 +65,8 @@ struct amdgpu_uvd { + struct drm_sched_entity entity; + struct delayed_work idle_work; + unsigned harvest_config; ++ /* store image width to adjust nb memory state */ ++ unsigned decode_image_width; + }; + + int amdgpu_uvd_sw_init(struct amdgpu_device *adev); +-- +2.17.1 + |