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

Commit 17db7042 authored by Alex Deucher's avatar Alex Deucher Committed by Dave Airlie
Browse files

drm/radeon/kms: implement gpu lockup check for evergreen



Now that soft reset works, we can add this.

Signed-off-by: default avatarAlex Deucher <alexdeucher@gmail.com>
Signed-off-by: default avatarDave Airlie <airlied@redhat.com>
parent 4f125010
Loading
Loading
Loading
Loading
+24 −2
Original line number Diff line number Diff line
@@ -2085,9 +2085,31 @@ int evergreen_mc_init(struct radeon_device *rdev)

bool evergreen_gpu_is_lockup(struct radeon_device *rdev)
{
	/* FIXME: implement for evergreen */
	u32 srbm_status;
	u32 grbm_status;
	u32 grbm_status_se0, grbm_status_se1;
	struct r100_gpu_lockup *lockup = &rdev->config.evergreen.lockup;
	int r;

	srbm_status = RREG32(SRBM_STATUS);
	grbm_status = RREG32(GRBM_STATUS);
	grbm_status_se0 = RREG32(GRBM_STATUS_SE0);
	grbm_status_se1 = RREG32(GRBM_STATUS_SE1);
	if (!(grbm_status & GUI_ACTIVE)) {
		r100_gpu_lockup_update(lockup, &rdev->cp);
		return false;
	}
	/* force CP activities */
	r = radeon_ring_lock(rdev, 2);
	if (!r) {
		/* PACKET2 NOP */
		radeon_ring_write(rdev, 0x80000000);
		radeon_ring_write(rdev, 0x80000000);
		radeon_ring_unlock_commit(rdev);
	}
	rdev->cp.rptr = RREG32(CP_RB_RPTR);
	return r100_gpu_cp_is_lockup(rdev, lockup, &rdev->cp);
}

static int evergreen_gpu_soft_reset(struct radeon_device *rdev)
{
+1 −0
Original line number Diff line number Diff line
@@ -1031,6 +1031,7 @@ struct evergreen_asic {
	unsigned tiling_npipes;
	unsigned tiling_group_size;
	unsigned tile_config;
	struct r100_gpu_lockup	lockup;
};

union radeon_asic_config {