| From 0f6245f42ce9b7e4d20f2cda8d5f12b55a44d7d1 Mon Sep 17 00:00:00 2001 |
| From: Steve Longerbeam <slongerbeam@gmail.com> |
| Date: Wed, 17 Jun 2020 15:40:37 -0700 |
| Subject: [PATCH] gpu: ipu-v3: image-convert: Combine rotate/no-rotate irq |
| handlers |
| |
| commit 0f6245f42ce9b7e4d20f2cda8d5f12b55a44d7d1 upstream. |
| |
| Combine the rotate_irq() and norotate_irq() handlers into a single |
| eof_irq() handler. |
| |
| Signed-off-by: Steve Longerbeam <slongerbeam@gmail.com> |
| Signed-off-by: Philipp Zabel <p.zabel@pengutronix.de> |
| |
| diff --git a/drivers/gpu/ipu-v3/ipu-image-convert.c b/drivers/gpu/ipu-v3/ipu-image-convert.c |
| index eeca50d9a1ee..f8b031ded3cf 100644 |
| --- a/drivers/gpu/ipu-v3/ipu-image-convert.c |
| +++ b/drivers/gpu/ipu-v3/ipu-image-convert.c |
| @@ -1709,9 +1709,10 @@ done: |
| return IRQ_WAKE_THREAD; |
| } |
| |
| -static irqreturn_t norotate_irq(int irq, void *data) |
| +static irqreturn_t eof_irq(int irq, void *data) |
| { |
| struct ipu_image_convert_chan *chan = data; |
| + struct ipu_image_convert_priv *priv = chan->priv; |
| struct ipu_image_convert_ctx *ctx; |
| struct ipu_image_convert_run *run; |
| unsigned long flags; |
| @@ -1728,45 +1729,26 @@ static irqreturn_t norotate_irq(int irq, void *data) |
| |
| ctx = run->ctx; |
| |
| - if (ipu_rot_mode_is_irt(ctx->rot_mode)) { |
| - /* this is a rotation operation, just ignore */ |
| - spin_unlock_irqrestore(&chan->irqlock, flags); |
| - return IRQ_HANDLED; |
| - } |
| - |
| - ret = do_irq(run); |
| -out: |
| - spin_unlock_irqrestore(&chan->irqlock, flags); |
| - return ret; |
| -} |
| - |
| -static irqreturn_t rotate_irq(int irq, void *data) |
| -{ |
| - struct ipu_image_convert_chan *chan = data; |
| - struct ipu_image_convert_priv *priv = chan->priv; |
| - struct ipu_image_convert_ctx *ctx; |
| - struct ipu_image_convert_run *run; |
| - unsigned long flags; |
| - irqreturn_t ret; |
| - |
| - spin_lock_irqsave(&chan->irqlock, flags); |
| - |
| - /* get current run and its context */ |
| - run = chan->current_run; |
| - if (!run) { |
| + if (irq == chan->out_eof_irq) { |
| + if (ipu_rot_mode_is_irt(ctx->rot_mode)) { |
| + /* this is a rotation op, just ignore */ |
| + ret = IRQ_HANDLED; |
| + goto out; |
| + } |
| + } else if (irq == chan->rot_out_eof_irq) { |
| + if (!ipu_rot_mode_is_irt(ctx->rot_mode)) { |
| + /* this was NOT a rotation op, shouldn't happen */ |
| + dev_err(priv->ipu->dev, |
| + "Unexpected rotation interrupt\n"); |
| + ret = IRQ_HANDLED; |
| + goto out; |
| + } |
| + } else { |
| + dev_err(priv->ipu->dev, "Received unknown irq %d\n", irq); |
| ret = IRQ_NONE; |
| goto out; |
| } |
| |
| - ctx = run->ctx; |
| - |
| - if (!ipu_rot_mode_is_irt(ctx->rot_mode)) { |
| - /* this was NOT a rotation operation, shouldn't happen */ |
| - dev_err(priv->ipu->dev, "Unexpected rotation interrupt\n"); |
| - spin_unlock_irqrestore(&chan->irqlock, flags); |
| - return IRQ_HANDLED; |
| - } |
| - |
| ret = do_irq(run); |
| out: |
| spin_unlock_irqrestore(&chan->irqlock, flags); |
| @@ -1859,7 +1841,7 @@ static int get_ipu_resources(struct ipu_image_convert_chan *chan) |
| chan->out_chan, |
| IPU_IRQ_EOF); |
| |
| - ret = request_threaded_irq(chan->out_eof_irq, norotate_irq, do_bh, |
| + ret = request_threaded_irq(chan->out_eof_irq, eof_irq, do_bh, |
| 0, "ipu-ic", chan); |
| if (ret < 0) { |
| dev_err(priv->ipu->dev, "could not acquire irq %d\n", |
| @@ -1872,7 +1854,7 @@ static int get_ipu_resources(struct ipu_image_convert_chan *chan) |
| chan->rotation_out_chan, |
| IPU_IRQ_EOF); |
| |
| - ret = request_threaded_irq(chan->rot_out_eof_irq, rotate_irq, do_bh, |
| + ret = request_threaded_irq(chan->rot_out_eof_irq, eof_irq, do_bh, |
| 0, "ipu-ic", chan); |
| if (ret < 0) { |
| dev_err(priv->ipu->dev, "could not acquire irq %d\n", |
| -- |
| 2.27.0 |
| |