diff options
-rw-r--r-- | drivers/gpu/drm/radeon/evergreen_hdmi.c | 2 | ||||
-rw-r--r-- | drivers/gpu/drm/radeon/ni_dpm.c | 7 | ||||
-rw-r--r-- | drivers/gpu/drm/radeon/radeon_atombios.c | 2 | ||||
-rw-r--r-- | drivers/gpu/drm/radeon/si.c | 14 | ||||
-rw-r--r-- | drivers/gpu/drm/radeon/si_dpm.c | 34 |
5 files changed, 24 insertions, 35 deletions
diff --git a/drivers/gpu/drm/radeon/evergreen_hdmi.c b/drivers/gpu/drm/radeon/evergreen_hdmi.c index b0d3fb341417..bb9ea3641312 100644 --- a/drivers/gpu/drm/radeon/evergreen_hdmi.c +++ b/drivers/gpu/drm/radeon/evergreen_hdmi.c | |||
@@ -157,9 +157,9 @@ static void evergreen_audio_set_dto(struct drm_encoder *encoder, u32 clock) | |||
157 | * number (coefficient of two integer numbers. DCCG_AUDIO_DTOx_PHASE | 157 | * number (coefficient of two integer numbers. DCCG_AUDIO_DTOx_PHASE |
158 | * is the numerator, DCCG_AUDIO_DTOx_MODULE is the denominator | 158 | * is the numerator, DCCG_AUDIO_DTOx_MODULE is the denominator |
159 | */ | 159 | */ |
160 | WREG32(DCCG_AUDIO_DTO_SOURCE, DCCG_AUDIO_DTO0_SOURCE_SEL(radeon_crtc->crtc_id)); | ||
160 | WREG32(DCCG_AUDIO_DTO0_PHASE, base_rate * 100); | 161 | WREG32(DCCG_AUDIO_DTO0_PHASE, base_rate * 100); |
161 | WREG32(DCCG_AUDIO_DTO0_MODULE, clock * 100); | 162 | WREG32(DCCG_AUDIO_DTO0_MODULE, clock * 100); |
162 | WREG32(DCCG_AUDIO_DTO_SOURCE, DCCG_AUDIO_DTO0_SOURCE_SEL(radeon_crtc->crtc_id)); | ||
163 | } | 163 | } |
164 | 164 | ||
165 | 165 | ||
diff --git a/drivers/gpu/drm/radeon/ni_dpm.c b/drivers/gpu/drm/radeon/ni_dpm.c index 559cf24d51af..4f9b9bc20daa 100644 --- a/drivers/gpu/drm/radeon/ni_dpm.c +++ b/drivers/gpu/drm/radeon/ni_dpm.c | |||
@@ -1054,10 +1054,6 @@ static int ni_restrict_performance_levels_before_switch(struct radeon_device *rd | |||
1054 | int ni_dpm_force_performance_level(struct radeon_device *rdev, | 1054 | int ni_dpm_force_performance_level(struct radeon_device *rdev, |
1055 | enum radeon_dpm_forced_level level) | 1055 | enum radeon_dpm_forced_level level) |
1056 | { | 1056 | { |
1057 | struct radeon_ps *rps = rdev->pm.dpm.current_ps; | ||
1058 | struct ni_ps *ps = ni_get_ps(rps); | ||
1059 | u32 levels; | ||
1060 | |||
1061 | if (level == RADEON_DPM_FORCED_LEVEL_HIGH) { | 1057 | if (level == RADEON_DPM_FORCED_LEVEL_HIGH) { |
1062 | if (ni_send_msg_to_smc_with_parameter(rdev, PPSMC_MSG_SetEnabledLevels, 0) != PPSMC_Result_OK) | 1058 | if (ni_send_msg_to_smc_with_parameter(rdev, PPSMC_MSG_SetEnabledLevels, 0) != PPSMC_Result_OK) |
1063 | return -EINVAL; | 1059 | return -EINVAL; |
@@ -1068,8 +1064,7 @@ int ni_dpm_force_performance_level(struct radeon_device *rdev, | |||
1068 | if (ni_send_msg_to_smc_with_parameter(rdev, PPSMC_MSG_SetForcedLevels, 0) != PPSMC_Result_OK) | 1064 | if (ni_send_msg_to_smc_with_parameter(rdev, PPSMC_MSG_SetForcedLevels, 0) != PPSMC_Result_OK) |
1069 | return -EINVAL; | 1065 | return -EINVAL; |
1070 | 1066 | ||
1071 | levels = ps->performance_level_count - 1; | 1067 | if (ni_send_msg_to_smc_with_parameter(rdev, PPSMC_MSG_SetEnabledLevels, 1) != PPSMC_Result_OK) |
1072 | if (ni_send_msg_to_smc_with_parameter(rdev, PPSMC_MSG_SetEnabledLevels, levels) != PPSMC_Result_OK) | ||
1073 | return -EINVAL; | 1068 | return -EINVAL; |
1074 | } else if (level == RADEON_DPM_FORCED_LEVEL_AUTO) { | 1069 | } else if (level == RADEON_DPM_FORCED_LEVEL_AUTO) { |
1075 | if (ni_send_msg_to_smc_with_parameter(rdev, PPSMC_MSG_SetForcedLevels, 0) != PPSMC_Result_OK) | 1070 | if (ni_send_msg_to_smc_with_parameter(rdev, PPSMC_MSG_SetForcedLevels, 0) != PPSMC_Result_OK) |
diff --git a/drivers/gpu/drm/radeon/radeon_atombios.c b/drivers/gpu/drm/radeon/radeon_atombios.c index e3f3e8841789..4ccd61f60eb6 100644 --- a/drivers/gpu/drm/radeon/radeon_atombios.c +++ b/drivers/gpu/drm/radeon/radeon_atombios.c | |||
@@ -2782,7 +2782,7 @@ int radeon_atom_get_clock_dividers(struct radeon_device *rdev, | |||
2782 | ATOM_PLL_CNTL_FLAG_PLL_POST_DIV_EN) ? true : false; | 2782 | ATOM_PLL_CNTL_FLAG_PLL_POST_DIV_EN) ? true : false; |
2783 | dividers->enable_dithen = (args.v3.ucCntlFlag & | 2783 | dividers->enable_dithen = (args.v3.ucCntlFlag & |
2784 | ATOM_PLL_CNTL_FLAG_FRACTION_DISABLE) ? false : true; | 2784 | ATOM_PLL_CNTL_FLAG_FRACTION_DISABLE) ? false : true; |
2785 | dividers->fb_div = le16_to_cpu(args.v3.ulFbDiv.usFbDiv); | 2785 | dividers->whole_fb_div = le16_to_cpu(args.v3.ulFbDiv.usFbDiv); |
2786 | dividers->frac_fb_div = le16_to_cpu(args.v3.ulFbDiv.usFbDivFrac); | 2786 | dividers->frac_fb_div = le16_to_cpu(args.v3.ulFbDiv.usFbDivFrac); |
2787 | dividers->ref_div = args.v3.ucRefDiv; | 2787 | dividers->ref_div = args.v3.ucRefDiv; |
2788 | dividers->vco_mode = (args.v3.ucCntlFlag & | 2788 | dividers->vco_mode = (args.v3.ucCntlFlag & |
diff --git a/drivers/gpu/drm/radeon/si.c b/drivers/gpu/drm/radeon/si.c index d325280e2f9f..6ca904673a4f 100644 --- a/drivers/gpu/drm/radeon/si.c +++ b/drivers/gpu/drm/radeon/si.c | |||
@@ -5215,14 +5215,12 @@ static void si_enable_mc_ls(struct radeon_device *rdev, | |||
5215 | 5215 | ||
5216 | static void si_init_cg(struct radeon_device *rdev) | 5216 | static void si_init_cg(struct radeon_device *rdev) |
5217 | { | 5217 | { |
5218 | bool has_uvd = true; | ||
5219 | |||
5220 | si_enable_mgcg(rdev, true); | 5218 | si_enable_mgcg(rdev, true); |
5221 | si_enable_cgcg(rdev, true); | 5219 | si_enable_cgcg(rdev, false); |
5222 | /* disable MC LS on Tahiti */ | 5220 | /* disable MC LS on Tahiti */ |
5223 | if (rdev->family == CHIP_TAHITI) | 5221 | if (rdev->family == CHIP_TAHITI) |
5224 | si_enable_mc_ls(rdev, false); | 5222 | si_enable_mc_ls(rdev, false); |
5225 | if (has_uvd) { | 5223 | if (rdev->has_uvd) { |
5226 | si_enable_uvd_mgcg(rdev, true); | 5224 | si_enable_uvd_mgcg(rdev, true); |
5227 | si_init_uvd_internal_cg(rdev); | 5225 | si_init_uvd_internal_cg(rdev); |
5228 | } | 5226 | } |
@@ -5230,9 +5228,7 @@ static void si_init_cg(struct radeon_device *rdev) | |||
5230 | 5228 | ||
5231 | static void si_fini_cg(struct radeon_device *rdev) | 5229 | static void si_fini_cg(struct radeon_device *rdev) |
5232 | { | 5230 | { |
5233 | bool has_uvd = true; | 5231 | if (rdev->has_uvd) |
5234 | |||
5235 | if (has_uvd) | ||
5236 | si_enable_uvd_mgcg(rdev, false); | 5232 | si_enable_uvd_mgcg(rdev, false); |
5237 | si_enable_cgcg(rdev, false); | 5233 | si_enable_cgcg(rdev, false); |
5238 | si_enable_mgcg(rdev, false); | 5234 | si_enable_mgcg(rdev, false); |
@@ -5241,11 +5237,11 @@ static void si_fini_cg(struct radeon_device *rdev) | |||
5241 | static void si_init_pg(struct radeon_device *rdev) | 5237 | static void si_init_pg(struct radeon_device *rdev) |
5242 | { | 5238 | { |
5243 | bool has_pg = false; | 5239 | bool has_pg = false; |
5244 | 5240 | #if 0 | |
5245 | /* only cape verde supports PG */ | 5241 | /* only cape verde supports PG */ |
5246 | if (rdev->family == CHIP_VERDE) | 5242 | if (rdev->family == CHIP_VERDE) |
5247 | has_pg = true; | 5243 | has_pg = true; |
5248 | 5244 | #endif | |
5249 | if (has_pg) { | 5245 | if (has_pg) { |
5250 | si_init_ao_cu_mask(rdev); | 5246 | si_init_ao_cu_mask(rdev); |
5251 | si_init_dma_pg(rdev); | 5247 | si_init_dma_pg(rdev); |
diff --git a/drivers/gpu/drm/radeon/si_dpm.c b/drivers/gpu/drm/radeon/si_dpm.c index 73aaa2e4c312..1604a87cf2fe 100644 --- a/drivers/gpu/drm/radeon/si_dpm.c +++ b/drivers/gpu/drm/radeon/si_dpm.c | |||
@@ -37,8 +37,6 @@ | |||
37 | 37 | ||
38 | #define SMC_RAM_END 0x20000 | 38 | #define SMC_RAM_END 0x20000 |
39 | 39 | ||
40 | #define DDR3_DRAM_ROWS 0x2000 | ||
41 | |||
42 | #define SCLK_MIN_DEEPSLEEP_FREQ 1350 | 40 | #define SCLK_MIN_DEEPSLEEP_FREQ 1350 |
43 | 41 | ||
44 | static const struct si_cac_config_reg cac_weights_tahiti[] = | 42 | static const struct si_cac_config_reg cac_weights_tahiti[] = |
@@ -1931,6 +1929,7 @@ static void si_initialize_powertune_defaults(struct radeon_device *rdev) | |||
1931 | si_pi->cac_override = cac_override_pitcairn; | 1929 | si_pi->cac_override = cac_override_pitcairn; |
1932 | si_pi->powertune_data = &powertune_data_pitcairn; | 1930 | si_pi->powertune_data = &powertune_data_pitcairn; |
1933 | si_pi->dte_data = dte_data_pitcairn; | 1931 | si_pi->dte_data = dte_data_pitcairn; |
1932 | break; | ||
1934 | } | 1933 | } |
1935 | } else if (rdev->family == CHIP_VERDE) { | 1934 | } else if (rdev->family == CHIP_VERDE) { |
1936 | si_pi->lcac_config = lcac_cape_verde; | 1935 | si_pi->lcac_config = lcac_cape_verde; |
@@ -1941,6 +1940,7 @@ static void si_initialize_powertune_defaults(struct radeon_device *rdev) | |||
1941 | case 0x683B: | 1940 | case 0x683B: |
1942 | case 0x683F: | 1941 | case 0x683F: |
1943 | case 0x6829: | 1942 | case 0x6829: |
1943 | case 0x6835: | ||
1944 | si_pi->cac_weights = cac_weights_cape_verde_pro; | 1944 | si_pi->cac_weights = cac_weights_cape_verde_pro; |
1945 | si_pi->dte_data = dte_data_cape_verde; | 1945 | si_pi->dte_data = dte_data_cape_verde; |
1946 | break; | 1946 | break; |
@@ -2042,7 +2042,8 @@ static void si_initialize_powertune_defaults(struct radeon_device *rdev) | |||
2042 | ni_pi->enable_sq_ramping = false; | 2042 | ni_pi->enable_sq_ramping = false; |
2043 | si_pi->enable_dte = false; | 2043 | si_pi->enable_dte = false; |
2044 | 2044 | ||
2045 | if (si_pi->powertune_data->enable_powertune_by_default) { | 2045 | /* XXX: fix me */ |
2046 | if (0/*si_pi->powertune_data->enable_powertune_by_default*/) { | ||
2046 | ni_pi->enable_power_containment= true; | 2047 | ni_pi->enable_power_containment= true; |
2047 | ni_pi->enable_cac = true; | 2048 | ni_pi->enable_cac = true; |
2048 | if (si_pi->dte_data.enable_dte_by_default) { | 2049 | if (si_pi->dte_data.enable_dte_by_default) { |
@@ -3237,10 +3238,10 @@ int si_dpm_force_performance_level(struct radeon_device *rdev, | |||
3237 | { | 3238 | { |
3238 | struct radeon_ps *rps = rdev->pm.dpm.current_ps; | 3239 | struct radeon_ps *rps = rdev->pm.dpm.current_ps; |
3239 | struct ni_ps *ps = ni_get_ps(rps); | 3240 | struct ni_ps *ps = ni_get_ps(rps); |
3240 | u32 levels; | 3241 | u32 levels = ps->performance_level_count; |
3241 | 3242 | ||
3242 | if (level == RADEON_DPM_FORCED_LEVEL_HIGH) { | 3243 | if (level == RADEON_DPM_FORCED_LEVEL_HIGH) { |
3243 | if (si_send_msg_to_smc_with_parameter(rdev, PPSMC_MSG_SetEnabledLevels, 0) != PPSMC_Result_OK) | 3244 | if (si_send_msg_to_smc_with_parameter(rdev, PPSMC_MSG_SetEnabledLevels, levels) != PPSMC_Result_OK) |
3244 | return -EINVAL; | 3245 | return -EINVAL; |
3245 | 3246 | ||
3246 | if (si_send_msg_to_smc_with_parameter(rdev, PPSMC_MSG_SetForcedLevels, 1) != PPSMC_Result_OK) | 3247 | if (si_send_msg_to_smc_with_parameter(rdev, PPSMC_MSG_SetForcedLevels, 1) != PPSMC_Result_OK) |
@@ -3249,14 +3250,13 @@ int si_dpm_force_performance_level(struct radeon_device *rdev, | |||
3249 | if (si_send_msg_to_smc_with_parameter(rdev, PPSMC_MSG_SetForcedLevels, 0) != PPSMC_Result_OK) | 3250 | if (si_send_msg_to_smc_with_parameter(rdev, PPSMC_MSG_SetForcedLevels, 0) != PPSMC_Result_OK) |
3250 | return -EINVAL; | 3251 | return -EINVAL; |
3251 | 3252 | ||
3252 | levels = ps->performance_level_count - 1; | 3253 | if (si_send_msg_to_smc_with_parameter(rdev, PPSMC_MSG_SetEnabledLevels, 1) != PPSMC_Result_OK) |
3253 | if (si_send_msg_to_smc_with_parameter(rdev, PPSMC_MSG_SetEnabledLevels, levels) != PPSMC_Result_OK) | ||
3254 | return -EINVAL; | 3254 | return -EINVAL; |
3255 | } else if (level == RADEON_DPM_FORCED_LEVEL_AUTO) { | 3255 | } else if (level == RADEON_DPM_FORCED_LEVEL_AUTO) { |
3256 | if (si_send_msg_to_smc_with_parameter(rdev, PPSMC_MSG_SetForcedLevels, 0) != PPSMC_Result_OK) | 3256 | if (si_send_msg_to_smc_with_parameter(rdev, PPSMC_MSG_SetForcedLevels, 0) != PPSMC_Result_OK) |
3257 | return -EINVAL; | 3257 | return -EINVAL; |
3258 | 3258 | ||
3259 | if (si_send_msg_to_smc_with_parameter(rdev, PPSMC_MSG_SetEnabledLevels, 0) != PPSMC_Result_OK) | 3259 | if (si_send_msg_to_smc_with_parameter(rdev, PPSMC_MSG_SetEnabledLevels, levels) != PPSMC_Result_OK) |
3260 | return -EINVAL; | 3260 | return -EINVAL; |
3261 | } | 3261 | } |
3262 | 3262 | ||
@@ -3620,8 +3620,12 @@ static void si_enable_display_gap(struct radeon_device *rdev) | |||
3620 | { | 3620 | { |
3621 | u32 tmp = RREG32(CG_DISPLAY_GAP_CNTL); | 3621 | u32 tmp = RREG32(CG_DISPLAY_GAP_CNTL); |
3622 | 3622 | ||
3623 | tmp &= ~(DISP1_GAP_MASK | DISP2_GAP_MASK); | ||
3624 | tmp |= (DISP1_GAP(R600_PM_DISPLAY_GAP_IGNORE) | | ||
3625 | DISP2_GAP(R600_PM_DISPLAY_GAP_IGNORE)); | ||
3626 | |||
3623 | tmp &= ~(DISP1_GAP_MCHG_MASK | DISP2_GAP_MCHG_MASK); | 3627 | tmp &= ~(DISP1_GAP_MCHG_MASK | DISP2_GAP_MCHG_MASK); |
3624 | tmp |= (DISP1_GAP_MCHG(R600_PM_DISPLAY_GAP_IGNORE) | | 3628 | tmp |= (DISP1_GAP_MCHG(R600_PM_DISPLAY_GAP_VBLANK) | |
3625 | DISP2_GAP_MCHG(R600_PM_DISPLAY_GAP_IGNORE)); | 3629 | DISP2_GAP_MCHG(R600_PM_DISPLAY_GAP_IGNORE)); |
3626 | WREG32(CG_DISPLAY_GAP_CNTL, tmp); | 3630 | WREG32(CG_DISPLAY_GAP_CNTL, tmp); |
3627 | } | 3631 | } |
@@ -4036,16 +4040,15 @@ static int si_force_switch_to_arb_f0(struct radeon_device *rdev) | |||
4036 | static u32 si_calculate_memory_refresh_rate(struct radeon_device *rdev, | 4040 | static u32 si_calculate_memory_refresh_rate(struct radeon_device *rdev, |
4037 | u32 engine_clock) | 4041 | u32 engine_clock) |
4038 | { | 4042 | { |
4039 | struct rv7xx_power_info *pi = rv770_get_pi(rdev); | ||
4040 | u32 dram_rows; | 4043 | u32 dram_rows; |
4041 | u32 dram_refresh_rate; | 4044 | u32 dram_refresh_rate; |
4042 | u32 mc_arb_rfsh_rate; | 4045 | u32 mc_arb_rfsh_rate; |
4043 | u32 tmp = (RREG32(MC_ARB_RAMCFG) & NOOFROWS_MASK) >> NOOFROWS_SHIFT; | 4046 | u32 tmp = (RREG32(MC_ARB_RAMCFG) & NOOFROWS_MASK) >> NOOFROWS_SHIFT; |
4044 | 4047 | ||
4045 | if (pi->mem_gddr5) | 4048 | if (tmp >= 4) |
4046 | dram_rows = 1 << (tmp + 10); | 4049 | dram_rows = 16384; |
4047 | else | 4050 | else |
4048 | dram_rows = DDR3_DRAM_ROWS; | 4051 | dram_rows = 1 << (tmp + 10); |
4049 | 4052 | ||
4050 | dram_refresh_rate = 1 << ((RREG32(MC_SEQ_MISC0) & 0x3) + 3); | 4053 | dram_refresh_rate = 1 << ((RREG32(MC_SEQ_MISC0) & 0x3) + 3); |
4051 | mc_arb_rfsh_rate = ((engine_clock * 10) * dram_refresh_rate / dram_rows - 32) / 64; | 4054 | mc_arb_rfsh_rate = ((engine_clock * 10) * dram_refresh_rate / dram_rows - 32) / 64; |
@@ -6013,16 +6016,11 @@ int si_dpm_set_power_state(struct radeon_device *rdev) | |||
6013 | return ret; | 6016 | return ret; |
6014 | } | 6017 | } |
6015 | 6018 | ||
6016 | #if 0 | ||
6017 | /* XXX */ | ||
6018 | ret = si_dpm_force_performance_level(rdev, RADEON_DPM_FORCED_LEVEL_AUTO); | 6019 | ret = si_dpm_force_performance_level(rdev, RADEON_DPM_FORCED_LEVEL_AUTO); |
6019 | if (ret) { | 6020 | if (ret) { |
6020 | DRM_ERROR("si_dpm_force_performance_level failed\n"); | 6021 | DRM_ERROR("si_dpm_force_performance_level failed\n"); |
6021 | return ret; | 6022 | return ret; |
6022 | } | 6023 | } |
6023 | #else | ||
6024 | rdev->pm.dpm.forced_level = RADEON_DPM_FORCED_LEVEL_AUTO; | ||
6025 | #endif | ||
6026 | 6024 | ||
6027 | return 0; | 6025 | return 0; |
6028 | } | 6026 | } |