Lines Matching refs:chan

152 	struct ipu_image_convert_chan *chan;
225 struct ipu_image_convert_chan chan[IC_NUM_TASKS];
340 struct ipu_image_convert_chan *chan = ctx->chan;
341 struct ipu_image_convert_priv *priv = chan->priv;
345 chan->ic_task, ctx,
458 dev_dbg(ctx->chan->priv->ipu->dev,
511 struct device *dev = ctx->chan->priv->ipu->dev;
735 struct device *dev = ctx->chan->priv->ipu->dev;
858 struct ipu_image_convert_chan *chan = ctx->chan;
859 struct ipu_image_convert_priv *priv = chan->priv;
895 chan->ic_task, ctx,
921 struct ipu_image_convert_chan *chan = ctx->chan;
922 struct ipu_image_convert_priv *priv = chan->priv;
954 chan->ic_task, ctx, src_col, src_row, dst_col, dst_row);
988 struct ipu_image_convert_chan *chan = ctx->chan;
989 struct ipu_image_convert_priv *priv = chan->priv;
1038 chan->ic_task, ctx,
1053 struct ipu_image_convert_chan *chan = ctx->chan;
1054 struct ipu_image_convert_priv *priv = chan->priv;
1080 chan->ic_task, ctx,
1129 struct ipu_image_convert_chan *chan = ctx->chan;
1130 struct ipu_image_convert_priv *priv = chan->priv;
1260 lockdep_assert_held(&ctx->chan->irqlock);
1273 struct ipu_image_convert_chan *chan = ctx->chan;
1274 struct ipu_image_convert_priv *priv = chan->priv;
1277 __func__, chan->ic_task, ctx, run);
1280 ipu_ic_task_disable(chan->ic);
1281 ipu_idmac_disable_channel(chan->in_chan);
1282 ipu_idmac_disable_channel(chan->out_chan);
1285 ipu_idmac_disable_channel(chan->rotation_in_chan);
1286 ipu_idmac_disable_channel(chan->rotation_out_chan);
1287 ipu_idmac_unlink(chan->out_chan, chan->rotation_in_chan);
1290 ipu_ic_disable(chan->ic);
1300 struct ipu_image_convert_chan *chan = ctx->chan;
1356 if ((channel == chan->out_chan ||
1357 channel == chan->rotation_out_chan) &&
1361 if (channel == chan->rotation_in_chan ||
1362 channel == chan->rotation_out_chan) {
1370 ipu_ic_task_idma_init(chan->ic, channel, width, height,
1386 struct ipu_image_convert_chan *chan = ctx->chan;
1387 struct ipu_image_convert_priv *priv = chan->priv;
1397 __func__, chan->ic_task, ctx, run, tile, dst_tile);
1424 ret = ipu_ic_task_init_rsc(chan->ic, &ctx->csc,
1436 init_idmac_channel(ctx, chan->in_chan, s_image,
1441 init_idmac_channel(ctx, chan->out_chan, d_image,
1445 init_idmac_channel(ctx, chan->rotation_in_chan, d_image,
1449 init_idmac_channel(ctx, chan->rotation_out_chan, d_image,
1453 ipu_idmac_link(chan->out_chan, chan->rotation_in_chan);
1456 init_idmac_channel(ctx, chan->out_chan, d_image,
1461 ipu_ic_enable(chan->ic);
1464 ipu_idmac_select_buffer(chan->in_chan, 0);
1465 ipu_idmac_select_buffer(chan->out_chan, 0);
1467 ipu_idmac_select_buffer(chan->rotation_out_chan, 0);
1469 ipu_idmac_select_buffer(chan->in_chan, 1);
1470 ipu_idmac_select_buffer(chan->out_chan, 1);
1472 ipu_idmac_select_buffer(chan->rotation_out_chan, 1);
1476 ipu_idmac_enable_channel(chan->in_chan);
1477 ipu_idmac_enable_channel(chan->out_chan);
1479 ipu_idmac_enable_channel(chan->rotation_in_chan);
1480 ipu_idmac_enable_channel(chan->rotation_out_chan);
1483 ipu_ic_task_enable(chan->ic);
1485 ipu_cpmem_dump(chan->in_chan);
1486 ipu_cpmem_dump(chan->out_chan);
1488 ipu_cpmem_dump(chan->rotation_in_chan);
1489 ipu_cpmem_dump(chan->rotation_out_chan);
1501 struct ipu_image_convert_chan *chan = ctx->chan;
1503 lockdep_assert_held(&chan->irqlock);
1513 chan->current_run = run;
1519 static void run_next(struct ipu_image_convert_chan *chan)
1521 struct ipu_image_convert_priv *priv = chan->priv;
1525 lockdep_assert_held(&chan->irqlock);
1527 list_for_each_entry_safe(run, tmp, &chan->pending_q, list) {
1532 __func__, chan->ic_task, run->ctx, run);
1546 list_add_tail(&run->list, &chan->done_q);
1547 chan->current_run = NULL;
1551 static void empty_done_q(struct ipu_image_convert_chan *chan)
1553 struct ipu_image_convert_priv *priv = chan->priv;
1557 spin_lock_irqsave(&chan->irqlock, flags);
1559 while (!list_empty(&chan->done_q)) {
1560 run = list_entry(chan->done_q.next,
1568 __func__, chan->ic_task, run->ctx, run, run->status);
1571 spin_unlock_irqrestore(&chan->irqlock, flags);
1573 spin_lock_irqsave(&chan->irqlock, flags);
1576 spin_unlock_irqrestore(&chan->irqlock, flags);
1585 struct ipu_image_convert_chan *chan = dev_id;
1586 struct ipu_image_convert_priv *priv = chan->priv;
1591 chan->ic_task);
1593 empty_done_q(chan);
1595 spin_lock_irqsave(&chan->irqlock, flags);
1601 list_for_each_entry(ctx, &chan->ctx_list, list) {
1605 __func__, chan->ic_task, ctx);
1610 spin_unlock_irqrestore(&chan->irqlock, flags);
1613 chan->ic_task);
1640 struct ipu_image_convert_chan *chan = ctx->chan;
1647 lockdep_assert_held(&chan->irqlock);
1650 chan->rotation_out_chan : chan->out_chan;
1687 ipu_cpmem_set_buffer(chan->in_chan, 0,
1694 ipu_cpmem_set_uv_offset(chan->in_chan,
1702 ipu_idmac_select_buffer(chan->in_chan, 0);
1711 ipu_cpmem_set_buffer(chan->in_chan, ctx->cur_buf_num,
1716 ipu_idmac_select_buffer(chan->in_chan, ctx->cur_buf_num);
1726 list_add_tail(&run->list, &chan->done_q);
1727 chan->current_run = NULL;
1728 run_next(chan);
1734 struct ipu_image_convert_chan *chan = data;
1735 struct ipu_image_convert_priv *priv = chan->priv;
1742 spin_lock_irqsave(&chan->irqlock, flags);
1745 run = chan->current_run;
1753 if (irq == chan->in_eof_irq) {
1755 } else if (irq == chan->out_eof_irq) {
1757 } else if (irq == chan->rot_in_eof_irq ||
1758 irq == chan->rot_out_eof_irq) {
1765 ctx->eof_mask |= (irq == chan->rot_in_eof_irq) ?
1781 spin_unlock_irqrestore(&chan->irqlock, flags);
1791 struct ipu_image_convert_chan *chan = ctx->chan;
1795 spin_lock_irqsave(&chan->irqlock, flags);
1797 run = chan->current_run;
1801 list_add_tail(&run->list, &chan->done_q);
1802 chan->current_run = NULL;
1803 run_next(chan);
1806 spin_unlock_irqrestore(&chan->irqlock, flags);
1808 empty_done_q(chan);
1811 static void release_ipu_resources(struct ipu_image_convert_chan *chan)
1813 if (chan->in_eof_irq >= 0)
1814 free_irq(chan->in_eof_irq, chan);
1815 if (chan->rot_in_eof_irq >= 0)
1816 free_irq(chan->rot_in_eof_irq, chan);
1817 if (chan->out_eof_irq >= 0)
1818 free_irq(chan->out_eof_irq, chan);
1819 if (chan->rot_out_eof_irq >= 0)
1820 free_irq(chan->rot_out_eof_irq, chan);
1822 if (!IS_ERR_OR_NULL(chan->in_chan))
1823 ipu_idmac_put(chan->in_chan);
1824 if (!IS_ERR_OR_NULL(chan->out_chan))
1825 ipu_idmac_put(chan->out_chan);
1826 if (!IS_ERR_OR_NULL(chan->rotation_in_chan))
1827 ipu_idmac_put(chan->rotation_in_chan);
1828 if (!IS_ERR_OR_NULL(chan->rotation_out_chan))
1829 ipu_idmac_put(chan->rotation_out_chan);
1830 if (!IS_ERR_OR_NULL(chan->ic))
1831 ipu_ic_put(chan->ic);
1833 chan->in_chan = chan->out_chan = chan->rotation_in_chan =
1834 chan->rotation_out_chan = NULL;
1835 chan->in_eof_irq = -1;
1836 chan->rot_in_eof_irq = -1;
1837 chan->out_eof_irq = -1;
1838 chan->rot_out_eof_irq = -1;
1841 static int get_eof_irq(struct ipu_image_convert_chan *chan,
1844 struct ipu_image_convert_priv *priv = chan->priv;
1849 ret = request_threaded_irq(irq, eof_irq, do_bh, 0, "ipu-ic", chan);
1858 static int get_ipu_resources(struct ipu_image_convert_chan *chan)
1860 const struct ipu_image_convert_dma_chan *dma = chan->dma_ch;
1861 struct ipu_image_convert_priv *priv = chan->priv;
1865 chan->ic = ipu_ic_get(priv->ipu, chan->ic_task);
1866 if (IS_ERR(chan->ic)) {
1868 ret = PTR_ERR(chan->ic);
1873 chan->in_chan = ipu_idmac_get(priv->ipu, dma->in);
1874 chan->out_chan = ipu_idmac_get(priv->ipu, dma->out);
1875 if (IS_ERR(chan->in_chan) || IS_ERR(chan->out_chan)) {
1881 chan->rotation_in_chan = ipu_idmac_get(priv->ipu, dma->rot_in);
1882 chan->rotation_out_chan = ipu_idmac_get(priv->ipu, dma->rot_out);
1883 if (IS_ERR(chan->rotation_in_chan) || IS_ERR(chan->rotation_out_chan)) {
1891 ret = get_eof_irq(chan, chan->in_chan);
1893 chan->in_eof_irq = -1;
1896 chan->in_eof_irq = ret;
1898 ret = get_eof_irq(chan, chan->rotation_in_chan);
1900 chan->rot_in_eof_irq = -1;
1903 chan->rot_in_eof_irq = ret;
1905 ret = get_eof_irq(chan, chan->out_chan);
1907 chan->out_eof_irq = -1;
1910 chan->out_eof_irq = ret;
1912 ret = get_eof_irq(chan, chan->rotation_out_chan);
1914 chan->rot_out_eof_irq = -1;
1917 chan->rot_out_eof_irq = ret;
1921 release_ipu_resources(chan);
1930 struct ipu_image_convert_priv *priv = ctx->chan->priv;
2081 struct ipu_image_convert_chan *chan;
2101 chan = &priv->chan[ic_task];
2108 chan->ic_task, ctx);
2110 ctx->chan = chan;
2235 spin_lock_irqsave(&chan->irqlock, flags);
2237 get_res = list_empty(&chan->ctx_list);
2239 list_add_tail(&ctx->list, &chan->ctx_list);
2241 spin_unlock_irqrestore(&chan->irqlock, flags);
2244 ret = get_ipu_resources(chan);
2253 spin_lock_irqsave(&chan->irqlock, flags);
2255 spin_unlock_irqrestore(&chan->irqlock, flags);
2271 struct ipu_image_convert_chan *chan;
2281 chan = ctx->chan;
2282 priv = chan->priv;
2285 chan->ic_task, ctx, run);
2289 spin_lock_irqsave(&chan->irqlock, flags);
2296 list_add_tail(&run->list, &chan->pending_q);
2298 if (!chan->current_run) {
2301 chan->current_run = NULL;
2304 spin_unlock_irqrestore(&chan->irqlock, flags);
2312 struct ipu_image_convert_chan *chan = ctx->chan;
2313 struct ipu_image_convert_priv *priv = chan->priv;
2318 spin_lock_irqsave(&chan->irqlock, flags);
2321 list_for_each_entry_safe(run, tmp, &chan->pending_q, list) {
2325 list_move_tail(&run->list, &chan->done_q);
2328 run_count = get_run_count(ctx, &chan->done_q);
2329 active_run = (chan->current_run && chan->current_run->ctx == ctx) ?
2330 chan->current_run : NULL;
2337 spin_unlock_irqrestore(&chan->irqlock, flags);
2342 __func__, chan->ic_task, ctx);
2347 empty_done_q(chan);
2353 __func__, chan->ic_task, run_count);
2373 struct ipu_image_convert_chan *chan = ctx->chan;
2374 struct ipu_image_convert_priv *priv = chan->priv;
2382 chan->ic_task, ctx);
2384 spin_lock_irqsave(&chan->irqlock, flags);
2388 put_res = list_empty(&chan->ctx_list);
2390 spin_unlock_irqrestore(&chan->irqlock, flags);
2393 release_ipu_resources(chan);
2491 struct ipu_image_convert_chan *chan = &priv->chan[i];
2493 chan->ic_task = i;
2494 chan->priv = priv;
2495 chan->dma_ch = &image_convert_dma_chan[i];
2496 chan->in_eof_irq = -1;
2497 chan->rot_in_eof_irq = -1;
2498 chan->out_eof_irq = -1;
2499 chan->rot_out_eof_irq = -1;
2501 spin_lock_init(&chan->irqlock);
2502 INIT_LIST_HEAD(&chan->ctx_list);
2503 INIT_LIST_HEAD(&chan->pending_q);
2504 INIT_LIST_HEAD(&chan->done_q);