mirror of
https://github.com/armbian/linux.git
synced 2026-01-06 10:13:00 -08:00
drm/radeon: always program the MC on startup
commit 6fab3febf6 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>
[ rebased for 3.10 and dropped the drivers/gpu/drm/radeon/cik.c
bit as it's 3.11 specific code / tmb ]
Signed-off-by: Thomas Backlund <tmb@mageia.org>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
This commit is contained in:
committed by
Greg Kroah-Hartman
parent
23b6ec0bab
commit
9ff2cb528a
@@ -4681,6 +4681,8 @@ static int evergreen_startup(struct radeon_device *rdev)
|
||||
/* 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);
|
||||
@@ -4708,7 +4710,6 @@ static int evergreen_startup(struct radeon_device *rdev)
|
||||
if (r)
|
||||
return r;
|
||||
|
||||
evergreen_mc_program(rdev);
|
||||
if (rdev->flags & RADEON_IS_AGP) {
|
||||
evergreen_agp_enable(rdev);
|
||||
} else {
|
||||
|
||||
@@ -1929,6 +1929,8 @@ static int cayman_startup(struct radeon_device *rdev)
|
||||
/* 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);
|
||||
@@ -1957,7 +1959,6 @@ static int cayman_startup(struct radeon_device *rdev)
|
||||
if (r)
|
||||
return r;
|
||||
|
||||
evergreen_mc_program(rdev);
|
||||
r = cayman_pcie_gart_enable(rdev);
|
||||
if (r)
|
||||
return r;
|
||||
|
||||
@@ -3224,6 +3224,8 @@ static int r600_startup(struct radeon_device *rdev)
|
||||
/* 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) {
|
||||
@@ -3236,7 +3238,6 @@ static int r600_startup(struct radeon_device *rdev)
|
||||
if (r)
|
||||
return r;
|
||||
|
||||
r600_mc_program(rdev);
|
||||
if (rdev->flags & RADEON_IS_AGP) {
|
||||
r600_agp_enable(rdev);
|
||||
} else {
|
||||
|
||||
@@ -1829,6 +1829,8 @@ static int rv770_startup(struct radeon_device *rdev)
|
||||
/* 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) {
|
||||
@@ -1841,7 +1843,6 @@ static int rv770_startup(struct radeon_device *rdev)
|
||||
if (r)
|
||||
return r;
|
||||
|
||||
rv770_mc_program(rdev);
|
||||
if (rdev->flags & RADEON_IS_AGP) {
|
||||
rv770_agp_enable(rdev);
|
||||
} else {
|
||||
|
||||
@@ -5270,6 +5270,8 @@ static int si_startup(struct radeon_device *rdev)
|
||||
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);
|
||||
@@ -5289,7 +5291,6 @@ static int si_startup(struct radeon_device *rdev)
|
||||
if (r)
|
||||
return r;
|
||||
|
||||
si_mc_program(rdev);
|
||||
r = si_pcie_gart_enable(rdev);
|
||||
if (r)
|
||||
return r;
|
||||
|
||||
Reference in New Issue
Block a user