diff options
author | Dave Airlie <airlied@redhat.com> | 2013-07-17 20:19:46 -0400 |
---|---|---|
committer | Dave Airlie <airlied@redhat.com> | 2013-07-17 20:19:46 -0400 |
commit | fb328d7365a1fc12166c90758ea6f3c2944539e0 (patch) | |
tree | d2536f458026961958d01a6fb19fbd5b120df297 | |
parent | 6bd2cab2c1fd0616b28bb567543f53b624bf885a (diff) | |
parent | 444bddc4b9b3313a562cd3ba40f780fb82570f7d (diff) |
Merge branch 'drm-fixes-3.11' of git://people.freedesktop.org/~agd5f/linux
more DPM fixes for radeon.
* 'drm-fixes-3.11' of git://people.freedesktop.org/~agd5f/linux:
drm/radeon/dpm: add debugfs support for RS780/RS880 (v3)
drm/radeon/dpm/atom: fix broken gcc harder
drm/radeon/dpm/atom: restructure logic to work around a compiler bug
drm/radeon/dpm: fix atom vram table parsing
drm/radeon: fix an endian bug in atom table parsing
drm/radeon: add a module parameter to disable aspm
-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_asic.c | 1 | ||||
-rw-r--r-- | drivers/gpu/drm/radeon/radeon_asic.h | 2 | ||||
-rw-r--r-- | drivers/gpu/drm/radeon/radeon_atombios.c | 40 | ||||
-rw-r--r-- | drivers/gpu/drm/radeon/radeon_drv.c | 4 | ||||
-rw-r--r-- | drivers/gpu/drm/radeon/rs780_dpm.c | 25 | ||||
-rw-r--r-- | drivers/gpu/drm/radeon/rs780d.h | 3 | ||||
-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 |
11 files changed, 77 insertions, 33 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_asic.c b/drivers/gpu/drm/radeon/radeon_asic.c index fea997e247ba..78bec1a58ed1 100644 --- a/drivers/gpu/drm/radeon/radeon_asic.c +++ b/drivers/gpu/drm/radeon/radeon_asic.c | |||
@@ -1270,6 +1270,7 @@ static struct radeon_asic rs780_asic = { | |||
1270 | .get_sclk = &rs780_dpm_get_sclk, | 1270 | .get_sclk = &rs780_dpm_get_sclk, |
1271 | .get_mclk = &rs780_dpm_get_mclk, | 1271 | .get_mclk = &rs780_dpm_get_mclk, |
1272 | .print_power_state = &rs780_dpm_print_power_state, | 1272 | .print_power_state = &rs780_dpm_print_power_state, |
1273 | .debugfs_print_current_performance_level = &rs780_dpm_debugfs_print_current_performance_level, | ||
1273 | }, | 1274 | }, |
1274 | .pflip = { | 1275 | .pflip = { |
1275 | .pre_page_flip = &rs600_pre_page_flip, | 1276 | .pre_page_flip = &rs600_pre_page_flip, |
diff --git a/drivers/gpu/drm/radeon/radeon_asic.h b/drivers/gpu/drm/radeon/radeon_asic.h index b04b5789f4a8..ca1895709908 100644 --- a/drivers/gpu/drm/radeon/radeon_asic.h +++ b/drivers/gpu/drm/radeon/radeon_asic.h | |||
@@ -433,6 +433,8 @@ u32 rs780_dpm_get_sclk(struct radeon_device *rdev, bool low); | |||
433 | u32 rs780_dpm_get_mclk(struct radeon_device *rdev, bool low); | 433 | u32 rs780_dpm_get_mclk(struct radeon_device *rdev, bool low); |
434 | void rs780_dpm_print_power_state(struct radeon_device *rdev, | 434 | void rs780_dpm_print_power_state(struct radeon_device *rdev, |
435 | struct radeon_ps *ps); | 435 | struct radeon_ps *ps); |
436 | void rs780_dpm_debugfs_print_current_performance_level(struct radeon_device *rdev, | ||
437 | struct seq_file *m); | ||
436 | 438 | ||
437 | /* uvd */ | 439 | /* uvd */ |
438 | int r600_uvd_init(struct radeon_device *rdev); | 440 | int r600_uvd_init(struct radeon_device *rdev); |
diff --git a/drivers/gpu/drm/radeon/radeon_atombios.c b/drivers/gpu/drm/radeon/radeon_atombios.c index fbdaff55556b..e3f3e8841789 100644 --- a/drivers/gpu/drm/radeon/radeon_atombios.c +++ b/drivers/gpu/drm/radeon/radeon_atombios.c | |||
@@ -3513,7 +3513,6 @@ int radeon_atom_get_memory_info(struct radeon_device *rdev, | |||
3513 | u8 frev, crev, i; | 3513 | u8 frev, crev, i; |
3514 | u16 data_offset, size; | 3514 | u16 data_offset, size; |
3515 | union vram_info *vram_info; | 3515 | union vram_info *vram_info; |
3516 | u8 *p; | ||
3517 | 3516 | ||
3518 | memset(mem_info, 0, sizeof(struct atom_memory_info)); | 3517 | memset(mem_info, 0, sizeof(struct atom_memory_info)); |
3519 | 3518 | ||
@@ -3529,13 +3528,12 @@ int radeon_atom_get_memory_info(struct radeon_device *rdev, | |||
3529 | if (module_index < vram_info->v1_3.ucNumOfVRAMModule) { | 3528 | if (module_index < vram_info->v1_3.ucNumOfVRAMModule) { |
3530 | ATOM_VRAM_MODULE_V3 *vram_module = | 3529 | ATOM_VRAM_MODULE_V3 *vram_module = |
3531 | (ATOM_VRAM_MODULE_V3 *)vram_info->v1_3.aVramInfo; | 3530 | (ATOM_VRAM_MODULE_V3 *)vram_info->v1_3.aVramInfo; |
3532 | p = (u8 *)vram_info->v1_3.aVramInfo; | ||
3533 | 3531 | ||
3534 | for (i = 0; i < module_index; i++) { | 3532 | for (i = 0; i < module_index; i++) { |
3535 | vram_module = (ATOM_VRAM_MODULE_V3 *)p; | ||
3536 | if (le16_to_cpu(vram_module->usSize) == 0) | 3533 | if (le16_to_cpu(vram_module->usSize) == 0) |
3537 | return -EINVAL; | 3534 | return -EINVAL; |
3538 | p += le16_to_cpu(vram_module->usSize); | 3535 | vram_module = (ATOM_VRAM_MODULE_V3 *) |
3536 | ((u8 *)vram_module + le16_to_cpu(vram_module->usSize)); | ||
3539 | } | 3537 | } |
3540 | mem_info->mem_vendor = vram_module->asMemory.ucMemoryVenderID & 0xf; | 3538 | mem_info->mem_vendor = vram_module->asMemory.ucMemoryVenderID & 0xf; |
3541 | mem_info->mem_type = vram_module->asMemory.ucMemoryType & 0xf0; | 3539 | mem_info->mem_type = vram_module->asMemory.ucMemoryType & 0xf0; |
@@ -3547,13 +3545,12 @@ int radeon_atom_get_memory_info(struct radeon_device *rdev, | |||
3547 | if (module_index < vram_info->v1_4.ucNumOfVRAMModule) { | 3545 | if (module_index < vram_info->v1_4.ucNumOfVRAMModule) { |
3548 | ATOM_VRAM_MODULE_V4 *vram_module = | 3546 | ATOM_VRAM_MODULE_V4 *vram_module = |
3549 | (ATOM_VRAM_MODULE_V4 *)vram_info->v1_4.aVramInfo; | 3547 | (ATOM_VRAM_MODULE_V4 *)vram_info->v1_4.aVramInfo; |
3550 | p = (u8 *)vram_info->v1_4.aVramInfo; | ||
3551 | 3548 | ||
3552 | for (i = 0; i < module_index; i++) { | 3549 | for (i = 0; i < module_index; i++) { |
3553 | vram_module = (ATOM_VRAM_MODULE_V4 *)p; | ||
3554 | if (le16_to_cpu(vram_module->usModuleSize) == 0) | 3550 | if (le16_to_cpu(vram_module->usModuleSize) == 0) |
3555 | return -EINVAL; | 3551 | return -EINVAL; |
3556 | p += le16_to_cpu(vram_module->usModuleSize); | 3552 | vram_module = (ATOM_VRAM_MODULE_V4 *) |
3553 | ((u8 *)vram_module + le16_to_cpu(vram_module->usModuleSize)); | ||
3557 | } | 3554 | } |
3558 | mem_info->mem_vendor = vram_module->ucMemoryVenderID & 0xf; | 3555 | mem_info->mem_vendor = vram_module->ucMemoryVenderID & 0xf; |
3559 | mem_info->mem_type = vram_module->ucMemoryType & 0xf0; | 3556 | mem_info->mem_type = vram_module->ucMemoryType & 0xf0; |
@@ -3572,13 +3569,12 @@ int radeon_atom_get_memory_info(struct radeon_device *rdev, | |||
3572 | if (module_index < vram_info->v2_1.ucNumOfVRAMModule) { | 3569 | if (module_index < vram_info->v2_1.ucNumOfVRAMModule) { |
3573 | ATOM_VRAM_MODULE_V7 *vram_module = | 3570 | ATOM_VRAM_MODULE_V7 *vram_module = |
3574 | (ATOM_VRAM_MODULE_V7 *)vram_info->v2_1.aVramInfo; | 3571 | (ATOM_VRAM_MODULE_V7 *)vram_info->v2_1.aVramInfo; |
3575 | p = (u8 *)vram_info->v2_1.aVramInfo; | ||
3576 | 3572 | ||
3577 | for (i = 0; i < module_index; i++) { | 3573 | for (i = 0; i < module_index; i++) { |
3578 | vram_module = (ATOM_VRAM_MODULE_V7 *)p; | ||
3579 | if (le16_to_cpu(vram_module->usModuleSize) == 0) | 3574 | if (le16_to_cpu(vram_module->usModuleSize) == 0) |
3580 | return -EINVAL; | 3575 | return -EINVAL; |
3581 | p += le16_to_cpu(vram_module->usModuleSize); | 3576 | vram_module = (ATOM_VRAM_MODULE_V7 *) |
3577 | ((u8 *)vram_module + le16_to_cpu(vram_module->usModuleSize)); | ||
3582 | } | 3578 | } |
3583 | mem_info->mem_vendor = vram_module->ucMemoryVenderID & 0xf; | 3579 | mem_info->mem_vendor = vram_module->ucMemoryVenderID & 0xf; |
3584 | mem_info->mem_type = vram_module->ucMemoryType & 0xf0; | 3580 | mem_info->mem_type = vram_module->ucMemoryType & 0xf0; |
@@ -3628,21 +3624,19 @@ int radeon_atom_get_mclk_range_table(struct radeon_device *rdev, | |||
3628 | if (module_index < vram_info->v1_4.ucNumOfVRAMModule) { | 3624 | if (module_index < vram_info->v1_4.ucNumOfVRAMModule) { |
3629 | ATOM_VRAM_MODULE_V4 *vram_module = | 3625 | ATOM_VRAM_MODULE_V4 *vram_module = |
3630 | (ATOM_VRAM_MODULE_V4 *)vram_info->v1_4.aVramInfo; | 3626 | (ATOM_VRAM_MODULE_V4 *)vram_info->v1_4.aVramInfo; |
3631 | ATOM_MEMORY_TIMING_FORMAT *format; | ||
3632 | p = (u8 *)vram_info->v1_4.aVramInfo; | ||
3633 | 3627 | ||
3634 | for (i = 0; i < module_index; i++) { | 3628 | for (i = 0; i < module_index; i++) { |
3635 | vram_module = (ATOM_VRAM_MODULE_V4 *)p; | ||
3636 | if (le16_to_cpu(vram_module->usModuleSize) == 0) | 3629 | if (le16_to_cpu(vram_module->usModuleSize) == 0) |
3637 | return -EINVAL; | 3630 | return -EINVAL; |
3638 | p += le16_to_cpu(vram_module->usModuleSize); | 3631 | vram_module = (ATOM_VRAM_MODULE_V4 *) |
3632 | ((u8 *)vram_module + le16_to_cpu(vram_module->usModuleSize)); | ||
3639 | } | 3633 | } |
3640 | mclk_range_table->num_entries = (u8) | 3634 | mclk_range_table->num_entries = (u8) |
3641 | ((vram_module->usModuleSize - offsetof(ATOM_VRAM_MODULE_V4, asMemTiming)) / | 3635 | ((le16_to_cpu(vram_module->usModuleSize) - offsetof(ATOM_VRAM_MODULE_V4, asMemTiming)) / |
3642 | mem_timing_size); | 3636 | mem_timing_size); |
3643 | p = (u8 *)vram_module->asMemTiming; | 3637 | p = (u8 *)&vram_module->asMemTiming[0]; |
3644 | for (i = 0; i < mclk_range_table->num_entries; i++) { | 3638 | for (i = 0; i < mclk_range_table->num_entries; i++) { |
3645 | format = (ATOM_MEMORY_TIMING_FORMAT *)p; | 3639 | ATOM_MEMORY_TIMING_FORMAT *format = (ATOM_MEMORY_TIMING_FORMAT *)p; |
3646 | mclk_range_table->mclk[i] = le32_to_cpu(format->ulClkRange); | 3640 | mclk_range_table->mclk[i] = le32_to_cpu(format->ulClkRange); |
3647 | p += mem_timing_size; | 3641 | p += mem_timing_size; |
3648 | } | 3642 | } |
@@ -3705,17 +3699,21 @@ int radeon_atom_init_mc_reg_table(struct radeon_device *rdev, | |||
3705 | (ATOM_MEMORY_SETTING_DATA_BLOCK *) | 3699 | (ATOM_MEMORY_SETTING_DATA_BLOCK *) |
3706 | ((u8 *)reg_block + (2 * sizeof(u16)) + | 3700 | ((u8 *)reg_block + (2 * sizeof(u16)) + |
3707 | le16_to_cpu(reg_block->usRegIndexTblSize)); | 3701 | le16_to_cpu(reg_block->usRegIndexTblSize)); |
3702 | ATOM_INIT_REG_INDEX_FORMAT *format = ®_block->asRegIndexBuf[0]; | ||
3708 | num_entries = (u8)((le16_to_cpu(reg_block->usRegIndexTblSize)) / | 3703 | num_entries = (u8)((le16_to_cpu(reg_block->usRegIndexTblSize)) / |
3709 | sizeof(ATOM_INIT_REG_INDEX_FORMAT)) - 1; | 3704 | sizeof(ATOM_INIT_REG_INDEX_FORMAT)) - 1; |
3710 | if (num_entries > VBIOS_MC_REGISTER_ARRAY_SIZE) | 3705 | if (num_entries > VBIOS_MC_REGISTER_ARRAY_SIZE) |
3711 | return -EINVAL; | 3706 | return -EINVAL; |
3712 | while (!(reg_block->asRegIndexBuf[i].ucPreRegDataLength & ACCESS_PLACEHOLDER) && | 3707 | while (i < num_entries) { |
3713 | (i < num_entries)) { | 3708 | if (format->ucPreRegDataLength & ACCESS_PLACEHOLDER) |
3709 | break; | ||
3714 | reg_table->mc_reg_address[i].s1 = | 3710 | reg_table->mc_reg_address[i].s1 = |
3715 | (u16)(le16_to_cpu(reg_block->asRegIndexBuf[i].usRegIndex)); | 3711 | (u16)(le16_to_cpu(format->usRegIndex)); |
3716 | reg_table->mc_reg_address[i].pre_reg_data = | 3712 | reg_table->mc_reg_address[i].pre_reg_data = |
3717 | (u8)(reg_block->asRegIndexBuf[i].ucPreRegDataLength); | 3713 | (u8)(format->ucPreRegDataLength); |
3718 | i++; | 3714 | i++; |
3715 | format = (ATOM_INIT_REG_INDEX_FORMAT *) | ||
3716 | ((u8 *)format + sizeof(ATOM_INIT_REG_INDEX_FORMAT)); | ||
3719 | } | 3717 | } |
3720 | reg_table->last = i; | 3718 | reg_table->last = i; |
3721 | while ((*(u32 *)reg_data != END_OF_REG_DATA_BLOCK) && | 3719 | while ((*(u32 *)reg_data != END_OF_REG_DATA_BLOCK) && |
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/rs780_dpm.c b/drivers/gpu/drm/radeon/rs780_dpm.c index bef832a62fee..d1a1ce73bd45 100644 --- a/drivers/gpu/drm/radeon/rs780_dpm.c +++ b/drivers/gpu/drm/radeon/rs780_dpm.c | |||
@@ -28,6 +28,7 @@ | |||
28 | #include "r600_dpm.h" | 28 | #include "r600_dpm.h" |
29 | #include "rs780_dpm.h" | 29 | #include "rs780_dpm.h" |
30 | #include "atom.h" | 30 | #include "atom.h" |
31 | #include <linux/seq_file.h> | ||
31 | 32 | ||
32 | static struct igp_ps *rs780_get_ps(struct radeon_ps *rps) | 33 | static struct igp_ps *rs780_get_ps(struct radeon_ps *rps) |
33 | { | 34 | { |
@@ -961,3 +962,27 @@ u32 rs780_dpm_get_mclk(struct radeon_device *rdev, bool low) | |||
961 | 962 | ||
962 | return pi->bootup_uma_clk; | 963 | return pi->bootup_uma_clk; |
963 | } | 964 | } |
965 | |||
966 | void rs780_dpm_debugfs_print_current_performance_level(struct radeon_device *rdev, | ||
967 | struct seq_file *m) | ||
968 | { | ||
969 | struct radeon_ps *rps = rdev->pm.dpm.current_ps; | ||
970 | struct igp_ps *ps = rs780_get_ps(rps); | ||
971 | u32 current_fb_div = RREG32(FVTHROT_STATUS_REG0) & CURRENT_FEEDBACK_DIV_MASK; | ||
972 | u32 func_cntl = RREG32(CG_SPLL_FUNC_CNTL); | ||
973 | u32 ref_div = ((func_cntl & SPLL_REF_DIV_MASK) >> SPLL_REF_DIV_SHIFT) + 1; | ||
974 | u32 post_div = ((func_cntl & SPLL_SW_HILEN_MASK) >> SPLL_SW_HILEN_SHIFT) + 1 + | ||
975 | ((func_cntl & SPLL_SW_LOLEN_MASK) >> SPLL_SW_LOLEN_SHIFT) + 1; | ||
976 | u32 sclk = (rdev->clock.spll.reference_freq * current_fb_div) / | ||
977 | (post_div * ref_div); | ||
978 | |||
979 | seq_printf(m, "uvd vclk: %d dclk: %d\n", rps->vclk, rps->dclk); | ||
980 | |||
981 | /* guess based on the current sclk */ | ||
982 | if (sclk < (ps->sclk_low + 500)) | ||
983 | seq_printf(m, "power level 0 sclk: %u vddc_index: %d\n", | ||
984 | ps->sclk_low, ps->min_voltage); | ||
985 | else | ||
986 | seq_printf(m, "power level 1 sclk: %u vddc_index: %d\n", | ||
987 | ps->sclk_high, ps->max_voltage); | ||
988 | } | ||
diff --git a/drivers/gpu/drm/radeon/rs780d.h b/drivers/gpu/drm/radeon/rs780d.h index b1142ed1c628..cfbe9a43d97b 100644 --- a/drivers/gpu/drm/radeon/rs780d.h +++ b/drivers/gpu/drm/radeon/rs780d.h | |||
@@ -28,6 +28,7 @@ | |||
28 | # define SPLL_SLEEP (1 << 1) | 28 | # define SPLL_SLEEP (1 << 1) |
29 | # define SPLL_REF_DIV(x) ((x) << 2) | 29 | # define SPLL_REF_DIV(x) ((x) << 2) |
30 | # define SPLL_REF_DIV_MASK (7 << 2) | 30 | # define SPLL_REF_DIV_MASK (7 << 2) |
31 | # define SPLL_REF_DIV_SHIFT 2 | ||
31 | # define SPLL_FB_DIV(x) ((x) << 5) | 32 | # define SPLL_FB_DIV(x) ((x) << 5) |
32 | # define SPLL_FB_DIV_MASK (0xff << 2) | 33 | # define SPLL_FB_DIV_MASK (0xff << 2) |
33 | # define SPLL_FB_DIV_SHIFT 2 | 34 | # define SPLL_FB_DIV_SHIFT 2 |
@@ -36,8 +37,10 @@ | |||
36 | # define SPLL_PULSENUM_MASK (3 << 14) | 37 | # define SPLL_PULSENUM_MASK (3 << 14) |
37 | # define SPLL_SW_HILEN(x) ((x) << 16) | 38 | # define SPLL_SW_HILEN(x) ((x) << 16) |
38 | # define SPLL_SW_HILEN_MASK (0xf << 16) | 39 | # define SPLL_SW_HILEN_MASK (0xf << 16) |
40 | # define SPLL_SW_HILEN_SHIFT 16 | ||
39 | # define SPLL_SW_LOLEN(x) ((x) << 20) | 41 | # define SPLL_SW_LOLEN(x) ((x) << 20) |
40 | # define SPLL_SW_LOLEN_MASK (0xf << 20) | 42 | # define SPLL_SW_LOLEN_MASK (0xf << 20) |
43 | # define SPLL_SW_LOLEN_SHIFT 20 | ||
41 | # define SPLL_DIVEN (1 << 24) | 44 | # define SPLL_DIVEN (1 << 24) |
42 | # define SPLL_BYPASS_EN (1 << 25) | 45 | # define SPLL_BYPASS_EN (1 << 25) |
43 | # define SPLL_CHG_STATUS (1 << 29) | 46 | # define SPLL_CHG_STATUS (1 << 29) |
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 | ||