GNU Linux-libre 4.9.317-gnu1
[releases.git] / drivers / media / platform / coda / coda-common.c
1 /*
2  * Coda multi-standard codec IP
3  *
4  * Copyright (C) 2012 Vista Silicon S.L.
5  *    Javier Martin, <javier.martin@vista-silicon.com>
6  *    Xavier Duret
7  *
8  * This program is free software; you can redistribute it and/or modify
9  * it under the terms of the GNU General Public License as published by
10  * the Free Software Foundation; either version 2 of the License, or
11  * (at your option) any later version.
12  */
13
14 #include <linux/clk.h>
15 #include <linux/debugfs.h>
16 #include <linux/delay.h>
17 #include <linux/firmware.h>
18 #include <linux/gcd.h>
19 #include <linux/genalloc.h>
20 #include <linux/interrupt.h>
21 #include <linux/io.h>
22 #include <linux/irq.h>
23 #include <linux/kfifo.h>
24 #include <linux/module.h>
25 #include <linux/of_device.h>
26 #include <linux/platform_device.h>
27 #include <linux/pm_runtime.h>
28 #include <linux/slab.h>
29 #include <linux/videodev2.h>
30 #include <linux/of.h>
31 #include <linux/platform_data/media/coda.h>
32 #include <linux/reset.h>
33
34 #include <media/v4l2-ctrls.h>
35 #include <media/v4l2-device.h>
36 #include <media/v4l2-event.h>
37 #include <media/v4l2-ioctl.h>
38 #include <media/v4l2-mem2mem.h>
39 #include <media/videobuf2-v4l2.h>
40 #include <media/videobuf2-dma-contig.h>
41 #include <media/videobuf2-vmalloc.h>
42
43 #include "coda.h"
44
45 #define CODA_NAME               "coda"
46
47 #define CODADX6_MAX_INSTANCES   4
48 #define CODA_MAX_FORMATS        4
49
50 #define CODA_ISRAM_SIZE (2048 * 2)
51
52 #define MIN_W 176
53 #define MIN_H 144
54
55 #define S_ALIGN         1 /* multiple of 2 */
56 #define W_ALIGN         1 /* multiple of 2 */
57 #define H_ALIGN         1 /* multiple of 2 */
58
59 #define fh_to_ctx(__fh) container_of(__fh, struct coda_ctx, fh)
60
61 int coda_debug;
62 module_param(coda_debug, int, 0644);
63 MODULE_PARM_DESC(coda_debug, "Debug level (0-2)");
64
65 static int disable_tiling;
66 module_param(disable_tiling, int, 0644);
67 MODULE_PARM_DESC(disable_tiling, "Disable tiled frame buffers");
68
69 void coda_write(struct coda_dev *dev, u32 data, u32 reg)
70 {
71         v4l2_dbg(2, coda_debug, &dev->v4l2_dev,
72                  "%s: data=0x%x, reg=0x%x\n", __func__, data, reg);
73         writel(data, dev->regs_base + reg);
74 }
75
76 unsigned int coda_read(struct coda_dev *dev, u32 reg)
77 {
78         u32 data;
79
80         data = readl(dev->regs_base + reg);
81         v4l2_dbg(2, coda_debug, &dev->v4l2_dev,
82                  "%s: data=0x%x, reg=0x%x\n", __func__, data, reg);
83         return data;
84 }
85
86 void coda_write_base(struct coda_ctx *ctx, struct coda_q_data *q_data,
87                      struct vb2_v4l2_buffer *buf, unsigned int reg_y)
88 {
89         u32 base_y = vb2_dma_contig_plane_dma_addr(&buf->vb2_buf, 0);
90         u32 base_cb, base_cr;
91
92         switch (q_data->fourcc) {
93         case V4L2_PIX_FMT_NV12:
94         case V4L2_PIX_FMT_YUV420:
95         default:
96                 base_cb = base_y + q_data->bytesperline * q_data->height;
97                 base_cr = base_cb + q_data->bytesperline * q_data->height / 4;
98                 break;
99         case V4L2_PIX_FMT_YVU420:
100                 /* Switch Cb and Cr for YVU420 format */
101                 base_cr = base_y + q_data->bytesperline * q_data->height;
102                 base_cb = base_cr + q_data->bytesperline * q_data->height / 4;
103                 break;
104         case V4L2_PIX_FMT_YUV422P:
105                 base_cb = base_y + q_data->bytesperline * q_data->height;
106                 base_cr = base_cb + q_data->bytesperline * q_data->height / 2;
107         }
108
109         coda_write(ctx->dev, base_y, reg_y);
110         coda_write(ctx->dev, base_cb, reg_y + 4);
111         coda_write(ctx->dev, base_cr, reg_y + 8);
112 }
113
114 #define CODA_CODEC(mode, src_fourcc, dst_fourcc, max_w, max_h) \
115         { mode, src_fourcc, dst_fourcc, max_w, max_h }
116
117 /*
118  * Arrays of codecs supported by each given version of Coda:
119  *  i.MX27 -> codadx6
120  *  i.MX5x -> coda7
121  *  i.MX6  -> coda960
122  * Use V4L2_PIX_FMT_YUV420 as placeholder for all supported YUV 4:2:0 variants
123  */
124 static const struct coda_codec codadx6_codecs[] = {
125         CODA_CODEC(CODADX6_MODE_ENCODE_H264, V4L2_PIX_FMT_YUV420, V4L2_PIX_FMT_H264,  720, 576),
126         CODA_CODEC(CODADX6_MODE_ENCODE_MP4,  V4L2_PIX_FMT_YUV420, V4L2_PIX_FMT_MPEG4, 720, 576),
127 };
128
129 static const struct coda_codec coda7_codecs[] = {
130         CODA_CODEC(CODA7_MODE_ENCODE_H264, V4L2_PIX_FMT_YUV420, V4L2_PIX_FMT_H264,   1280, 720),
131         CODA_CODEC(CODA7_MODE_ENCODE_MP4,  V4L2_PIX_FMT_YUV420, V4L2_PIX_FMT_MPEG4,  1280, 720),
132         CODA_CODEC(CODA7_MODE_ENCODE_MJPG, V4L2_PIX_FMT_YUV420, V4L2_PIX_FMT_JPEG,   8192, 8192),
133         CODA_CODEC(CODA7_MODE_DECODE_H264, V4L2_PIX_FMT_H264,   V4L2_PIX_FMT_YUV420, 1920, 1088),
134         CODA_CODEC(CODA7_MODE_DECODE_MP2,  V4L2_PIX_FMT_MPEG2,  V4L2_PIX_FMT_YUV420, 1920, 1088),
135         CODA_CODEC(CODA7_MODE_DECODE_MP4,  V4L2_PIX_FMT_MPEG4,  V4L2_PIX_FMT_YUV420, 1920, 1088),
136         CODA_CODEC(CODA7_MODE_DECODE_MJPG, V4L2_PIX_FMT_JPEG,   V4L2_PIX_FMT_YUV420, 8192, 8192),
137 };
138
139 static const struct coda_codec coda9_codecs[] = {
140         CODA_CODEC(CODA9_MODE_ENCODE_H264, V4L2_PIX_FMT_YUV420, V4L2_PIX_FMT_H264,   1920, 1088),
141         CODA_CODEC(CODA9_MODE_ENCODE_MP4,  V4L2_PIX_FMT_YUV420, V4L2_PIX_FMT_MPEG4,  1920, 1088),
142         CODA_CODEC(CODA9_MODE_DECODE_H264, V4L2_PIX_FMT_H264,   V4L2_PIX_FMT_YUV420, 1920, 1088),
143         CODA_CODEC(CODA9_MODE_DECODE_MP2,  V4L2_PIX_FMT_MPEG2,  V4L2_PIX_FMT_YUV420, 1920, 1088),
144         CODA_CODEC(CODA9_MODE_DECODE_MP4,  V4L2_PIX_FMT_MPEG4,  V4L2_PIX_FMT_YUV420, 1920, 1088),
145 };
146
147 struct coda_video_device {
148         const char *name;
149         enum coda_inst_type type;
150         const struct coda_context_ops *ops;
151         bool direct;
152         u32 src_formats[CODA_MAX_FORMATS];
153         u32 dst_formats[CODA_MAX_FORMATS];
154 };
155
156 static const struct coda_video_device coda_bit_encoder = {
157         .name = "coda-encoder",
158         .type = CODA_INST_ENCODER,
159         .ops = &coda_bit_encode_ops,
160         .src_formats = {
161                 V4L2_PIX_FMT_NV12,
162                 V4L2_PIX_FMT_YUV420,
163                 V4L2_PIX_FMT_YVU420,
164         },
165         .dst_formats = {
166                 V4L2_PIX_FMT_H264,
167                 V4L2_PIX_FMT_MPEG4,
168         },
169 };
170
171 static const struct coda_video_device coda_bit_jpeg_encoder = {
172         .name = "coda-jpeg-encoder",
173         .type = CODA_INST_ENCODER,
174         .ops = &coda_bit_encode_ops,
175         .src_formats = {
176                 V4L2_PIX_FMT_NV12,
177                 V4L2_PIX_FMT_YUV420,
178                 V4L2_PIX_FMT_YVU420,
179                 V4L2_PIX_FMT_YUV422P,
180         },
181         .dst_formats = {
182                 V4L2_PIX_FMT_JPEG,
183         },
184 };
185
186 static const struct coda_video_device coda_bit_decoder = {
187         .name = "coda-decoder",
188         .type = CODA_INST_DECODER,
189         .ops = &coda_bit_decode_ops,
190         .src_formats = {
191                 V4L2_PIX_FMT_H264,
192                 V4L2_PIX_FMT_MPEG2,
193                 V4L2_PIX_FMT_MPEG4,
194         },
195         .dst_formats = {
196                 V4L2_PIX_FMT_NV12,
197                 V4L2_PIX_FMT_YUV420,
198                 V4L2_PIX_FMT_YVU420,
199         },
200 };
201
202 static const struct coda_video_device coda_bit_jpeg_decoder = {
203         .name = "coda-jpeg-decoder",
204         .type = CODA_INST_DECODER,
205         .ops = &coda_bit_decode_ops,
206         .src_formats = {
207                 V4L2_PIX_FMT_JPEG,
208         },
209         .dst_formats = {
210                 V4L2_PIX_FMT_NV12,
211                 V4L2_PIX_FMT_YUV420,
212                 V4L2_PIX_FMT_YVU420,
213                 V4L2_PIX_FMT_YUV422P,
214         },
215 };
216
217 static const struct coda_video_device *codadx6_video_devices[] = {
218         &coda_bit_encoder,
219 };
220
221 static const struct coda_video_device *coda7_video_devices[] = {
222         &coda_bit_jpeg_encoder,
223         &coda_bit_jpeg_decoder,
224         &coda_bit_encoder,
225         &coda_bit_decoder,
226 };
227
228 static const struct coda_video_device *coda9_video_devices[] = {
229         &coda_bit_encoder,
230         &coda_bit_decoder,
231 };
232
233 /*
234  * Normalize all supported YUV 4:2:0 formats to the value used in the codec
235  * tables.
236  */
237 static u32 coda_format_normalize_yuv(u32 fourcc)
238 {
239         switch (fourcc) {
240         case V4L2_PIX_FMT_NV12:
241         case V4L2_PIX_FMT_YUV420:
242         case V4L2_PIX_FMT_YVU420:
243         case V4L2_PIX_FMT_YUV422P:
244                 return V4L2_PIX_FMT_YUV420;
245         default:
246                 return fourcc;
247         }
248 }
249
250 static const struct coda_codec *coda_find_codec(struct coda_dev *dev,
251                                                 int src_fourcc, int dst_fourcc)
252 {
253         const struct coda_codec *codecs = dev->devtype->codecs;
254         int num_codecs = dev->devtype->num_codecs;
255         int k;
256
257         src_fourcc = coda_format_normalize_yuv(src_fourcc);
258         dst_fourcc = coda_format_normalize_yuv(dst_fourcc);
259         if (src_fourcc == dst_fourcc)
260                 return NULL;
261
262         for (k = 0; k < num_codecs; k++) {
263                 if (codecs[k].src_fourcc == src_fourcc &&
264                     codecs[k].dst_fourcc == dst_fourcc)
265                         break;
266         }
267
268         if (k == num_codecs)
269                 return NULL;
270
271         return &codecs[k];
272 }
273
274 static void coda_get_max_dimensions(struct coda_dev *dev,
275                                     const struct coda_codec *codec,
276                                     int *max_w, int *max_h)
277 {
278         const struct coda_codec *codecs = dev->devtype->codecs;
279         int num_codecs = dev->devtype->num_codecs;
280         unsigned int w, h;
281         int k;
282
283         if (codec) {
284                 w = codec->max_w;
285                 h = codec->max_h;
286         } else {
287                 for (k = 0, w = 0, h = 0; k < num_codecs; k++) {
288                         w = max(w, codecs[k].max_w);
289                         h = max(h, codecs[k].max_h);
290                 }
291         }
292
293         if (max_w)
294                 *max_w = w;
295         if (max_h)
296                 *max_h = h;
297 }
298
299 static const struct coda_video_device *to_coda_video_device(struct video_device
300                                                             *vdev)
301 {
302         struct coda_dev *dev = video_get_drvdata(vdev);
303         unsigned int i = vdev - dev->vfd;
304
305         if (i >= dev->devtype->num_vdevs)
306                 return NULL;
307
308         return dev->devtype->vdevs[i];
309 }
310
311 const char *coda_product_name(int product)
312 {
313         static char buf[9];
314
315         switch (product) {
316         case CODA_DX6:
317                 return "CodaDx6";
318         case CODA_7541:
319                 return "CODA7541";
320         case CODA_960:
321                 return "CODA960";
322         default:
323                 snprintf(buf, sizeof(buf), "(0x%04x)", product);
324                 return buf;
325         }
326 }
327
328 /*
329  * V4L2 ioctl() operations.
330  */
331 static int coda_querycap(struct file *file, void *priv,
332                          struct v4l2_capability *cap)
333 {
334         struct coda_ctx *ctx = fh_to_ctx(priv);
335
336         strlcpy(cap->driver, CODA_NAME, sizeof(cap->driver));
337         strlcpy(cap->card, coda_product_name(ctx->dev->devtype->product),
338                 sizeof(cap->card));
339         strlcpy(cap->bus_info, "platform:" CODA_NAME, sizeof(cap->bus_info));
340         cap->device_caps = V4L2_CAP_VIDEO_M2M | V4L2_CAP_STREAMING;
341         cap->capabilities = cap->device_caps | V4L2_CAP_DEVICE_CAPS;
342
343         return 0;
344 }
345
346 static int coda_enum_fmt(struct file *file, void *priv,
347                          struct v4l2_fmtdesc *f)
348 {
349         struct video_device *vdev = video_devdata(file);
350         const struct coda_video_device *cvd = to_coda_video_device(vdev);
351         const u32 *formats;
352
353         if (f->type == V4L2_BUF_TYPE_VIDEO_OUTPUT)
354                 formats = cvd->src_formats;
355         else if (f->type == V4L2_BUF_TYPE_VIDEO_CAPTURE)
356                 formats = cvd->dst_formats;
357         else
358                 return -EINVAL;
359
360         if (f->index >= CODA_MAX_FORMATS || formats[f->index] == 0)
361                 return -EINVAL;
362
363         f->pixelformat = formats[f->index];
364
365         return 0;
366 }
367
368 static int coda_g_fmt(struct file *file, void *priv,
369                       struct v4l2_format *f)
370 {
371         struct coda_q_data *q_data;
372         struct coda_ctx *ctx = fh_to_ctx(priv);
373
374         q_data = get_q_data(ctx, f->type);
375         if (!q_data)
376                 return -EINVAL;
377
378         f->fmt.pix.field        = V4L2_FIELD_NONE;
379         f->fmt.pix.pixelformat  = q_data->fourcc;
380         f->fmt.pix.width        = q_data->width;
381         f->fmt.pix.height       = q_data->height;
382         f->fmt.pix.bytesperline = q_data->bytesperline;
383
384         f->fmt.pix.sizeimage    = q_data->sizeimage;
385         if (f->fmt.pix.pixelformat == V4L2_PIX_FMT_JPEG)
386                 f->fmt.pix.colorspace = V4L2_COLORSPACE_JPEG;
387         else
388                 f->fmt.pix.colorspace = ctx->colorspace;
389
390         return 0;
391 }
392
393 static int coda_try_pixelformat(struct coda_ctx *ctx, struct v4l2_format *f)
394 {
395         struct coda_q_data *q_data;
396         const u32 *formats;
397         int i;
398
399         if (f->type == V4L2_BUF_TYPE_VIDEO_OUTPUT)
400                 formats = ctx->cvd->src_formats;
401         else if (f->type == V4L2_BUF_TYPE_VIDEO_CAPTURE)
402                 formats = ctx->cvd->dst_formats;
403         else
404                 return -EINVAL;
405
406         for (i = 0; i < CODA_MAX_FORMATS; i++) {
407                 if (formats[i] == f->fmt.pix.pixelformat) {
408                         f->fmt.pix.pixelformat = formats[i];
409                         return 0;
410                 }
411         }
412
413         /* Fall back to currently set pixelformat */
414         q_data = get_q_data(ctx, f->type);
415         f->fmt.pix.pixelformat = q_data->fourcc;
416
417         return 0;
418 }
419
420 static unsigned int coda_estimate_sizeimage(struct coda_ctx *ctx, u32 sizeimage,
421                                             u32 width, u32 height)
422 {
423         /*
424          * This is a rough estimate for sensible compressed buffer
425          * sizes (between 1 and 16 bits per pixel). This could be
426          * improved by better format specific worst case estimates.
427          */
428         return round_up(clamp(sizeimage, width * height / 8,
429                                          width * height * 2), PAGE_SIZE);
430 }
431
432 static int coda_try_fmt(struct coda_ctx *ctx, const struct coda_codec *codec,
433                         struct v4l2_format *f)
434 {
435         struct coda_dev *dev = ctx->dev;
436         unsigned int max_w, max_h;
437         enum v4l2_field field;
438
439         field = f->fmt.pix.field;
440         if (field == V4L2_FIELD_ANY)
441                 field = V4L2_FIELD_NONE;
442         else if (V4L2_FIELD_NONE != field)
443                 return -EINVAL;
444
445         /* V4L2 specification suggests the driver corrects the format struct
446          * if any of the dimensions is unsupported */
447         f->fmt.pix.field = field;
448
449         coda_get_max_dimensions(dev, codec, &max_w, &max_h);
450         v4l_bound_align_image(&f->fmt.pix.width, MIN_W, max_w, W_ALIGN,
451                               &f->fmt.pix.height, MIN_H, max_h, H_ALIGN,
452                               S_ALIGN);
453
454         switch (f->fmt.pix.pixelformat) {
455         case V4L2_PIX_FMT_NV12:
456         case V4L2_PIX_FMT_YUV420:
457         case V4L2_PIX_FMT_YVU420:
458                 /*
459                  * Frame stride must be at least multiple of 8,
460                  * but multiple of 16 for h.264 or JPEG 4:2:x
461                  */
462                 f->fmt.pix.bytesperline = round_up(f->fmt.pix.width, 16);
463                 f->fmt.pix.sizeimage = f->fmt.pix.bytesperline *
464                                         f->fmt.pix.height * 3 / 2;
465                 break;
466         case V4L2_PIX_FMT_YUV422P:
467                 f->fmt.pix.bytesperline = round_up(f->fmt.pix.width, 16);
468                 f->fmt.pix.sizeimage = f->fmt.pix.bytesperline *
469                                         f->fmt.pix.height * 2;
470                 break;
471         case V4L2_PIX_FMT_JPEG:
472                 f->fmt.pix.colorspace = V4L2_COLORSPACE_JPEG;
473                 /* fallthrough */
474         case V4L2_PIX_FMT_H264:
475         case V4L2_PIX_FMT_MPEG4:
476         case V4L2_PIX_FMT_MPEG2:
477                 f->fmt.pix.bytesperline = 0;
478                 f->fmt.pix.sizeimage = coda_estimate_sizeimage(ctx,
479                                                         f->fmt.pix.sizeimage,
480                                                         f->fmt.pix.width,
481                                                         f->fmt.pix.height);
482                 break;
483         default:
484                 BUG();
485         }
486
487         return 0;
488 }
489
490 static int coda_try_fmt_vid_cap(struct file *file, void *priv,
491                                 struct v4l2_format *f)
492 {
493         struct coda_ctx *ctx = fh_to_ctx(priv);
494         const struct coda_q_data *q_data_src;
495         const struct coda_codec *codec;
496         struct vb2_queue *src_vq;
497         int ret;
498
499         ret = coda_try_pixelformat(ctx, f);
500         if (ret < 0)
501                 return ret;
502
503         q_data_src = get_q_data(ctx, V4L2_BUF_TYPE_VIDEO_OUTPUT);
504
505         /*
506          * If the source format is already fixed, only allow the same output
507          * resolution
508          */
509         src_vq = v4l2_m2m_get_vq(ctx->fh.m2m_ctx, V4L2_BUF_TYPE_VIDEO_OUTPUT);
510         if (vb2_is_streaming(src_vq)) {
511                 f->fmt.pix.width = q_data_src->width;
512                 f->fmt.pix.height = q_data_src->height;
513         }
514
515         f->fmt.pix.colorspace = ctx->colorspace;
516
517         q_data_src = get_q_data(ctx, V4L2_BUF_TYPE_VIDEO_OUTPUT);
518         codec = coda_find_codec(ctx->dev, q_data_src->fourcc,
519                                 f->fmt.pix.pixelformat);
520         if (!codec)
521                 return -EINVAL;
522
523         ret = coda_try_fmt(ctx, codec, f);
524         if (ret < 0)
525                 return ret;
526
527         /* The h.264 decoder only returns complete 16x16 macroblocks */
528         if (codec && codec->src_fourcc == V4L2_PIX_FMT_H264) {
529                 f->fmt.pix.width = f->fmt.pix.width;
530                 f->fmt.pix.height = round_up(f->fmt.pix.height, 16);
531                 f->fmt.pix.bytesperline = round_up(f->fmt.pix.width, 16);
532                 f->fmt.pix.sizeimage = f->fmt.pix.bytesperline *
533                                        f->fmt.pix.height * 3 / 2;
534         }
535
536         return 0;
537 }
538
539 static int coda_try_fmt_vid_out(struct file *file, void *priv,
540                                 struct v4l2_format *f)
541 {
542         struct coda_ctx *ctx = fh_to_ctx(priv);
543         struct coda_dev *dev = ctx->dev;
544         const struct coda_q_data *q_data_dst;
545         const struct coda_codec *codec;
546         int ret;
547
548         ret = coda_try_pixelformat(ctx, f);
549         if (ret < 0)
550                 return ret;
551
552         switch (f->fmt.pix.colorspace) {
553         case V4L2_COLORSPACE_REC709:
554         case V4L2_COLORSPACE_JPEG:
555                 break;
556         default:
557                 if (f->fmt.pix.pixelformat == V4L2_PIX_FMT_JPEG)
558                         f->fmt.pix.colorspace = V4L2_COLORSPACE_JPEG;
559                 else
560                         f->fmt.pix.colorspace = V4L2_COLORSPACE_REC709;
561         }
562
563         q_data_dst = get_q_data(ctx, V4L2_BUF_TYPE_VIDEO_CAPTURE);
564         codec = coda_find_codec(dev, f->fmt.pix.pixelformat, q_data_dst->fourcc);
565
566         return coda_try_fmt(ctx, codec, f);
567 }
568
569 static int coda_s_fmt(struct coda_ctx *ctx, struct v4l2_format *f)
570 {
571         struct coda_q_data *q_data;
572         struct vb2_queue *vq;
573
574         vq = v4l2_m2m_get_vq(ctx->fh.m2m_ctx, f->type);
575         if (!vq)
576                 return -EINVAL;
577
578         q_data = get_q_data(ctx, f->type);
579         if (!q_data)
580                 return -EINVAL;
581
582         if (vb2_is_busy(vq)) {
583                 v4l2_err(&ctx->dev->v4l2_dev, "%s queue busy\n", __func__);
584                 return -EBUSY;
585         }
586
587         q_data->fourcc = f->fmt.pix.pixelformat;
588         q_data->width = f->fmt.pix.width;
589         q_data->height = f->fmt.pix.height;
590         q_data->bytesperline = f->fmt.pix.bytesperline;
591         q_data->sizeimage = f->fmt.pix.sizeimage;
592         q_data->rect.left = 0;
593         q_data->rect.top = 0;
594         q_data->rect.width = f->fmt.pix.width;
595         q_data->rect.height = f->fmt.pix.height;
596
597         switch (f->fmt.pix.pixelformat) {
598         case V4L2_PIX_FMT_NV12:
599                 if (f->type == V4L2_BUF_TYPE_VIDEO_OUTPUT) {
600                         ctx->tiled_map_type = GDI_TILED_FRAME_MB_RASTER_MAP;
601                         if (!disable_tiling)
602                                 break;
603                 }
604                 /* else fall through */
605         case V4L2_PIX_FMT_YUV420:
606         case V4L2_PIX_FMT_YVU420:
607                 ctx->tiled_map_type = GDI_LINEAR_FRAME_MAP;
608                 break;
609         default:
610                 break;
611         }
612
613         v4l2_dbg(1, coda_debug, &ctx->dev->v4l2_dev,
614                 "Setting format for type %d, wxh: %dx%d, fmt: %d\n",
615                 f->type, q_data->width, q_data->height, q_data->fourcc);
616
617         return 0;
618 }
619
620 static int coda_s_fmt_vid_cap(struct file *file, void *priv,
621                               struct v4l2_format *f)
622 {
623         struct coda_ctx *ctx = fh_to_ctx(priv);
624         int ret;
625
626         ret = coda_try_fmt_vid_cap(file, priv, f);
627         if (ret)
628                 return ret;
629
630         return coda_s_fmt(ctx, f);
631 }
632
633 static int coda_s_fmt_vid_out(struct file *file, void *priv,
634                               struct v4l2_format *f)
635 {
636         struct coda_ctx *ctx = fh_to_ctx(priv);
637         struct v4l2_format f_cap;
638         int ret;
639
640         ret = coda_try_fmt_vid_out(file, priv, f);
641         if (ret)
642                 return ret;
643
644         ret = coda_s_fmt(ctx, f);
645         if (ret)
646                 return ret;
647
648         ctx->colorspace = f->fmt.pix.colorspace;
649
650         memset(&f_cap, 0, sizeof(f_cap));
651         f_cap.type = V4L2_BUF_TYPE_VIDEO_CAPTURE;
652         coda_g_fmt(file, priv, &f_cap);
653         f_cap.fmt.pix.width = f->fmt.pix.width;
654         f_cap.fmt.pix.height = f->fmt.pix.height;
655
656         ret = coda_try_fmt_vid_cap(file, priv, &f_cap);
657         if (ret)
658                 return ret;
659
660         return coda_s_fmt(ctx, &f_cap);
661 }
662
663 static int coda_reqbufs(struct file *file, void *priv,
664                         struct v4l2_requestbuffers *rb)
665 {
666         struct coda_ctx *ctx = fh_to_ctx(priv);
667         int ret;
668
669         ret = v4l2_m2m_reqbufs(file, ctx->fh.m2m_ctx, rb);
670         if (ret)
671                 return ret;
672
673         /*
674          * Allow to allocate instance specific per-context buffers, such as
675          * bitstream ringbuffer, slice buffer, work buffer, etc. if needed.
676          */
677         if (rb->type == V4L2_BUF_TYPE_VIDEO_OUTPUT && ctx->ops->reqbufs)
678                 return ctx->ops->reqbufs(ctx, rb);
679
680         return 0;
681 }
682
683 static int coda_qbuf(struct file *file, void *priv,
684                      struct v4l2_buffer *buf)
685 {
686         struct coda_ctx *ctx = fh_to_ctx(priv);
687
688         return v4l2_m2m_qbuf(file, ctx->fh.m2m_ctx, buf);
689 }
690
691 static bool coda_buf_is_end_of_stream(struct coda_ctx *ctx,
692                                       struct vb2_v4l2_buffer *buf)
693 {
694         struct vb2_queue *src_vq;
695
696         src_vq = v4l2_m2m_get_vq(ctx->fh.m2m_ctx, V4L2_BUF_TYPE_VIDEO_OUTPUT);
697
698         return ((ctx->bit_stream_param & CODA_BIT_STREAM_END_FLAG) &&
699                 (buf->sequence == (ctx->qsequence - 1)));
700 }
701
702 void coda_m2m_buf_done(struct coda_ctx *ctx, struct vb2_v4l2_buffer *buf,
703                        enum vb2_buffer_state state)
704 {
705         const struct v4l2_event eos_event = {
706                 .type = V4L2_EVENT_EOS
707         };
708
709         if (coda_buf_is_end_of_stream(ctx, buf)) {
710                 buf->flags |= V4L2_BUF_FLAG_LAST;
711
712                 v4l2_event_queue_fh(&ctx->fh, &eos_event);
713         }
714
715         v4l2_m2m_buf_done(buf, state);
716 }
717
718 static int coda_g_selection(struct file *file, void *fh,
719                             struct v4l2_selection *s)
720 {
721         struct coda_ctx *ctx = fh_to_ctx(fh);
722         struct coda_q_data *q_data;
723         struct v4l2_rect r, *rsel;
724
725         q_data = get_q_data(ctx, s->type);
726         if (!q_data)
727                 return -EINVAL;
728
729         r.left = 0;
730         r.top = 0;
731         r.width = q_data->width;
732         r.height = q_data->height;
733         rsel = &q_data->rect;
734
735         switch (s->target) {
736         case V4L2_SEL_TGT_CROP_DEFAULT:
737         case V4L2_SEL_TGT_CROP_BOUNDS:
738                 rsel = &r;
739                 /* fallthrough */
740         case V4L2_SEL_TGT_CROP:
741                 if (s->type != V4L2_BUF_TYPE_VIDEO_OUTPUT)
742                         return -EINVAL;
743                 break;
744         case V4L2_SEL_TGT_COMPOSE_BOUNDS:
745         case V4L2_SEL_TGT_COMPOSE_PADDED:
746                 rsel = &r;
747                 /* fallthrough */
748         case V4L2_SEL_TGT_COMPOSE:
749         case V4L2_SEL_TGT_COMPOSE_DEFAULT:
750                 if (s->type != V4L2_BUF_TYPE_VIDEO_CAPTURE)
751                         return -EINVAL;
752                 break;
753         default:
754                 return -EINVAL;
755         }
756
757         s->r = *rsel;
758
759         return 0;
760 }
761
762 static int coda_try_decoder_cmd(struct file *file, void *fh,
763                                 struct v4l2_decoder_cmd *dc)
764 {
765         if (dc->cmd != V4L2_DEC_CMD_STOP)
766                 return -EINVAL;
767
768         if (dc->flags & V4L2_DEC_CMD_STOP_TO_BLACK)
769                 return -EINVAL;
770
771         if (!(dc->flags & V4L2_DEC_CMD_STOP_IMMEDIATELY) && (dc->stop.pts != 0))
772                 return -EINVAL;
773
774         return 0;
775 }
776
777 static int coda_decoder_cmd(struct file *file, void *fh,
778                             struct v4l2_decoder_cmd *dc)
779 {
780         struct coda_ctx *ctx = fh_to_ctx(fh);
781         int ret;
782
783         ret = coda_try_decoder_cmd(file, fh, dc);
784         if (ret < 0)
785                 return ret;
786
787         /* Ignore decoder stop command silently in encoder context */
788         if (ctx->inst_type != CODA_INST_DECODER)
789                 return 0;
790
791         /* Set the stream-end flag on this context */
792         coda_bit_stream_end_flag(ctx);
793         ctx->hold = false;
794         v4l2_m2m_try_schedule(ctx->fh.m2m_ctx);
795
796         return 0;
797 }
798
799 static int coda_g_parm(struct file *file, void *fh, struct v4l2_streamparm *a)
800 {
801         struct coda_ctx *ctx = fh_to_ctx(fh);
802         struct v4l2_fract *tpf;
803
804         if (a->type != V4L2_BUF_TYPE_VIDEO_OUTPUT)
805                 return -EINVAL;
806
807         a->parm.output.capability = V4L2_CAP_TIMEPERFRAME;
808         tpf = &a->parm.output.timeperframe;
809         tpf->denominator = ctx->params.framerate & CODA_FRATE_RES_MASK;
810         tpf->numerator = 1 + (ctx->params.framerate >>
811                               CODA_FRATE_DIV_OFFSET);
812
813         return 0;
814 }
815
816 /*
817  * Approximate timeperframe v4l2_fract with values that can be written
818  * into the 16-bit CODA_FRATE_DIV and CODA_FRATE_RES fields.
819  */
820 static void coda_approximate_timeperframe(struct v4l2_fract *timeperframe)
821 {
822         struct v4l2_fract s = *timeperframe;
823         struct v4l2_fract f0;
824         struct v4l2_fract f1 = { 1, 0 };
825         struct v4l2_fract f2 = { 0, 1 };
826         unsigned int i, div, s_denominator;
827
828         /* Lower bound is 1/65535 */
829         if (s.numerator == 0 || s.denominator / s.numerator > 65535) {
830                 timeperframe->numerator = 1;
831                 timeperframe->denominator = 65535;
832                 return;
833         }
834
835         /* Upper bound is 65536/1, map everything above to infinity */
836         if (s.denominator == 0 || s.numerator / s.denominator > 65536) {
837                 timeperframe->numerator = 1;
838                 timeperframe->denominator = 0;
839                 return;
840         }
841
842         /* Reduce fraction to lowest terms */
843         div = gcd(s.numerator, s.denominator);
844         if (div > 1) {
845                 s.numerator /= div;
846                 s.denominator /= div;
847         }
848
849         if (s.numerator <= 65536 && s.denominator < 65536) {
850                 *timeperframe = s;
851                 return;
852         }
853
854         /* Find successive convergents from continued fraction expansion */
855         while (f2.numerator <= 65536 && f2.denominator < 65536) {
856                 f0 = f1;
857                 f1 = f2;
858
859                 /* Stop when f2 exactly equals timeperframe */
860                 if (s.numerator == 0)
861                         break;
862
863                 i = s.denominator / s.numerator;
864
865                 f2.numerator = f0.numerator + i * f1.numerator;
866                 f2.denominator = f0.denominator + i * f2.denominator;
867
868                 s_denominator = s.numerator;
869                 s.numerator = s.denominator % s.numerator;
870                 s.denominator = s_denominator;
871         }
872
873         *timeperframe = f1;
874 }
875
876 static uint32_t coda_timeperframe_to_frate(struct v4l2_fract *timeperframe)
877 {
878         return ((timeperframe->numerator - 1) << CODA_FRATE_DIV_OFFSET) |
879                 timeperframe->denominator;
880 }
881
882 static int coda_s_parm(struct file *file, void *fh, struct v4l2_streamparm *a)
883 {
884         struct coda_ctx *ctx = fh_to_ctx(fh);
885         struct v4l2_fract *tpf;
886
887         if (a->type != V4L2_BUF_TYPE_VIDEO_OUTPUT)
888                 return -EINVAL;
889
890         tpf = &a->parm.output.timeperframe;
891         coda_approximate_timeperframe(tpf);
892         ctx->params.framerate = coda_timeperframe_to_frate(tpf);
893
894         return 0;
895 }
896
897 static int coda_subscribe_event(struct v4l2_fh *fh,
898                                 const struct v4l2_event_subscription *sub)
899 {
900         switch (sub->type) {
901         case V4L2_EVENT_EOS:
902                 return v4l2_event_subscribe(fh, sub, 0, NULL);
903         default:
904                 return v4l2_ctrl_subscribe_event(fh, sub);
905         }
906 }
907
908 static const struct v4l2_ioctl_ops coda_ioctl_ops = {
909         .vidioc_querycap        = coda_querycap,
910
911         .vidioc_enum_fmt_vid_cap = coda_enum_fmt,
912         .vidioc_g_fmt_vid_cap   = coda_g_fmt,
913         .vidioc_try_fmt_vid_cap = coda_try_fmt_vid_cap,
914         .vidioc_s_fmt_vid_cap   = coda_s_fmt_vid_cap,
915
916         .vidioc_enum_fmt_vid_out = coda_enum_fmt,
917         .vidioc_g_fmt_vid_out   = coda_g_fmt,
918         .vidioc_try_fmt_vid_out = coda_try_fmt_vid_out,
919         .vidioc_s_fmt_vid_out   = coda_s_fmt_vid_out,
920
921         .vidioc_reqbufs         = coda_reqbufs,
922         .vidioc_querybuf        = v4l2_m2m_ioctl_querybuf,
923
924         .vidioc_qbuf            = coda_qbuf,
925         .vidioc_expbuf          = v4l2_m2m_ioctl_expbuf,
926         .vidioc_dqbuf           = v4l2_m2m_ioctl_dqbuf,
927         .vidioc_create_bufs     = v4l2_m2m_ioctl_create_bufs,
928         .vidioc_prepare_buf     = v4l2_m2m_ioctl_prepare_buf,
929
930         .vidioc_streamon        = v4l2_m2m_ioctl_streamon,
931         .vidioc_streamoff       = v4l2_m2m_ioctl_streamoff,
932
933         .vidioc_g_selection     = coda_g_selection,
934
935         .vidioc_try_decoder_cmd = coda_try_decoder_cmd,
936         .vidioc_decoder_cmd     = coda_decoder_cmd,
937
938         .vidioc_g_parm          = coda_g_parm,
939         .vidioc_s_parm          = coda_s_parm,
940
941         .vidioc_subscribe_event = coda_subscribe_event,
942         .vidioc_unsubscribe_event = v4l2_event_unsubscribe,
943 };
944
945 /*
946  * Mem-to-mem operations.
947  */
948
949 static void coda_device_run(void *m2m_priv)
950 {
951         struct coda_ctx *ctx = m2m_priv;
952         struct coda_dev *dev = ctx->dev;
953
954         queue_work(dev->workqueue, &ctx->pic_run_work);
955 }
956
957 static void coda_pic_run_work(struct work_struct *work)
958 {
959         struct coda_ctx *ctx = container_of(work, struct coda_ctx, pic_run_work);
960         struct coda_dev *dev = ctx->dev;
961         int ret;
962
963         mutex_lock(&ctx->buffer_mutex);
964         mutex_lock(&dev->coda_mutex);
965
966         ret = ctx->ops->prepare_run(ctx);
967         if (ret < 0 && ctx->inst_type == CODA_INST_DECODER) {
968                 mutex_unlock(&dev->coda_mutex);
969                 mutex_unlock(&ctx->buffer_mutex);
970                 /* job_finish scheduled by prepare_decode */
971                 return;
972         }
973
974         if (!wait_for_completion_timeout(&ctx->completion,
975                                          msecs_to_jiffies(1000))) {
976                 dev_err(&dev->plat_dev->dev, "CODA PIC_RUN timeout\n");
977
978                 ctx->hold = true;
979
980                 coda_hw_reset(ctx);
981         } else if (!ctx->aborting) {
982                 ctx->ops->finish_run(ctx);
983         }
984
985         if ((ctx->aborting || (!ctx->streamon_cap && !ctx->streamon_out)) &&
986             ctx->ops->seq_end_work)
987                 queue_work(dev->workqueue, &ctx->seq_end_work);
988
989         mutex_unlock(&dev->coda_mutex);
990         mutex_unlock(&ctx->buffer_mutex);
991
992         v4l2_m2m_job_finish(ctx->dev->m2m_dev, ctx->fh.m2m_ctx);
993 }
994
995 static int coda_job_ready(void *m2m_priv)
996 {
997         struct coda_ctx *ctx = m2m_priv;
998         int src_bufs = v4l2_m2m_num_src_bufs_ready(ctx->fh.m2m_ctx);
999
1000         /*
1001          * For both 'P' and 'key' frame cases 1 picture
1002          * and 1 frame are needed. In the decoder case,
1003          * the compressed frame can be in the bitstream.
1004          */
1005         if (!src_bufs && ctx->inst_type != CODA_INST_DECODER) {
1006                 v4l2_dbg(1, coda_debug, &ctx->dev->v4l2_dev,
1007                          "not ready: not enough video buffers.\n");
1008                 return 0;
1009         }
1010
1011         if (!v4l2_m2m_num_dst_bufs_ready(ctx->fh.m2m_ctx)) {
1012                 v4l2_dbg(1, coda_debug, &ctx->dev->v4l2_dev,
1013                          "not ready: not enough video capture buffers.\n");
1014                 return 0;
1015         }
1016
1017         if (ctx->inst_type == CODA_INST_DECODER && ctx->use_bit) {
1018                 bool stream_end = ctx->bit_stream_param &
1019                                   CODA_BIT_STREAM_END_FLAG;
1020                 int num_metas = ctx->num_metas;
1021
1022                 if (ctx->hold && !src_bufs) {
1023                         v4l2_dbg(1, coda_debug, &ctx->dev->v4l2_dev,
1024                                  "%d: not ready: on hold for more buffers.\n",
1025                                  ctx->idx);
1026                         return 0;
1027                 }
1028
1029                 if (!stream_end && (num_metas + src_bufs) < 2) {
1030                         v4l2_dbg(1, coda_debug, &ctx->dev->v4l2_dev,
1031                                  "%d: not ready: need 2 buffers available (%d, %d)\n",
1032                                  ctx->idx, num_metas, src_bufs);
1033                         return 0;
1034                 }
1035
1036
1037                 if (!src_bufs && !stream_end &&
1038                     (coda_get_bitstream_payload(ctx) < 512)) {
1039                         v4l2_dbg(1, coda_debug, &ctx->dev->v4l2_dev,
1040                                  "%d: not ready: not enough bitstream data (%d).\n",
1041                                  ctx->idx, coda_get_bitstream_payload(ctx));
1042                         return 0;
1043                 }
1044         }
1045
1046         if (ctx->aborting) {
1047                 v4l2_dbg(1, coda_debug, &ctx->dev->v4l2_dev,
1048                          "not ready: aborting\n");
1049                 return 0;
1050         }
1051
1052         v4l2_dbg(1, coda_debug, &ctx->dev->v4l2_dev,
1053                         "job ready\n");
1054
1055         return 1;
1056 }
1057
1058 static void coda_job_abort(void *priv)
1059 {
1060         struct coda_ctx *ctx = priv;
1061
1062         ctx->aborting = 1;
1063
1064         v4l2_dbg(1, coda_debug, &ctx->dev->v4l2_dev,
1065                  "Aborting task\n");
1066 }
1067
1068 static void coda_lock(void *m2m_priv)
1069 {
1070         struct coda_ctx *ctx = m2m_priv;
1071         struct coda_dev *pcdev = ctx->dev;
1072
1073         mutex_lock(&pcdev->dev_mutex);
1074 }
1075
1076 static void coda_unlock(void *m2m_priv)
1077 {
1078         struct coda_ctx *ctx = m2m_priv;
1079         struct coda_dev *pcdev = ctx->dev;
1080
1081         mutex_unlock(&pcdev->dev_mutex);
1082 }
1083
1084 static const struct v4l2_m2m_ops coda_m2m_ops = {
1085         .device_run     = coda_device_run,
1086         .job_ready      = coda_job_ready,
1087         .job_abort      = coda_job_abort,
1088         .lock           = coda_lock,
1089         .unlock         = coda_unlock,
1090 };
1091
1092 static void set_default_params(struct coda_ctx *ctx)
1093 {
1094         unsigned int max_w, max_h, usize, csize;
1095
1096         ctx->codec = coda_find_codec(ctx->dev, ctx->cvd->src_formats[0],
1097                                      ctx->cvd->dst_formats[0]);
1098         max_w = min(ctx->codec->max_w, 1920U);
1099         max_h = min(ctx->codec->max_h, 1088U);
1100         usize = max_w * max_h * 3 / 2;
1101         csize = coda_estimate_sizeimage(ctx, usize, max_w, max_h);
1102
1103         ctx->params.codec_mode = ctx->codec->mode;
1104         ctx->colorspace = V4L2_COLORSPACE_REC709;
1105         ctx->params.framerate = 30;
1106
1107         /* Default formats for output and input queues */
1108         ctx->q_data[V4L2_M2M_SRC].fourcc = ctx->cvd->src_formats[0];
1109         ctx->q_data[V4L2_M2M_DST].fourcc = ctx->cvd->dst_formats[0];
1110         ctx->q_data[V4L2_M2M_SRC].width = max_w;
1111         ctx->q_data[V4L2_M2M_SRC].height = max_h;
1112         ctx->q_data[V4L2_M2M_DST].width = max_w;
1113         ctx->q_data[V4L2_M2M_DST].height = max_h;
1114         if (ctx->codec->src_fourcc == V4L2_PIX_FMT_YUV420) {
1115                 ctx->q_data[V4L2_M2M_SRC].bytesperline = max_w;
1116                 ctx->q_data[V4L2_M2M_SRC].sizeimage = usize;
1117                 ctx->q_data[V4L2_M2M_DST].bytesperline = 0;
1118                 ctx->q_data[V4L2_M2M_DST].sizeimage = csize;
1119         } else {
1120                 ctx->q_data[V4L2_M2M_SRC].bytesperline = 0;
1121                 ctx->q_data[V4L2_M2M_SRC].sizeimage = csize;
1122                 ctx->q_data[V4L2_M2M_DST].bytesperline = max_w;
1123                 ctx->q_data[V4L2_M2M_DST].sizeimage = usize;
1124         }
1125         ctx->q_data[V4L2_M2M_SRC].rect.width = max_w;
1126         ctx->q_data[V4L2_M2M_SRC].rect.height = max_h;
1127         ctx->q_data[V4L2_M2M_DST].rect.width = max_w;
1128         ctx->q_data[V4L2_M2M_DST].rect.height = max_h;
1129
1130         /*
1131          * Since the RBC2AXI logic only supports a single chroma plane,
1132          * macroblock tiling only works for to NV12 pixel format.
1133          */
1134         ctx->tiled_map_type = GDI_LINEAR_FRAME_MAP;
1135 }
1136
1137 /*
1138  * Queue operations
1139  */
1140 static int coda_queue_setup(struct vb2_queue *vq,
1141                                 unsigned int *nbuffers, unsigned int *nplanes,
1142                                 unsigned int sizes[], struct device *alloc_devs[])
1143 {
1144         struct coda_ctx *ctx = vb2_get_drv_priv(vq);
1145         struct coda_q_data *q_data;
1146         unsigned int size;
1147
1148         q_data = get_q_data(ctx, vq->type);
1149         size = q_data->sizeimage;
1150
1151         *nplanes = 1;
1152         sizes[0] = size;
1153
1154         v4l2_dbg(1, coda_debug, &ctx->dev->v4l2_dev,
1155                  "get %d buffer(s) of size %d each.\n", *nbuffers, size);
1156
1157         return 0;
1158 }
1159
1160 static int coda_buf_prepare(struct vb2_buffer *vb)
1161 {
1162         struct coda_ctx *ctx = vb2_get_drv_priv(vb->vb2_queue);
1163         struct coda_q_data *q_data;
1164
1165         q_data = get_q_data(ctx, vb->vb2_queue->type);
1166
1167         if (vb2_plane_size(vb, 0) < q_data->sizeimage) {
1168                 v4l2_warn(&ctx->dev->v4l2_dev,
1169                           "%s data will not fit into plane (%lu < %lu)\n",
1170                           __func__, vb2_plane_size(vb, 0),
1171                           (long)q_data->sizeimage);
1172                 return -EINVAL;
1173         }
1174
1175         return 0;
1176 }
1177
1178 static void coda_buf_queue(struct vb2_buffer *vb)
1179 {
1180         struct vb2_v4l2_buffer *vbuf = to_vb2_v4l2_buffer(vb);
1181         struct coda_ctx *ctx = vb2_get_drv_priv(vb->vb2_queue);
1182         struct vb2_queue *vq = vb->vb2_queue;
1183         struct coda_q_data *q_data;
1184
1185         q_data = get_q_data(ctx, vb->vb2_queue->type);
1186
1187         /*
1188          * In the decoder case, immediately try to copy the buffer into the
1189          * bitstream ringbuffer and mark it as ready to be dequeued.
1190          */
1191         if (ctx->bitstream.size && vq->type == V4L2_BUF_TYPE_VIDEO_OUTPUT) {
1192                 /*
1193                  * For backwards compatibility, queuing an empty buffer marks
1194                  * the stream end
1195                  */
1196                 if (vb2_get_plane_payload(vb, 0) == 0)
1197                         coda_bit_stream_end_flag(ctx);
1198                 mutex_lock(&ctx->bitstream_mutex);
1199                 v4l2_m2m_buf_queue(ctx->fh.m2m_ctx, vbuf);
1200                 if (vb2_is_streaming(vb->vb2_queue))
1201                         coda_fill_bitstream(ctx, true);
1202                 mutex_unlock(&ctx->bitstream_mutex);
1203         } else {
1204                 v4l2_m2m_buf_queue(ctx->fh.m2m_ctx, vbuf);
1205         }
1206 }
1207
1208 int coda_alloc_aux_buf(struct coda_dev *dev, struct coda_aux_buf *buf,
1209                        size_t size, const char *name, struct dentry *parent)
1210 {
1211         buf->vaddr = dma_alloc_coherent(&dev->plat_dev->dev, size, &buf->paddr,
1212                                         GFP_KERNEL);
1213         if (!buf->vaddr) {
1214                 v4l2_err(&dev->v4l2_dev,
1215                          "Failed to allocate %s buffer of size %u\n",
1216                          name, size);
1217                 return -ENOMEM;
1218         }
1219
1220         buf->size = size;
1221
1222         if (name && parent) {
1223                 buf->blob.data = buf->vaddr;
1224                 buf->blob.size = size;
1225                 buf->dentry = debugfs_create_blob(name, 0644, parent,
1226                                                   &buf->blob);
1227                 if (!buf->dentry)
1228                         dev_warn(&dev->plat_dev->dev,
1229                                  "failed to create debugfs entry %s\n", name);
1230         }
1231
1232         return 0;
1233 }
1234
1235 void coda_free_aux_buf(struct coda_dev *dev,
1236                        struct coda_aux_buf *buf)
1237 {
1238         if (buf->vaddr) {
1239                 dma_free_coherent(&dev->plat_dev->dev, buf->size,
1240                                   buf->vaddr, buf->paddr);
1241                 buf->vaddr = NULL;
1242                 buf->size = 0;
1243                 debugfs_remove(buf->dentry);
1244                 buf->dentry = NULL;
1245         }
1246 }
1247
1248 static int coda_start_streaming(struct vb2_queue *q, unsigned int count)
1249 {
1250         struct coda_ctx *ctx = vb2_get_drv_priv(q);
1251         struct v4l2_device *v4l2_dev = &ctx->dev->v4l2_dev;
1252         struct coda_q_data *q_data_src, *q_data_dst;
1253         struct vb2_v4l2_buffer *buf;
1254         int ret = 0;
1255
1256         if (count < 1)
1257                 return -EINVAL;
1258
1259         q_data_src = get_q_data(ctx, V4L2_BUF_TYPE_VIDEO_OUTPUT);
1260         if (q->type == V4L2_BUF_TYPE_VIDEO_OUTPUT) {
1261                 if (ctx->inst_type == CODA_INST_DECODER && ctx->use_bit) {
1262                         /* copy the buffers that were queued before streamon */
1263                         mutex_lock(&ctx->bitstream_mutex);
1264                         coda_fill_bitstream(ctx, false);
1265                         mutex_unlock(&ctx->bitstream_mutex);
1266
1267                         if (coda_get_bitstream_payload(ctx) < 512) {
1268                                 ret = -EINVAL;
1269                                 goto err;
1270                         }
1271                 }
1272
1273                 ctx->streamon_out = 1;
1274         } else {
1275                 ctx->streamon_cap = 1;
1276         }
1277
1278         /* Don't start the coda unless both queues are on */
1279         if (!(ctx->streamon_out & ctx->streamon_cap))
1280                 return 0;
1281
1282         q_data_dst = get_q_data(ctx, V4L2_BUF_TYPE_VIDEO_CAPTURE);
1283         if ((q_data_src->width != q_data_dst->width &&
1284              round_up(q_data_src->width, 16) != q_data_dst->width) ||
1285             (q_data_src->height != q_data_dst->height &&
1286              round_up(q_data_src->height, 16) != q_data_dst->height)) {
1287                 v4l2_err(v4l2_dev, "can't convert %dx%d to %dx%d\n",
1288                          q_data_src->width, q_data_src->height,
1289                          q_data_dst->width, q_data_dst->height);
1290                 ret = -EINVAL;
1291                 goto err;
1292         }
1293
1294         /* Allow BIT decoder device_run with no new buffers queued */
1295         if (ctx->inst_type == CODA_INST_DECODER && ctx->use_bit)
1296                 v4l2_m2m_set_src_buffered(ctx->fh.m2m_ctx, true);
1297
1298         ctx->gopcounter = ctx->params.gop_size - 1;
1299
1300         ctx->codec = coda_find_codec(ctx->dev, q_data_src->fourcc,
1301                                      q_data_dst->fourcc);
1302         if (!ctx->codec) {
1303                 v4l2_err(v4l2_dev, "couldn't tell instance type.\n");
1304                 ret = -EINVAL;
1305                 goto err;
1306         }
1307
1308         if (q_data_dst->fourcc == V4L2_PIX_FMT_JPEG)
1309                 ctx->params.gop_size = 1;
1310         ctx->gopcounter = ctx->params.gop_size - 1;
1311
1312         ret = ctx->ops->start_streaming(ctx);
1313         if (ctx->inst_type == CODA_INST_DECODER) {
1314                 if (ret == -EAGAIN)
1315                         return 0;
1316                 else if (ret < 0)
1317                         goto err;
1318         }
1319
1320         return ret;
1321
1322 err:
1323         if (q->type == V4L2_BUF_TYPE_VIDEO_OUTPUT) {
1324                 while ((buf = v4l2_m2m_src_buf_remove(ctx->fh.m2m_ctx)))
1325                         v4l2_m2m_buf_done(buf, VB2_BUF_STATE_QUEUED);
1326         } else {
1327                 while ((buf = v4l2_m2m_dst_buf_remove(ctx->fh.m2m_ctx)))
1328                         v4l2_m2m_buf_done(buf, VB2_BUF_STATE_QUEUED);
1329         }
1330         return ret;
1331 }
1332
1333 static void coda_stop_streaming(struct vb2_queue *q)
1334 {
1335         struct coda_ctx *ctx = vb2_get_drv_priv(q);
1336         struct coda_dev *dev = ctx->dev;
1337         struct vb2_v4l2_buffer *buf;
1338         unsigned long flags;
1339         bool stop;
1340
1341         stop = ctx->streamon_out && ctx->streamon_cap;
1342
1343         if (q->type == V4L2_BUF_TYPE_VIDEO_OUTPUT) {
1344                 v4l2_dbg(1, coda_debug, &dev->v4l2_dev,
1345                          "%s: output\n", __func__);
1346                 ctx->streamon_out = 0;
1347
1348                 coda_bit_stream_end_flag(ctx);
1349
1350                 ctx->qsequence = 0;
1351
1352                 while ((buf = v4l2_m2m_src_buf_remove(ctx->fh.m2m_ctx)))
1353                         v4l2_m2m_buf_done(buf, VB2_BUF_STATE_ERROR);
1354         } else {
1355                 v4l2_dbg(1, coda_debug, &dev->v4l2_dev,
1356                          "%s: capture\n", __func__);
1357                 ctx->streamon_cap = 0;
1358
1359                 ctx->osequence = 0;
1360                 ctx->sequence_offset = 0;
1361
1362                 while ((buf = v4l2_m2m_dst_buf_remove(ctx->fh.m2m_ctx)))
1363                         v4l2_m2m_buf_done(buf, VB2_BUF_STATE_ERROR);
1364         }
1365
1366         if (stop) {
1367                 struct coda_buffer_meta *meta;
1368
1369                 if (ctx->ops->seq_end_work) {
1370                         queue_work(dev->workqueue, &ctx->seq_end_work);
1371                         flush_work(&ctx->seq_end_work);
1372                 }
1373                 spin_lock_irqsave(&ctx->buffer_meta_lock, flags);
1374                 while (!list_empty(&ctx->buffer_meta_list)) {
1375                         meta = list_first_entry(&ctx->buffer_meta_list,
1376                                                 struct coda_buffer_meta, list);
1377                         list_del(&meta->list);
1378                         kfree(meta);
1379                 }
1380                 ctx->num_metas = 0;
1381                 spin_unlock_irqrestore(&ctx->buffer_meta_lock, flags);
1382                 kfifo_init(&ctx->bitstream_fifo,
1383                         ctx->bitstream.vaddr, ctx->bitstream.size);
1384                 ctx->runcounter = 0;
1385                 ctx->aborting = 0;
1386         }
1387
1388         if (!ctx->streamon_out && !ctx->streamon_cap)
1389                 ctx->bit_stream_param &= ~CODA_BIT_STREAM_END_FLAG;
1390 }
1391
1392 static const struct vb2_ops coda_qops = {
1393         .queue_setup            = coda_queue_setup,
1394         .buf_prepare            = coda_buf_prepare,
1395         .buf_queue              = coda_buf_queue,
1396         .start_streaming        = coda_start_streaming,
1397         .stop_streaming         = coda_stop_streaming,
1398         .wait_prepare           = vb2_ops_wait_prepare,
1399         .wait_finish            = vb2_ops_wait_finish,
1400 };
1401
1402 static int coda_s_ctrl(struct v4l2_ctrl *ctrl)
1403 {
1404         struct coda_ctx *ctx =
1405                         container_of(ctrl->handler, struct coda_ctx, ctrls);
1406
1407         v4l2_dbg(1, coda_debug, &ctx->dev->v4l2_dev,
1408                  "s_ctrl: id = %d, val = %d\n", ctrl->id, ctrl->val);
1409
1410         switch (ctrl->id) {
1411         case V4L2_CID_HFLIP:
1412                 if (ctrl->val)
1413                         ctx->params.rot_mode |= CODA_MIR_HOR;
1414                 else
1415                         ctx->params.rot_mode &= ~CODA_MIR_HOR;
1416                 break;
1417         case V4L2_CID_VFLIP:
1418                 if (ctrl->val)
1419                         ctx->params.rot_mode |= CODA_MIR_VER;
1420                 else
1421                         ctx->params.rot_mode &= ~CODA_MIR_VER;
1422                 break;
1423         case V4L2_CID_MPEG_VIDEO_BITRATE:
1424                 ctx->params.bitrate = ctrl->val / 1000;
1425                 break;
1426         case V4L2_CID_MPEG_VIDEO_GOP_SIZE:
1427                 ctx->params.gop_size = ctrl->val;
1428                 break;
1429         case V4L2_CID_MPEG_VIDEO_H264_I_FRAME_QP:
1430                 ctx->params.h264_intra_qp = ctrl->val;
1431                 break;
1432         case V4L2_CID_MPEG_VIDEO_H264_P_FRAME_QP:
1433                 ctx->params.h264_inter_qp = ctrl->val;
1434                 break;
1435         case V4L2_CID_MPEG_VIDEO_H264_MIN_QP:
1436                 ctx->params.h264_min_qp = ctrl->val;
1437                 break;
1438         case V4L2_CID_MPEG_VIDEO_H264_MAX_QP:
1439                 ctx->params.h264_max_qp = ctrl->val;
1440                 break;
1441         case V4L2_CID_MPEG_VIDEO_H264_LOOP_FILTER_ALPHA:
1442                 ctx->params.h264_deblk_alpha = ctrl->val;
1443                 break;
1444         case V4L2_CID_MPEG_VIDEO_H264_LOOP_FILTER_BETA:
1445                 ctx->params.h264_deblk_beta = ctrl->val;
1446                 break;
1447         case V4L2_CID_MPEG_VIDEO_H264_LOOP_FILTER_MODE:
1448                 ctx->params.h264_deblk_enabled = (ctrl->val ==
1449                                 V4L2_MPEG_VIDEO_H264_LOOP_FILTER_MODE_ENABLED);
1450                 break;
1451         case V4L2_CID_MPEG_VIDEO_MPEG4_I_FRAME_QP:
1452                 ctx->params.mpeg4_intra_qp = ctrl->val;
1453                 break;
1454         case V4L2_CID_MPEG_VIDEO_MPEG4_P_FRAME_QP:
1455                 ctx->params.mpeg4_inter_qp = ctrl->val;
1456                 break;
1457         case V4L2_CID_MPEG_VIDEO_MULTI_SLICE_MODE:
1458                 ctx->params.slice_mode = ctrl->val;
1459                 break;
1460         case V4L2_CID_MPEG_VIDEO_MULTI_SLICE_MAX_MB:
1461                 ctx->params.slice_max_mb = ctrl->val;
1462                 break;
1463         case V4L2_CID_MPEG_VIDEO_MULTI_SLICE_MAX_BYTES:
1464                 ctx->params.slice_max_bits = ctrl->val * 8;
1465                 break;
1466         case V4L2_CID_MPEG_VIDEO_HEADER_MODE:
1467                 break;
1468         case V4L2_CID_MPEG_VIDEO_CYCLIC_INTRA_REFRESH_MB:
1469                 ctx->params.intra_refresh = ctrl->val;
1470                 break;
1471         case V4L2_CID_JPEG_COMPRESSION_QUALITY:
1472                 coda_set_jpeg_compression_quality(ctx, ctrl->val);
1473                 break;
1474         case V4L2_CID_JPEG_RESTART_INTERVAL:
1475                 ctx->params.jpeg_restart_interval = ctrl->val;
1476                 break;
1477         case V4L2_CID_MPEG_VIDEO_VBV_DELAY:
1478                 ctx->params.vbv_delay = ctrl->val;
1479                 break;
1480         case V4L2_CID_MPEG_VIDEO_VBV_SIZE:
1481                 ctx->params.vbv_size = min(ctrl->val * 8192, 0x7fffffff);
1482                 break;
1483         default:
1484                 v4l2_dbg(1, coda_debug, &ctx->dev->v4l2_dev,
1485                         "Invalid control, id=%d, val=%d\n",
1486                         ctrl->id, ctrl->val);
1487                 return -EINVAL;
1488         }
1489
1490         return 0;
1491 }
1492
1493 static const struct v4l2_ctrl_ops coda_ctrl_ops = {
1494         .s_ctrl = coda_s_ctrl,
1495 };
1496
1497 static void coda_encode_ctrls(struct coda_ctx *ctx)
1498 {
1499         v4l2_ctrl_new_std(&ctx->ctrls, &coda_ctrl_ops,
1500                 V4L2_CID_MPEG_VIDEO_BITRATE, 0, 32767000, 1000, 0);
1501         v4l2_ctrl_new_std(&ctx->ctrls, &coda_ctrl_ops,
1502                 V4L2_CID_MPEG_VIDEO_GOP_SIZE, 1, 60, 1, 16);
1503         v4l2_ctrl_new_std(&ctx->ctrls, &coda_ctrl_ops,
1504                 V4L2_CID_MPEG_VIDEO_H264_I_FRAME_QP, 0, 51, 1, 25);
1505         v4l2_ctrl_new_std(&ctx->ctrls, &coda_ctrl_ops,
1506                 V4L2_CID_MPEG_VIDEO_H264_P_FRAME_QP, 0, 51, 1, 25);
1507         if (ctx->dev->devtype->product != CODA_960) {
1508                 v4l2_ctrl_new_std(&ctx->ctrls, &coda_ctrl_ops,
1509                         V4L2_CID_MPEG_VIDEO_H264_MIN_QP, 0, 51, 1, 12);
1510         }
1511         v4l2_ctrl_new_std(&ctx->ctrls, &coda_ctrl_ops,
1512                 V4L2_CID_MPEG_VIDEO_H264_MAX_QP, 0, 51, 1, 51);
1513         v4l2_ctrl_new_std(&ctx->ctrls, &coda_ctrl_ops,
1514                 V4L2_CID_MPEG_VIDEO_H264_LOOP_FILTER_ALPHA, 0, 15, 1, 0);
1515         v4l2_ctrl_new_std(&ctx->ctrls, &coda_ctrl_ops,
1516                 V4L2_CID_MPEG_VIDEO_H264_LOOP_FILTER_BETA, 0, 15, 1, 0);
1517         v4l2_ctrl_new_std_menu(&ctx->ctrls, &coda_ctrl_ops,
1518                 V4L2_CID_MPEG_VIDEO_H264_LOOP_FILTER_MODE,
1519                 V4L2_MPEG_VIDEO_H264_LOOP_FILTER_MODE_DISABLED, 0x0,
1520                 V4L2_MPEG_VIDEO_H264_LOOP_FILTER_MODE_ENABLED);
1521         v4l2_ctrl_new_std(&ctx->ctrls, &coda_ctrl_ops,
1522                 V4L2_CID_MPEG_VIDEO_MPEG4_I_FRAME_QP, 1, 31, 1, 2);
1523         v4l2_ctrl_new_std(&ctx->ctrls, &coda_ctrl_ops,
1524                 V4L2_CID_MPEG_VIDEO_MPEG4_P_FRAME_QP, 1, 31, 1, 2);
1525         v4l2_ctrl_new_std_menu(&ctx->ctrls, &coda_ctrl_ops,
1526                 V4L2_CID_MPEG_VIDEO_MULTI_SLICE_MODE,
1527                 V4L2_MPEG_VIDEO_MULTI_SICE_MODE_MAX_BYTES, 0x0,
1528                 V4L2_MPEG_VIDEO_MULTI_SLICE_MODE_SINGLE);
1529         v4l2_ctrl_new_std(&ctx->ctrls, &coda_ctrl_ops,
1530                 V4L2_CID_MPEG_VIDEO_MULTI_SLICE_MAX_MB, 1, 0x3fffffff, 1, 1);
1531         v4l2_ctrl_new_std(&ctx->ctrls, &coda_ctrl_ops,
1532                 V4L2_CID_MPEG_VIDEO_MULTI_SLICE_MAX_BYTES, 1, 0x3fffffff, 1,
1533                 500);
1534         v4l2_ctrl_new_std_menu(&ctx->ctrls, &coda_ctrl_ops,
1535                 V4L2_CID_MPEG_VIDEO_HEADER_MODE,
1536                 V4L2_MPEG_VIDEO_HEADER_MODE_JOINED_WITH_1ST_FRAME,
1537                 (1 << V4L2_MPEG_VIDEO_HEADER_MODE_SEPARATE),
1538                 V4L2_MPEG_VIDEO_HEADER_MODE_JOINED_WITH_1ST_FRAME);
1539         v4l2_ctrl_new_std(&ctx->ctrls, &coda_ctrl_ops,
1540                 V4L2_CID_MPEG_VIDEO_CYCLIC_INTRA_REFRESH_MB, 0,
1541                 1920 * 1088 / 256, 1, 0);
1542         v4l2_ctrl_new_std(&ctx->ctrls, &coda_ctrl_ops,
1543                 V4L2_CID_MPEG_VIDEO_VBV_DELAY, 0, 0x7fff, 1, 0);
1544         /*
1545          * The maximum VBV size value is 0x7fffffff bits,
1546          * one bit less than 262144 KiB
1547          */
1548         v4l2_ctrl_new_std(&ctx->ctrls, &coda_ctrl_ops,
1549                 V4L2_CID_MPEG_VIDEO_VBV_SIZE, 0, 262144, 1, 0);
1550 }
1551
1552 static void coda_jpeg_encode_ctrls(struct coda_ctx *ctx)
1553 {
1554         v4l2_ctrl_new_std(&ctx->ctrls, &coda_ctrl_ops,
1555                 V4L2_CID_JPEG_COMPRESSION_QUALITY, 5, 100, 1, 50);
1556         v4l2_ctrl_new_std(&ctx->ctrls, &coda_ctrl_ops,
1557                 V4L2_CID_JPEG_RESTART_INTERVAL, 0, 100, 1, 0);
1558 }
1559
1560 static int coda_ctrls_setup(struct coda_ctx *ctx)
1561 {
1562         v4l2_ctrl_handler_init(&ctx->ctrls, 2);
1563
1564         v4l2_ctrl_new_std(&ctx->ctrls, &coda_ctrl_ops,
1565                 V4L2_CID_HFLIP, 0, 1, 1, 0);
1566         v4l2_ctrl_new_std(&ctx->ctrls, &coda_ctrl_ops,
1567                 V4L2_CID_VFLIP, 0, 1, 1, 0);
1568         if (ctx->inst_type == CODA_INST_ENCODER) {
1569                 if (ctx->cvd->dst_formats[0] == V4L2_PIX_FMT_JPEG)
1570                         coda_jpeg_encode_ctrls(ctx);
1571                 else
1572                         coda_encode_ctrls(ctx);
1573         }
1574
1575         if (ctx->ctrls.error) {
1576                 v4l2_err(&ctx->dev->v4l2_dev,
1577                         "control initialization error (%d)",
1578                         ctx->ctrls.error);
1579                 return -EINVAL;
1580         }
1581
1582         return v4l2_ctrl_handler_setup(&ctx->ctrls);
1583 }
1584
1585 static int coda_queue_init(struct coda_ctx *ctx, struct vb2_queue *vq)
1586 {
1587         vq->drv_priv = ctx;
1588         vq->ops = &coda_qops;
1589         vq->buf_struct_size = sizeof(struct v4l2_m2m_buffer);
1590         vq->timestamp_flags = V4L2_BUF_FLAG_TIMESTAMP_COPY;
1591         vq->lock = &ctx->dev->dev_mutex;
1592         /* One way to indicate end-of-stream for coda is to set the
1593          * bytesused == 0. However by default videobuf2 handles bytesused
1594          * equal to 0 as a special case and changes its value to the size
1595          * of the buffer. Set the allow_zero_bytesused flag, so
1596          * that videobuf2 will keep the value of bytesused intact.
1597          */
1598         vq->allow_zero_bytesused = 1;
1599         vq->dev = &ctx->dev->plat_dev->dev;
1600
1601         return vb2_queue_init(vq);
1602 }
1603
1604 int coda_encoder_queue_init(void *priv, struct vb2_queue *src_vq,
1605                             struct vb2_queue *dst_vq)
1606 {
1607         int ret;
1608
1609         src_vq->type = V4L2_BUF_TYPE_VIDEO_OUTPUT;
1610         src_vq->io_modes = VB2_DMABUF | VB2_MMAP;
1611         src_vq->mem_ops = &vb2_dma_contig_memops;
1612
1613         ret = coda_queue_init(priv, src_vq);
1614         if (ret)
1615                 return ret;
1616
1617         dst_vq->type = V4L2_BUF_TYPE_VIDEO_CAPTURE;
1618         dst_vq->io_modes = VB2_DMABUF | VB2_MMAP;
1619         dst_vq->mem_ops = &vb2_dma_contig_memops;
1620
1621         return coda_queue_init(priv, dst_vq);
1622 }
1623
1624 int coda_decoder_queue_init(void *priv, struct vb2_queue *src_vq,
1625                             struct vb2_queue *dst_vq)
1626 {
1627         int ret;
1628
1629         src_vq->type = V4L2_BUF_TYPE_VIDEO_OUTPUT;
1630         src_vq->io_modes = VB2_DMABUF | VB2_MMAP | VB2_USERPTR;
1631         src_vq->mem_ops = &vb2_vmalloc_memops;
1632
1633         ret = coda_queue_init(priv, src_vq);
1634         if (ret)
1635                 return ret;
1636
1637         dst_vq->type = V4L2_BUF_TYPE_VIDEO_CAPTURE;
1638         dst_vq->io_modes = VB2_DMABUF | VB2_MMAP;
1639         dst_vq->mem_ops = &vb2_dma_contig_memops;
1640
1641         return coda_queue_init(priv, dst_vq);
1642 }
1643
1644 static int coda_next_free_instance(struct coda_dev *dev)
1645 {
1646         int idx = ffz(dev->instance_mask);
1647
1648         if ((idx < 0) ||
1649             (dev->devtype->product == CODA_DX6 && idx > CODADX6_MAX_INSTANCES))
1650                 return -EBUSY;
1651
1652         return idx;
1653 }
1654
1655 /*
1656  * File operations
1657  */
1658
1659 static int coda_open(struct file *file)
1660 {
1661         struct video_device *vdev = video_devdata(file);
1662         struct coda_dev *dev = video_get_drvdata(vdev);
1663         struct coda_ctx *ctx = NULL;
1664         char *name;
1665         int ret;
1666         int idx;
1667
1668         ctx = kzalloc(sizeof(*ctx), GFP_KERNEL);
1669         if (!ctx)
1670                 return -ENOMEM;
1671
1672         idx = coda_next_free_instance(dev);
1673         if (idx < 0) {
1674                 ret = idx;
1675                 goto err_coda_max;
1676         }
1677         set_bit(idx, &dev->instance_mask);
1678
1679         name = kasprintf(GFP_KERNEL, "context%d", idx);
1680         if (!name) {
1681                 ret = -ENOMEM;
1682                 goto err_coda_name_init;
1683         }
1684
1685         ctx->debugfs_entry = debugfs_create_dir(name, dev->debugfs_root);
1686         kfree(name);
1687
1688         ctx->cvd = to_coda_video_device(vdev);
1689         ctx->inst_type = ctx->cvd->type;
1690         ctx->ops = ctx->cvd->ops;
1691         ctx->use_bit = !ctx->cvd->direct;
1692         init_completion(&ctx->completion);
1693         INIT_WORK(&ctx->pic_run_work, coda_pic_run_work);
1694         if (ctx->ops->seq_end_work)
1695                 INIT_WORK(&ctx->seq_end_work, ctx->ops->seq_end_work);
1696         v4l2_fh_init(&ctx->fh, video_devdata(file));
1697         file->private_data = &ctx->fh;
1698         v4l2_fh_add(&ctx->fh);
1699         ctx->dev = dev;
1700         ctx->idx = idx;
1701         switch (dev->devtype->product) {
1702         case CODA_960:
1703                 ctx->frame_mem_ctrl = 1 << 12;
1704                 /* fallthrough */
1705         case CODA_7541:
1706                 ctx->reg_idx = 0;
1707                 break;
1708         default:
1709                 ctx->reg_idx = idx;
1710         }
1711
1712         /* Power up and upload firmware if necessary */
1713         ret = pm_runtime_get_sync(&dev->plat_dev->dev);
1714         if (ret < 0) {
1715                 v4l2_err(&dev->v4l2_dev, "failed to power up: %d\n", ret);
1716                 goto err_pm_get;
1717         }
1718
1719         ret = clk_prepare_enable(dev->clk_per);
1720         if (ret)
1721                 goto err_clk_per;
1722
1723         ret = clk_prepare_enable(dev->clk_ahb);
1724         if (ret)
1725                 goto err_clk_ahb;
1726
1727         set_default_params(ctx);
1728         ctx->fh.m2m_ctx = v4l2_m2m_ctx_init(dev->m2m_dev, ctx,
1729                                             ctx->ops->queue_init);
1730         if (IS_ERR(ctx->fh.m2m_ctx)) {
1731                 ret = PTR_ERR(ctx->fh.m2m_ctx);
1732
1733                 v4l2_err(&dev->v4l2_dev, "%s return error (%d)\n",
1734                          __func__, ret);
1735                 goto err_ctx_init;
1736         }
1737
1738         ret = coda_ctrls_setup(ctx);
1739         if (ret) {
1740                 v4l2_err(&dev->v4l2_dev, "failed to setup coda controls\n");
1741                 goto err_ctrls_setup;
1742         }
1743
1744         ctx->fh.ctrl_handler = &ctx->ctrls;
1745
1746         mutex_init(&ctx->bitstream_mutex);
1747         mutex_init(&ctx->buffer_mutex);
1748         INIT_LIST_HEAD(&ctx->buffer_meta_list);
1749         spin_lock_init(&ctx->buffer_meta_lock);
1750
1751         coda_lock(ctx);
1752         list_add(&ctx->list, &dev->instances);
1753         coda_unlock(ctx);
1754
1755         v4l2_dbg(1, coda_debug, &dev->v4l2_dev, "Created instance %d (%p)\n",
1756                  ctx->idx, ctx);
1757
1758         return 0;
1759
1760 err_ctrls_setup:
1761         v4l2_m2m_ctx_release(ctx->fh.m2m_ctx);
1762 err_ctx_init:
1763         clk_disable_unprepare(dev->clk_ahb);
1764 err_clk_ahb:
1765         clk_disable_unprepare(dev->clk_per);
1766 err_clk_per:
1767         pm_runtime_put_sync(&dev->plat_dev->dev);
1768 err_pm_get:
1769         v4l2_fh_del(&ctx->fh);
1770         v4l2_fh_exit(&ctx->fh);
1771         clear_bit(ctx->idx, &dev->instance_mask);
1772 err_coda_name_init:
1773 err_coda_max:
1774         kfree(ctx);
1775         return ret;
1776 }
1777
1778 static int coda_release(struct file *file)
1779 {
1780         struct coda_dev *dev = video_drvdata(file);
1781         struct coda_ctx *ctx = fh_to_ctx(file->private_data);
1782
1783         v4l2_dbg(1, coda_debug, &dev->v4l2_dev, "Releasing instance %p\n",
1784                  ctx);
1785
1786         if (ctx->inst_type == CODA_INST_DECODER && ctx->use_bit)
1787                 coda_bit_stream_end_flag(ctx);
1788
1789         /* If this instance is running, call .job_abort and wait for it to end */
1790         v4l2_m2m_ctx_release(ctx->fh.m2m_ctx);
1791
1792         /* In case the instance was not running, we still need to call SEQ_END */
1793         if (ctx->ops->seq_end_work) {
1794                 queue_work(dev->workqueue, &ctx->seq_end_work);
1795                 flush_work(&ctx->seq_end_work);
1796         }
1797
1798         coda_lock(ctx);
1799         list_del(&ctx->list);
1800         coda_unlock(ctx);
1801
1802         if (ctx->dev->devtype->product == CODA_DX6)
1803                 coda_free_aux_buf(dev, &ctx->workbuf);
1804
1805         v4l2_ctrl_handler_free(&ctx->ctrls);
1806         clk_disable_unprepare(dev->clk_ahb);
1807         clk_disable_unprepare(dev->clk_per);
1808         pm_runtime_put_sync(&dev->plat_dev->dev);
1809         v4l2_fh_del(&ctx->fh);
1810         v4l2_fh_exit(&ctx->fh);
1811         clear_bit(ctx->idx, &dev->instance_mask);
1812         if (ctx->ops->release)
1813                 ctx->ops->release(ctx);
1814         debugfs_remove_recursive(ctx->debugfs_entry);
1815         kfree(ctx);
1816
1817         return 0;
1818 }
1819
1820 static const struct v4l2_file_operations coda_fops = {
1821         .owner          = THIS_MODULE,
1822         .open           = coda_open,
1823         .release        = coda_release,
1824         .poll           = v4l2_m2m_fop_poll,
1825         .unlocked_ioctl = video_ioctl2,
1826         .mmap           = v4l2_m2m_fop_mmap,
1827 };
1828
1829 static int coda_hw_init(struct coda_dev *dev)
1830 {
1831         u32 data;
1832         u16 *p;
1833         int i, ret;
1834
1835         ret = clk_prepare_enable(dev->clk_per);
1836         if (ret)
1837                 goto err_clk_per;
1838
1839         ret = clk_prepare_enable(dev->clk_ahb);
1840         if (ret)
1841                 goto err_clk_ahb;
1842
1843         if (dev->rstc)
1844                 reset_control_reset(dev->rstc);
1845
1846         /*
1847          * Copy the first CODA_ISRAM_SIZE in the internal SRAM.
1848          * The 16-bit chars in the code buffer are in memory access
1849          * order, re-sort them to CODA order for register download.
1850          * Data in this SRAM survives a reboot.
1851          */
1852         p = (u16 *)dev->codebuf.vaddr;
1853         if (dev->devtype->product == CODA_DX6) {
1854                 for (i = 0; i < (CODA_ISRAM_SIZE / 2); i++)  {
1855                         data = CODA_DOWN_ADDRESS_SET(i) |
1856                                 CODA_DOWN_DATA_SET(p[i ^ 1]);
1857                         coda_write(dev, data, CODA_REG_BIT_CODE_DOWN);
1858                 }
1859         } else {
1860                 for (i = 0; i < (CODA_ISRAM_SIZE / 2); i++) {
1861                         data = CODA_DOWN_ADDRESS_SET(i) |
1862                                 CODA_DOWN_DATA_SET(p[round_down(i, 4) +
1863                                                         3 - (i % 4)]);
1864                         coda_write(dev, data, CODA_REG_BIT_CODE_DOWN);
1865                 }
1866         }
1867
1868         /* Clear registers */
1869         for (i = 0; i < 64; i++)
1870                 coda_write(dev, 0, CODA_REG_BIT_CODE_BUF_ADDR + i * 4);
1871
1872         /* Tell the BIT where to find everything it needs */
1873         if (dev->devtype->product == CODA_960 ||
1874             dev->devtype->product == CODA_7541) {
1875                 coda_write(dev, dev->tempbuf.paddr,
1876                                 CODA_REG_BIT_TEMP_BUF_ADDR);
1877                 coda_write(dev, 0, CODA_REG_BIT_BIT_STREAM_PARAM);
1878         } else {
1879                 coda_write(dev, dev->workbuf.paddr,
1880                               CODA_REG_BIT_WORK_BUF_ADDR);
1881         }
1882         coda_write(dev, dev->codebuf.paddr,
1883                       CODA_REG_BIT_CODE_BUF_ADDR);
1884         coda_write(dev, 0, CODA_REG_BIT_CODE_RUN);
1885
1886         /* Set default values */
1887         switch (dev->devtype->product) {
1888         case CODA_DX6:
1889                 coda_write(dev, CODADX6_STREAM_BUF_PIC_FLUSH,
1890                            CODA_REG_BIT_STREAM_CTRL);
1891                 break;
1892         default:
1893                 coda_write(dev, CODA7_STREAM_BUF_PIC_FLUSH,
1894                            CODA_REG_BIT_STREAM_CTRL);
1895         }
1896         if (dev->devtype->product == CODA_960)
1897                 coda_write(dev, 1 << 12, CODA_REG_BIT_FRAME_MEM_CTRL);
1898         else
1899                 coda_write(dev, 0, CODA_REG_BIT_FRAME_MEM_CTRL);
1900
1901         if (dev->devtype->product != CODA_DX6)
1902                 coda_write(dev, 0, CODA7_REG_BIT_AXI_SRAM_USE);
1903
1904         coda_write(dev, CODA_INT_INTERRUPT_ENABLE,
1905                       CODA_REG_BIT_INT_ENABLE);
1906
1907         /* Reset VPU and start processor */
1908         data = coda_read(dev, CODA_REG_BIT_CODE_RESET);
1909         data |= CODA_REG_RESET_ENABLE;
1910         coda_write(dev, data, CODA_REG_BIT_CODE_RESET);
1911         udelay(10);
1912         data &= ~CODA_REG_RESET_ENABLE;
1913         coda_write(dev, data, CODA_REG_BIT_CODE_RESET);
1914         coda_write(dev, CODA_REG_RUN_ENABLE, CODA_REG_BIT_CODE_RUN);
1915
1916         clk_disable_unprepare(dev->clk_ahb);
1917         clk_disable_unprepare(dev->clk_per);
1918
1919         return 0;
1920
1921 err_clk_ahb:
1922         clk_disable_unprepare(dev->clk_per);
1923 err_clk_per:
1924         return ret;
1925 }
1926
1927 static int coda_register_device(struct coda_dev *dev, int i)
1928 {
1929         struct video_device *vfd = &dev->vfd[i];
1930
1931         if (i >= dev->devtype->num_vdevs)
1932                 return -EINVAL;
1933
1934         strlcpy(vfd->name, dev->devtype->vdevs[i]->name, sizeof(vfd->name));
1935         vfd->fops       = &coda_fops;
1936         vfd->ioctl_ops  = &coda_ioctl_ops;
1937         vfd->release    = video_device_release_empty,
1938         vfd->lock       = &dev->dev_mutex;
1939         vfd->v4l2_dev   = &dev->v4l2_dev;
1940         vfd->vfl_dir    = VFL_DIR_M2M;
1941         video_set_drvdata(vfd, dev);
1942
1943         /* Not applicable, use the selection API instead */
1944         v4l2_disable_ioctl(vfd, VIDIOC_CROPCAP);
1945         v4l2_disable_ioctl(vfd, VIDIOC_G_CROP);
1946         v4l2_disable_ioctl(vfd, VIDIOC_S_CROP);
1947
1948         return video_register_device(vfd, VFL_TYPE_GRABBER, 0);
1949 }
1950
1951 static void coda_copy_firmware(struct coda_dev *dev, const u8 * const buf,
1952                                size_t size)
1953 {
1954         u32 *src = (u32 *)buf;
1955
1956         /* Check if the firmware has a 16-byte Freescale header, skip it */
1957         if (buf[0] == 'M' && buf[1] == 'X')
1958                 src += 4;
1959         /*
1960          * Check whether the firmware is in native order or pre-reordered for
1961          * memory access. The first instruction opcode always is 0xe40e.
1962          */
1963         if (__le16_to_cpup((__le16 *)src) == 0xe40e) {
1964                 u32 *dst = dev->codebuf.vaddr;
1965                 int i;
1966
1967                 /* Firmware in native order, reorder while copying */
1968                 if (dev->devtype->product == CODA_DX6) {
1969                         for (i = 0; i < (size - 16) / 4; i++)
1970                                 dst[i] = (src[i] << 16) | (src[i] >> 16);
1971                 } else {
1972                         for (i = 0; i < (size - 16) / 4; i += 2) {
1973                                 dst[i] = (src[i + 1] << 16) | (src[i + 1] >> 16);
1974                                 dst[i + 1] = (src[i] << 16) | (src[i] >> 16);
1975                         }
1976                 }
1977         } else {
1978                 /* Copy the already reordered firmware image */
1979                 memcpy(dev->codebuf.vaddr, src, size);
1980         }
1981 }
1982
1983 static void coda_fw_callback(const struct firmware *fw, void *context);
1984
1985 static int coda_firmware_request(struct coda_dev *dev)
1986 {
1987         char *fw = dev->devtype->firmware[dev->firmware];
1988
1989         dev_dbg(&dev->plat_dev->dev, "requesting firmware '%s' for %s\n", fw,
1990                 coda_product_name(dev->devtype->product));
1991
1992         return reject_firmware_nowait(THIS_MODULE, true, fw,
1993                                        &dev->plat_dev->dev, GFP_KERNEL, dev,
1994                                        coda_fw_callback);
1995 }
1996
1997 static void coda_fw_callback(const struct firmware *fw, void *context)
1998 {
1999         struct coda_dev *dev = context;
2000         struct platform_device *pdev = dev->plat_dev;
2001         int i, ret;
2002
2003         if (!fw && dev->firmware == 1) {
2004                 v4l2_err(&dev->v4l2_dev, "firmware request failed\n");
2005                 goto put_pm;
2006         }
2007         if (!fw) {
2008                 dev->firmware = 1;
2009                 coda_firmware_request(dev);
2010                 return;
2011         }
2012         if (dev->firmware == 1) {
2013                 /*
2014                  * Since we can't suppress warnings for failed asynchronous
2015                  * firmware requests, report that the fallback firmware was
2016                  * found.
2017                  */
2018                 dev_info(&pdev->dev, "Using fallback firmware %s\n",
2019                          dev->devtype->firmware[dev->firmware]);
2020         }
2021
2022         /* allocate auxiliary per-device code buffer for the BIT processor */
2023         ret = coda_alloc_aux_buf(dev, &dev->codebuf, fw->size, "codebuf",
2024                                  dev->debugfs_root);
2025         if (ret < 0)
2026                 goto put_pm;
2027
2028         coda_copy_firmware(dev, fw->data, fw->size);
2029         release_firmware(fw);
2030
2031         ret = coda_hw_init(dev);
2032         if (ret < 0) {
2033                 v4l2_err(&dev->v4l2_dev, "HW initialization failed\n");
2034                 goto put_pm;
2035         }
2036
2037         ret = coda_check_firmware(dev);
2038         if (ret < 0)
2039                 goto put_pm;
2040
2041         dev->m2m_dev = v4l2_m2m_init(&coda_m2m_ops);
2042         if (IS_ERR(dev->m2m_dev)) {
2043                 v4l2_err(&dev->v4l2_dev, "Failed to init mem2mem device\n");
2044                 goto put_pm;
2045         }
2046
2047         for (i = 0; i < dev->devtype->num_vdevs; i++) {
2048                 ret = coda_register_device(dev, i);
2049                 if (ret) {
2050                         v4l2_err(&dev->v4l2_dev,
2051                                  "Failed to register %s video device: %d\n",
2052                                  dev->devtype->vdevs[i]->name, ret);
2053                         goto rel_vfd;
2054                 }
2055         }
2056
2057         v4l2_info(&dev->v4l2_dev, "codec registered as /dev/video[%d-%d]\n",
2058                   dev->vfd[0].num, dev->vfd[i - 1].num);
2059
2060         pm_runtime_put_sync(&pdev->dev);
2061         return;
2062
2063 rel_vfd:
2064         while (--i >= 0)
2065                 video_unregister_device(&dev->vfd[i]);
2066         v4l2_m2m_release(dev->m2m_dev);
2067 put_pm:
2068         pm_runtime_put_sync(&pdev->dev);
2069 }
2070
2071 enum coda_platform {
2072         CODA_IMX27,
2073         CODA_IMX53,
2074         CODA_IMX6Q,
2075         CODA_IMX6DL,
2076 };
2077
2078 static const struct coda_devtype coda_devdata[] = {
2079         [CODA_IMX27] = {
2080                 .firmware     = {
2081                         "/*(DEBLOBBED)*/",
2082                         "/*(DEBLOBBED)*/"
2083                 },
2084                 .product      = CODA_DX6,
2085                 .codecs       = codadx6_codecs,
2086                 .num_codecs   = ARRAY_SIZE(codadx6_codecs),
2087                 .vdevs        = codadx6_video_devices,
2088                 .num_vdevs    = ARRAY_SIZE(codadx6_video_devices),
2089                 .workbuf_size = 288 * 1024 + FMO_SLICE_SAVE_BUF_SIZE * 8 * 1024,
2090                 .iram_size    = 0xb000,
2091         },
2092         [CODA_IMX53] = {
2093                 .firmware     = {
2094                         "/*(DEBLOBBED)*/",
2095                         "/*(DEBLOBBED)*/"
2096                 },
2097                 .product      = CODA_7541,
2098                 .codecs       = coda7_codecs,
2099                 .num_codecs   = ARRAY_SIZE(coda7_codecs),
2100                 .vdevs        = coda7_video_devices,
2101                 .num_vdevs    = ARRAY_SIZE(coda7_video_devices),
2102                 .workbuf_size = 128 * 1024,
2103                 .tempbuf_size = 304 * 1024,
2104                 .iram_size    = 0x14000,
2105         },
2106         [CODA_IMX6Q] = {
2107                 .firmware     = {
2108                         "/*(DEBLOBBED)*/",
2109                         "/*(DEBLOBBED)*/"
2110                 },
2111                 .product      = CODA_960,
2112                 .codecs       = coda9_codecs,
2113                 .num_codecs   = ARRAY_SIZE(coda9_codecs),
2114                 .vdevs        = coda9_video_devices,
2115                 .num_vdevs    = ARRAY_SIZE(coda9_video_devices),
2116                 .workbuf_size = 80 * 1024,
2117                 .tempbuf_size = 204 * 1024,
2118                 .iram_size    = 0x21000,
2119         },
2120         [CODA_IMX6DL] = {
2121                 .firmware     = {
2122                         "/*(DEBLOBBED)*/",
2123                         "/*(DEBLOBBED)*/"
2124                 },
2125                 .product      = CODA_960,
2126                 .codecs       = coda9_codecs,
2127                 .num_codecs   = ARRAY_SIZE(coda9_codecs),
2128                 .vdevs        = coda9_video_devices,
2129                 .num_vdevs    = ARRAY_SIZE(coda9_video_devices),
2130                 .workbuf_size = 80 * 1024,
2131                 .tempbuf_size = 204 * 1024,
2132                 .iram_size    = 0x20000,
2133         },
2134 };
2135
2136 static struct platform_device_id coda_platform_ids[] = {
2137         { .name = "coda-imx27", .driver_data = CODA_IMX27 },
2138         { /* sentinel */ }
2139 };
2140 MODULE_DEVICE_TABLE(platform, coda_platform_ids);
2141
2142 #ifdef CONFIG_OF
2143 static const struct of_device_id coda_dt_ids[] = {
2144         { .compatible = "fsl,imx27-vpu", .data = &coda_devdata[CODA_IMX27] },
2145         { .compatible = "fsl,imx53-vpu", .data = &coda_devdata[CODA_IMX53] },
2146         { .compatible = "fsl,imx6q-vpu", .data = &coda_devdata[CODA_IMX6Q] },
2147         { .compatible = "fsl,imx6dl-vpu", .data = &coda_devdata[CODA_IMX6DL] },
2148         { /* sentinel */ }
2149 };
2150 MODULE_DEVICE_TABLE(of, coda_dt_ids);
2151 #endif
2152
2153 static int coda_probe(struct platform_device *pdev)
2154 {
2155         const struct of_device_id *of_id =
2156                         of_match_device(of_match_ptr(coda_dt_ids), &pdev->dev);
2157         const struct platform_device_id *pdev_id;
2158         struct coda_platform_data *pdata = pdev->dev.platform_data;
2159         struct device_node *np = pdev->dev.of_node;
2160         struct gen_pool *pool;
2161         struct coda_dev *dev;
2162         struct resource *res;
2163         int ret, irq;
2164
2165         dev = devm_kzalloc(&pdev->dev, sizeof(*dev), GFP_KERNEL);
2166         if (!dev)
2167                 return -ENOMEM;
2168
2169         pdev_id = of_id ? of_id->data : platform_get_device_id(pdev);
2170
2171         if (of_id)
2172                 dev->devtype = of_id->data;
2173         else if (pdev_id)
2174                 dev->devtype = &coda_devdata[pdev_id->driver_data];
2175         else
2176                 return -EINVAL;
2177
2178         spin_lock_init(&dev->irqlock);
2179         INIT_LIST_HEAD(&dev->instances);
2180
2181         dev->plat_dev = pdev;
2182         dev->clk_per = devm_clk_get(&pdev->dev, "per");
2183         if (IS_ERR(dev->clk_per)) {
2184                 dev_err(&pdev->dev, "Could not get per clock\n");
2185                 return PTR_ERR(dev->clk_per);
2186         }
2187
2188         dev->clk_ahb = devm_clk_get(&pdev->dev, "ahb");
2189         if (IS_ERR(dev->clk_ahb)) {
2190                 dev_err(&pdev->dev, "Could not get ahb clock\n");
2191                 return PTR_ERR(dev->clk_ahb);
2192         }
2193
2194         /* Get  memory for physical registers */
2195         res = platform_get_resource(pdev, IORESOURCE_MEM, 0);
2196         dev->regs_base = devm_ioremap_resource(&pdev->dev, res);
2197         if (IS_ERR(dev->regs_base))
2198                 return PTR_ERR(dev->regs_base);
2199
2200         /* IRQ */
2201         irq = platform_get_irq_byname(pdev, "bit");
2202         if (irq < 0)
2203                 irq = platform_get_irq(pdev, 0);
2204         if (irq < 0) {
2205                 dev_err(&pdev->dev, "failed to get irq resource\n");
2206                 return irq;
2207         }
2208
2209         ret = devm_request_threaded_irq(&pdev->dev, irq, NULL, coda_irq_handler,
2210                         IRQF_ONESHOT, dev_name(&pdev->dev), dev);
2211         if (ret < 0) {
2212                 dev_err(&pdev->dev, "failed to request irq: %d\n", ret);
2213                 return ret;
2214         }
2215
2216         dev->rstc = devm_reset_control_get_optional(&pdev->dev, NULL);
2217         if (IS_ERR(dev->rstc)) {
2218                 ret = PTR_ERR(dev->rstc);
2219                 if (ret == -ENOENT || ret == -ENOTSUPP) {
2220                         dev->rstc = NULL;
2221                 } else {
2222                         dev_err(&pdev->dev, "failed get reset control: %d\n",
2223                                 ret);
2224                         return ret;
2225                 }
2226         }
2227
2228         /* Get IRAM pool from device tree or platform data */
2229         pool = of_gen_pool_get(np, "iram", 0);
2230         if (!pool && pdata)
2231                 pool = gen_pool_get(pdata->iram_dev, NULL);
2232         if (!pool) {
2233                 dev_err(&pdev->dev, "iram pool not available\n");
2234                 return -ENOMEM;
2235         }
2236         dev->iram_pool = pool;
2237
2238         ret = v4l2_device_register(&pdev->dev, &dev->v4l2_dev);
2239         if (ret)
2240                 return ret;
2241
2242         mutex_init(&dev->dev_mutex);
2243         mutex_init(&dev->coda_mutex);
2244
2245         dev->debugfs_root = debugfs_create_dir("coda", NULL);
2246         if (!dev->debugfs_root)
2247                 dev_warn(&pdev->dev, "failed to create debugfs root\n");
2248
2249         /* allocate auxiliary per-device buffers for the BIT processor */
2250         if (dev->devtype->product == CODA_DX6) {
2251                 ret = coda_alloc_aux_buf(dev, &dev->workbuf,
2252                                          dev->devtype->workbuf_size, "workbuf",
2253                                          dev->debugfs_root);
2254                 if (ret < 0)
2255                         goto err_v4l2_register;
2256         }
2257
2258         if (dev->devtype->tempbuf_size) {
2259                 ret = coda_alloc_aux_buf(dev, &dev->tempbuf,
2260                                          dev->devtype->tempbuf_size, "tempbuf",
2261                                          dev->debugfs_root);
2262                 if (ret < 0)
2263                         goto err_v4l2_register;
2264         }
2265
2266         dev->iram.size = dev->devtype->iram_size;
2267         dev->iram.vaddr = gen_pool_dma_alloc(dev->iram_pool, dev->iram.size,
2268                                              &dev->iram.paddr);
2269         if (!dev->iram.vaddr) {
2270                 dev_warn(&pdev->dev, "unable to alloc iram\n");
2271         } else {
2272                 memset(dev->iram.vaddr, 0, dev->iram.size);
2273                 dev->iram.blob.data = dev->iram.vaddr;
2274                 dev->iram.blob.size = dev->iram.size;
2275                 dev->iram.dentry = debugfs_create_blob("iram", 0644,
2276                                                        dev->debugfs_root,
2277                                                        &dev->iram.blob);
2278         }
2279
2280         dev->workqueue = alloc_workqueue("coda", WQ_UNBOUND | WQ_MEM_RECLAIM, 1);
2281         if (!dev->workqueue) {
2282                 dev_err(&pdev->dev, "unable to alloc workqueue\n");
2283                 ret = -ENOMEM;
2284                 goto err_v4l2_register;
2285         }
2286
2287         platform_set_drvdata(pdev, dev);
2288
2289         /*
2290          * Start activated so we can directly call coda_hw_init in
2291          * coda_fw_callback regardless of whether CONFIG_PM is
2292          * enabled or whether the device is associated with a PM domain.
2293          */
2294         pm_runtime_get_noresume(&pdev->dev);
2295         pm_runtime_set_active(&pdev->dev);
2296         pm_runtime_enable(&pdev->dev);
2297
2298         return coda_firmware_request(dev);
2299
2300 err_v4l2_register:
2301         v4l2_device_unregister(&dev->v4l2_dev);
2302         return ret;
2303 }
2304
2305 static int coda_remove(struct platform_device *pdev)
2306 {
2307         struct coda_dev *dev = platform_get_drvdata(pdev);
2308         int i;
2309
2310         for (i = 0; i < ARRAY_SIZE(dev->vfd); i++) {
2311                 if (video_get_drvdata(&dev->vfd[i]))
2312                         video_unregister_device(&dev->vfd[i]);
2313         }
2314         if (dev->m2m_dev)
2315                 v4l2_m2m_release(dev->m2m_dev);
2316         pm_runtime_disable(&pdev->dev);
2317         v4l2_device_unregister(&dev->v4l2_dev);
2318         destroy_workqueue(dev->workqueue);
2319         if (dev->iram.vaddr)
2320                 gen_pool_free(dev->iram_pool, (unsigned long)dev->iram.vaddr,
2321                               dev->iram.size);
2322         coda_free_aux_buf(dev, &dev->codebuf);
2323         coda_free_aux_buf(dev, &dev->tempbuf);
2324         coda_free_aux_buf(dev, &dev->workbuf);
2325         debugfs_remove_recursive(dev->debugfs_root);
2326         return 0;
2327 }
2328
2329 #ifdef CONFIG_PM
2330 static int coda_runtime_resume(struct device *dev)
2331 {
2332         struct coda_dev *cdev = dev_get_drvdata(dev);
2333         int ret = 0;
2334
2335         if (dev->pm_domain && cdev->codebuf.vaddr) {
2336                 ret = coda_hw_init(cdev);
2337                 if (ret)
2338                         v4l2_err(&cdev->v4l2_dev, "HW initialization failed\n");
2339         }
2340
2341         return ret;
2342 }
2343 #endif
2344
2345 static const struct dev_pm_ops coda_pm_ops = {
2346         SET_RUNTIME_PM_OPS(NULL, coda_runtime_resume, NULL)
2347 };
2348
2349 static struct platform_driver coda_driver = {
2350         .probe  = coda_probe,
2351         .remove = coda_remove,
2352         .driver = {
2353                 .name   = CODA_NAME,
2354                 .of_match_table = of_match_ptr(coda_dt_ids),
2355                 .pm     = &coda_pm_ops,
2356         },
2357         .id_table = coda_platform_ids,
2358 };
2359
2360 module_platform_driver(coda_driver);
2361
2362 MODULE_LICENSE("GPL");
2363 MODULE_AUTHOR("Javier Martin <javier.martin@vista-silicon.com>");
2364 MODULE_DESCRIPTION("Coda multi-standard codec V4L2 driver");