Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit d808fc88 authored by Alex Deucher's avatar Alex Deucher
Browse files

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: default avatarJosh Boyer <jwboyer@gmail.com>
Signed-off-by: default avatarAlex Deucher <alexander.deucher@amd.com>
parent e8fc4137
Loading
Loading
Loading
Loading
+6 −0
Original line number Original line Diff line number Diff line
@@ -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;
}
}


+6 −0
Original line number Original line Diff line number Diff line
@@ -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;
}
}


+6 −0
Original line number Original line Diff line number Diff line
@@ -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;
}
}


+6 −0
Original line number Original line Diff line number Diff line
@@ -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;
}
}