diff options
author | Alex Deucher <alexander.deucher@amd.com> | 2013-07-16 15:58:50 -0400 |
---|---|---|
committer | Alex Deucher <alexander.deucher@amd.com> | 2013-07-17 14:52:46 -0400 |
commit | 1294d4a36d1e0dacfc37c1f269d78ff58f0cd8bc (patch) | |
tree | 9a5afd468988672a58310fdcfbe14839672f28c0 | |
parent | d1ce3d5496f2a7c90dd00a9133572f931d2acdcc (diff) |
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>
-rw-r--r-- | drivers/gpu/drm/radeon/evergreen.c | 3 | ||||
-rw-r--r-- | drivers/gpu/drm/radeon/radeon.h | 1 | ||||
-rw-r--r-- | drivers/gpu/drm/radeon/radeon_drv.c | 4 | ||||
-rw-r--r-- | drivers/gpu/drm/radeon/rv6xx_dpm.c | 14 | ||||
-rw-r--r-- | drivers/gpu/drm/radeon/rv770_dpm.c | 14 | ||||
-rw-r--r-- | drivers/gpu/drm/radeon/si.c | 3 |
6 files changed, 27 insertions, 12 deletions
diff --git a/drivers/gpu/drm/radeon/evergreen.c b/drivers/gpu/drm/radeon/evergreen.c index 526e428cb4d0..038dcac7670c 100644 --- a/drivers/gpu/drm/radeon/evergreen.c +++ b/drivers/gpu/drm/radeon/evergreen.c | |||
@@ -5515,6 +5515,9 @@ void evergreen_program_aspm(struct radeon_device *rdev) | |||
5515 | */ | 5515 | */ |
5516 | bool fusion_platform = false; | 5516 | bool fusion_platform = false; |
5517 | 5517 | ||
5518 | if (radeon_aspm == 0) | ||
5519 | return; | ||
5520 | |||
5518 | if (!(rdev->flags & RADEON_IS_PCIE)) | 5521 | if (!(rdev->flags & RADEON_IS_PCIE)) |
5519 | return; | 5522 | return; |
5520 | 5523 | ||
diff --git a/drivers/gpu/drm/radeon/radeon.h b/drivers/gpu/drm/radeon/radeon.h index 001081757895..2f08219c39b6 100644 --- a/drivers/gpu/drm/radeon/radeon.h +++ b/drivers/gpu/drm/radeon/radeon.h | |||
@@ -97,6 +97,7 @@ extern int radeon_msi; | |||
97 | extern int radeon_lockup_timeout; | 97 | extern int radeon_lockup_timeout; |
98 | extern int radeon_fastfb; | 98 | extern int radeon_fastfb; |
99 | extern int radeon_dpm; | 99 | extern int radeon_dpm; |
100 | extern int radeon_aspm; | ||
100 | 101 | ||
101 | /* | 102 | /* |
102 | * Copy from radeon_drv.h so we don't have to include both and have conflicting | 103 | * Copy from radeon_drv.h so we don't have to include both and have conflicting |
diff --git a/drivers/gpu/drm/radeon/radeon_drv.c b/drivers/gpu/drm/radeon/radeon_drv.c index e5419b350170..29876b1be8ec 100644 --- a/drivers/gpu/drm/radeon/radeon_drv.c +++ b/drivers/gpu/drm/radeon/radeon_drv.c | |||
@@ -167,6 +167,7 @@ int radeon_msi = -1; | |||
167 | int radeon_lockup_timeout = 10000; | 167 | int radeon_lockup_timeout = 10000; |
168 | int radeon_fastfb = 0; | 168 | int radeon_fastfb = 0; |
169 | int radeon_dpm = -1; | 169 | int radeon_dpm = -1; |
170 | int radeon_aspm = -1; | ||
170 | 171 | ||
171 | MODULE_PARM_DESC(no_wb, "Disable AGP writeback for scratch registers"); | 172 | MODULE_PARM_DESC(no_wb, "Disable AGP writeback for scratch registers"); |
172 | module_param_named(no_wb, radeon_no_wb, int, 0444); | 173 | module_param_named(no_wb, radeon_no_wb, int, 0444); |
@@ -225,6 +226,9 @@ module_param_named(fastfb, radeon_fastfb, int, 0444); | |||
225 | MODULE_PARM_DESC(dpm, "DPM support (1 = enable, 0 = disable, -1 = auto)"); | 226 | MODULE_PARM_DESC(dpm, "DPM support (1 = enable, 0 = disable, -1 = auto)"); |
226 | module_param_named(dpm, radeon_dpm, int, 0444); | 227 | module_param_named(dpm, radeon_dpm, int, 0444); |
227 | 228 | ||
229 | MODULE_PARM_DESC(aspm, "ASPM support (1 = enable, 0 = disable, -1 = auto)"); | ||
230 | module_param_named(aspm, radeon_aspm, int, 0444); | ||
231 | |||
228 | static struct pci_device_id pciidlist[] = { | 232 | static struct pci_device_id pciidlist[] = { |
229 | radeon_PCI_IDS | 233 | radeon_PCI_IDS |
230 | }; | 234 | }; |
diff --git a/drivers/gpu/drm/radeon/rv6xx_dpm.c b/drivers/gpu/drm/radeon/rv6xx_dpm.c index 8303de267ee5..65e33f387341 100644 --- a/drivers/gpu/drm/radeon/rv6xx_dpm.c +++ b/drivers/gpu/drm/radeon/rv6xx_dpm.c | |||
@@ -1763,12 +1763,14 @@ void rv6xx_setup_asic(struct radeon_device *rdev) | |||
1763 | { | 1763 | { |
1764 | r600_enable_acpi_pm(rdev); | 1764 | r600_enable_acpi_pm(rdev); |
1765 | 1765 | ||
1766 | if (rdev->pm.dpm.platform_caps & ATOM_PP_PLATFORM_CAP_ASPM_L0s) | 1766 | if (radeon_aspm != 0) { |
1767 | rv6xx_enable_l0s(rdev); | 1767 | if (rdev->pm.dpm.platform_caps & ATOM_PP_PLATFORM_CAP_ASPM_L0s) |
1768 | if (rdev->pm.dpm.platform_caps & ATOM_PP_PLATFORM_CAP_ASPM_L1) | 1768 | rv6xx_enable_l0s(rdev); |
1769 | rv6xx_enable_l1(rdev); | 1769 | if (rdev->pm.dpm.platform_caps & ATOM_PP_PLATFORM_CAP_ASPM_L1) |
1770 | if (rdev->pm.dpm.platform_caps & ATOM_PP_PLATFORM_CAP_TURNOFFPLL_ASPML1) | 1770 | rv6xx_enable_l1(rdev); |
1771 | rv6xx_enable_pll_sleep_in_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 | void rv6xx_dpm_display_configuration_changed(struct radeon_device *rdev) | 1776 | void rv6xx_dpm_display_configuration_changed(struct radeon_device *rdev) |
diff --git a/drivers/gpu/drm/radeon/rv770_dpm.c b/drivers/gpu/drm/radeon/rv770_dpm.c index d914e04ea39a..2d347925f77d 100644 --- a/drivers/gpu/drm/radeon/rv770_dpm.c +++ b/drivers/gpu/drm/radeon/rv770_dpm.c | |||
@@ -2099,12 +2099,14 @@ void rv770_dpm_setup_asic(struct radeon_device *rdev) | |||
2099 | 2099 | ||
2100 | rv770_enable_acpi_pm(rdev); | 2100 | rv770_enable_acpi_pm(rdev); |
2101 | 2101 | ||
2102 | if (rdev->pm.dpm.platform_caps & ATOM_PP_PLATFORM_CAP_ASPM_L0s) | 2102 | if (radeon_aspm != 0) { |
2103 | rv770_enable_l0s(rdev); | 2103 | if (rdev->pm.dpm.platform_caps & ATOM_PP_PLATFORM_CAP_ASPM_L0s) |
2104 | if (rdev->pm.dpm.platform_caps & ATOM_PP_PLATFORM_CAP_ASPM_L1) | 2104 | rv770_enable_l0s(rdev); |
2105 | rv770_enable_l1(rdev); | 2105 | if (rdev->pm.dpm.platform_caps & ATOM_PP_PLATFORM_CAP_ASPM_L1) |
2106 | if (rdev->pm.dpm.platform_caps & ATOM_PP_PLATFORM_CAP_TURNOFFPLL_ASPML1) | 2106 | rv770_enable_l1(rdev); |
2107 | rv770_enable_pll_sleep_in_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 | void rv770_dpm_display_configuration_changed(struct radeon_device *rdev) | 2112 | void rv770_dpm_display_configuration_changed(struct radeon_device *rdev) |
diff --git a/drivers/gpu/drm/radeon/si.c b/drivers/gpu/drm/radeon/si.c index d3f05076f385..d325280e2f9f 100644 --- a/drivers/gpu/drm/radeon/si.c +++ b/drivers/gpu/drm/radeon/si.c | |||
@@ -7053,6 +7053,9 @@ static void si_program_aspm(struct radeon_device *rdev) | |||
7053 | bool disable_l0s = false, disable_l1 = false, disable_plloff_in_l1 = false; | 7053 | bool disable_l0s = false, disable_l1 = false, disable_plloff_in_l1 = false; |
7054 | bool disable_clkreq = false; | 7054 | bool disable_clkreq = false; |
7055 | 7055 | ||
7056 | if (radeon_aspm == 0) | ||
7057 | return; | ||
7058 | |||
7056 | if (!(rdev->flags & RADEON_IS_PCIE)) | 7059 | if (!(rdev->flags & RADEON_IS_PCIE)) |
7057 | return; | 7060 | return; |
7058 | 7061 | ||