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

Commit 372b918e authored by Jordan Crouse's avatar Jordan Crouse Committed by Shubhraprakash Das
Browse files

msm: kgsl: Mask off the HW fault interrupt once it's signalled



The CP_HW_FAULT interrupt does not cause GPU to hang and is
continuously generated by the GPU once this fault condition
happens. This causes the the logs to spam. In addition to
spamming the logs the cpu can keep spinning on waiting for GPU
to idle which will never happen because the GPU keeps generating
this interrupt. Masking off the interrupt after it happens allows
GPU to go idle and this interrupt will get turned on again on
next GPU start.

Change-Id: I0f8b503aefb6a923dd9df45d08b7a7c2b4b2f986
Signed-off-by: default avatarShubhraprakash Das <sadas@codeaurora.org>
Signed-off-by: default avatarJordan Crouse <jcrouse@codeaurora.org>
parent c3e072e1
Loading
Loading
Loading
Loading
+9 −0
Original line number Diff line number Diff line
@@ -898,10 +898,19 @@ void a4xx_err_callback(struct adreno_device *adreno_dev, int bit)
			"ringbuffer reserved bit error interrupt\n");
		break;
	case A4XX_INT_CP_HW_FAULT:
	{
		struct adreno_gpudev *gpudev = ADRENO_GPU_DEVICE(adreno_dev);
		kgsl_regread(device, A4XX_CP_HW_FAULT, &reg);
		KGSL_DRV_CRIT_RATELIMIT(device,
			"CP | Ringbuffer HW fault | status=%x\n", reg);
		/*
		 * mask off this interrupt since it can spam, it will be
		 * turned on again when device resets
		 */
		adreno_writereg(adreno_dev, ADRENO_REG_RBBM_INT_0_MASK,
			gpudev->irq->mask & ~(1 << A4XX_INT_CP_HW_FAULT));
		break;
	}
	case A4XX_INT_CP_REG_PROTECT_FAULT:
		kgsl_regread(device, A4XX_CP_PROTECT_STATUS, &reg);
		KGSL_DRV_CRIT(device,