drm/radeon: skip MC reset as it's probably not hung
The MC is mostly likely busy (e.g., display requests), not hung so no need to reset it. Doing an MC reset is tricky and not particularly reliable. Fixes hangs in certain cases. Reported-by: Josh Boyer <jwboyer@gmail.com> Signed-off-by: Alex Deucher <alexander.deucher@amd.com>
This commit is contained in:
parent
e8fc41377f
commit
d808fc8829
|
@ -2438,6 +2438,12 @@ static u32 evergreen_gpu_check_soft_reset(struct radeon_device *rdev)
|
||||||
if (tmp & L2_BUSY)
|
if (tmp & L2_BUSY)
|
||||||
reset_mask |= RADEON_RESET_VMC;
|
reset_mask |= RADEON_RESET_VMC;
|
||||||
|
|
||||||
|
/* Skip MC reset as it's mostly likely not hung, just busy */
|
||||||
|
if (reset_mask & RADEON_RESET_MC) {
|
||||||
|
DRM_DEBUG("MC busy: 0x%08X, clearing.\n", reset_mask);
|
||||||
|
reset_mask &= ~RADEON_RESET_MC;
|
||||||
|
}
|
||||||
|
|
||||||
return reset_mask;
|
return reset_mask;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -1381,6 +1381,12 @@ static u32 cayman_gpu_check_soft_reset(struct radeon_device *rdev)
|
||||||
if (tmp & L2_BUSY)
|
if (tmp & L2_BUSY)
|
||||||
reset_mask |= RADEON_RESET_VMC;
|
reset_mask |= RADEON_RESET_VMC;
|
||||||
|
|
||||||
|
/* Skip MC reset as it's mostly likely not hung, just busy */
|
||||||
|
if (reset_mask & RADEON_RESET_MC) {
|
||||||
|
DRM_DEBUG("MC busy: 0x%08X, clearing.\n", reset_mask);
|
||||||
|
reset_mask &= ~RADEON_RESET_MC;
|
||||||
|
}
|
||||||
|
|
||||||
return reset_mask;
|
return reset_mask;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -1394,6 +1394,12 @@ static u32 r600_gpu_check_soft_reset(struct radeon_device *rdev)
|
||||||
if (r600_is_display_hung(rdev))
|
if (r600_is_display_hung(rdev))
|
||||||
reset_mask |= RADEON_RESET_DISPLAY;
|
reset_mask |= RADEON_RESET_DISPLAY;
|
||||||
|
|
||||||
|
/* Skip MC reset as it's mostly likely not hung, just busy */
|
||||||
|
if (reset_mask & RADEON_RESET_MC) {
|
||||||
|
DRM_DEBUG("MC busy: 0x%08X, clearing.\n", reset_mask);
|
||||||
|
reset_mask &= ~RADEON_RESET_MC;
|
||||||
|
}
|
||||||
|
|
||||||
return reset_mask;
|
return reset_mask;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -2284,6 +2284,12 @@ static u32 si_gpu_check_soft_reset(struct radeon_device *rdev)
|
||||||
if (tmp & L2_BUSY)
|
if (tmp & L2_BUSY)
|
||||||
reset_mask |= RADEON_RESET_VMC;
|
reset_mask |= RADEON_RESET_VMC;
|
||||||
|
|
||||||
|
/* Skip MC reset as it's mostly likely not hung, just busy */
|
||||||
|
if (reset_mask & RADEON_RESET_MC) {
|
||||||
|
DRM_DEBUG("MC busy: 0x%08X, clearing.\n", reset_mask);
|
||||||
|
reset_mask &= ~RADEON_RESET_MC;
|
||||||
|
}
|
||||||
|
|
||||||
return reset_mask;
|
return reset_mask;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue