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