--- /dev/null
+From 99d79aa2f3b7729e7290e8bda5d0dd8b0240ec62 Mon Sep 17 00:00:00 2001
+From: Alex Deucher <alexander.deucher@amd.com>
+Date: Mon, 23 Sep 2013 15:47:08 -0400
+Subject: drm/radeon: add missing hdmi callbacks for rv6xx
+
+From: Alex Deucher <alexander.deucher@amd.com>
+
+commit 99d79aa2f3b7729e7290e8bda5d0dd8b0240ec62 upstream.
+
+When dpm was merged, I added a new asic struct for
+rv6xx, but it never got properly updated when the
+hdmi callbacks were added due to the two patch sets
+being developed in parallel.
+
+Fixes:
+https://bugs.freedesktop.org/show_bug.cgi?id=69729
+
+Signed-off-by: Alex Deucher <alexander.deucher@amd.com>
+Reviewed-by: Christian König <christian.koenig@amd.com>
+Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
+
+---
+ drivers/gpu/drm/radeon/radeon_asic.c | 2 ++
+ 1 file changed, 2 insertions(+)
+
+--- a/drivers/gpu/drm/radeon/radeon_asic.c
++++ b/drivers/gpu/drm/radeon/radeon_asic.c
+@@ -892,6 +892,8 @@ static struct radeon_asic r520_asic = {
+ .wait_for_vblank = &avivo_wait_for_vblank,
+ .set_backlight_level = &atombios_set_backlight_level,
+ .get_backlight_level = &atombios_get_backlight_level,
++ .hdmi_enable = &r600_hdmi_enable,
++ .hdmi_setmode = &r600_hdmi_setmode,
+ },
+ .copy = {
+ .blit = &r100_copy_blit,
--- /dev/null
+From 4ca5a6cba53e13b8fd153b0762b4128fab6a3cfb Mon Sep 17 00:00:00 2001
+From: Alex Deucher <alexander.deucher@amd.com>
+Date: Sun, 15 Sep 2013 23:23:07 -0400
+Subject: drm/radeon: avoid UVD corruption on AGP cards using GPU gart
+
+From: Alex Deucher <alexander.deucher@amd.com>
+
+commit 4ca5a6cba53e13b8fd153b0762b4128fab6a3cfb upstream.
+
+If the user has forced the driver to use the internal GPU gart
+rather than AGP on an AGP card, force the buffers to vram
+as well.
+
+Signed-off-by: Alex Deucher <alexander.deucher@amd.com>
+Reviewed-by: Christian König <christian.koenig@amd.com>
+Tested-by: Dieter Nützel <Dieter@nuetzel-hh.de>
+Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
+
+---
+ drivers/gpu/drm/radeon/radeon_cs.c | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+--- a/drivers/gpu/drm/radeon/radeon_cs.c
++++ b/drivers/gpu/drm/radeon/radeon_cs.c
+@@ -84,7 +84,7 @@ static int radeon_cs_parser_relocs(struc
+ VRAM, also but everything into VRAM on AGP cards to avoid
+ image corruptions */
+ if (p->ring == R600_RING_TYPE_UVD_INDEX &&
+- (i == 0 || p->rdev->flags & RADEON_IS_AGP)) {
++ (i == 0 || drm_pci_device_is_agp(p->rdev->ddev))) {
+ /* TODO: is this still needed for NI+ ? */
+ p->relocs[i].lobj.domain =
+ RADEON_GEM_DOMAIN_VRAM;
--- /dev/null
+From 4a1132a023eb48cf10522d84c5908d43b612c041 Mon Sep 17 00:00:00 2001
+From: Alex Deucher <alexander.deucher@amd.com>
+Date: Mon, 23 Sep 2013 10:38:26 -0400
+Subject: drm/radeon: disable tests/benchmarks if accel is disabled
+
+From: Alex Deucher <alexander.deucher@amd.com>
+
+commit 4a1132a023eb48cf10522d84c5908d43b612c041 upstream.
+
+The tests are only usable if the acceleration engines have
+been successfully initialized.
+
+Based on an initial patch from: Alex Ivanov <gnidorah@p0n4ik.tk>
+
+Signed-off-by: Alex Deucher <alexander.deucher@amd.com>
+Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
+
+---
+ drivers/gpu/drm/radeon/radeon_device.c | 15 ++++++++++++---
+ 1 file changed, 12 insertions(+), 3 deletions(-)
+
+--- a/drivers/gpu/drm/radeon/radeon_device.c
++++ b/drivers/gpu/drm/radeon/radeon_device.c
+@@ -1196,13 +1196,22 @@ int radeon_device_init(struct radeon_dev
+ return r;
+ }
+ if ((radeon_testing & 1)) {
+- radeon_test_moves(rdev);
++ if (rdev->accel_working)
++ radeon_test_moves(rdev);
++ else
++ DRM_INFO("radeon: acceleration disabled, skipping move tests\n");
+ }
+ if ((radeon_testing & 2)) {
+- radeon_test_syncing(rdev);
++ if (rdev->accel_working)
++ radeon_test_syncing(rdev);
++ else
++ DRM_INFO("radeon: acceleration disabled, skipping sync tests\n");
+ }
+ if (radeon_benchmarking) {
+- radeon_benchmark(rdev, radeon_benchmarking);
++ if (rdev->accel_working)
++ radeon_benchmark(rdev, radeon_benchmarking);
++ else
++ DRM_INFO("radeon: acceleration disabled, skipping benchmarks\n");
+ }
+ return 0;
+ }
--- /dev/null
+From 58d327da9721f7a0f6e46c8dfa5cc5546fd7078a Mon Sep 17 00:00:00 2001
+From: Alex Deucher <alexander.deucher@amd.com>
+Date: Wed, 25 Sep 2013 12:04:37 -0400
+Subject: drm/radeon: fix hdmi audio on DCE3.0/3.1 asics
+
+From: Alex Deucher <alexander.deucher@amd.com>
+
+commit 58d327da9721f7a0f6e46c8dfa5cc5546fd7078a upstream.
+
+These asics seem to use a mix of the DCE2.x and
+DCE3.2 audio interfaces despite what the register spec
+says.
+
+Fixes:
+https://bugs.freedesktop.org/show_bug.cgi?id=69729
+https://bugs.freedesktop.org/show_bug.cgi?id=69671
+
+Signed-off-by: Alex Deucher <alexander.deucher@amd.com>
+Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
+
+---
+ drivers/gpu/drm/radeon/r600_hdmi.c | 16 +++++++++++++---
+ 1 file changed, 13 insertions(+), 3 deletions(-)
+
+--- a/drivers/gpu/drm/radeon/r600_hdmi.c
++++ b/drivers/gpu/drm/radeon/r600_hdmi.c
+@@ -238,9 +238,19 @@ void r600_audio_set_dto(struct drm_encod
+ * number (coefficient of two integer numbers. DCCG_AUDIO_DTOx_PHASE
+ * is the numerator, DCCG_AUDIO_DTOx_MODULE is the denominator
+ */
+- if (ASIC_IS_DCE3(rdev)) {
++ if (ASIC_IS_DCE32(rdev)) {
++ if (dig->dig_encoder == 0) {
++ WREG32(DCCG_AUDIO_DTO0_PHASE, base_rate * 100);
++ WREG32(DCCG_AUDIO_DTO0_MODULE, clock * 100);
++ WREG32(DCCG_AUDIO_DTO_SELECT, 0); /* select DTO0 */
++ } else {
++ WREG32(DCCG_AUDIO_DTO1_PHASE, base_rate * 100);
++ WREG32(DCCG_AUDIO_DTO1_MODULE, clock * 100);
++ WREG32(DCCG_AUDIO_DTO_SELECT, 1); /* select DTO1 */
++ }
++ } else if (ASIC_IS_DCE3(rdev)) {
+ /* according to the reg specs, this should DCE3.2 only, but in
+- * practice it seems to cover DCE3.0 as well.
++ * practice it seems to cover DCE3.0/3.1 as well.
+ */
+ if (dig->dig_encoder == 0) {
+ WREG32(DCCG_AUDIO_DTO0_PHASE, base_rate * 100);
+@@ -252,7 +262,7 @@ void r600_audio_set_dto(struct drm_encod
+ WREG32(DCCG_AUDIO_DTO_SELECT, 1); /* select DTO1 */
+ }
+ } else {
+- /* according to the reg specs, this should be DCE2.0 and DCE3.0 */
++ /* according to the reg specs, this should be DCE2.0 and DCE3.0/3.1 */
+ WREG32(AUDIO_DTO, AUDIO_DTO_PHASE(base_rate / 10) |
+ AUDIO_DTO_MODULE(clock / 10));
+ }
--- /dev/null
+From 0eb3448aa6b31fbf24c31756aba7940cac5ad6b8 Mon Sep 17 00:00:00 2001
+From: Alex Ivanov <gnidorah@p0n4ik.tk>
+Date: Fri, 20 Sep 2013 17:36:06 +0400
+Subject: drm/radeon: Make r100_cp_ring_info() and radeon_ring_gfx() safe (v2)
+
+From: Alex Ivanov <gnidorah@p0n4ik.tk>
+
+commit 0eb3448aa6b31fbf24c31756aba7940cac5ad6b8 upstream.
+
+Prevent NULL pointer dereference in case when radeon_ring_fini() did it's job.
+
+Reading of r100_cp_ring_info and radeon_ring_gfx debugfs entries will lead to a KP if ring buffer was deallocated, e.g. on failed ring test.
+Seen on PA-RISC machine having "radeon: ring test failed (scratch(0x8504)=0xCAFEDEAD)" issue.
+
+v2: agd5f: add some parens around ring->ready check
+
+Signed-off-by: Alex Ivanov <gnidorah@p0n4ik.tk>
+Signed-off-by: Alex Deucher <alexander.deucher@amd.com>
+Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
+
+---
+ drivers/gpu/drm/radeon/r100.c | 8 +++++---
+ drivers/gpu/drm/radeon/radeon_ring.c | 8 +++++---
+ 2 files changed, 10 insertions(+), 6 deletions(-)
+
+--- a/drivers/gpu/drm/radeon/r100.c
++++ b/drivers/gpu/drm/radeon/r100.c
+@@ -2935,9 +2935,11 @@ static int r100_debugfs_cp_ring_info(str
+ seq_printf(m, "CP_RB_RPTR 0x%08x\n", rdp);
+ seq_printf(m, "%u free dwords in ring\n", ring->ring_free_dw);
+ seq_printf(m, "%u dwords in ring\n", count);
+- for (j = 0; j <= count; j++) {
+- i = (rdp + j) & ring->ptr_mask;
+- seq_printf(m, "r[%04d]=0x%08x\n", i, ring->ring[i]);
++ if (ring->ready) {
++ for (j = 0; j <= count; j++) {
++ i = (rdp + j) & ring->ptr_mask;
++ seq_printf(m, "r[%04d]=0x%08x\n", i, ring->ring[i]);
++ }
+ }
+ return 0;
+ }
+--- a/drivers/gpu/drm/radeon/radeon_ring.c
++++ b/drivers/gpu/drm/radeon/radeon_ring.c
+@@ -823,9 +823,11 @@ static int radeon_debugfs_ring_info(stru
+ * packet that is the root issue
+ */
+ i = (ring->rptr + ring->ptr_mask + 1 - 32) & ring->ptr_mask;
+- for (j = 0; j <= (count + 32); j++) {
+- seq_printf(m, "r[%5d]=0x%08x\n", i, ring->ring[i]);
+- i = (i + 1) & ring->ptr_mask;
++ if (ring->ready) {
++ for (j = 0; j <= (count + 32); j++) {
++ seq_printf(m, "r[%5d]=0x%08x\n", i, ring->ring[i]);
++ i = (i + 1) & ring->ptr_mask;
++ }
+ }
+ return 0;
+ }
dm-raid-silence-compiler-warning-on-rebuilds_per_group.patch
drm-i915-preserve-pipe-a-quirk-in-i9xx_set_pipeconf.patch
drm-i915-dp-increase-i2c-over-aux-retry-interval-on-aux-defer.patch
+drm-radeon-avoid-uvd-corruption-on-agp-cards-using-gpu-gart.patch
+drm-radeon-make-r100_cp_ring_info-and-radeon_ring_gfx-safe-v2.patch
+drm-radeon-disable-tests-benchmarks-if-accel-is-disabled.patch
+drm-radeon-add-missing-hdmi-callbacks-for-rv6xx.patch
+drm-radeon-fix-hdmi-audio-on-dce3.0-3.1-asics.patch