diff options
Diffstat (limited to 'drivers/gpu/drm/vc4/vc4_irq.c')
| -rw-r--r-- | drivers/gpu/drm/vc4/vc4_irq.c | 21 | 
1 files changed, 21 insertions, 0 deletions
| diff --git a/drivers/gpu/drm/vc4/vc4_irq.c b/drivers/gpu/drm/vc4/vc4_irq.c index 20fa8e34c20b..2eacfb6773d2 100644 --- a/drivers/gpu/drm/vc4/vc4_irq.c +++ b/drivers/gpu/drm/vc4/vc4_irq.c @@ -51,6 +51,7 @@  #include "vc4_drv.h"  #include "vc4_regs.h" +#include "vc4_trace.h"  #define V3D_DRIVER_IRQS (V3D_INT_OUTOMEM | \  			 V3D_INT_FLDONE | \ @@ -123,6 +124,8 @@ vc4_irq_finish_bin_job(struct drm_device *dev)  	if (!exec)  		return; +	trace_vc4_bcl_end_irq(dev, exec->seqno); +  	vc4_move_job_to_render(dev, exec);  	next = vc4_first_bin_job(vc4); @@ -161,6 +164,8 @@ vc4_irq_finish_render_job(struct drm_device *dev)  	if (!exec)  		return; +	trace_vc4_rcl_end_irq(dev, exec->seqno); +  	vc4->finished_seqno++;  	list_move_tail(&exec->head, &vc4->job_done_list); @@ -260,6 +265,9 @@ vc4_irq_enable(struct drm_device *dev)  {  	struct vc4_dev *vc4 = to_vc4_dev(dev); +	if (WARN_ON_ONCE(vc4->is_vc5)) +		return; +  	if (!vc4->v3d)  		return; @@ -274,6 +282,9 @@ vc4_irq_disable(struct drm_device *dev)  {  	struct vc4_dev *vc4 = to_vc4_dev(dev); +	if (WARN_ON_ONCE(vc4->is_vc5)) +		return; +  	if (!vc4->v3d)  		return; @@ -291,8 +302,12 @@ vc4_irq_disable(struct drm_device *dev)  int vc4_irq_install(struct drm_device *dev, int irq)  { +	struct vc4_dev *vc4 = to_vc4_dev(dev);  	int ret; +	if (WARN_ON_ONCE(vc4->is_vc5)) +		return -ENODEV; +  	if (irq == IRQ_NOTCONNECTED)  		return -ENOTCONN; @@ -311,6 +326,9 @@ void vc4_irq_uninstall(struct drm_device *dev)  {  	struct vc4_dev *vc4 = to_vc4_dev(dev); +	if (WARN_ON_ONCE(vc4->is_vc5)) +		return; +  	vc4_irq_disable(dev);  	free_irq(vc4->irq, dev);  } @@ -321,6 +339,9 @@ void vc4_irq_reset(struct drm_device *dev)  	struct vc4_dev *vc4 = to_vc4_dev(dev);  	unsigned long irqflags; +	if (WARN_ON_ONCE(vc4->is_vc5)) +		return; +  	/* Acknowledge any stale IRQs. */  	V3D_WRITE(V3D_INTCTL, V3D_DRIVER_IRQS); | 
