2
0
mirror of git://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git synced 2025-09-04 20:19:47 +08:00

drm/amd/display: Update IPS default mode for DCN35/DCN351

[WHY]
RCG state of IPX in idle is more stable for DCN351 and some variants of
DCN35 than IPS2.

[HOW]
Rework dm_get_default_ips_mode() to specify default per ASIC and update
DCN35/DCN351 defaults accordingly.

Cc: Mario Limonciello <mario.limonciello@amd.com>
Cc: Alex Deucher <alexander.deucher@amd.com>
Cc: stable@vger.kernel.org
Reviewed-by: Sun peng Li <sunpeng.li@amd.com>
Signed-off-by: Roman Li <Roman.Li@amd.com>
Signed-off-by: Alex Hung <alex.hung@amd.com>
Tested-by: Daniel Wheeler <daniel.wheeler@amd.com>
Signed-off-by: Alex Deucher <alexander.deucher@amd.com>
This commit is contained in:
Roman Li 2024-09-05 14:22:30 -04:00 committed by Alex Deucher
parent 327e62f47e
commit 199888aa25

View File

@ -1771,6 +1771,10 @@ static struct dml2_soc_bb *dm_dmub_get_vbios_bounding_box(struct amdgpu_device *
static enum dmub_ips_disable_type dm_get_default_ips_mode( static enum dmub_ips_disable_type dm_get_default_ips_mode(
struct amdgpu_device *adev) struct amdgpu_device *adev)
{ {
enum dmub_ips_disable_type ret = DMUB_IPS_ENABLE;
switch (amdgpu_ip_version(adev, DCE_HWIP, 0)) {
case IP_VERSION(3, 5, 0):
/* /*
* On DCN35 systems with Z8 enabled, it's possible for IPS2 + Z8 to * On DCN35 systems with Z8 enabled, it's possible for IPS2 + Z8 to
* cause a hard hang. A fix exists for newer PMFW. * cause a hard hang. A fix exists for newer PMFW.
@ -1781,15 +1785,27 @@ static enum dmub_ips_disable_type dm_get_default_ips_mode(
* *
* When checking pmfw version, use the major and minor only. * When checking pmfw version, use the major and minor only.
*/ */
if (amdgpu_ip_version(adev, DCE_HWIP, 0) == IP_VERSION(3, 5, 0) && if ((adev->pm.fw_version & 0x00FFFF00) < 0x005D6300)
(adev->pm.fw_version & 0x00FFFF00) < 0x005D6300) ret = DMUB_IPS_RCG_IN_ACTIVE_IPS2_IN_OFF;
return DMUB_IPS_RCG_IN_ACTIVE_IPS2_IN_OFF; else if (amdgpu_ip_version(adev, GC_HWIP, 0) > IP_VERSION(11, 5, 0))
/*
if (amdgpu_ip_version(adev, DCE_HWIP, 0) >= IP_VERSION(3, 5, 0)) * Other ASICs with DCN35 that have residency issues with
return DMUB_IPS_ENABLE; * IPS2 in idle.
* We want them to use IPS2 only in display off cases.
*/
ret = DMUB_IPS_RCG_IN_ACTIVE_IPS2_IN_OFF;
break;
case IP_VERSION(3, 5, 1):
ret = DMUB_IPS_RCG_IN_ACTIVE_IPS2_IN_OFF;
break;
default:
/* ASICs older than DCN35 do not have IPSs */ /* ASICs older than DCN35 do not have IPSs */
return DMUB_IPS_DISABLE_ALL; if (amdgpu_ip_version(adev, DCE_HWIP, 0) < IP_VERSION(3, 5, 0))
ret = DMUB_IPS_DISABLE_ALL;
break;
}
return ret;
} }
static int amdgpu_dm_init(struct amdgpu_device *adev) static int amdgpu_dm_init(struct amdgpu_device *adev)