Skip to content

Commit

Permalink
drm/amdgpu: disable ASPM on Intel AlderLake based systems
Browse files Browse the repository at this point in the history
Active State Power Management (ASPM) feature is enabled since kernel 5.14.
There are some AMD GFX cards (such as WX3200 and RX640) that cannot be
used with Intel AlderLake based systems to enable ASPM. Using these GFX
cards as video/display output, Intel Alder Lake based systems will hang
during suspend/resume.

Add extra check to disable ASPM on Intel AlderLake based systems.

Fixes: 0064b0c ("drm/amd/pm: enable ASPM by default")
Link: https://gitlab.freedesktop.org/drm/amd/-/issues/1885
Signed-off-by: Richard Gong <richard.gong@amd.com>
  • Loading branch information
rgongatamd authored and intel-lab-lkp committed Apr 8, 2022
1 parent 3123109 commit bb9a037
Showing 1 changed file with 16 additions and 1 deletion.
17 changes: 16 additions & 1 deletion drivers/gpu/drm/amd/amdgpu/vi.c
Expand Up @@ -81,6 +81,10 @@
#include "mxgpu_vi.h"
#include "amdgpu_dm.h"

#if IS_ENABLED(CONFIG_X86_64)
#include <asm/intel-family.h>
#endif

#define ixPCIE_LC_L1_PM_SUBSTATE 0x100100C6
#define PCIE_LC_L1_PM_SUBSTATE__LC_L1_SUBSTATES_OVERRIDE_EN_MASK 0x00000001L
#define PCIE_LC_L1_PM_SUBSTATE__LC_PCI_PM_L1_2_OVERRIDE_MASK 0x00000002L
Expand Down Expand Up @@ -1134,13 +1138,24 @@ static void vi_enable_aspm(struct amdgpu_device *adev)
WREG32_PCIE(ixPCIE_LC_CNTL, data);
}

static bool intel_core_apsm_chk(void)
{
#if IS_ENABLED(CONFIG_X86_64)
struct cpuinfo_x86 *c = &cpu_data(0);

return (c->x86 == 6 && c->x86_model == INTEL_FAM6_ALDERLAKE);
#else
return false;
#endif
}

static void vi_program_aspm(struct amdgpu_device *adev)
{
u32 data, data1, orig;
bool bL1SS = false;
bool bClkReqSupport = true;

if (!amdgpu_device_should_use_aspm(adev))
if (!amdgpu_device_should_use_aspm(adev) || intel_core_apsm_chk())
return;

if (adev->flags & AMD_IS_APU ||
Expand Down

0 comments on commit bb9a037

Please sign in to comment.