drm/msm: Add debugfs to disable hw err handling
Add a debugfs interface to ignore hw error irqs, in order to force fallback to sw hangcheck mechanism. Because the hw error detection is pretty good on newer gens, we need this for igt tests to test the sw hang detection. Signed-off-by: Rob Clark <robdclark@chromium.org> Reviewed-by: Akhil P Oommen <akhilpo@codeaurora.org> Link: https://lore.kernel.org/r/20211109181117.591148-6-robdclark@gmail.com Signed-off-by: Rob Clark <robdclark@chromium.org>
This commit is contained in:
parent
5f3aee4ceb
commit
5edf2750d9
|
@ -1252,6 +1252,7 @@ static void a5xx_fault_detect_irq(struct msm_gpu *gpu)
|
|||
|
||||
static irqreturn_t a5xx_irq(struct msm_gpu *gpu)
|
||||
{
|
||||
struct msm_drm_private *priv = gpu->dev->dev_private;
|
||||
u32 status = gpu_read(gpu, REG_A5XX_RBBM_INT_0_STATUS);
|
||||
|
||||
/*
|
||||
|
@ -1261,6 +1262,11 @@ static irqreturn_t a5xx_irq(struct msm_gpu *gpu)
|
|||
gpu_write(gpu, REG_A5XX_RBBM_INT_CLEAR_CMD,
|
||||
status & ~A5XX_RBBM_INT_0_MASK_RBBM_AHB_ERROR);
|
||||
|
||||
if (priv->disable_err_irq) {
|
||||
status &= A5XX_RBBM_INT_0_MASK_CP_CACHE_FLUSH_TS |
|
||||
A5XX_RBBM_INT_0_MASK_CP_SW;
|
||||
}
|
||||
|
||||
/* Pass status to a5xx_rbbm_err_irq because we've already cleared it */
|
||||
if (status & RBBM_ERROR_MASK)
|
||||
a5xx_rbbm_err_irq(gpu, status);
|
||||
|
|
|
@ -1373,10 +1373,14 @@ static void a6xx_fault_detect_irq(struct msm_gpu *gpu)
|
|||
|
||||
static irqreturn_t a6xx_irq(struct msm_gpu *gpu)
|
||||
{
|
||||
struct msm_drm_private *priv = gpu->dev->dev_private;
|
||||
u32 status = gpu_read(gpu, REG_A6XX_RBBM_INT_0_STATUS);
|
||||
|
||||
gpu_write(gpu, REG_A6XX_RBBM_INT_CLEAR_CMD, status);
|
||||
|
||||
if (priv->disable_err_irq)
|
||||
status &= A6XX_RBBM_INT_0_MASK_CP_CACHE_FLUSH_TS;
|
||||
|
||||
if (status & A6XX_RBBM_INT_0_MASK_RBBM_HANG_DETECT)
|
||||
a6xx_fault_detect_irq(gpu);
|
||||
|
||||
|
|
|
@ -242,6 +242,9 @@ void msm_debugfs_init(struct drm_minor *minor)
|
|||
debugfs_create_u32("hangcheck_period_ms", 0600, minor->debugfs_root,
|
||||
&priv->hangcheck_period);
|
||||
|
||||
debugfs_create_bool("disable_err_irq", 0600, minor->debugfs_root,
|
||||
&priv->disable_err_irq);
|
||||
|
||||
debugfs_create_file("shrink", S_IRWXU, minor->debugfs_root,
|
||||
dev, &shrink_fops);
|
||||
|
||||
|
|
|
@ -240,6 +240,15 @@ struct msm_drm_private {
|
|||
|
||||
/* For hang detection, in ms */
|
||||
unsigned int hangcheck_period;
|
||||
|
||||
/**
|
||||
* disable_err_irq:
|
||||
*
|
||||
* Disable handling of GPU hw error interrupts, to force fallback to
|
||||
* sw hangcheck timer. Written (via debugfs) by igt tests to test
|
||||
* the sw hangcheck mechanism.
|
||||
*/
|
||||
bool disable_err_irq;
|
||||
};
|
||||
|
||||
struct msm_format {
|
||||
|
|
Loading…
Reference in New Issue