[kernel/f19] Fix regression in radeon sound (rhbz 1010679)

Josh Boyer jwboyer at fedoraproject.org
Tue Oct 15 15:52:59 UTC 2013


commit 9bb17f8197a020c5d56bd44b0405ed1f9ece890b
Author: Josh Boyer <jwboyer at fedoraproject.org>
Date:   Tue Oct 15 11:50:58 2013 -0400

    Fix regression in radeon sound (rhbz 1010679)

 fix-radeon-sound.patch |  154 ++++++++++++++++++++++++++++++++++++++++++++++++
 kernel.spec            |    9 +++
 2 files changed, 163 insertions(+), 0 deletions(-)
---
diff --git a/fix-radeon-sound.patch b/fix-radeon-sound.patch
new file mode 100644
index 0000000..6e59256
--- /dev/null
+++ b/fix-radeon-sound.patch
@@ -0,0 +1,154 @@
+From 062c2e4363451d49ef840232fe65e8bff0dde2a5 Mon Sep 17 00:00:00 2001
+From: Alex Deucher <alexander.deucher at amd.com>
+Date: Fri, 27 Sep 2013 18:09:54 -0400
+Subject: [PATCH 1/4] drm/radeon: use 64-bit math to calculate CTS values for
+ audio (v2)
+
+Avoid losing precision.  See bug:
+https://bugs.freedesktop.org/show_bug.cgi?id=69675
+
+v2: fix math as per Anssi's comments.
+
+Signed-off-by: Alex Deucher <alexander.deucher at amd.com>
+---
+ drivers/gpu/drm/radeon/r600_hdmi.c | 11 +++++++++--
+ 1 file changed, 9 insertions(+), 2 deletions(-)
+
+diff --git a/drivers/gpu/drm/radeon/r600_hdmi.c b/drivers/gpu/drm/radeon/r600_hdmi.c
+index b0fa600..49043a5 100644
+--- a/drivers/gpu/drm/radeon/r600_hdmi.c
++++ b/drivers/gpu/drm/radeon/r600_hdmi.c
+@@ -75,8 +75,15 @@ static const struct radeon_hdmi_acr r600_hdmi_predefined_acr[] = {
+  */
+ static void r600_hdmi_calc_cts(uint32_t clock, int *CTS, int N, int freq)
+ {
+-	if (*CTS == 0)
+-		*CTS = clock * N / (128 * freq) * 1000;
++	u64 n;
++	u32 d;
++
++	if (*CTS == 0) {
++		n = (u64)clock * (u64)N * 1000ULL;
++		d = 128 * freq;
++		do_div(n, d);
++		*CTS = n;
++	}
+ 	DRM_DEBUG("Using ACR timing N=%d CTS=%d for frequency %d\n",
+ 		  N, *CTS, freq);
+ }
+-- 
+1.8.3.1
+
+
+From e7d12c2f98ae1e68c7298e5028048d150fa553a1 Mon Sep 17 00:00:00 2001
+From: Alex Deucher <alexander.deucher at amd.com>
+Date: Fri, 27 Sep 2013 18:19:42 -0400
+Subject: [PATCH 2/4] drm/radeon: fix N/CTS clock matching for audio
+
+The drm code that calculates the 1001 clocks rounds up
+rather than truncating.  This allows the table to match
+properly on those modes.
+
+See bug:
+https://bugs.freedesktop.org/show_bug.cgi?id=69675
+
+Signed-off-by: Alex Deucher <alexander.deucher at amd.com>
+---
+ drivers/gpu/drm/radeon/r600_hdmi.c | 6 +++---
+ 1 file changed, 3 insertions(+), 3 deletions(-)
+
+diff --git a/drivers/gpu/drm/radeon/r600_hdmi.c b/drivers/gpu/drm/radeon/r600_hdmi.c
+index 49043a5..567703f 100644
+--- a/drivers/gpu/drm/radeon/r600_hdmi.c
++++ b/drivers/gpu/drm/radeon/r600_hdmi.c
+@@ -57,15 +57,15 @@ enum r600_hdmi_iec_status_bits {
+ static const struct radeon_hdmi_acr r600_hdmi_predefined_acr[] = {
+     /*	     32kHz	  44.1kHz	48kHz    */
+     /* Clock      N     CTS      N     CTS      N     CTS */
+-    {  25174,  4576,  28125,  7007,  31250,  6864,  28125 }, /*  25,20/1.001 MHz */
++    {  25175,  4576,  28125,  7007,  31250,  6864,  28125 }, /*  25,20/1.001 MHz */
+     {  25200,  4096,  25200,  6272,  28000,  6144,  25200 }, /*  25.20       MHz */
+     {  27000,  4096,  27000,  6272,  30000,  6144,  27000 }, /*  27.00       MHz */
+     {  27027,  4096,  27027,  6272,  30030,  6144,  27027 }, /*  27.00*1.001 MHz */
+     {  54000,  4096,  54000,  6272,  60000,  6144,  54000 }, /*  54.00       MHz */
+     {  54054,  4096,  54054,  6272,  60060,  6144,  54054 }, /*  54.00*1.001 MHz */
+-    {  74175, 11648, 210937, 17836, 234375, 11648, 140625 }, /*  74.25/1.001 MHz */
++    {  74176, 11648, 210937, 17836, 234375, 11648, 140625 }, /*  74.25/1.001 MHz */
+     {  74250,  4096,  74250,  6272,  82500,  6144,  74250 }, /*  74.25       MHz */
+-    { 148351, 11648, 421875,  8918, 234375,  5824, 140625 }, /* 148.50/1.001 MHz */
++    { 148352, 11648, 421875,  8918, 234375,  5824, 140625 }, /* 148.50/1.001 MHz */
+     { 148500,  4096, 148500,  6272, 165000,  6144, 148500 }, /* 148.50       MHz */
+     {      0,  4096,      0,  6272,      0,  6144,      0 }  /* Other */
+ };
+-- 
+1.8.3.1
+
+
+From ee0fec312a1c4e26f255955da942562cd8908a4b Mon Sep 17 00:00:00 2001
+From: Alex Deucher <alexander.deucher at amd.com>
+Date: Fri, 27 Sep 2013 18:22:15 -0400
+Subject: [PATCH 3/4] drm/radeon: use hw generated CTS/N values for audio
+
+Use the hw generated values rather than calculating
+them in the driver.  There may be some older r6xx
+asics where this doesn't work correctly.  This remains
+to be seen.
+
+See bug:
+https://bugs.freedesktop.org/show_bug.cgi?id=69675
+
+Signed-off-by: Alex Deucher <alexander.deucher at amd.com>
+---
+ drivers/gpu/drm/radeon/r600_hdmi.c | 3 +--
+ 1 file changed, 1 insertion(+), 2 deletions(-)
+
+diff --git a/drivers/gpu/drm/radeon/r600_hdmi.c b/drivers/gpu/drm/radeon/r600_hdmi.c
+index 567703f..e2ae1c2 100644
+--- a/drivers/gpu/drm/radeon/r600_hdmi.c
++++ b/drivers/gpu/drm/radeon/r600_hdmi.c
+@@ -451,8 +451,7 @@ void r600_hdmi_setmode(struct drm_encoder *encoder, struct drm_display_mode *mod
+ 	}
+ 
+ 	WREG32(HDMI0_ACR_PACKET_CONTROL + offset,
+-	       HDMI0_ACR_AUTO_SEND | /* allow hw to sent ACR packets when required */
+-	       HDMI0_ACR_SOURCE); /* select SW CTS value */
++	       HDMI0_ACR_AUTO_SEND); /* allow hw to sent ACR packets when required */
+ 
+ 	WREG32(HDMI0_VBI_PACKET_CONTROL + offset,
+ 	       HDMI0_NULL_SEND | /* send null packets when required */
+-- 
+1.8.3.1
+
+
+From b852c985010a77c850b7548d64bbb964ca462b02 Mon Sep 17 00:00:00 2001
+From: Alex Deucher <alexander.deucher at amd.com>
+Date: Thu, 10 Oct 2013 11:47:01 -0400
+Subject: [PATCH 4/4] drm/radeon: re-enable sw ACR support on pre-DCE4
+MIME-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+
+HW ACR support may have issues on some older chips, so
+use SW ACR for now until we've tested further.
+
+Signed-off-by: Alex Deucher <alexander.deucher at amd.com>
+CC: Rafał Miłecki <zajec5 at gmail.com>
+---
+ drivers/gpu/drm/radeon/r600_hdmi.c | 1 +
+ 1 file changed, 1 insertion(+)
+
+diff --git a/drivers/gpu/drm/radeon/r600_hdmi.c b/drivers/gpu/drm/radeon/r600_hdmi.c
+index e2ae1c2..5b72931 100644
+--- a/drivers/gpu/drm/radeon/r600_hdmi.c
++++ b/drivers/gpu/drm/radeon/r600_hdmi.c
+@@ -451,6 +451,7 @@ void r600_hdmi_setmode(struct drm_encoder *encoder, struct drm_display_mode *mod
+ 	}
+ 
+ 	WREG32(HDMI0_ACR_PACKET_CONTROL + offset,
++	       HDMI0_ACR_SOURCE | /* select SW CTS value - XXX verify that hw CTS works on all families */
+ 	       HDMI0_ACR_AUTO_SEND); /* allow hw to sent ACR packets when required */
+ 
+ 	WREG32(HDMI0_VBI_PACKET_CONTROL + offset,
+-- 
+1.8.3.1
+
diff --git a/kernel.spec b/kernel.spec
index ec6f092..c83454a 100644
--- a/kernel.spec
+++ b/kernel.spec
@@ -764,6 +764,9 @@ Patch25128: dm-cache-policy-mq_fix-large-scale-table-allocation-bug.patch
 #rhbz 1000439
 Patch25129: cpupower-Fix-segfault-due-to-incorrect-getopt_long-a.patch
 
+#rhbz 1010679
+Patch25130: fix-radeon-sound.patch
+
 # END OF PATCH DEFINITIONS
 
 %endif
@@ -1476,6 +1479,9 @@ ApplyPatch dm-cache-policy-mq_fix-large-scale-table-allocation-bug.patch
 #rhbz 1000439
 ApplyPatch cpupower-Fix-segfault-due-to-incorrect-getopt_long-a.patch
 
+#rhbz 1010679
+ApplyPatch fix-radeon-sound.patch
+
 # END OF PATCH APPLICATIONS
 
 %endif
@@ -2288,6 +2294,9 @@ fi
 # and build.
 
 %changelog
+* Tue Oct 15 2013 Josh Boyer <jwboyer at fedoraproject.org>
+- Fix regression in radeon sound (rhbz 1010679)
+
 * Mon Oct 14 2013 Justin M. Forbes <jforbes at fedoraproject.org> - 3.11.5-200
 - Linux v3.11.5
 


More information about the scm-commits mailing list