Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux

drm/radeon: add a module parameter to disable aspm

Can cause hangs when enabled in certain motherboards.
Set radeon.aspm=0 to disable aspm.

Signed-off-by: Alex Deucher <alexander.deucher@amd.com>

+27 -12
+3
drivers/gpu/drm/radeon/evergreen.c
··· 5515 5515 */ 5516 5516 bool fusion_platform = false; 5517 5517 5518 + if (radeon_aspm == 0) 5519 + return; 5520 + 5518 5521 if (!(rdev->flags & RADEON_IS_PCIE)) 5519 5522 return; 5520 5523
+1
drivers/gpu/drm/radeon/radeon.h
··· 97 97 extern int radeon_lockup_timeout; 98 98 extern int radeon_fastfb; 99 99 extern int radeon_dpm; 100 + extern int radeon_aspm; 100 101 101 102 /* 102 103 * Copy from radeon_drv.h so we don't have to include both and have conflicting
+4
drivers/gpu/drm/radeon/radeon_drv.c
··· 167 167 int radeon_lockup_timeout = 10000; 168 168 int radeon_fastfb = 0; 169 169 int radeon_dpm = -1; 170 + int radeon_aspm = -1; 170 171 171 172 MODULE_PARM_DESC(no_wb, "Disable AGP writeback for scratch registers"); 172 173 module_param_named(no_wb, radeon_no_wb, int, 0444); ··· 225 224 226 225 MODULE_PARM_DESC(dpm, "DPM support (1 = enable, 0 = disable, -1 = auto)"); 227 226 module_param_named(dpm, radeon_dpm, int, 0444); 227 + 228 + MODULE_PARM_DESC(aspm, "ASPM support (1 = enable, 0 = disable, -1 = auto)"); 229 + module_param_named(aspm, radeon_aspm, int, 0444); 228 230 229 231 static struct pci_device_id pciidlist[] = { 230 232 radeon_PCI_IDS
+8 -6
drivers/gpu/drm/radeon/rv6xx_dpm.c
··· 1763 1763 { 1764 1764 r600_enable_acpi_pm(rdev); 1765 1765 1766 - if (rdev->pm.dpm.platform_caps & ATOM_PP_PLATFORM_CAP_ASPM_L0s) 1767 - rv6xx_enable_l0s(rdev); 1768 - if (rdev->pm.dpm.platform_caps & ATOM_PP_PLATFORM_CAP_ASPM_L1) 1769 - rv6xx_enable_l1(rdev); 1770 - if (rdev->pm.dpm.platform_caps & ATOM_PP_PLATFORM_CAP_TURNOFFPLL_ASPML1) 1771 - rv6xx_enable_pll_sleep_in_l1(rdev); 1766 + if (radeon_aspm != 0) { 1767 + if (rdev->pm.dpm.platform_caps & ATOM_PP_PLATFORM_CAP_ASPM_L0s) 1768 + rv6xx_enable_l0s(rdev); 1769 + if (rdev->pm.dpm.platform_caps & ATOM_PP_PLATFORM_CAP_ASPM_L1) 1770 + rv6xx_enable_l1(rdev); 1771 + if (rdev->pm.dpm.platform_caps & ATOM_PP_PLATFORM_CAP_TURNOFFPLL_ASPML1) 1772 + rv6xx_enable_pll_sleep_in_l1(rdev); 1773 + } 1772 1774 } 1773 1775 1774 1776 void rv6xx_dpm_display_configuration_changed(struct radeon_device *rdev)
+8 -6
drivers/gpu/drm/radeon/rv770_dpm.c
··· 2099 2099 2100 2100 rv770_enable_acpi_pm(rdev); 2101 2101 2102 - if (rdev->pm.dpm.platform_caps & ATOM_PP_PLATFORM_CAP_ASPM_L0s) 2103 - rv770_enable_l0s(rdev); 2104 - if (rdev->pm.dpm.platform_caps & ATOM_PP_PLATFORM_CAP_ASPM_L1) 2105 - rv770_enable_l1(rdev); 2106 - if (rdev->pm.dpm.platform_caps & ATOM_PP_PLATFORM_CAP_TURNOFFPLL_ASPML1) 2107 - rv770_enable_pll_sleep_in_l1(rdev); 2102 + if (radeon_aspm != 0) { 2103 + if (rdev->pm.dpm.platform_caps & ATOM_PP_PLATFORM_CAP_ASPM_L0s) 2104 + rv770_enable_l0s(rdev); 2105 + if (rdev->pm.dpm.platform_caps & ATOM_PP_PLATFORM_CAP_ASPM_L1) 2106 + rv770_enable_l1(rdev); 2107 + if (rdev->pm.dpm.platform_caps & ATOM_PP_PLATFORM_CAP_TURNOFFPLL_ASPML1) 2108 + rv770_enable_pll_sleep_in_l1(rdev); 2109 + } 2108 2110 } 2109 2111 2110 2112 void rv770_dpm_display_configuration_changed(struct radeon_device *rdev)
+3
drivers/gpu/drm/radeon/si.c
··· 7053 7053 bool disable_l0s = false, disable_l1 = false, disable_plloff_in_l1 = false; 7054 7054 bool disable_clkreq = false; 7055 7055 7056 + if (radeon_aspm == 0) 7057 + return; 7058 + 7056 7059 if (!(rdev->flags & RADEON_IS_PCIE)) 7057 7060 return; 7058 7061