--- /dev/null
+From 6fab3febf6d949b0a12b1e4e73db38e4a177a79e Mon Sep 17 00:00:00 2001
+From: Alex Deucher <alexander.deucher@amd.com>
+Date: Sun, 4 Aug 2013 12:13:17 -0400
+Subject: drm/radeon: always program the MC on startup
+
+From: Alex Deucher <alexander.deucher@amd.com>
+
+commit 6fab3febf6d949b0a12b1e4e73db38e4a177a79e upstream.
+
+For r6xx+ asics. This mirrors the behavior of pre-r6xx
+asics. We need to program the MC even if something
+else in startup() fails. Failure to do so results in
+an unusable GPU.
+
+Based on a fix from: Mark Kettenis <kettenis@openbsd.org>
+Signed-off-by: Alex Deucher <alexander.deucher@amd.com>
+[wml: Backported to 3.4:
+- adjust context
+- drop changes to cik.c]
+Signed-off-by: Weng Meiling <wengmeiling.weng@huawei.com>
+Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
+---
+ drivers/gpu/drm/radeon/evergreen.c | 3 ++-
+ drivers/gpu/drm/radeon/ni.c | 3 ++-
+ drivers/gpu/drm/radeon/r600.c | 3 ++-
+ drivers/gpu/drm/radeon/rv770.c | 3 ++-
+ drivers/gpu/drm/radeon/si.c | 3 ++-
+ 5 files changed, 10 insertions(+), 5 deletions(-)
+
+--- a/drivers/gpu/drm/radeon/evergreen.c
++++ b/drivers/gpu/drm/radeon/evergreen.c
+@@ -3219,6 +3219,8 @@ static int evergreen_startup(struct rade
+ /* enable pcie gen2 link */
+ evergreen_pcie_gen2_enable(rdev);
+
++ evergreen_mc_program(rdev);
++
+ if (ASIC_IS_DCE5(rdev)) {
+ if (!rdev->me_fw || !rdev->pfp_fw || !rdev->rlc_fw || !rdev->mc_fw) {
+ r = ni_init_microcode(rdev);
+@@ -3246,7 +3248,6 @@ static int evergreen_startup(struct rade
+ if (r)
+ return r;
+
+- evergreen_mc_program(rdev);
+ if (rdev->flags & RADEON_IS_AGP) {
+ evergreen_agp_enable(rdev);
+ } else {
+--- a/drivers/gpu/drm/radeon/ni.c
++++ b/drivers/gpu/drm/radeon/ni.c
+@@ -1552,6 +1552,8 @@ static int cayman_startup(struct radeon_
+ /* enable pcie gen2 link */
+ evergreen_pcie_gen2_enable(rdev);
+
++ evergreen_mc_program(rdev);
++
+ if (rdev->flags & RADEON_IS_IGP) {
+ if (!rdev->me_fw || !rdev->pfp_fw || !rdev->rlc_fw) {
+ r = ni_init_microcode(rdev);
+@@ -1580,7 +1582,6 @@ static int cayman_startup(struct radeon_
+ if (r)
+ return r;
+
+- evergreen_mc_program(rdev);
+ r = cayman_pcie_gart_enable(rdev);
+ if (r)
+ return r;
+--- a/drivers/gpu/drm/radeon/r600.c
++++ b/drivers/gpu/drm/radeon/r600.c
+@@ -2431,6 +2431,8 @@ int r600_startup(struct radeon_device *r
+ /* enable pcie gen2 link */
+ r600_pcie_gen2_enable(rdev);
+
++ r600_mc_program(rdev);
++
+ if (!rdev->me_fw || !rdev->pfp_fw || !rdev->rlc_fw) {
+ r = r600_init_microcode(rdev);
+ if (r) {
+@@ -2443,7 +2445,6 @@ int r600_startup(struct radeon_device *r
+ if (r)
+ return r;
+
+- r600_mc_program(rdev);
+ if (rdev->flags & RADEON_IS_AGP) {
+ r600_agp_enable(rdev);
+ } else {
+--- a/drivers/gpu/drm/radeon/rv770.c
++++ b/drivers/gpu/drm/radeon/rv770.c
+@@ -1058,6 +1058,8 @@ static int rv770_startup(struct radeon_d
+ /* enable pcie gen2 link */
+ rv770_pcie_gen2_enable(rdev);
+
++ rv770_mc_program(rdev);
++
+ if (!rdev->me_fw || !rdev->pfp_fw || !rdev->rlc_fw) {
+ r = r600_init_microcode(rdev);
+ if (r) {
+@@ -1070,7 +1072,6 @@ static int rv770_startup(struct radeon_d
+ if (r)
+ return r;
+
+- rv770_mc_program(rdev);
+ if (rdev->flags & RADEON_IS_AGP) {
+ rv770_agp_enable(rdev);
+ } else {
+--- a/drivers/gpu/drm/radeon/si.c
++++ b/drivers/gpu/drm/radeon/si.c
+@@ -3834,6 +3834,8 @@ static int si_startup(struct radeon_devi
+ struct radeon_ring *ring;
+ int r;
+
++ si_mc_program(rdev);
++
+ if (!rdev->me_fw || !rdev->pfp_fw || !rdev->ce_fw ||
+ !rdev->rlc_fw || !rdev->mc_fw) {
+ r = si_init_microcode(rdev);
+@@ -3853,7 +3855,6 @@ static int si_startup(struct radeon_devi
+ if (r)
+ return r;
+
+- si_mc_program(rdev);
+ r = si_pcie_gart_enable(rdev);
+ if (r)
+ return r;
--- /dev/null
+From dcb852905772416e322536ced5cb3c796d176af5 Mon Sep 17 00:00:00 2001
+From: Alex Deucher <alexander.deucher@amd.com>
+Date: Thu, 18 Apr 2013 09:36:42 -0400
+Subject: drm/radeon: fix hdmi mode enable on RS600/RS690/RS740
+
+From: Alex Deucher <alexander.deucher@amd.com>
+
+commit dcb852905772416e322536ced5cb3c796d176af5 upstream.
+
+These chips were previously skipped since they are
+pre-R600.
+
+Signed-off-by: Alex Deucher <alexander.deucher@amd.com>
+[bwh: Backported to 3.2: adjust context]
+Signed-off-by: Ben Hutchings <ben@decadent.org.uk>
+[wml: Backported to 3.4:
+- adjust context
+- no !ASIC_IS_DCE3(rdev)]
+Signed-off-by: Weng Meiling <wengmeiling.weng@huawei.com>
+Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
+---
+ drivers/gpu/drm/radeon/r600_hdmi.c | 4 ++--
+ 1 file changed, 2 insertions(+), 2 deletions(-)
+
+--- a/drivers/gpu/drm/radeon/r600_hdmi.c
++++ b/drivers/gpu/drm/radeon/r600_hdmi.c
+@@ -530,7 +530,7 @@ void r600_hdmi_enable(struct drm_encoder
+ WREG32_P(radeon_encoder->hdmi_config_offset + 0x4, 0x1, ~0x1);
+ } else if (ASIC_IS_DCE3(rdev)) {
+ /* TODO */
+- } else if (rdev->family >= CHIP_R600) {
++ } else if (ASIC_IS_DCE2(rdev)) {
+ switch (radeon_encoder->encoder_id) {
+ case ENCODER_OBJECT_ID_INTERNAL_KLDSCP_TMDS1:
+ WREG32_P(AVIVO_TMDSA_CNTL, AVIVO_TMDSA_CNTL_HDMI_EN,
+@@ -602,7 +602,7 @@ void r600_hdmi_disable(struct drm_encode
+ WREG32_P(radeon_encoder->hdmi_config_offset + 0xc, 0, ~0x1);
+ } else if (ASIC_IS_DCE32(rdev)) {
+ WREG32_P(radeon_encoder->hdmi_config_offset + 0x4, 0, ~0x1);
+- } else if (rdev->family >= CHIP_R600 && !ASIC_IS_DCE3(rdev)) {
++ } else if (ASIC_IS_DCE2(rdev) && !ASIC_IS_DCE3(rdev)) {
+ switch (radeon_encoder->encoder_id) {
+ case ENCODER_OBJECT_ID_INTERNAL_KLDSCP_TMDS1:
+ WREG32_P(AVIVO_TMDSA_CNTL, 0,