aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorSlava Grigorev <slava.grigorev@amd.com>2016-01-26 16:45:10 -0500
committerAlex Deucher <alexander.deucher@amd.com>2016-01-27 12:47:28 -0500
commitc9a392eac18409f51a071520cf508c0b4ad990e2 (patch)
treec0664325a71115eb8513dc70d10fd816deee4fd4
parent08b21d30c6f619aa3718620a7de91207d28bdbc5 (diff)
drm/radeon: cleaned up VCO output settings for DP audio
This is preparation for the fixes in the following patches. Signed-off-by: Slava Grigorev <slava.grigorev@amd.com> Reviewed-by: Alex Deucher <alexander.deucher@amd.com> Reviewed-by: Christian König <christian.koenig@amd.com> Signed-off-by: Alex Deucher <alexander.deucher@amd.com> Cc: stable@vger.kernel.org
-rw-r--r--drivers/gpu/drm/radeon/dce6_afmt.c2
-rw-r--r--drivers/gpu/drm/radeon/radeon.h2
-rw-r--r--drivers/gpu/drm/radeon/radeon_atombios.c12
-rw-r--r--drivers/gpu/drm/radeon/radeon_audio.c8
4 files changed, 10 insertions, 14 deletions
diff --git a/drivers/gpu/drm/radeon/dce6_afmt.c b/drivers/gpu/drm/radeon/dce6_afmt.c
index 6bfc46369db1..ea4e3fc2744f 100644
--- a/drivers/gpu/drm/radeon/dce6_afmt.c
+++ b/drivers/gpu/drm/radeon/dce6_afmt.c
@@ -315,7 +315,7 @@ void dce6_dp_audio_set_dto(struct radeon_device *rdev,
315 div = 0; 315 div = 0;
316 316
317 if (div) 317 if (div)
318 clock = rdev->clock.gpupll_outputfreq * 10 / div; 318 clock /= div;
319 319
320 WREG32(DCE8_DCCG_AUDIO_DTO1_PHASE, 24000); 320 WREG32(DCE8_DCCG_AUDIO_DTO1_PHASE, 24000);
321 WREG32(DCE8_DCCG_AUDIO_DTO1_MODULE, clock); 321 WREG32(DCE8_DCCG_AUDIO_DTO1_MODULE, clock);
diff --git a/drivers/gpu/drm/radeon/radeon.h b/drivers/gpu/drm/radeon/radeon.h
index 5ae6db98aa4d..78a51b3eda10 100644
--- a/drivers/gpu/drm/radeon/radeon.h
+++ b/drivers/gpu/drm/radeon/radeon.h
@@ -268,7 +268,7 @@ struct radeon_clock {
268 uint32_t current_dispclk; 268 uint32_t current_dispclk;
269 uint32_t dp_extclk; 269 uint32_t dp_extclk;
270 uint32_t max_pixel_clock; 270 uint32_t max_pixel_clock;
271 uint32_t gpupll_outputfreq; 271 uint32_t vco_freq;
272}; 272};
273 273
274/* 274/*
diff --git a/drivers/gpu/drm/radeon/radeon_atombios.c b/drivers/gpu/drm/radeon/radeon_atombios.c
index 08fc1b5effa8..9a9363a7e5b9 100644
--- a/drivers/gpu/drm/radeon/radeon_atombios.c
+++ b/drivers/gpu/drm/radeon/radeon_atombios.c
@@ -1257,12 +1257,14 @@ bool radeon_atom_get_clock_info(struct drm_device *dev)
1257 rdev->mode_info.firmware_flags = 1257 rdev->mode_info.firmware_flags =
1258 le16_to_cpu(firmware_info->info.usFirmwareCapability.susAccess); 1258 le16_to_cpu(firmware_info->info.usFirmwareCapability.susAccess);
1259 1259
1260 if (ASIC_IS_DCE8(rdev)) { 1260 if (ASIC_IS_DCE8(rdev))
1261 rdev->clock.gpupll_outputfreq = 1261 rdev->clock.vco_freq =
1262 le32_to_cpu(firmware_info->info_22.ulGPUPLL_OutputFreq); 1262 le32_to_cpu(firmware_info->info_22.ulGPUPLL_OutputFreq);
1263 if (rdev->clock.gpupll_outputfreq == 0) 1263 else
1264 rdev->clock.gpupll_outputfreq = 360000; /* 3.6 GHz */ 1264 rdev->clock.vco_freq = rdev->clock.current_dispclk;
1265 } 1265
1266 if (rdev->clock.vco_freq == 0)
1267 rdev->clock.vco_freq = 360000; /* 3.6 GHz */
1266 1268
1267 return true; 1269 return true;
1268 } 1270 }
diff --git a/drivers/gpu/drm/radeon/radeon_audio.c b/drivers/gpu/drm/radeon/radeon_audio.c
index 2c02e99b5f95..85e1c234f020 100644
--- a/drivers/gpu/drm/radeon/radeon_audio.c
+++ b/drivers/gpu/drm/radeon/radeon_audio.c
@@ -739,9 +739,6 @@ static void radeon_audio_dp_mode_set(struct drm_encoder *encoder,
739 struct radeon_encoder *radeon_encoder = to_radeon_encoder(encoder); 739 struct radeon_encoder *radeon_encoder = to_radeon_encoder(encoder);
740 struct radeon_encoder_atom_dig *dig = radeon_encoder->enc_priv; 740 struct radeon_encoder_atom_dig *dig = radeon_encoder->enc_priv;
741 struct drm_connector *connector = radeon_get_connector_for_encoder(encoder); 741 struct drm_connector *connector = radeon_get_connector_for_encoder(encoder);
742 struct radeon_connector *radeon_connector = to_radeon_connector(connector);
743 struct radeon_connector_atom_dig *dig_connector =
744 radeon_connector->con_priv;
745 742
746 if (!dig || !dig->afmt) 743 if (!dig || !dig->afmt)
747 return; 744 return;
@@ -753,10 +750,7 @@ static void radeon_audio_dp_mode_set(struct drm_encoder *encoder,
753 radeon_audio_write_speaker_allocation(encoder); 750 radeon_audio_write_speaker_allocation(encoder);
754 radeon_audio_write_sad_regs(encoder); 751 radeon_audio_write_sad_regs(encoder);
755 radeon_audio_write_latency_fields(encoder, mode); 752 radeon_audio_write_latency_fields(encoder, mode);
756 if (rdev->clock.dp_extclk || ASIC_IS_DCE5(rdev)) 753 radeon_audio_set_dto(encoder, rdev->clock.vco_freq * 10);
757 radeon_audio_set_dto(encoder, rdev->clock.default_dispclk * 10);
758 else
759 radeon_audio_set_dto(encoder, dig_connector->dp_clock);
760 radeon_audio_set_audio_packet(encoder); 754 radeon_audio_set_audio_packet(encoder);
761 radeon_audio_select_pin(encoder); 755 radeon_audio_select_pin(encoder);
762 756