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

Commit 1034f4f3 authored by Akhil P Oommen's avatar Akhil P Oommen
Browse files

msm: kgsl: Fix preemption fault handling for A6xx GPU



In preemption fault handler, check only the STOP bit of
ADRENO_REG_CP_PREEMPT register to see if the preemption is complete.
Also, log a warning here irrespective of preemption completion status
since 10 seconds is a huge time to be blocked for preemption. It will
be helpful to debug other issues like fence timeouts.

Change-Id: Id1f2d0947412e996d6028558124c3e528527cec6
Signed-off-by: default avatarAkhil P Oommen <akhilpo@codeaurora.org>
parent 1e5b6117
Loading
Loading
Loading
Loading
+4 −2
Original line number Diff line number Diff line
@@ -146,6 +146,8 @@ static void _a6xx_preemption_fault(struct adreno_device *adreno_dev)
	struct kgsl_device *device = KGSL_DEVICE(adreno_dev);
	unsigned int status;

	KGSL_DRV_WARN(device, "Preemption timed out\n");

	/*
	 * If the power is on check the preemption status one more time - if it
	 * was successful then just transition to the complete state
@@ -153,7 +155,7 @@ static void _a6xx_preemption_fault(struct adreno_device *adreno_dev)
	if (kgsl_state_is_awake(device)) {
		adreno_readreg(adreno_dev, ADRENO_REG_CP_PREEMPT, &status);

		if (status == 0) {
		if (!(status & 0x1)) {
			adreno_set_preempt_state(adreno_dev,
				ADRENO_PREEMPT_COMPLETE);

@@ -163,7 +165,7 @@ static void _a6xx_preemption_fault(struct adreno_device *adreno_dev)
	}

	KGSL_DRV_ERR(device,
		"Preemption timed out: cur=%d R/W=%X/%X, next=%d R/W=%X/%X\n",
		"Preemption Fault: cur=%d R/W=%X/%X, next=%d R/W=%X/%X\n",
		adreno_dev->cur_rb->id,
		adreno_get_rptr(adreno_dev->cur_rb), adreno_dev->cur_rb->wptr,
		adreno_dev->next_rb->id,