]> Git Repo - linux.git/blobdiff - drivers/gpu/drm/lima/lima_pp.c
Linux 6.14-rc3
[linux.git] / drivers / gpu / drm / lima / lima_pp.c
index d0d2db0ef1ce8060e704d7d0ab2a6637f7750f4f..eaab4788dff494f2cbc4f2ebca70d444050920f9 100644 (file)
@@ -286,7 +286,9 @@ int lima_pp_init(struct lima_ip *ip)
 
 void lima_pp_fini(struct lima_ip *ip)
 {
+       struct lima_device *dev = ip->dev;
 
+       devm_free_irq(dev->dev, ip->irq, ip);
 }
 
 int lima_pp_bcast_resume(struct lima_ip *ip)
@@ -319,7 +321,9 @@ int lima_pp_bcast_init(struct lima_ip *ip)
 
 void lima_pp_bcast_fini(struct lima_ip *ip)
 {
+       struct lima_device *dev = ip->dev;
 
+       devm_free_irq(dev->dev, ip->irq, ip);
 }
 
 static int lima_pp_task_validate(struct lima_sched_pipe *pipe,
@@ -429,6 +433,9 @@ static void lima_pp_task_error(struct lima_sched_pipe *pipe)
 
                lima_pp_hard_reset(ip);
        }
+
+       if (pipe->bcast_processor)
+               lima_bcast_reset(pipe->bcast_processor);
 }
 
 static void lima_pp_task_mmu_error(struct lima_sched_pipe *pipe)
@@ -437,6 +444,20 @@ static void lima_pp_task_mmu_error(struct lima_sched_pipe *pipe)
                lima_sched_pipe_task_done(pipe);
 }
 
+static void lima_pp_task_mask_irq(struct lima_sched_pipe *pipe)
+{
+       int i;
+
+       for (i = 0; i < pipe->num_processor; i++) {
+               struct lima_ip *ip = pipe->processor[i];
+
+               pp_write(LIMA_PP_INT_MASK, 0);
+       }
+
+       if (pipe->bcast_processor)
+               lima_bcast_mask_irq(pipe->bcast_processor);
+}
+
 static struct kmem_cache *lima_pp_task_slab;
 static int lima_pp_task_slab_refcnt;
 
@@ -468,6 +489,7 @@ int lima_pp_pipe_init(struct lima_device *dev)
        pipe->task_fini = lima_pp_task_fini;
        pipe->task_error = lima_pp_task_error;
        pipe->task_mmu_error = lima_pp_task_mmu_error;
+       pipe->task_mask_irq = lima_pp_task_mask_irq;
 
        return 0;
 }
This page took 0.052626 seconds and 4 git commands to generate.