GNU Linux-libre 6.8.7-gnu
[releases.git] / drivers / media / platform / allegro-dvt / allegro-core.c
1 // SPDX-License-Identifier: GPL-2.0
2 /*
3  * Copyright (C) 2019 Pengutronix, Michael Tretter <kernel@pengutronix.de>
4  *
5  * Allegro DVT video encoder driver
6  */
7
8 #include <linux/bits.h>
9 #include <linux/clk.h>
10 #include <linux/firmware.h>
11 #include <linux/gcd.h>
12 #include <linux/interrupt.h>
13 #include <linux/io.h>
14 #include <linux/kernel.h>
15 #include <linux/log2.h>
16 #include <linux/mfd/syscon.h>
17 #include <linux/mfd/syscon/xlnx-vcu.h>
18 #include <linux/module.h>
19 #include <linux/of.h>
20 #include <linux/platform_device.h>
21 #include <linux/pm_runtime.h>
22 #include <linux/regmap.h>
23 #include <linux/sizes.h>
24 #include <linux/slab.h>
25 #include <linux/videodev2.h>
26 #include <media/v4l2-ctrls.h>
27 #include <media/v4l2-device.h>
28 #include <media/v4l2-event.h>
29 #include <media/v4l2-ioctl.h>
30 #include <media/v4l2-mem2mem.h>
31 #include <media/videobuf2-dma-contig.h>
32 #include <media/videobuf2-v4l2.h>
33
34 #include "allegro-mail.h"
35 #include "nal-h264.h"
36 #include "nal-hevc.h"
37
38 /*
39  * Support up to 4k video streams. The hardware actually supports higher
40  * resolutions, which are specified in PG252 June 6, 2018 (H.264/H.265 Video
41  * Codec Unit v1.1) Chapter 3.
42  */
43 #define ALLEGRO_WIDTH_MIN 128
44 #define ALLEGRO_WIDTH_DEFAULT 1920
45 #define ALLEGRO_WIDTH_MAX 3840
46 #define ALLEGRO_HEIGHT_MIN 64
47 #define ALLEGRO_HEIGHT_DEFAULT 1080
48 #define ALLEGRO_HEIGHT_MAX 2160
49
50 #define ALLEGRO_FRAMERATE_DEFAULT ((struct v4l2_fract) { 30, 1 })
51
52 #define ALLEGRO_GOP_SIZE_DEFAULT 25
53 #define ALLEGRO_GOP_SIZE_MAX 1000
54
55 /*
56  * MCU Control Registers
57  *
58  * The Zynq UltraScale+ Devices Register Reference documents the registers
59  * with an offset of 0x9000, which equals the size of the SRAM and one page
60  * gap. The driver handles SRAM and registers separately and, therefore, is
61  * oblivious of the offset.
62  */
63 #define AL5_MCU_RESET                   0x0000
64 #define AL5_MCU_RESET_SOFT              BIT(0)
65 #define AL5_MCU_RESET_REGS              BIT(1)
66 #define AL5_MCU_RESET_MODE              0x0004
67 #define AL5_MCU_RESET_MODE_SLEEP        BIT(0)
68 #define AL5_MCU_RESET_MODE_HALT         BIT(1)
69 #define AL5_MCU_STA                     0x0008
70 #define AL5_MCU_STA_SLEEP               BIT(0)
71 #define AL5_MCU_WAKEUP                  0x000c
72
73 #define AL5_ICACHE_ADDR_OFFSET_MSB      0x0010
74 #define AL5_ICACHE_ADDR_OFFSET_LSB      0x0014
75 #define AL5_DCACHE_ADDR_OFFSET_MSB      0x0018
76 #define AL5_DCACHE_ADDR_OFFSET_LSB      0x001c
77
78 #define AL5_MCU_INTERRUPT               0x0100
79 #define AL5_ITC_CPU_IRQ_MSK             0x0104
80 #define AL5_ITC_CPU_IRQ_CLR             0x0108
81 #define AL5_ITC_CPU_IRQ_STA             0x010C
82 #define AL5_ITC_CPU_IRQ_STA_TRIGGERED   BIT(0)
83
84 #define AXI_ADDR_OFFSET_IP              0x0208
85
86 /*
87  * The MCU accesses the system memory with a 2G offset compared to CPU
88  * physical addresses.
89  */
90 #define MCU_CACHE_OFFSET SZ_2G
91
92 /*
93  * The driver needs to reserve some space at the beginning of capture buffers,
94  * because it needs to write SPS/PPS NAL units. The encoder writes the actual
95  * frame data after the offset.
96  */
97 #define ENCODER_STREAM_OFFSET SZ_128
98
99 #define SIZE_MACROBLOCK 16
100
101 /* Encoding options */
102 #define LOG2_MAX_FRAME_NUM              4
103 #define LOG2_MAX_PIC_ORDER_CNT          10
104 #define BETA_OFFSET_DIV_2               -1
105 #define TC_OFFSET_DIV_2                 -1
106
107 /*
108  * This control allows applications to explicitly disable the encoder buffer.
109  * This value is Allegro specific.
110  */
111 #define V4L2_CID_USER_ALLEGRO_ENCODER_BUFFER (V4L2_CID_USER_ALLEGRO_BASE + 0)
112
113 static int debug;
114 module_param(debug, int, 0644);
115 MODULE_PARM_DESC(debug, "Debug level (0-2)");
116
117 struct allegro_buffer {
118         void *vaddr;
119         dma_addr_t paddr;
120         size_t size;
121         struct list_head head;
122 };
123
124 struct allegro_dev;
125 struct allegro_channel;
126
127 struct allegro_mbox {
128         struct allegro_dev *dev;
129         unsigned int head;
130         unsigned int tail;
131         unsigned int data;
132         size_t size;
133         /* protect mailbox from simultaneous accesses */
134         struct mutex lock;
135 };
136
137 struct allegro_encoder_buffer {
138         unsigned int size;
139         unsigned int color_depth;
140         unsigned int num_cores;
141         unsigned int clk_rate;
142 };
143
144 struct allegro_dev {
145         struct v4l2_device v4l2_dev;
146         struct video_device video_dev;
147         struct v4l2_m2m_dev *m2m_dev;
148         struct platform_device *plat_dev;
149
150         /* mutex protecting vb2_queue structure */
151         struct mutex lock;
152
153         struct regmap *regmap;
154         struct regmap *sram;
155         struct regmap *settings;
156
157         struct clk *clk_core;
158         struct clk *clk_mcu;
159
160         const struct fw_info *fw_info;
161         struct allegro_buffer firmware;
162         struct allegro_buffer suballocator;
163         bool has_encoder_buffer;
164         struct allegro_encoder_buffer encoder_buffer;
165
166         struct completion init_complete;
167         bool initialized;
168
169         /* The mailbox interface */
170         struct allegro_mbox *mbox_command;
171         struct allegro_mbox *mbox_status;
172
173         /*
174          * The downstream driver limits the users to 64 users, thus I can use
175          * a bitfield for the user_ids that are in use. See also user_id in
176          * struct allegro_channel.
177          */
178         unsigned long channel_user_ids;
179         struct list_head channels;
180 };
181
182 static struct regmap_config allegro_regmap_config = {
183         .name = "regmap",
184         .reg_bits = 32,
185         .val_bits = 32,
186         .reg_stride = 4,
187         .max_register = 0xfff,
188         .cache_type = REGCACHE_NONE,
189 };
190
191 static struct regmap_config allegro_sram_config = {
192         .name = "sram",
193         .reg_bits = 32,
194         .val_bits = 32,
195         .reg_stride = 4,
196         .max_register = 0x7fff,
197         .cache_type = REGCACHE_NONE,
198 };
199
200 #define fh_to_channel(__fh) container_of(__fh, struct allegro_channel, fh)
201
202 struct allegro_channel {
203         struct allegro_dev *dev;
204         struct v4l2_fh fh;
205         struct v4l2_ctrl_handler ctrl_handler;
206
207         unsigned int width;
208         unsigned int height;
209         unsigned int stride;
210         struct v4l2_fract framerate;
211
212         enum v4l2_colorspace colorspace;
213         enum v4l2_ycbcr_encoding ycbcr_enc;
214         enum v4l2_quantization quantization;
215         enum v4l2_xfer_func xfer_func;
216
217         u32 pixelformat;
218         unsigned int sizeimage_raw;
219         unsigned int osequence;
220
221         u32 codec;
222         unsigned int sizeimage_encoded;
223         unsigned int csequence;
224
225         bool frame_rc_enable;
226         unsigned int bitrate;
227         unsigned int bitrate_peak;
228
229         struct allegro_buffer config_blob;
230
231         unsigned int log2_max_frame_num;
232         bool temporal_mvp_enable;
233
234         bool enable_loop_filter_across_tiles;
235         bool enable_loop_filter_across_slices;
236         bool enable_deblocking_filter_override;
237         bool enable_reordering;
238         bool dbf_ovr_en;
239
240         unsigned int num_ref_idx_l0;
241         unsigned int num_ref_idx_l1;
242
243         /* Maximum range for motion estimation */
244         int b_hrz_me_range;
245         int b_vrt_me_range;
246         int p_hrz_me_range;
247         int p_vrt_me_range;
248         /* Size limits of coding unit */
249         int min_cu_size;
250         int max_cu_size;
251         /* Size limits of transform unit */
252         int min_tu_size;
253         int max_tu_size;
254         int max_transfo_depth_intra;
255         int max_transfo_depth_inter;
256
257         struct v4l2_ctrl *mpeg_video_h264_profile;
258         struct v4l2_ctrl *mpeg_video_h264_level;
259         struct v4l2_ctrl *mpeg_video_h264_i_frame_qp;
260         struct v4l2_ctrl *mpeg_video_h264_max_qp;
261         struct v4l2_ctrl *mpeg_video_h264_min_qp;
262         struct v4l2_ctrl *mpeg_video_h264_p_frame_qp;
263         struct v4l2_ctrl *mpeg_video_h264_b_frame_qp;
264
265         struct v4l2_ctrl *mpeg_video_hevc_profile;
266         struct v4l2_ctrl *mpeg_video_hevc_level;
267         struct v4l2_ctrl *mpeg_video_hevc_tier;
268         struct v4l2_ctrl *mpeg_video_hevc_i_frame_qp;
269         struct v4l2_ctrl *mpeg_video_hevc_max_qp;
270         struct v4l2_ctrl *mpeg_video_hevc_min_qp;
271         struct v4l2_ctrl *mpeg_video_hevc_p_frame_qp;
272         struct v4l2_ctrl *mpeg_video_hevc_b_frame_qp;
273
274         struct v4l2_ctrl *mpeg_video_frame_rc_enable;
275         struct { /* video bitrate mode control cluster */
276                 struct v4l2_ctrl *mpeg_video_bitrate_mode;
277                 struct v4l2_ctrl *mpeg_video_bitrate;
278                 struct v4l2_ctrl *mpeg_video_bitrate_peak;
279         };
280         struct v4l2_ctrl *mpeg_video_cpb_size;
281         struct v4l2_ctrl *mpeg_video_gop_size;
282
283         struct v4l2_ctrl *encoder_buffer;
284
285         /* user_id is used to identify the channel during CREATE_CHANNEL */
286         /* not sure, what to set here and if this is actually required */
287         int user_id;
288         /* channel_id is set by the mcu and used by all later commands */
289         int mcu_channel_id;
290
291         struct list_head buffers_reference;
292         struct list_head buffers_intermediate;
293
294         struct list_head source_shadow_list;
295         struct list_head stream_shadow_list;
296         /* protect shadow lists of buffers passed to firmware */
297         struct mutex shadow_list_lock;
298
299         struct list_head list;
300         struct completion completion;
301
302         unsigned int error;
303 };
304
305 static inline int
306 allegro_channel_get_i_frame_qp(struct allegro_channel *channel)
307 {
308         if (channel->codec == V4L2_PIX_FMT_HEVC)
309                 return v4l2_ctrl_g_ctrl(channel->mpeg_video_hevc_i_frame_qp);
310         else
311                 return v4l2_ctrl_g_ctrl(channel->mpeg_video_h264_i_frame_qp);
312 }
313
314 static inline int
315 allegro_channel_get_p_frame_qp(struct allegro_channel *channel)
316 {
317         if (channel->codec == V4L2_PIX_FMT_HEVC)
318                 return v4l2_ctrl_g_ctrl(channel->mpeg_video_hevc_p_frame_qp);
319         else
320                 return v4l2_ctrl_g_ctrl(channel->mpeg_video_h264_p_frame_qp);
321 }
322
323 static inline int
324 allegro_channel_get_b_frame_qp(struct allegro_channel *channel)
325 {
326         if (channel->codec == V4L2_PIX_FMT_HEVC)
327                 return v4l2_ctrl_g_ctrl(channel->mpeg_video_hevc_b_frame_qp);
328         else
329                 return v4l2_ctrl_g_ctrl(channel->mpeg_video_h264_b_frame_qp);
330 }
331
332 static inline int
333 allegro_channel_get_min_qp(struct allegro_channel *channel)
334 {
335         if (channel->codec == V4L2_PIX_FMT_HEVC)
336                 return v4l2_ctrl_g_ctrl(channel->mpeg_video_hevc_min_qp);
337         else
338                 return v4l2_ctrl_g_ctrl(channel->mpeg_video_h264_min_qp);
339 }
340
341 static inline int
342 allegro_channel_get_max_qp(struct allegro_channel *channel)
343 {
344         if (channel->codec == V4L2_PIX_FMT_HEVC)
345                 return v4l2_ctrl_g_ctrl(channel->mpeg_video_hevc_max_qp);
346         else
347                 return v4l2_ctrl_g_ctrl(channel->mpeg_video_h264_max_qp);
348 }
349
350 struct allegro_m2m_buffer {
351         struct v4l2_m2m_buffer buf;
352         struct list_head head;
353 };
354
355 #define to_allegro_m2m_buffer(__buf) \
356         container_of(__buf, struct allegro_m2m_buffer, buf)
357
358 struct fw_info {
359         unsigned int id;
360         unsigned int id_codec;
361         char *version;
362         unsigned int mailbox_cmd;
363         unsigned int mailbox_status;
364         size_t mailbox_size;
365         enum mcu_msg_version mailbox_version;
366         size_t suballocator_size;
367 };
368
369 static const struct fw_info supported_firmware[] = {
370         {
371                 .id = 18296,
372                 .id_codec = 96272,
373                 .version = "v2018.2",
374                 .mailbox_cmd = 0x7800,
375                 .mailbox_status = 0x7c00,
376                 .mailbox_size = 0x400 - 0x8,
377                 .mailbox_version = MCU_MSG_VERSION_2018_2,
378                 .suballocator_size = SZ_16M,
379         }, {
380                 .id = 14680,
381                 .id_codec = 126572,
382                 .version = "v2019.2",
383                 .mailbox_cmd = 0x7000,
384                 .mailbox_status = 0x7800,
385                 .mailbox_size = 0x800 - 0x8,
386                 .mailbox_version = MCU_MSG_VERSION_2019_2,
387                 .suballocator_size = SZ_32M,
388         },
389 };
390
391 static inline u32 to_mcu_addr(struct allegro_dev *dev, dma_addr_t phys)
392 {
393         if (upper_32_bits(phys) || (lower_32_bits(phys) & MCU_CACHE_OFFSET))
394                 v4l2_warn(&dev->v4l2_dev,
395                           "address %pad is outside mcu window\n", &phys);
396
397         return lower_32_bits(phys) | MCU_CACHE_OFFSET;
398 }
399
400 static inline u32 to_mcu_size(struct allegro_dev *dev, size_t size)
401 {
402         return lower_32_bits(size);
403 }
404
405 static inline u32 to_codec_addr(struct allegro_dev *dev, dma_addr_t phys)
406 {
407         if (upper_32_bits(phys))
408                 v4l2_warn(&dev->v4l2_dev,
409                           "address %pad cannot be used by codec\n", &phys);
410
411         return lower_32_bits(phys);
412 }
413
414 static inline u64 ptr_to_u64(const void *ptr)
415 {
416         return (uintptr_t)ptr;
417 }
418
419 /* Helper functions for channel and user operations */
420
421 static unsigned long allegro_next_user_id(struct allegro_dev *dev)
422 {
423         if (dev->channel_user_ids == ~0UL)
424                 return -EBUSY;
425
426         return ffz(dev->channel_user_ids);
427 }
428
429 static struct allegro_channel *
430 allegro_find_channel_by_user_id(struct allegro_dev *dev,
431                                 unsigned int user_id)
432 {
433         struct allegro_channel *channel;
434
435         list_for_each_entry(channel, &dev->channels, list) {
436                 if (channel->user_id == user_id)
437                         return channel;
438         }
439
440         return ERR_PTR(-EINVAL);
441 }
442
443 static struct allegro_channel *
444 allegro_find_channel_by_channel_id(struct allegro_dev *dev,
445                                    unsigned int channel_id)
446 {
447         struct allegro_channel *channel;
448
449         list_for_each_entry(channel, &dev->channels, list) {
450                 if (channel->mcu_channel_id == channel_id)
451                         return channel;
452         }
453
454         return ERR_PTR(-EINVAL);
455 }
456
457 static inline bool channel_exists(struct allegro_channel *channel)
458 {
459         return channel->mcu_channel_id != -1;
460 }
461
462 #define AL_ERROR                        0x80
463 #define AL_ERR_INIT_FAILED              0x81
464 #define AL_ERR_NO_FRAME_DECODED         0x82
465 #define AL_ERR_RESOLUTION_CHANGE        0x85
466 #define AL_ERR_NO_MEMORY                0x87
467 #define AL_ERR_STREAM_OVERFLOW          0x88
468 #define AL_ERR_TOO_MANY_SLICES          0x89
469 #define AL_ERR_BUF_NOT_READY            0x8c
470 #define AL_ERR_NO_CHANNEL_AVAILABLE     0x8d
471 #define AL_ERR_RESOURCE_UNAVAILABLE     0x8e
472 #define AL_ERR_NOT_ENOUGH_CORES         0x8f
473 #define AL_ERR_REQUEST_MALFORMED        0x90
474 #define AL_ERR_CMD_NOT_ALLOWED          0x91
475 #define AL_ERR_INVALID_CMD_VALUE        0x92
476
477 static inline const char *allegro_err_to_string(unsigned int err)
478 {
479         switch (err) {
480         case AL_ERR_INIT_FAILED:
481                 return "initialization failed";
482         case AL_ERR_NO_FRAME_DECODED:
483                 return "no frame decoded";
484         case AL_ERR_RESOLUTION_CHANGE:
485                 return "resolution change";
486         case AL_ERR_NO_MEMORY:
487                 return "out of memory";
488         case AL_ERR_STREAM_OVERFLOW:
489                 return "stream buffer overflow";
490         case AL_ERR_TOO_MANY_SLICES:
491                 return "too many slices";
492         case AL_ERR_BUF_NOT_READY:
493                 return "buffer not ready";
494         case AL_ERR_NO_CHANNEL_AVAILABLE:
495                 return "no channel available";
496         case AL_ERR_RESOURCE_UNAVAILABLE:
497                 return "resource unavailable";
498         case AL_ERR_NOT_ENOUGH_CORES:
499                 return "not enough cores";
500         case AL_ERR_REQUEST_MALFORMED:
501                 return "request malformed";
502         case AL_ERR_CMD_NOT_ALLOWED:
503                 return "command not allowed";
504         case AL_ERR_INVALID_CMD_VALUE:
505                 return "invalid command value";
506         case AL_ERROR:
507         default:
508                 return "unknown error";
509         }
510 }
511
512 static unsigned int estimate_stream_size(unsigned int width,
513                                          unsigned int height)
514 {
515         unsigned int offset = ENCODER_STREAM_OFFSET;
516         unsigned int num_blocks = DIV_ROUND_UP(width, SIZE_MACROBLOCK) *
517                                         DIV_ROUND_UP(height, SIZE_MACROBLOCK);
518         unsigned int pcm_size = SZ_256;
519         unsigned int partition_table = SZ_256;
520
521         return round_up(offset + num_blocks * pcm_size + partition_table, 32);
522 }
523
524 static enum v4l2_mpeg_video_h264_level
525 select_minimum_h264_level(unsigned int width, unsigned int height)
526 {
527         unsigned int pic_width_in_mb = DIV_ROUND_UP(width, SIZE_MACROBLOCK);
528         unsigned int frame_height_in_mb = DIV_ROUND_UP(height, SIZE_MACROBLOCK);
529         unsigned int frame_size_in_mb = pic_width_in_mb * frame_height_in_mb;
530         enum v4l2_mpeg_video_h264_level level = V4L2_MPEG_VIDEO_H264_LEVEL_4_0;
531
532         /*
533          * The level limits are specified in Rec. ITU-T H.264 Annex A.3.1 and
534          * also specify limits regarding bit rate and CBP size. Only approximate
535          * the levels using the frame size.
536          *
537          * Level 5.1 allows up to 4k video resolution.
538          */
539         if (frame_size_in_mb <= 99)
540                 level = V4L2_MPEG_VIDEO_H264_LEVEL_1_0;
541         else if (frame_size_in_mb <= 396)
542                 level = V4L2_MPEG_VIDEO_H264_LEVEL_1_1;
543         else if (frame_size_in_mb <= 792)
544                 level = V4L2_MPEG_VIDEO_H264_LEVEL_2_1;
545         else if (frame_size_in_mb <= 1620)
546                 level = V4L2_MPEG_VIDEO_H264_LEVEL_2_2;
547         else if (frame_size_in_mb <= 3600)
548                 level = V4L2_MPEG_VIDEO_H264_LEVEL_3_1;
549         else if (frame_size_in_mb <= 5120)
550                 level = V4L2_MPEG_VIDEO_H264_LEVEL_3_2;
551         else if (frame_size_in_mb <= 8192)
552                 level = V4L2_MPEG_VIDEO_H264_LEVEL_4_0;
553         else if (frame_size_in_mb <= 8704)
554                 level = V4L2_MPEG_VIDEO_H264_LEVEL_4_2;
555         else if (frame_size_in_mb <= 22080)
556                 level = V4L2_MPEG_VIDEO_H264_LEVEL_5_0;
557         else
558                 level = V4L2_MPEG_VIDEO_H264_LEVEL_5_1;
559
560         return level;
561 }
562
563 static unsigned int h264_maximum_bitrate(enum v4l2_mpeg_video_h264_level level)
564 {
565         switch (level) {
566         case V4L2_MPEG_VIDEO_H264_LEVEL_1_0:
567                 return 64000;
568         case V4L2_MPEG_VIDEO_H264_LEVEL_1B:
569                 return 128000;
570         case V4L2_MPEG_VIDEO_H264_LEVEL_1_1:
571                 return 192000;
572         case V4L2_MPEG_VIDEO_H264_LEVEL_1_2:
573                 return 384000;
574         case V4L2_MPEG_VIDEO_H264_LEVEL_1_3:
575                 return 768000;
576         case V4L2_MPEG_VIDEO_H264_LEVEL_2_0:
577                 return 2000000;
578         case V4L2_MPEG_VIDEO_H264_LEVEL_2_1:
579                 return 4000000;
580         case V4L2_MPEG_VIDEO_H264_LEVEL_2_2:
581                 return 4000000;
582         case V4L2_MPEG_VIDEO_H264_LEVEL_3_0:
583                 return 10000000;
584         case V4L2_MPEG_VIDEO_H264_LEVEL_3_1:
585                 return 14000000;
586         case V4L2_MPEG_VIDEO_H264_LEVEL_3_2:
587                 return 20000000;
588         case V4L2_MPEG_VIDEO_H264_LEVEL_4_0:
589                 return 20000000;
590         case V4L2_MPEG_VIDEO_H264_LEVEL_4_1:
591                 return 50000000;
592         case V4L2_MPEG_VIDEO_H264_LEVEL_4_2:
593                 return 50000000;
594         case V4L2_MPEG_VIDEO_H264_LEVEL_5_0:
595                 return 135000000;
596         case V4L2_MPEG_VIDEO_H264_LEVEL_5_1:
597         default:
598                 return 240000000;
599         }
600 }
601
602 static unsigned int h264_maximum_cpb_size(enum v4l2_mpeg_video_h264_level level)
603 {
604         switch (level) {
605         case V4L2_MPEG_VIDEO_H264_LEVEL_1_0:
606                 return 175;
607         case V4L2_MPEG_VIDEO_H264_LEVEL_1B:
608                 return 350;
609         case V4L2_MPEG_VIDEO_H264_LEVEL_1_1:
610                 return 500;
611         case V4L2_MPEG_VIDEO_H264_LEVEL_1_2:
612                 return 1000;
613         case V4L2_MPEG_VIDEO_H264_LEVEL_1_3:
614                 return 2000;
615         case V4L2_MPEG_VIDEO_H264_LEVEL_2_0:
616                 return 2000;
617         case V4L2_MPEG_VIDEO_H264_LEVEL_2_1:
618                 return 4000;
619         case V4L2_MPEG_VIDEO_H264_LEVEL_2_2:
620                 return 4000;
621         case V4L2_MPEG_VIDEO_H264_LEVEL_3_0:
622                 return 10000;
623         case V4L2_MPEG_VIDEO_H264_LEVEL_3_1:
624                 return 14000;
625         case V4L2_MPEG_VIDEO_H264_LEVEL_3_2:
626                 return 20000;
627         case V4L2_MPEG_VIDEO_H264_LEVEL_4_0:
628                 return 25000;
629         case V4L2_MPEG_VIDEO_H264_LEVEL_4_1:
630                 return 62500;
631         case V4L2_MPEG_VIDEO_H264_LEVEL_4_2:
632                 return 62500;
633         case V4L2_MPEG_VIDEO_H264_LEVEL_5_0:
634                 return 135000;
635         case V4L2_MPEG_VIDEO_H264_LEVEL_5_1:
636         default:
637                 return 240000;
638         }
639 }
640
641 static enum v4l2_mpeg_video_hevc_level
642 select_minimum_hevc_level(unsigned int width, unsigned int height)
643 {
644         unsigned int luma_picture_size = width * height;
645         enum v4l2_mpeg_video_hevc_level level;
646
647         if (luma_picture_size <= 36864)
648                 level = V4L2_MPEG_VIDEO_HEVC_LEVEL_1;
649         else if (luma_picture_size <= 122880)
650                 level = V4L2_MPEG_VIDEO_HEVC_LEVEL_2;
651         else if (luma_picture_size <= 245760)
652                 level = V4L2_MPEG_VIDEO_HEVC_LEVEL_2_1;
653         else if (luma_picture_size <= 552960)
654                 level = V4L2_MPEG_VIDEO_HEVC_LEVEL_3;
655         else if (luma_picture_size <= 983040)
656                 level = V4L2_MPEG_VIDEO_HEVC_LEVEL_3_1;
657         else if (luma_picture_size <= 2228224)
658                 level = V4L2_MPEG_VIDEO_HEVC_LEVEL_4;
659         else if (luma_picture_size <= 8912896)
660                 level = V4L2_MPEG_VIDEO_HEVC_LEVEL_5;
661         else
662                 level = V4L2_MPEG_VIDEO_HEVC_LEVEL_6;
663
664         return level;
665 }
666
667 static unsigned int hevc_maximum_bitrate(enum v4l2_mpeg_video_hevc_level level)
668 {
669         /*
670          * See Rec. ITU-T H.265 v5 (02/2018), A.4.2 Profile-specific level
671          * limits for the video profiles.
672          */
673         switch (level) {
674         case V4L2_MPEG_VIDEO_HEVC_LEVEL_1:
675                 return 128;
676         case V4L2_MPEG_VIDEO_HEVC_LEVEL_2:
677                 return 1500;
678         case V4L2_MPEG_VIDEO_HEVC_LEVEL_2_1:
679                 return 3000;
680         case V4L2_MPEG_VIDEO_HEVC_LEVEL_3:
681                 return 6000;
682         case V4L2_MPEG_VIDEO_HEVC_LEVEL_3_1:
683                 return 10000;
684         case V4L2_MPEG_VIDEO_HEVC_LEVEL_4:
685                 return 12000;
686         case V4L2_MPEG_VIDEO_HEVC_LEVEL_4_1:
687                 return 20000;
688         case V4L2_MPEG_VIDEO_HEVC_LEVEL_5:
689                 return 25000;
690         default:
691         case V4L2_MPEG_VIDEO_HEVC_LEVEL_5_1:
692                 return 40000;
693         }
694 }
695
696 static unsigned int hevc_maximum_cpb_size(enum v4l2_mpeg_video_hevc_level level)
697 {
698         switch (level) {
699         case V4L2_MPEG_VIDEO_HEVC_LEVEL_1:
700                 return 350;
701         case V4L2_MPEG_VIDEO_HEVC_LEVEL_2:
702                 return 1500;
703         case V4L2_MPEG_VIDEO_HEVC_LEVEL_2_1:
704                 return 3000;
705         case V4L2_MPEG_VIDEO_HEVC_LEVEL_3:
706                 return 6000;
707         case V4L2_MPEG_VIDEO_HEVC_LEVEL_3_1:
708                 return 10000;
709         case V4L2_MPEG_VIDEO_HEVC_LEVEL_4:
710                 return 12000;
711         case V4L2_MPEG_VIDEO_HEVC_LEVEL_4_1:
712                 return 20000;
713         case V4L2_MPEG_VIDEO_HEVC_LEVEL_5:
714                 return 25000;
715         default:
716         case V4L2_MPEG_VIDEO_HEVC_LEVEL_5_1:
717                 return 40000;
718         }
719 }
720
721 static const struct fw_info *
722 allegro_get_firmware_info(struct allegro_dev *dev,
723                           const struct firmware *fw,
724                           const struct firmware *fw_codec)
725 {
726         int i;
727         unsigned int id = fw->size;
728         unsigned int id_codec = fw_codec->size;
729
730         for (i = 0; i < ARRAY_SIZE(supported_firmware); i++)
731                 if (supported_firmware[i].id == id &&
732                     supported_firmware[i].id_codec == id_codec)
733                         return &supported_firmware[i];
734
735         return NULL;
736 }
737
738 /*
739  * Buffers that are used internally by the MCU.
740  */
741
742 static int allegro_alloc_buffer(struct allegro_dev *dev,
743                                 struct allegro_buffer *buffer, size_t size)
744 {
745         buffer->vaddr = dma_alloc_coherent(&dev->plat_dev->dev, size,
746                                            &buffer->paddr, GFP_KERNEL);
747         if (!buffer->vaddr)
748                 return -ENOMEM;
749         buffer->size = size;
750
751         return 0;
752 }
753
754 static void allegro_free_buffer(struct allegro_dev *dev,
755                                 struct allegro_buffer *buffer)
756 {
757         if (buffer->vaddr) {
758                 dma_free_coherent(&dev->plat_dev->dev, buffer->size,
759                                   buffer->vaddr, buffer->paddr);
760                 buffer->vaddr = NULL;
761                 buffer->size = 0;
762         }
763 }
764
765 /*
766  * Mailbox interface to send messages to the MCU.
767  */
768
769 static void allegro_mcu_interrupt(struct allegro_dev *dev);
770 static void allegro_handle_message(struct allegro_dev *dev,
771                                    union mcu_msg_response *msg);
772
773 static struct allegro_mbox *allegro_mbox_init(struct allegro_dev *dev,
774                                               unsigned int base, size_t size)
775 {
776         struct allegro_mbox *mbox;
777
778         mbox = devm_kmalloc(&dev->plat_dev->dev, sizeof(*mbox), GFP_KERNEL);
779         if (!mbox)
780                 return ERR_PTR(-ENOMEM);
781
782         mbox->dev = dev;
783
784         mbox->head = base;
785         mbox->tail = base + 0x4;
786         mbox->data = base + 0x8;
787         mbox->size = size;
788         mutex_init(&mbox->lock);
789
790         regmap_write(dev->sram, mbox->head, 0);
791         regmap_write(dev->sram, mbox->tail, 0);
792
793         return mbox;
794 }
795
796 static int allegro_mbox_write(struct allegro_mbox *mbox,
797                               const u32 *src, size_t size)
798 {
799         struct regmap *sram = mbox->dev->sram;
800         unsigned int tail;
801         size_t size_no_wrap;
802         int err = 0;
803         int stride = regmap_get_reg_stride(sram);
804
805         if (!src)
806                 return -EINVAL;
807
808         if (size > mbox->size)
809                 return -EINVAL;
810
811         mutex_lock(&mbox->lock);
812         regmap_read(sram, mbox->tail, &tail);
813         if (tail > mbox->size) {
814                 err = -EIO;
815                 goto out;
816         }
817         size_no_wrap = min(size, mbox->size - (size_t)tail);
818         regmap_bulk_write(sram, mbox->data + tail,
819                           src, size_no_wrap / stride);
820         regmap_bulk_write(sram, mbox->data,
821                           src + (size_no_wrap / sizeof(*src)),
822                           (size - size_no_wrap) / stride);
823         regmap_write(sram, mbox->tail, (tail + size) % mbox->size);
824
825 out:
826         mutex_unlock(&mbox->lock);
827
828         return err;
829 }
830
831 static ssize_t allegro_mbox_read(struct allegro_mbox *mbox,
832                                  u32 *dst, size_t nbyte)
833 {
834         struct {
835                 u16 length;
836                 u16 type;
837         } __attribute__ ((__packed__)) *header;
838         struct regmap *sram = mbox->dev->sram;
839         unsigned int head;
840         ssize_t size;
841         size_t body_no_wrap;
842         int stride = regmap_get_reg_stride(sram);
843
844         regmap_read(sram, mbox->head, &head);
845         if (head > mbox->size)
846                 return -EIO;
847
848         /* Assume that the header does not wrap. */
849         regmap_bulk_read(sram, mbox->data + head,
850                          dst, sizeof(*header) / stride);
851         header = (void *)dst;
852         size = header->length + sizeof(*header);
853         if (size > mbox->size || size & 0x3)
854                 return -EIO;
855         if (size > nbyte)
856                 return -EINVAL;
857
858         /*
859          * The message might wrap within the mailbox. If the message does not
860          * wrap, the first read will read the entire message, otherwise the
861          * first read will read message until the end of the mailbox and the
862          * second read will read the remaining bytes from the beginning of the
863          * mailbox.
864          *
865          * Skip the header, as was already read to get the size of the body.
866          */
867         body_no_wrap = min((size_t)header->length,
868                            (size_t)(mbox->size - (head + sizeof(*header))));
869         regmap_bulk_read(sram, mbox->data + head + sizeof(*header),
870                          dst + (sizeof(*header) / sizeof(*dst)),
871                          body_no_wrap / stride);
872         regmap_bulk_read(sram, mbox->data,
873                          dst + (sizeof(*header) + body_no_wrap) / sizeof(*dst),
874                          (header->length - body_no_wrap) / stride);
875
876         regmap_write(sram, mbox->head, (head + size) % mbox->size);
877
878         return size;
879 }
880
881 /**
882  * allegro_mbox_send() - Send a message via the mailbox
883  * @mbox: the mailbox which is used to send the message
884  * @msg: the message to send
885  */
886 static int allegro_mbox_send(struct allegro_mbox *mbox, void *msg)
887 {
888         struct allegro_dev *dev = mbox->dev;
889         ssize_t size;
890         int err;
891         u32 *tmp;
892
893         tmp = kzalloc(mbox->size, GFP_KERNEL);
894         if (!tmp) {
895                 err = -ENOMEM;
896                 goto out;
897         }
898
899         size = allegro_encode_mail(tmp, msg);
900
901         err = allegro_mbox_write(mbox, tmp, size);
902         kfree(tmp);
903         if (err)
904                 goto out;
905
906         allegro_mcu_interrupt(dev);
907
908 out:
909         return err;
910 }
911
912 /**
913  * allegro_mbox_notify() - Notify the mailbox about a new message
914  * @mbox: The allegro_mbox to notify
915  */
916 static void allegro_mbox_notify(struct allegro_mbox *mbox)
917 {
918         struct allegro_dev *dev = mbox->dev;
919         union mcu_msg_response *msg;
920         ssize_t size;
921         u32 *tmp;
922         int err;
923
924         msg = kmalloc(sizeof(*msg), GFP_KERNEL);
925         if (!msg)
926                 return;
927
928         msg->header.version = dev->fw_info->mailbox_version;
929
930         tmp = kmalloc(mbox->size, GFP_KERNEL);
931         if (!tmp)
932                 goto out;
933
934         size = allegro_mbox_read(mbox, tmp, mbox->size);
935         if (size < 0)
936                 goto out;
937
938         err = allegro_decode_mail(msg, tmp);
939         if (err)
940                 goto out;
941
942         allegro_handle_message(dev, msg);
943
944 out:
945         kfree(tmp);
946         kfree(msg);
947 }
948
949 static int allegro_encoder_buffer_init(struct allegro_dev *dev,
950                                        struct allegro_encoder_buffer *buffer)
951 {
952         int err;
953         struct regmap *settings = dev->settings;
954         unsigned int supports_10_bit;
955         unsigned int memory_depth;
956         unsigned int num_cores;
957         unsigned int color_depth;
958         unsigned long clk_rate;
959
960         /* We don't support the encoder buffer pre Firmware version 2019.2 */
961         if (dev->fw_info->mailbox_version < MCU_MSG_VERSION_2019_2)
962                 return -ENODEV;
963
964         if (!settings)
965                 return -EINVAL;
966
967         err = regmap_read(settings, VCU_ENC_COLOR_DEPTH, &supports_10_bit);
968         if (err < 0)
969                 return err;
970         err = regmap_read(settings, VCU_MEMORY_DEPTH, &memory_depth);
971         if (err < 0)
972                 return err;
973         err = regmap_read(settings, VCU_NUM_CORE, &num_cores);
974         if (err < 0)
975                 return err;
976
977         clk_rate = clk_get_rate(dev->clk_core);
978         if (clk_rate == 0)
979                 return -EINVAL;
980
981         color_depth = supports_10_bit ? 10 : 8;
982         /* The firmware expects the encoder buffer size in bits. */
983         buffer->size = color_depth * 32 * memory_depth;
984         buffer->color_depth = color_depth;
985         buffer->num_cores = num_cores;
986         buffer->clk_rate = clk_rate;
987
988         v4l2_dbg(1, debug, &dev->v4l2_dev,
989                  "using %d bits encoder buffer with %d-bit color depth\n",
990                  buffer->size, color_depth);
991
992         return 0;
993 }
994
995 static void allegro_mcu_send_init(struct allegro_dev *dev,
996                                   dma_addr_t suballoc_dma, size_t suballoc_size)
997 {
998         struct mcu_msg_init_request msg;
999
1000         memset(&msg, 0, sizeof(msg));
1001
1002         msg.header.type = MCU_MSG_TYPE_INIT;
1003         msg.header.version = dev->fw_info->mailbox_version;
1004
1005         msg.suballoc_dma = to_mcu_addr(dev, suballoc_dma);
1006         msg.suballoc_size = to_mcu_size(dev, suballoc_size);
1007
1008         if (dev->has_encoder_buffer) {
1009                 msg.encoder_buffer_size = dev->encoder_buffer.size;
1010                 msg.encoder_buffer_color_depth = dev->encoder_buffer.color_depth;
1011                 msg.num_cores = dev->encoder_buffer.num_cores;
1012                 msg.clk_rate = dev->encoder_buffer.clk_rate;
1013         } else {
1014                 msg.encoder_buffer_size = -1;
1015                 msg.encoder_buffer_color_depth = -1;
1016                 msg.num_cores = -1;
1017                 msg.clk_rate = -1;
1018         }
1019
1020         allegro_mbox_send(dev->mbox_command, &msg);
1021 }
1022
1023 static u32 v4l2_pixelformat_to_mcu_format(u32 pixelformat)
1024 {
1025         switch (pixelformat) {
1026         case V4L2_PIX_FMT_NV12:
1027                 /* AL_420_8BITS: 0x100 -> NV12, 0x88 -> 8 bit */
1028                 return 0x100 | 0x88;
1029         default:
1030                 return -EINVAL;
1031         }
1032 }
1033
1034 static u32 v4l2_colorspace_to_mcu_colorspace(enum v4l2_colorspace colorspace)
1035 {
1036         switch (colorspace) {
1037         case V4L2_COLORSPACE_REC709:
1038                 return 2;
1039         case V4L2_COLORSPACE_SMPTE170M:
1040                 return 3;
1041         case V4L2_COLORSPACE_SMPTE240M:
1042                 return 4;
1043         case V4L2_COLORSPACE_SRGB:
1044                 return 7;
1045         default:
1046                 /* UNKNOWN */
1047                 return 0;
1048         }
1049 }
1050
1051 static u8 v4l2_profile_to_mcu_profile(enum v4l2_mpeg_video_h264_profile profile)
1052 {
1053         switch (profile) {
1054         case V4L2_MPEG_VIDEO_H264_PROFILE_BASELINE:
1055         default:
1056                 return 66;
1057         }
1058 }
1059
1060 static u16 v4l2_level_to_mcu_level(enum v4l2_mpeg_video_h264_level level)
1061 {
1062         switch (level) {
1063         case V4L2_MPEG_VIDEO_H264_LEVEL_1_0:
1064                 return 10;
1065         case V4L2_MPEG_VIDEO_H264_LEVEL_1_1:
1066                 return 11;
1067         case V4L2_MPEG_VIDEO_H264_LEVEL_1_2:
1068                 return 12;
1069         case V4L2_MPEG_VIDEO_H264_LEVEL_1_3:
1070                 return 13;
1071         case V4L2_MPEG_VIDEO_H264_LEVEL_2_0:
1072                 return 20;
1073         case V4L2_MPEG_VIDEO_H264_LEVEL_2_1:
1074                 return 21;
1075         case V4L2_MPEG_VIDEO_H264_LEVEL_2_2:
1076                 return 22;
1077         case V4L2_MPEG_VIDEO_H264_LEVEL_3_0:
1078                 return 30;
1079         case V4L2_MPEG_VIDEO_H264_LEVEL_3_1:
1080                 return 31;
1081         case V4L2_MPEG_VIDEO_H264_LEVEL_3_2:
1082                 return 32;
1083         case V4L2_MPEG_VIDEO_H264_LEVEL_4_0:
1084                 return 40;
1085         case V4L2_MPEG_VIDEO_H264_LEVEL_4_1:
1086                 return 41;
1087         case V4L2_MPEG_VIDEO_H264_LEVEL_4_2:
1088                 return 42;
1089         case V4L2_MPEG_VIDEO_H264_LEVEL_5_0:
1090                 return 50;
1091         case V4L2_MPEG_VIDEO_H264_LEVEL_5_1:
1092         default:
1093                 return 51;
1094         }
1095 }
1096
1097 static u8 hevc_profile_to_mcu_profile(enum v4l2_mpeg_video_hevc_profile profile)
1098 {
1099         switch (profile) {
1100         default:
1101         case V4L2_MPEG_VIDEO_HEVC_PROFILE_MAIN:
1102                 return 1;
1103         case V4L2_MPEG_VIDEO_HEVC_PROFILE_MAIN_10:
1104                 return 2;
1105         case V4L2_MPEG_VIDEO_HEVC_PROFILE_MAIN_STILL_PICTURE:
1106                 return 3;
1107         }
1108 }
1109
1110 static u16 hevc_level_to_mcu_level(enum v4l2_mpeg_video_hevc_level level)
1111 {
1112         switch (level) {
1113         case V4L2_MPEG_VIDEO_HEVC_LEVEL_1:
1114                 return 10;
1115         case V4L2_MPEG_VIDEO_HEVC_LEVEL_2:
1116                 return 20;
1117         case V4L2_MPEG_VIDEO_HEVC_LEVEL_2_1:
1118                 return 21;
1119         case V4L2_MPEG_VIDEO_HEVC_LEVEL_3:
1120                 return 30;
1121         case V4L2_MPEG_VIDEO_HEVC_LEVEL_3_1:
1122                 return 31;
1123         case V4L2_MPEG_VIDEO_HEVC_LEVEL_4:
1124                 return 40;
1125         case V4L2_MPEG_VIDEO_HEVC_LEVEL_4_1:
1126                 return 41;
1127         case V4L2_MPEG_VIDEO_HEVC_LEVEL_5:
1128                 return 50;
1129         default:
1130         case V4L2_MPEG_VIDEO_HEVC_LEVEL_5_1:
1131                 return 51;
1132         }
1133 }
1134
1135 static u8 hevc_tier_to_mcu_tier(enum v4l2_mpeg_video_hevc_tier tier)
1136 {
1137         switch (tier) {
1138         default:
1139         case V4L2_MPEG_VIDEO_HEVC_TIER_MAIN:
1140                 return 0;
1141         case V4L2_MPEG_VIDEO_HEVC_TIER_HIGH:
1142                 return 1;
1143         }
1144 }
1145
1146 static u32
1147 v4l2_bitrate_mode_to_mcu_mode(enum v4l2_mpeg_video_bitrate_mode mode)
1148 {
1149         switch (mode) {
1150         case V4L2_MPEG_VIDEO_BITRATE_MODE_VBR:
1151                 return 2;
1152         case V4L2_MPEG_VIDEO_BITRATE_MODE_CBR:
1153         default:
1154                 return 1;
1155         }
1156 }
1157
1158 static u32 v4l2_cpb_size_to_mcu(unsigned int cpb_size, unsigned int bitrate)
1159 {
1160         unsigned int cpb_size_kbit;
1161         unsigned int bitrate_kbps;
1162
1163         /*
1164          * The mcu expects the CPB size in units of a 90 kHz clock, but the
1165          * channel follows the V4L2_CID_MPEG_VIDEO_H264_CPB_SIZE and stores
1166          * the CPB size in kilobytes.
1167          */
1168         cpb_size_kbit = cpb_size * BITS_PER_BYTE;
1169         bitrate_kbps = bitrate / 1000;
1170
1171         return (cpb_size_kbit * 90000) / bitrate_kbps;
1172 }
1173
1174 static s16 get_qp_delta(int minuend, int subtrahend)
1175 {
1176         if (minuend == subtrahend)
1177                 return -1;
1178         else
1179                 return minuend - subtrahend;
1180 }
1181
1182 static u32 allegro_channel_get_entropy_mode(struct allegro_channel *channel)
1183 {
1184 #define ALLEGRO_ENTROPY_MODE_CAVLC 0
1185 #define ALLEGRO_ENTROPY_MODE_CABAC 1
1186
1187         /* HEVC always uses CABAC, but this has to be explicitly set */
1188         if (channel->codec == V4L2_PIX_FMT_HEVC)
1189                 return ALLEGRO_ENTROPY_MODE_CABAC;
1190
1191         return ALLEGRO_ENTROPY_MODE_CAVLC;
1192 }
1193
1194 static int fill_create_channel_param(struct allegro_channel *channel,
1195                                      struct create_channel_param *param)
1196 {
1197         int i_frame_qp = allegro_channel_get_i_frame_qp(channel);
1198         int p_frame_qp = allegro_channel_get_p_frame_qp(channel);
1199         int b_frame_qp = allegro_channel_get_b_frame_qp(channel);
1200         int bitrate_mode = v4l2_ctrl_g_ctrl(channel->mpeg_video_bitrate_mode);
1201         unsigned int cpb_size = v4l2_ctrl_g_ctrl(channel->mpeg_video_cpb_size);
1202
1203         param->width = channel->width;
1204         param->height = channel->height;
1205         param->format = v4l2_pixelformat_to_mcu_format(channel->pixelformat);
1206         param->colorspace =
1207                 v4l2_colorspace_to_mcu_colorspace(channel->colorspace);
1208         param->src_mode = 0x0;
1209
1210         param->codec = channel->codec;
1211         if (channel->codec == V4L2_PIX_FMT_H264) {
1212                 enum v4l2_mpeg_video_h264_profile profile;
1213                 enum v4l2_mpeg_video_h264_level level;
1214
1215                 profile = v4l2_ctrl_g_ctrl(channel->mpeg_video_h264_profile);
1216                 level = v4l2_ctrl_g_ctrl(channel->mpeg_video_h264_level);
1217
1218                 param->profile = v4l2_profile_to_mcu_profile(profile);
1219                 param->constraint_set_flags = BIT(1);
1220                 param->level = v4l2_level_to_mcu_level(level);
1221         } else {
1222                 enum v4l2_mpeg_video_hevc_profile profile;
1223                 enum v4l2_mpeg_video_hevc_level level;
1224                 enum v4l2_mpeg_video_hevc_tier tier;
1225
1226                 profile = v4l2_ctrl_g_ctrl(channel->mpeg_video_hevc_profile);
1227                 level = v4l2_ctrl_g_ctrl(channel->mpeg_video_hevc_level);
1228                 tier = v4l2_ctrl_g_ctrl(channel->mpeg_video_hevc_tier);
1229
1230                 param->profile = hevc_profile_to_mcu_profile(profile);
1231                 param->level = hevc_level_to_mcu_level(level);
1232                 param->tier = hevc_tier_to_mcu_tier(tier);
1233         }
1234
1235         param->log2_max_poc = LOG2_MAX_PIC_ORDER_CNT;
1236         param->log2_max_frame_num = channel->log2_max_frame_num;
1237         param->temporal_mvp_enable = channel->temporal_mvp_enable;
1238
1239         param->dbf_ovr_en = channel->dbf_ovr_en;
1240         param->override_lf = channel->enable_deblocking_filter_override;
1241         param->enable_reordering = channel->enable_reordering;
1242         param->entropy_mode = allegro_channel_get_entropy_mode(channel);
1243         param->rdo_cost_mode = 1;
1244         param->custom_lda = 1;
1245         param->lf = 1;
1246         param->lf_x_tile = channel->enable_loop_filter_across_tiles;
1247         param->lf_x_slice = channel->enable_loop_filter_across_slices;
1248
1249         param->src_bit_depth = 8;
1250
1251         param->beta_offset = BETA_OFFSET_DIV_2;
1252         param->tc_offset = TC_OFFSET_DIV_2;
1253         param->num_slices = 1;
1254         param->me_range[0] = channel->b_hrz_me_range;
1255         param->me_range[1] = channel->b_vrt_me_range;
1256         param->me_range[2] = channel->p_hrz_me_range;
1257         param->me_range[3] = channel->p_vrt_me_range;
1258         param->max_cu_size = channel->max_cu_size;
1259         param->min_cu_size = channel->min_cu_size;
1260         param->max_tu_size = channel->max_tu_size;
1261         param->min_tu_size = channel->min_tu_size;
1262         param->max_transfo_depth_intra = channel->max_transfo_depth_intra;
1263         param->max_transfo_depth_inter = channel->max_transfo_depth_inter;
1264
1265         param->encoder_buffer_enabled = v4l2_ctrl_g_ctrl(channel->encoder_buffer);
1266         param->encoder_buffer_offset = 0;
1267
1268         param->rate_control_mode = channel->frame_rc_enable ?
1269                 v4l2_bitrate_mode_to_mcu_mode(bitrate_mode) : 0;
1270
1271         param->cpb_size = v4l2_cpb_size_to_mcu(cpb_size, channel->bitrate_peak);
1272         /* Shall be ]0;cpb_size in 90 kHz units]. Use maximum value. */
1273         param->initial_rem_delay = param->cpb_size;
1274         param->framerate = DIV_ROUND_UP(channel->framerate.numerator,
1275                                         channel->framerate.denominator);
1276         param->clk_ratio = channel->framerate.denominator == 1001 ? 1001 : 1000;
1277         param->target_bitrate = channel->bitrate;
1278         param->max_bitrate = channel->bitrate_peak;
1279         param->initial_qp = i_frame_qp;
1280         param->min_qp = allegro_channel_get_min_qp(channel);
1281         param->max_qp = allegro_channel_get_max_qp(channel);
1282         param->ip_delta = get_qp_delta(i_frame_qp, p_frame_qp);
1283         param->pb_delta = get_qp_delta(p_frame_qp, b_frame_qp);
1284         param->golden_ref = 0;
1285         param->golden_delta = 2;
1286         param->golden_ref_frequency = 10;
1287         param->rate_control_option = 0x00000000;
1288
1289         param->num_pixel = channel->width + channel->height;
1290         param->max_psnr = 4200;
1291         param->max_pixel_value = 255;
1292
1293         param->gop_ctrl_mode = 0x00000002;
1294         param->freq_idr = v4l2_ctrl_g_ctrl(channel->mpeg_video_gop_size);
1295         param->freq_lt = 0;
1296         param->gdr_mode = 0x00000000;
1297         param->gop_length = v4l2_ctrl_g_ctrl(channel->mpeg_video_gop_size);
1298         param->subframe_latency = 0x00000000;
1299
1300         param->lda_factors[0] = 51;
1301         param->lda_factors[1] = 90;
1302         param->lda_factors[2] = 151;
1303         param->lda_factors[3] = 151;
1304         param->lda_factors[4] = 151;
1305         param->lda_factors[5] = 151;
1306
1307         param->max_num_merge_cand = 5;
1308
1309         return 0;
1310 }
1311
1312 static int allegro_mcu_send_create_channel(struct allegro_dev *dev,
1313                                            struct allegro_channel *channel)
1314 {
1315         struct mcu_msg_create_channel msg;
1316         struct allegro_buffer *blob = &channel->config_blob;
1317         struct create_channel_param param;
1318         size_t size;
1319
1320         memset(&param, 0, sizeof(param));
1321         fill_create_channel_param(channel, &param);
1322         allegro_alloc_buffer(dev, blob, sizeof(struct create_channel_param));
1323         param.version = dev->fw_info->mailbox_version;
1324         size = allegro_encode_config_blob(blob->vaddr, &param);
1325
1326         memset(&msg, 0, sizeof(msg));
1327
1328         msg.header.type = MCU_MSG_TYPE_CREATE_CHANNEL;
1329         msg.header.version = dev->fw_info->mailbox_version;
1330
1331         msg.user_id = channel->user_id;
1332
1333         msg.blob = blob->vaddr;
1334         msg.blob_size = size;
1335         msg.blob_mcu_addr = to_mcu_addr(dev, blob->paddr);
1336
1337         allegro_mbox_send(dev->mbox_command, &msg);
1338
1339         return 0;
1340 }
1341
1342 static int allegro_mcu_send_destroy_channel(struct allegro_dev *dev,
1343                                             struct allegro_channel *channel)
1344 {
1345         struct mcu_msg_destroy_channel msg;
1346
1347         memset(&msg, 0, sizeof(msg));
1348
1349         msg.header.type = MCU_MSG_TYPE_DESTROY_CHANNEL;
1350         msg.header.version = dev->fw_info->mailbox_version;
1351
1352         msg.channel_id = channel->mcu_channel_id;
1353
1354         allegro_mbox_send(dev->mbox_command, &msg);
1355
1356         return 0;
1357 }
1358
1359 static int allegro_mcu_send_put_stream_buffer(struct allegro_dev *dev,
1360                                               struct allegro_channel *channel,
1361                                               dma_addr_t paddr,
1362                                               unsigned long size,
1363                                               u64 dst_handle)
1364 {
1365         struct mcu_msg_put_stream_buffer msg;
1366
1367         memset(&msg, 0, sizeof(msg));
1368
1369         msg.header.type = MCU_MSG_TYPE_PUT_STREAM_BUFFER;
1370         msg.header.version = dev->fw_info->mailbox_version;
1371
1372         msg.channel_id = channel->mcu_channel_id;
1373         msg.dma_addr = to_codec_addr(dev, paddr);
1374         msg.mcu_addr = to_mcu_addr(dev, paddr);
1375         msg.size = size;
1376         msg.offset = ENCODER_STREAM_OFFSET;
1377         /* copied to mcu_msg_encode_frame_response */
1378         msg.dst_handle = dst_handle;
1379
1380         allegro_mbox_send(dev->mbox_command, &msg);
1381
1382         return 0;
1383 }
1384
1385 static int allegro_mcu_send_encode_frame(struct allegro_dev *dev,
1386                                          struct allegro_channel *channel,
1387                                          dma_addr_t src_y, dma_addr_t src_uv,
1388                                          u64 src_handle)
1389 {
1390         struct mcu_msg_encode_frame msg;
1391         bool use_encoder_buffer = v4l2_ctrl_g_ctrl(channel->encoder_buffer);
1392
1393         memset(&msg, 0, sizeof(msg));
1394
1395         msg.header.type = MCU_MSG_TYPE_ENCODE_FRAME;
1396         msg.header.version = dev->fw_info->mailbox_version;
1397
1398         msg.channel_id = channel->mcu_channel_id;
1399         msg.encoding_options = AL_OPT_FORCE_LOAD;
1400         if (use_encoder_buffer)
1401                 msg.encoding_options |= AL_OPT_USE_L2;
1402         msg.pps_qp = 26; /* qp are relative to 26 */
1403         msg.user_param = 0; /* copied to mcu_msg_encode_frame_response */
1404         /* src_handle is copied to mcu_msg_encode_frame_response */
1405         msg.src_handle = src_handle;
1406         msg.src_y = to_codec_addr(dev, src_y);
1407         msg.src_uv = to_codec_addr(dev, src_uv);
1408         msg.stride = channel->stride;
1409
1410         allegro_mbox_send(dev->mbox_command, &msg);
1411
1412         return 0;
1413 }
1414
1415 static int allegro_mcu_wait_for_init_timeout(struct allegro_dev *dev,
1416                                              unsigned long timeout_ms)
1417 {
1418         unsigned long tmo;
1419
1420         tmo = wait_for_completion_timeout(&dev->init_complete,
1421                                           msecs_to_jiffies(timeout_ms));
1422         if (tmo == 0)
1423                 return -ETIMEDOUT;
1424
1425         reinit_completion(&dev->init_complete);
1426         return 0;
1427 }
1428
1429 static int allegro_mcu_push_buffer_internal(struct allegro_channel *channel,
1430                                             enum mcu_msg_type type)
1431 {
1432         struct allegro_dev *dev = channel->dev;
1433         struct mcu_msg_push_buffers_internal *msg;
1434         struct mcu_msg_push_buffers_internal_buffer *buffer;
1435         unsigned int num_buffers = 0;
1436         size_t size;
1437         struct allegro_buffer *al_buffer;
1438         struct list_head *list;
1439         int err;
1440
1441         switch (type) {
1442         case MCU_MSG_TYPE_PUSH_BUFFER_REFERENCE:
1443                 list = &channel->buffers_reference;
1444                 break;
1445         case MCU_MSG_TYPE_PUSH_BUFFER_INTERMEDIATE:
1446                 list = &channel->buffers_intermediate;
1447                 break;
1448         default:
1449                 return -EINVAL;
1450         }
1451
1452         list_for_each_entry(al_buffer, list, head)
1453                 num_buffers++;
1454         size = struct_size(msg, buffer, num_buffers);
1455
1456         msg = kmalloc(size, GFP_KERNEL);
1457         if (!msg)
1458                 return -ENOMEM;
1459
1460         msg->header.type = type;
1461         msg->header.version = dev->fw_info->mailbox_version;
1462
1463         msg->channel_id = channel->mcu_channel_id;
1464         msg->num_buffers = num_buffers;
1465
1466         buffer = msg->buffer;
1467         list_for_each_entry(al_buffer, list, head) {
1468                 buffer->dma_addr = to_codec_addr(dev, al_buffer->paddr);
1469                 buffer->mcu_addr = to_mcu_addr(dev, al_buffer->paddr);
1470                 buffer->size = to_mcu_size(dev, al_buffer->size);
1471                 buffer++;
1472         }
1473
1474         err = allegro_mbox_send(dev->mbox_command, msg);
1475
1476         kfree(msg);
1477         return err;
1478 }
1479
1480 static int allegro_mcu_push_buffer_intermediate(struct allegro_channel *channel)
1481 {
1482         enum mcu_msg_type type = MCU_MSG_TYPE_PUSH_BUFFER_INTERMEDIATE;
1483
1484         return allegro_mcu_push_buffer_internal(channel, type);
1485 }
1486
1487 static int allegro_mcu_push_buffer_reference(struct allegro_channel *channel)
1488 {
1489         enum mcu_msg_type type = MCU_MSG_TYPE_PUSH_BUFFER_REFERENCE;
1490
1491         return allegro_mcu_push_buffer_internal(channel, type);
1492 }
1493
1494 static int allocate_buffers_internal(struct allegro_channel *channel,
1495                                      struct list_head *list,
1496                                      size_t n, size_t size)
1497 {
1498         struct allegro_dev *dev = channel->dev;
1499         unsigned int i;
1500         int err;
1501         struct allegro_buffer *buffer, *tmp;
1502
1503         for (i = 0; i < n; i++) {
1504                 buffer = kmalloc(sizeof(*buffer), GFP_KERNEL);
1505                 if (!buffer) {
1506                         err = -ENOMEM;
1507                         goto err;
1508                 }
1509                 INIT_LIST_HEAD(&buffer->head);
1510
1511                 err = allegro_alloc_buffer(dev, buffer, size);
1512                 if (err)
1513                         goto err;
1514                 list_add(&buffer->head, list);
1515         }
1516
1517         return 0;
1518
1519 err:
1520         list_for_each_entry_safe(buffer, tmp, list, head) {
1521                 list_del(&buffer->head);
1522                 allegro_free_buffer(dev, buffer);
1523                 kfree(buffer);
1524         }
1525         return err;
1526 }
1527
1528 static void destroy_buffers_internal(struct allegro_channel *channel,
1529                                      struct list_head *list)
1530 {
1531         struct allegro_dev *dev = channel->dev;
1532         struct allegro_buffer *buffer, *tmp;
1533
1534         list_for_each_entry_safe(buffer, tmp, list, head) {
1535                 list_del(&buffer->head);
1536                 allegro_free_buffer(dev, buffer);
1537                 kfree(buffer);
1538         }
1539 }
1540
1541 static void destroy_reference_buffers(struct allegro_channel *channel)
1542 {
1543         return destroy_buffers_internal(channel, &channel->buffers_reference);
1544 }
1545
1546 static void destroy_intermediate_buffers(struct allegro_channel *channel)
1547 {
1548         return destroy_buffers_internal(channel,
1549                                         &channel->buffers_intermediate);
1550 }
1551
1552 static int allocate_intermediate_buffers(struct allegro_channel *channel,
1553                                          size_t n, size_t size)
1554 {
1555         return allocate_buffers_internal(channel,
1556                                          &channel->buffers_intermediate,
1557                                          n, size);
1558 }
1559
1560 static int allocate_reference_buffers(struct allegro_channel *channel,
1561                                       size_t n, size_t size)
1562 {
1563         return allocate_buffers_internal(channel,
1564                                          &channel->buffers_reference,
1565                                          n, PAGE_ALIGN(size));
1566 }
1567
1568 static ssize_t allegro_h264_write_sps(struct allegro_channel *channel,
1569                                       void *dest, size_t n)
1570 {
1571         struct allegro_dev *dev = channel->dev;
1572         struct nal_h264_sps *sps;
1573         ssize_t size;
1574         unsigned int size_mb = SIZE_MACROBLOCK;
1575         /* Calculation of crop units in Rec. ITU-T H.264 (04/2017) p. 76 */
1576         unsigned int crop_unit_x = 2;
1577         unsigned int crop_unit_y = 2;
1578         enum v4l2_mpeg_video_h264_profile profile;
1579         enum v4l2_mpeg_video_h264_level level;
1580         unsigned int cpb_size;
1581         unsigned int cpb_size_scale;
1582
1583         sps = kzalloc(sizeof(*sps), GFP_KERNEL);
1584         if (!sps)
1585                 return -ENOMEM;
1586
1587         profile = v4l2_ctrl_g_ctrl(channel->mpeg_video_h264_profile);
1588         level = v4l2_ctrl_g_ctrl(channel->mpeg_video_h264_level);
1589
1590         sps->profile_idc = nal_h264_profile(profile);
1591         sps->constraint_set0_flag = 0;
1592         sps->constraint_set1_flag = 1;
1593         sps->constraint_set2_flag = 0;
1594         sps->constraint_set3_flag = 0;
1595         sps->constraint_set4_flag = 0;
1596         sps->constraint_set5_flag = 0;
1597         sps->level_idc = nal_h264_level(level);
1598         sps->seq_parameter_set_id = 0;
1599         sps->log2_max_frame_num_minus4 = LOG2_MAX_FRAME_NUM - 4;
1600         sps->pic_order_cnt_type = 0;
1601         sps->log2_max_pic_order_cnt_lsb_minus4 = LOG2_MAX_PIC_ORDER_CNT - 4;
1602         sps->max_num_ref_frames = 3;
1603         sps->gaps_in_frame_num_value_allowed_flag = 0;
1604         sps->pic_width_in_mbs_minus1 =
1605                 DIV_ROUND_UP(channel->width, size_mb) - 1;
1606         sps->pic_height_in_map_units_minus1 =
1607                 DIV_ROUND_UP(channel->height, size_mb) - 1;
1608         sps->frame_mbs_only_flag = 1;
1609         sps->mb_adaptive_frame_field_flag = 0;
1610         sps->direct_8x8_inference_flag = 1;
1611         sps->frame_cropping_flag =
1612                 (channel->width % size_mb) || (channel->height % size_mb);
1613         if (sps->frame_cropping_flag) {
1614                 sps->crop_left = 0;
1615                 sps->crop_right = (round_up(channel->width, size_mb) - channel->width) / crop_unit_x;
1616                 sps->crop_top = 0;
1617                 sps->crop_bottom = (round_up(channel->height, size_mb) - channel->height) / crop_unit_y;
1618         }
1619         sps->vui_parameters_present_flag = 1;
1620         sps->vui.aspect_ratio_info_present_flag = 0;
1621         sps->vui.overscan_info_present_flag = 0;
1622
1623         sps->vui.video_signal_type_present_flag = 1;
1624         sps->vui.video_format = 5; /* unspecified */
1625         sps->vui.video_full_range_flag = nal_h264_full_range(channel->quantization);
1626         sps->vui.colour_description_present_flag = 1;
1627         sps->vui.colour_primaries = nal_h264_color_primaries(channel->colorspace);
1628         sps->vui.transfer_characteristics =
1629                 nal_h264_transfer_characteristics(channel->colorspace, channel->xfer_func);
1630         sps->vui.matrix_coefficients =
1631                 nal_h264_matrix_coeffs(channel->colorspace, channel->ycbcr_enc);
1632
1633         sps->vui.chroma_loc_info_present_flag = 1;
1634         sps->vui.chroma_sample_loc_type_top_field = 0;
1635         sps->vui.chroma_sample_loc_type_bottom_field = 0;
1636
1637         sps->vui.timing_info_present_flag = 1;
1638         sps->vui.num_units_in_tick = channel->framerate.denominator;
1639         sps->vui.time_scale = 2 * channel->framerate.numerator;
1640
1641         sps->vui.fixed_frame_rate_flag = 1;
1642         sps->vui.nal_hrd_parameters_present_flag = 0;
1643         sps->vui.vcl_hrd_parameters_present_flag = 1;
1644         sps->vui.vcl_hrd_parameters.cpb_cnt_minus1 = 0;
1645         /* See Rec. ITU-T H.264 (04/2017) p. 410 E-53 */
1646         sps->vui.vcl_hrd_parameters.bit_rate_scale =
1647                 ffs(channel->bitrate_peak) - 6;
1648         sps->vui.vcl_hrd_parameters.bit_rate_value_minus1[0] =
1649                 channel->bitrate_peak / (1 << (6 + sps->vui.vcl_hrd_parameters.bit_rate_scale)) - 1;
1650         /* See Rec. ITU-T H.264 (04/2017) p. 410 E-54 */
1651         cpb_size = v4l2_ctrl_g_ctrl(channel->mpeg_video_cpb_size);
1652         cpb_size_scale = ffs(cpb_size) - 4;
1653         sps->vui.vcl_hrd_parameters.cpb_size_scale = cpb_size_scale;
1654         sps->vui.vcl_hrd_parameters.cpb_size_value_minus1[0] =
1655                 (cpb_size * 1000) / (1 << (4 + cpb_size_scale)) - 1;
1656         sps->vui.vcl_hrd_parameters.cbr_flag[0] =
1657                 !v4l2_ctrl_g_ctrl(channel->mpeg_video_frame_rc_enable);
1658         sps->vui.vcl_hrd_parameters.initial_cpb_removal_delay_length_minus1 = 31;
1659         sps->vui.vcl_hrd_parameters.cpb_removal_delay_length_minus1 = 31;
1660         sps->vui.vcl_hrd_parameters.dpb_output_delay_length_minus1 = 31;
1661         sps->vui.vcl_hrd_parameters.time_offset_length = 0;
1662         sps->vui.low_delay_hrd_flag = 0;
1663         sps->vui.pic_struct_present_flag = 1;
1664         sps->vui.bitstream_restriction_flag = 0;
1665
1666         size = nal_h264_write_sps(&dev->plat_dev->dev, dest, n, sps);
1667
1668         kfree(sps);
1669
1670         return size;
1671 }
1672
1673 static ssize_t allegro_h264_write_pps(struct allegro_channel *channel,
1674                                       void *dest, size_t n)
1675 {
1676         struct allegro_dev *dev = channel->dev;
1677         struct nal_h264_pps *pps;
1678         ssize_t size;
1679
1680         pps = kzalloc(sizeof(*pps), GFP_KERNEL);
1681         if (!pps)
1682                 return -ENOMEM;
1683
1684         pps->pic_parameter_set_id = 0;
1685         pps->seq_parameter_set_id = 0;
1686         pps->entropy_coding_mode_flag = 0;
1687         pps->bottom_field_pic_order_in_frame_present_flag = 0;
1688         pps->num_slice_groups_minus1 = 0;
1689         pps->num_ref_idx_l0_default_active_minus1 = channel->num_ref_idx_l0 - 1;
1690         pps->num_ref_idx_l1_default_active_minus1 = channel->num_ref_idx_l1 - 1;
1691         pps->weighted_pred_flag = 0;
1692         pps->weighted_bipred_idc = 0;
1693         pps->pic_init_qp_minus26 = 0;
1694         pps->pic_init_qs_minus26 = 0;
1695         pps->chroma_qp_index_offset = 0;
1696         pps->deblocking_filter_control_present_flag = 1;
1697         pps->constrained_intra_pred_flag = 0;
1698         pps->redundant_pic_cnt_present_flag = 0;
1699         pps->transform_8x8_mode_flag = 0;
1700         pps->pic_scaling_matrix_present_flag = 0;
1701         pps->second_chroma_qp_index_offset = 0;
1702
1703         size = nal_h264_write_pps(&dev->plat_dev->dev, dest, n, pps);
1704
1705         kfree(pps);
1706
1707         return size;
1708 }
1709
1710 static void allegro_channel_eos_event(struct allegro_channel *channel)
1711 {
1712         const struct v4l2_event eos_event = {
1713                 .type = V4L2_EVENT_EOS
1714         };
1715
1716         v4l2_event_queue_fh(&channel->fh, &eos_event);
1717 }
1718
1719 static ssize_t allegro_hevc_write_vps(struct allegro_channel *channel,
1720                                       void *dest, size_t n)
1721 {
1722         struct allegro_dev *dev = channel->dev;
1723         struct nal_hevc_vps *vps;
1724         struct nal_hevc_profile_tier_level *ptl;
1725         ssize_t size;
1726         unsigned int num_ref_frames = channel->num_ref_idx_l0;
1727         s32 profile = v4l2_ctrl_g_ctrl(channel->mpeg_video_hevc_profile);
1728         s32 level = v4l2_ctrl_g_ctrl(channel->mpeg_video_hevc_level);
1729         s32 tier = v4l2_ctrl_g_ctrl(channel->mpeg_video_hevc_tier);
1730
1731         vps = kzalloc(sizeof(*vps), GFP_KERNEL);
1732         if (!vps)
1733                 return -ENOMEM;
1734
1735         vps->base_layer_internal_flag = 1;
1736         vps->base_layer_available_flag = 1;
1737         vps->temporal_id_nesting_flag = 1;
1738
1739         ptl = &vps->profile_tier_level;
1740         ptl->general_profile_idc = nal_hevc_profile(profile);
1741         ptl->general_profile_compatibility_flag[ptl->general_profile_idc] = 1;
1742         ptl->general_tier_flag = nal_hevc_tier(tier);
1743         ptl->general_progressive_source_flag = 1;
1744         ptl->general_frame_only_constraint_flag = 1;
1745         ptl->general_level_idc = nal_hevc_level(level);
1746
1747         vps->sub_layer_ordering_info_present_flag = 0;
1748         vps->max_dec_pic_buffering_minus1[0] = num_ref_frames;
1749         vps->max_num_reorder_pics[0] = num_ref_frames;
1750
1751         size = nal_hevc_write_vps(&dev->plat_dev->dev, dest, n, vps);
1752
1753         kfree(vps);
1754
1755         return size;
1756 }
1757
1758 static ssize_t allegro_hevc_write_sps(struct allegro_channel *channel,
1759                                       void *dest, size_t n)
1760 {
1761         struct allegro_dev *dev = channel->dev;
1762         struct nal_hevc_sps *sps;
1763         struct nal_hevc_profile_tier_level *ptl;
1764         struct nal_hevc_vui_parameters *vui;
1765         struct nal_hevc_hrd_parameters *hrd;
1766         ssize_t size;
1767         unsigned int cpb_size;
1768         unsigned int num_ref_frames = channel->num_ref_idx_l0;
1769         s32 profile = v4l2_ctrl_g_ctrl(channel->mpeg_video_hevc_profile);
1770         s32 level = v4l2_ctrl_g_ctrl(channel->mpeg_video_hevc_level);
1771         s32 tier = v4l2_ctrl_g_ctrl(channel->mpeg_video_hevc_tier);
1772
1773         sps = kzalloc(sizeof(*sps), GFP_KERNEL);
1774         if (!sps)
1775                 return -ENOMEM;
1776
1777         sps->temporal_id_nesting_flag = 1;
1778
1779         ptl = &sps->profile_tier_level;
1780         ptl->general_profile_idc = nal_hevc_profile(profile);
1781         ptl->general_profile_compatibility_flag[ptl->general_profile_idc] = 1;
1782         ptl->general_tier_flag = nal_hevc_tier(tier);
1783         ptl->general_progressive_source_flag = 1;
1784         ptl->general_frame_only_constraint_flag = 1;
1785         ptl->general_level_idc = nal_hevc_level(level);
1786
1787         sps->seq_parameter_set_id = 0;
1788         sps->chroma_format_idc = 1; /* Only 4:2:0 sampling supported */
1789         sps->pic_width_in_luma_samples = round_up(channel->width, 8);
1790         sps->pic_height_in_luma_samples = round_up(channel->height, 8);
1791         sps->conf_win_right_offset =
1792                 sps->pic_width_in_luma_samples - channel->width;
1793         sps->conf_win_bottom_offset =
1794                 sps->pic_height_in_luma_samples - channel->height;
1795         sps->conformance_window_flag =
1796                 sps->conf_win_right_offset || sps->conf_win_bottom_offset;
1797
1798         sps->log2_max_pic_order_cnt_lsb_minus4 = LOG2_MAX_PIC_ORDER_CNT - 4;
1799
1800         sps->sub_layer_ordering_info_present_flag = 1;
1801         sps->max_dec_pic_buffering_minus1[0] = num_ref_frames;
1802         sps->max_num_reorder_pics[0] = num_ref_frames;
1803
1804         sps->log2_min_luma_coding_block_size_minus3 =
1805                 channel->min_cu_size - 3;
1806         sps->log2_diff_max_min_luma_coding_block_size =
1807                 channel->max_cu_size - channel->min_cu_size;
1808         sps->log2_min_luma_transform_block_size_minus2 =
1809                 channel->min_tu_size - 2;
1810         sps->log2_diff_max_min_luma_transform_block_size =
1811                 channel->max_tu_size - channel->min_tu_size;
1812         sps->max_transform_hierarchy_depth_intra =
1813                 channel->max_transfo_depth_intra;
1814         sps->max_transform_hierarchy_depth_inter =
1815                 channel->max_transfo_depth_inter;
1816
1817         sps->sps_temporal_mvp_enabled_flag = channel->temporal_mvp_enable;
1818         sps->strong_intra_smoothing_enabled_flag = channel->max_cu_size > 4;
1819
1820         sps->vui_parameters_present_flag = 1;
1821         vui = &sps->vui;
1822
1823         vui->video_signal_type_present_flag = 1;
1824         vui->video_format = 5; /* unspecified */
1825         vui->video_full_range_flag = nal_hevc_full_range(channel->quantization);
1826         vui->colour_description_present_flag = 1;
1827         vui->colour_primaries = nal_hevc_color_primaries(channel->colorspace);
1828         vui->transfer_characteristics = nal_hevc_transfer_characteristics(channel->colorspace,
1829                                                                           channel->xfer_func);
1830         vui->matrix_coeffs = nal_hevc_matrix_coeffs(channel->colorspace, channel->ycbcr_enc);
1831
1832         vui->chroma_loc_info_present_flag = 1;
1833         vui->chroma_sample_loc_type_top_field = 0;
1834         vui->chroma_sample_loc_type_bottom_field = 0;
1835
1836         vui->vui_timing_info_present_flag = 1;
1837         vui->vui_num_units_in_tick = channel->framerate.denominator;
1838         vui->vui_time_scale = channel->framerate.numerator;
1839
1840         vui->bitstream_restriction_flag = 1;
1841         vui->motion_vectors_over_pic_boundaries_flag = 1;
1842         vui->restricted_ref_pic_lists_flag = 1;
1843         vui->log2_max_mv_length_horizontal = 15;
1844         vui->log2_max_mv_length_vertical = 15;
1845
1846         vui->vui_hrd_parameters_present_flag = 1;
1847         hrd = &vui->nal_hrd_parameters;
1848         hrd->vcl_hrd_parameters_present_flag = 1;
1849
1850         hrd->initial_cpb_removal_delay_length_minus1 = 31;
1851         hrd->au_cpb_removal_delay_length_minus1 = 30;
1852         hrd->dpb_output_delay_length_minus1 = 30;
1853
1854         hrd->bit_rate_scale = ffs(channel->bitrate_peak) - 6;
1855         hrd->vcl_hrd[0].bit_rate_value_minus1[0] =
1856                 (channel->bitrate_peak >> (6 + hrd->bit_rate_scale)) - 1;
1857
1858         cpb_size = v4l2_ctrl_g_ctrl(channel->mpeg_video_cpb_size) * 1000;
1859         hrd->cpb_size_scale = ffs(cpb_size) - 4;
1860         hrd->vcl_hrd[0].cpb_size_value_minus1[0] = (cpb_size >> (4 + hrd->cpb_size_scale)) - 1;
1861
1862         hrd->vcl_hrd[0].cbr_flag[0] = !v4l2_ctrl_g_ctrl(channel->mpeg_video_frame_rc_enable);
1863
1864         size = nal_hevc_write_sps(&dev->plat_dev->dev, dest, n, sps);
1865
1866         kfree(sps);
1867
1868         return size;
1869 }
1870
1871 static ssize_t allegro_hevc_write_pps(struct allegro_channel *channel,
1872                                       struct mcu_msg_encode_frame_response *msg,
1873                                       void *dest, size_t n)
1874 {
1875         struct allegro_dev *dev = channel->dev;
1876         struct nal_hevc_pps *pps;
1877         ssize_t size;
1878         int i;
1879
1880         pps = kzalloc(sizeof(*pps), GFP_KERNEL);
1881         if (!pps)
1882                 return -ENOMEM;
1883
1884         pps->pps_pic_parameter_set_id = 0;
1885         pps->pps_seq_parameter_set_id = 0;
1886
1887         if (msg->num_column > 1 || msg->num_row > 1) {
1888                 pps->tiles_enabled_flag = 1;
1889                 pps->num_tile_columns_minus1 = msg->num_column - 1;
1890                 pps->num_tile_rows_minus1 = msg->num_row - 1;
1891
1892                 for (i = 0; i < msg->num_column; i++)
1893                         pps->column_width_minus1[i] = msg->tile_width[i] - 1;
1894
1895                 for (i = 0; i < msg->num_row; i++)
1896                         pps->row_height_minus1[i] = msg->tile_height[i] - 1;
1897         }
1898
1899         pps->loop_filter_across_tiles_enabled_flag =
1900                 channel->enable_loop_filter_across_tiles;
1901         pps->pps_loop_filter_across_slices_enabled_flag =
1902                 channel->enable_loop_filter_across_slices;
1903         pps->deblocking_filter_control_present_flag = 1;
1904         pps->deblocking_filter_override_enabled_flag =
1905                 channel->enable_deblocking_filter_override;
1906         pps->pps_beta_offset_div2 = BETA_OFFSET_DIV_2;
1907         pps->pps_tc_offset_div2 = TC_OFFSET_DIV_2;
1908
1909         pps->lists_modification_present_flag = channel->enable_reordering;
1910
1911         size = nal_hevc_write_pps(&dev->plat_dev->dev, dest, n, pps);
1912
1913         kfree(pps);
1914
1915         return size;
1916 }
1917
1918 static u64 allegro_put_buffer(struct allegro_channel *channel,
1919                               struct list_head *list,
1920                               struct vb2_v4l2_buffer *buffer)
1921 {
1922         struct v4l2_m2m_buffer *b = container_of(buffer,
1923                                                  struct v4l2_m2m_buffer, vb);
1924         struct allegro_m2m_buffer *shadow = to_allegro_m2m_buffer(b);
1925
1926         mutex_lock(&channel->shadow_list_lock);
1927         list_add_tail(&shadow->head, list);
1928         mutex_unlock(&channel->shadow_list_lock);
1929
1930         return ptr_to_u64(buffer);
1931 }
1932
1933 static struct vb2_v4l2_buffer *
1934 allegro_get_buffer(struct allegro_channel *channel,
1935                    struct list_head *list, u64 handle)
1936 {
1937         struct allegro_m2m_buffer *shadow, *tmp;
1938         struct vb2_v4l2_buffer *buffer = NULL;
1939
1940         mutex_lock(&channel->shadow_list_lock);
1941         list_for_each_entry_safe(shadow, tmp, list, head) {
1942                 if (handle == ptr_to_u64(&shadow->buf.vb)) {
1943                         buffer = &shadow->buf.vb;
1944                         list_del_init(&shadow->head);
1945                         break;
1946                 }
1947         }
1948         mutex_unlock(&channel->shadow_list_lock);
1949
1950         return buffer;
1951 }
1952
1953 static void allegro_channel_finish_frame(struct allegro_channel *channel,
1954                 struct mcu_msg_encode_frame_response *msg)
1955 {
1956         struct allegro_dev *dev = channel->dev;
1957         struct vb2_v4l2_buffer *src_buf;
1958         struct vb2_v4l2_buffer *dst_buf;
1959         struct {
1960                 u32 offset;
1961                 u32 size;
1962         } *partition;
1963         enum vb2_buffer_state state = VB2_BUF_STATE_ERROR;
1964         char *curr;
1965         ssize_t len;
1966         ssize_t free;
1967
1968         src_buf = allegro_get_buffer(channel, &channel->source_shadow_list,
1969                                      msg->src_handle);
1970         if (!src_buf)
1971                 v4l2_warn(&dev->v4l2_dev,
1972                           "channel %d: invalid source buffer\n",
1973                           channel->mcu_channel_id);
1974
1975         dst_buf = allegro_get_buffer(channel, &channel->stream_shadow_list,
1976                                      msg->dst_handle);
1977         if (!dst_buf)
1978                 v4l2_warn(&dev->v4l2_dev,
1979                           "channel %d: invalid stream buffer\n",
1980                           channel->mcu_channel_id);
1981
1982         if (!src_buf || !dst_buf)
1983                 goto err;
1984
1985         if (v4l2_m2m_is_last_draining_src_buf(channel->fh.m2m_ctx, src_buf)) {
1986                 dst_buf->flags |= V4L2_BUF_FLAG_LAST;
1987                 allegro_channel_eos_event(channel);
1988                 v4l2_m2m_mark_stopped(channel->fh.m2m_ctx);
1989         }
1990
1991         dst_buf->sequence = channel->csequence++;
1992
1993         if (msg->error_code & AL_ERROR) {
1994                 v4l2_err(&dev->v4l2_dev,
1995                          "channel %d: failed to encode frame: %s (%x)\n",
1996                          channel->mcu_channel_id,
1997                          allegro_err_to_string(msg->error_code),
1998                          msg->error_code);
1999                 goto err;
2000         }
2001
2002         if (msg->partition_table_size != 1) {
2003                 v4l2_warn(&dev->v4l2_dev,
2004                           "channel %d: only handling first partition table entry (%d entries)\n",
2005                           channel->mcu_channel_id, msg->partition_table_size);
2006         }
2007
2008         if (msg->partition_table_offset +
2009             msg->partition_table_size * sizeof(*partition) >
2010             vb2_plane_size(&dst_buf->vb2_buf, 0)) {
2011                 v4l2_err(&dev->v4l2_dev,
2012                          "channel %d: partition table outside of dst_buf\n",
2013                          channel->mcu_channel_id);
2014                 goto err;
2015         }
2016
2017         partition =
2018             vb2_plane_vaddr(&dst_buf->vb2_buf, 0) + msg->partition_table_offset;
2019         if (partition->offset + partition->size >
2020             vb2_plane_size(&dst_buf->vb2_buf, 0)) {
2021                 v4l2_err(&dev->v4l2_dev,
2022                          "channel %d: encoded frame is outside of dst_buf (offset 0x%x, size 0x%x)\n",
2023                          channel->mcu_channel_id, partition->offset,
2024                          partition->size);
2025                 goto err;
2026         }
2027
2028         v4l2_dbg(2, debug, &dev->v4l2_dev,
2029                  "channel %d: encoded frame of size %d is at offset 0x%x\n",
2030                  channel->mcu_channel_id, partition->size, partition->offset);
2031
2032         /*
2033          * The payload must include the data before the partition offset,
2034          * because we will put the sps and pps data there.
2035          */
2036         vb2_set_plane_payload(&dst_buf->vb2_buf, 0,
2037                               partition->offset + partition->size);
2038
2039         curr = vb2_plane_vaddr(&dst_buf->vb2_buf, 0);
2040         free = partition->offset;
2041
2042         if (channel->codec == V4L2_PIX_FMT_HEVC && msg->is_idr) {
2043                 len = allegro_hevc_write_vps(channel, curr, free);
2044                 if (len < 0) {
2045                         v4l2_err(&dev->v4l2_dev,
2046                                  "not enough space for video parameter set: %zd left\n",
2047                                  free);
2048                         goto err;
2049                 }
2050                 curr += len;
2051                 free -= len;
2052                 v4l2_dbg(1, debug, &dev->v4l2_dev,
2053                          "channel %d: wrote %zd byte VPS nal unit\n",
2054                          channel->mcu_channel_id, len);
2055         }
2056
2057         if (msg->is_idr) {
2058                 if (channel->codec == V4L2_PIX_FMT_H264)
2059                         len = allegro_h264_write_sps(channel, curr, free);
2060                 else
2061                         len = allegro_hevc_write_sps(channel, curr, free);
2062                 if (len < 0) {
2063                         v4l2_err(&dev->v4l2_dev,
2064                                  "not enough space for sequence parameter set: %zd left\n",
2065                                  free);
2066                         goto err;
2067                 }
2068                 curr += len;
2069                 free -= len;
2070                 v4l2_dbg(1, debug, &dev->v4l2_dev,
2071                          "channel %d: wrote %zd byte SPS nal unit\n",
2072                          channel->mcu_channel_id, len);
2073         }
2074
2075         if (msg->slice_type == AL_ENC_SLICE_TYPE_I) {
2076                 if (channel->codec == V4L2_PIX_FMT_H264)
2077                         len = allegro_h264_write_pps(channel, curr, free);
2078                 else
2079                         len = allegro_hevc_write_pps(channel, msg, curr, free);
2080                 if (len < 0) {
2081                         v4l2_err(&dev->v4l2_dev,
2082                                  "not enough space for picture parameter set: %zd left\n",
2083                                  free);
2084                         goto err;
2085                 }
2086                 curr += len;
2087                 free -= len;
2088                 v4l2_dbg(1, debug, &dev->v4l2_dev,
2089                          "channel %d: wrote %zd byte PPS nal unit\n",
2090                          channel->mcu_channel_id, len);
2091         }
2092
2093         if (msg->slice_type != AL_ENC_SLICE_TYPE_I && !msg->is_idr) {
2094                 dst_buf->vb2_buf.planes[0].data_offset = free;
2095                 free = 0;
2096         } else {
2097                 if (channel->codec == V4L2_PIX_FMT_H264)
2098                         len = nal_h264_write_filler(&dev->plat_dev->dev, curr, free);
2099                 else
2100                         len = nal_hevc_write_filler(&dev->plat_dev->dev, curr, free);
2101                 if (len < 0) {
2102                         v4l2_err(&dev->v4l2_dev,
2103                                  "failed to write %zd filler data\n", free);
2104                         goto err;
2105                 }
2106                 curr += len;
2107                 free -= len;
2108                 v4l2_dbg(2, debug, &dev->v4l2_dev,
2109                          "channel %d: wrote %zd bytes filler nal unit\n",
2110                          channel->mcu_channel_id, len);
2111         }
2112
2113         if (free != 0) {
2114                 v4l2_err(&dev->v4l2_dev,
2115                          "non-VCL NAL units do not fill space until VCL NAL unit: %zd bytes left\n",
2116                          free);
2117                 goto err;
2118         }
2119
2120         state = VB2_BUF_STATE_DONE;
2121
2122         v4l2_m2m_buf_copy_metadata(src_buf, dst_buf, false);
2123         if (msg->is_idr)
2124                 dst_buf->flags |= V4L2_BUF_FLAG_KEYFRAME;
2125         else
2126                 dst_buf->flags |= V4L2_BUF_FLAG_PFRAME;
2127
2128         v4l2_dbg(1, debug, &dev->v4l2_dev,
2129                  "channel %d: encoded frame #%03d (%s%s, QP %d, %d bytes)\n",
2130                  channel->mcu_channel_id,
2131                  dst_buf->sequence,
2132                  msg->is_idr ? "IDR, " : "",
2133                  msg->slice_type == AL_ENC_SLICE_TYPE_I ? "I slice" :
2134                  msg->slice_type == AL_ENC_SLICE_TYPE_P ? "P slice" : "unknown",
2135                  msg->qp, partition->size);
2136
2137 err:
2138         if (src_buf)
2139                 v4l2_m2m_buf_done(src_buf, VB2_BUF_STATE_DONE);
2140
2141         if (dst_buf)
2142                 v4l2_m2m_buf_done(dst_buf, state);
2143 }
2144
2145 static int allegro_handle_init(struct allegro_dev *dev,
2146                                struct mcu_msg_init_response *msg)
2147 {
2148         complete(&dev->init_complete);
2149
2150         return 0;
2151 }
2152
2153 static int
2154 allegro_handle_create_channel(struct allegro_dev *dev,
2155                               struct mcu_msg_create_channel_response *msg)
2156 {
2157         struct allegro_channel *channel;
2158         int err = 0;
2159         struct create_channel_param param;
2160
2161         channel = allegro_find_channel_by_user_id(dev, msg->user_id);
2162         if (IS_ERR(channel)) {
2163                 v4l2_warn(&dev->v4l2_dev,
2164                           "received %s for unknown user %d\n",
2165                           msg_type_name(msg->header.type),
2166                           msg->user_id);
2167                 return -EINVAL;
2168         }
2169
2170         if (msg->error_code) {
2171                 v4l2_err(&dev->v4l2_dev,
2172                          "user %d: mcu failed to create channel: %s (%x)\n",
2173                          channel->user_id,
2174                          allegro_err_to_string(msg->error_code),
2175                          msg->error_code);
2176                 err = -EIO;
2177                 goto out;
2178         }
2179
2180         channel->mcu_channel_id = msg->channel_id;
2181         v4l2_dbg(1, debug, &dev->v4l2_dev,
2182                  "user %d: channel has channel id %d\n",
2183                  channel->user_id, channel->mcu_channel_id);
2184
2185         err = allegro_decode_config_blob(&param, msg, channel->config_blob.vaddr);
2186         allegro_free_buffer(channel->dev, &channel->config_blob);
2187         if (err)
2188                 goto out;
2189
2190         channel->num_ref_idx_l0 = param.num_ref_idx_l0;
2191         channel->num_ref_idx_l1 = param.num_ref_idx_l1;
2192
2193         v4l2_dbg(1, debug, &dev->v4l2_dev,
2194                  "channel %d: intermediate buffers: %d x %d bytes\n",
2195                  channel->mcu_channel_id,
2196                  msg->int_buffers_count, msg->int_buffers_size);
2197         err = allocate_intermediate_buffers(channel, msg->int_buffers_count,
2198                                             msg->int_buffers_size);
2199         if (err) {
2200                 v4l2_err(&dev->v4l2_dev,
2201                          "channel %d: failed to allocate intermediate buffers\n",
2202                          channel->mcu_channel_id);
2203                 goto out;
2204         }
2205         err = allegro_mcu_push_buffer_intermediate(channel);
2206         if (err)
2207                 goto out;
2208
2209         v4l2_dbg(1, debug, &dev->v4l2_dev,
2210                  "channel %d: reference buffers: %d x %d bytes\n",
2211                  channel->mcu_channel_id,
2212                  msg->rec_buffers_count, msg->rec_buffers_size);
2213         err = allocate_reference_buffers(channel, msg->rec_buffers_count,
2214                                          msg->rec_buffers_size);
2215         if (err) {
2216                 v4l2_err(&dev->v4l2_dev,
2217                          "channel %d: failed to allocate reference buffers\n",
2218                          channel->mcu_channel_id);
2219                 goto out;
2220         }
2221         err = allegro_mcu_push_buffer_reference(channel);
2222         if (err)
2223                 goto out;
2224
2225 out:
2226         channel->error = err;
2227         complete(&channel->completion);
2228
2229         /* Handled successfully, error is passed via channel->error */
2230         return 0;
2231 }
2232
2233 static int
2234 allegro_handle_destroy_channel(struct allegro_dev *dev,
2235                                struct mcu_msg_destroy_channel_response *msg)
2236 {
2237         struct allegro_channel *channel;
2238
2239         channel = allegro_find_channel_by_channel_id(dev, msg->channel_id);
2240         if (IS_ERR(channel)) {
2241                 v4l2_err(&dev->v4l2_dev,
2242                          "received %s for unknown channel %d\n",
2243                          msg_type_name(msg->header.type),
2244                          msg->channel_id);
2245                 return -EINVAL;
2246         }
2247
2248         v4l2_dbg(2, debug, &dev->v4l2_dev,
2249                  "user %d: vcu destroyed channel %d\n",
2250                  channel->user_id, channel->mcu_channel_id);
2251         complete(&channel->completion);
2252
2253         return 0;
2254 }
2255
2256 static int
2257 allegro_handle_encode_frame(struct allegro_dev *dev,
2258                             struct mcu_msg_encode_frame_response *msg)
2259 {
2260         struct allegro_channel *channel;
2261
2262         channel = allegro_find_channel_by_channel_id(dev, msg->channel_id);
2263         if (IS_ERR(channel)) {
2264                 v4l2_err(&dev->v4l2_dev,
2265                          "received %s for unknown channel %d\n",
2266                          msg_type_name(msg->header.type),
2267                          msg->channel_id);
2268                 return -EINVAL;
2269         }
2270
2271         allegro_channel_finish_frame(channel, msg);
2272
2273         return 0;
2274 }
2275
2276 static void allegro_handle_message(struct allegro_dev *dev,
2277                                    union mcu_msg_response *msg)
2278 {
2279         switch (msg->header.type) {
2280         case MCU_MSG_TYPE_INIT:
2281                 allegro_handle_init(dev, &msg->init);
2282                 break;
2283         case MCU_MSG_TYPE_CREATE_CHANNEL:
2284                 allegro_handle_create_channel(dev, &msg->create_channel);
2285                 break;
2286         case MCU_MSG_TYPE_DESTROY_CHANNEL:
2287                 allegro_handle_destroy_channel(dev, &msg->destroy_channel);
2288                 break;
2289         case MCU_MSG_TYPE_ENCODE_FRAME:
2290                 allegro_handle_encode_frame(dev, &msg->encode_frame);
2291                 break;
2292         default:
2293                 v4l2_warn(&dev->v4l2_dev,
2294                           "%s: unknown message %s\n",
2295                           __func__, msg_type_name(msg->header.type));
2296                 break;
2297         }
2298 }
2299
2300 static irqreturn_t allegro_hardirq(int irq, void *data)
2301 {
2302         struct allegro_dev *dev = data;
2303         unsigned int status;
2304
2305         regmap_read(dev->regmap, AL5_ITC_CPU_IRQ_STA, &status);
2306         if (!(status & AL5_ITC_CPU_IRQ_STA_TRIGGERED))
2307                 return IRQ_NONE;
2308
2309         regmap_write(dev->regmap, AL5_ITC_CPU_IRQ_CLR, status);
2310
2311         return IRQ_WAKE_THREAD;
2312 }
2313
2314 static irqreturn_t allegro_irq_thread(int irq, void *data)
2315 {
2316         struct allegro_dev *dev = data;
2317
2318         /*
2319          * The firmware is initialized after the mailbox is setup. We further
2320          * check the AL5_ITC_CPU_IRQ_STA register, if the firmware actually
2321          * triggered the interrupt. Although this should not happen, make sure
2322          * that we ignore interrupts, if the mailbox is not initialized.
2323          */
2324         if (!dev->mbox_status)
2325                 return IRQ_NONE;
2326
2327         allegro_mbox_notify(dev->mbox_status);
2328
2329         return IRQ_HANDLED;
2330 }
2331
2332 static void allegro_copy_firmware(struct allegro_dev *dev,
2333                                   const u8 * const buf, size_t size)
2334 {
2335         int err = 0;
2336
2337         v4l2_dbg(1, debug, &dev->v4l2_dev,
2338                  "copy mcu firmware (%zu B) to SRAM\n", size);
2339         err = regmap_bulk_write(dev->sram, 0x0, buf, size / 4);
2340         if (err)
2341                 v4l2_err(&dev->v4l2_dev,
2342                          "failed to copy firmware: %d\n", err);
2343 }
2344
2345 static void allegro_copy_fw_codec(struct allegro_dev *dev,
2346                                   const u8 * const buf, size_t size)
2347 {
2348         int err;
2349         dma_addr_t icache_offset, dcache_offset;
2350
2351         /*
2352          * The downstream allocates 600 KB for the codec firmware to have some
2353          * extra space for "possible extensions." My tests were fine with
2354          * allocating just enough memory for the actual firmware, but I am not
2355          * sure that the firmware really does not use the remaining space.
2356          */
2357         err = allegro_alloc_buffer(dev, &dev->firmware, size);
2358         if (err) {
2359                 v4l2_err(&dev->v4l2_dev,
2360                          "failed to allocate %zu bytes for firmware\n", size);
2361                 return;
2362         }
2363
2364         v4l2_dbg(1, debug, &dev->v4l2_dev,
2365                  "copy codec firmware (%zd B) to phys %pad\n",
2366                  size, &dev->firmware.paddr);
2367         memcpy(dev->firmware.vaddr, buf, size);
2368
2369         regmap_write(dev->regmap, AXI_ADDR_OFFSET_IP,
2370                      upper_32_bits(dev->firmware.paddr));
2371
2372         icache_offset = dev->firmware.paddr - MCU_CACHE_OFFSET;
2373         v4l2_dbg(2, debug, &dev->v4l2_dev,
2374                  "icache_offset: msb = 0x%x, lsb = 0x%x\n",
2375                  upper_32_bits(icache_offset), lower_32_bits(icache_offset));
2376         regmap_write(dev->regmap, AL5_ICACHE_ADDR_OFFSET_MSB,
2377                      upper_32_bits(icache_offset));
2378         regmap_write(dev->regmap, AL5_ICACHE_ADDR_OFFSET_LSB,
2379                      lower_32_bits(icache_offset));
2380
2381         dcache_offset =
2382             (dev->firmware.paddr & 0xffffffff00000000ULL) - MCU_CACHE_OFFSET;
2383         v4l2_dbg(2, debug, &dev->v4l2_dev,
2384                  "dcache_offset: msb = 0x%x, lsb = 0x%x\n",
2385                  upper_32_bits(dcache_offset), lower_32_bits(dcache_offset));
2386         regmap_write(dev->regmap, AL5_DCACHE_ADDR_OFFSET_MSB,
2387                      upper_32_bits(dcache_offset));
2388         regmap_write(dev->regmap, AL5_DCACHE_ADDR_OFFSET_LSB,
2389                      lower_32_bits(dcache_offset));
2390 }
2391
2392 static void allegro_free_fw_codec(struct allegro_dev *dev)
2393 {
2394         allegro_free_buffer(dev, &dev->firmware);
2395 }
2396
2397 /*
2398  * Control functions for the MCU
2399  */
2400
2401 static int allegro_mcu_enable_interrupts(struct allegro_dev *dev)
2402 {
2403         return regmap_write(dev->regmap, AL5_ITC_CPU_IRQ_MSK, BIT(0));
2404 }
2405
2406 static int allegro_mcu_disable_interrupts(struct allegro_dev *dev)
2407 {
2408         return regmap_write(dev->regmap, AL5_ITC_CPU_IRQ_MSK, 0);
2409 }
2410
2411 static int allegro_mcu_wait_for_sleep(struct allegro_dev *dev)
2412 {
2413         unsigned long timeout;
2414         unsigned int status;
2415
2416         timeout = jiffies + msecs_to_jiffies(100);
2417         while (regmap_read(dev->regmap, AL5_MCU_STA, &status) == 0 &&
2418                status != AL5_MCU_STA_SLEEP) {
2419                 if (time_after(jiffies, timeout))
2420                         return -ETIMEDOUT;
2421                 cpu_relax();
2422         }
2423
2424         return 0;
2425 }
2426
2427 static int allegro_mcu_start(struct allegro_dev *dev)
2428 {
2429         unsigned long timeout;
2430         unsigned int status;
2431         int err;
2432
2433         err = regmap_write(dev->regmap, AL5_MCU_WAKEUP, BIT(0));
2434         if (err)
2435                 return err;
2436
2437         timeout = jiffies + msecs_to_jiffies(100);
2438         while (regmap_read(dev->regmap, AL5_MCU_STA, &status) == 0 &&
2439                status == AL5_MCU_STA_SLEEP) {
2440                 if (time_after(jiffies, timeout))
2441                         return -ETIMEDOUT;
2442                 cpu_relax();
2443         }
2444
2445         err = regmap_write(dev->regmap, AL5_MCU_WAKEUP, 0);
2446         if (err)
2447                 return err;
2448
2449         return 0;
2450 }
2451
2452 static int allegro_mcu_reset(struct allegro_dev *dev)
2453 {
2454         int err;
2455
2456         /*
2457          * Ensure that the AL5_MCU_WAKEUP bit is set to 0 otherwise the mcu
2458          * does not go to sleep after the reset.
2459          */
2460         err = regmap_write(dev->regmap, AL5_MCU_WAKEUP, 0);
2461         if (err)
2462                 return err;
2463
2464         err = regmap_write(dev->regmap,
2465                            AL5_MCU_RESET_MODE, AL5_MCU_RESET_MODE_SLEEP);
2466         if (err < 0)
2467                 return err;
2468
2469         err = regmap_write(dev->regmap, AL5_MCU_RESET, AL5_MCU_RESET_SOFT);
2470         if (err < 0)
2471                 return err;
2472
2473         return allegro_mcu_wait_for_sleep(dev);
2474 }
2475
2476 static void allegro_mcu_interrupt(struct allegro_dev *dev)
2477 {
2478         regmap_write(dev->regmap, AL5_MCU_INTERRUPT, BIT(0));
2479 }
2480
2481 static void allegro_destroy_channel(struct allegro_channel *channel)
2482 {
2483         struct allegro_dev *dev = channel->dev;
2484         unsigned long timeout;
2485
2486         if (channel_exists(channel)) {
2487                 reinit_completion(&channel->completion);
2488                 allegro_mcu_send_destroy_channel(dev, channel);
2489                 timeout = wait_for_completion_timeout(&channel->completion,
2490                                                       msecs_to_jiffies(5000));
2491                 if (timeout == 0)
2492                         v4l2_warn(&dev->v4l2_dev,
2493                                   "channel %d: timeout while destroying\n",
2494                                   channel->mcu_channel_id);
2495
2496                 channel->mcu_channel_id = -1;
2497         }
2498
2499         destroy_intermediate_buffers(channel);
2500         destroy_reference_buffers(channel);
2501
2502         v4l2_ctrl_grab(channel->mpeg_video_h264_profile, false);
2503         v4l2_ctrl_grab(channel->mpeg_video_h264_level, false);
2504         v4l2_ctrl_grab(channel->mpeg_video_h264_i_frame_qp, false);
2505         v4l2_ctrl_grab(channel->mpeg_video_h264_max_qp, false);
2506         v4l2_ctrl_grab(channel->mpeg_video_h264_min_qp, false);
2507         v4l2_ctrl_grab(channel->mpeg_video_h264_p_frame_qp, false);
2508         v4l2_ctrl_grab(channel->mpeg_video_h264_b_frame_qp, false);
2509
2510         v4l2_ctrl_grab(channel->mpeg_video_hevc_profile, false);
2511         v4l2_ctrl_grab(channel->mpeg_video_hevc_level, false);
2512         v4l2_ctrl_grab(channel->mpeg_video_hevc_tier, false);
2513         v4l2_ctrl_grab(channel->mpeg_video_hevc_i_frame_qp, false);
2514         v4l2_ctrl_grab(channel->mpeg_video_hevc_max_qp, false);
2515         v4l2_ctrl_grab(channel->mpeg_video_hevc_min_qp, false);
2516         v4l2_ctrl_grab(channel->mpeg_video_hevc_p_frame_qp, false);
2517         v4l2_ctrl_grab(channel->mpeg_video_hevc_b_frame_qp, false);
2518
2519         v4l2_ctrl_grab(channel->mpeg_video_frame_rc_enable, false);
2520         v4l2_ctrl_grab(channel->mpeg_video_bitrate_mode, false);
2521         v4l2_ctrl_grab(channel->mpeg_video_bitrate, false);
2522         v4l2_ctrl_grab(channel->mpeg_video_bitrate_peak, false);
2523         v4l2_ctrl_grab(channel->mpeg_video_cpb_size, false);
2524         v4l2_ctrl_grab(channel->mpeg_video_gop_size, false);
2525
2526         v4l2_ctrl_grab(channel->encoder_buffer, false);
2527
2528         if (channel->user_id != -1) {
2529                 clear_bit(channel->user_id, &dev->channel_user_ids);
2530                 channel->user_id = -1;
2531         }
2532 }
2533
2534 /*
2535  * Create the MCU channel
2536  *
2537  * After the channel has been created, the picture size, format, colorspace
2538  * and framerate are fixed. Also the codec, profile, bitrate, etc. cannot be
2539  * changed anymore.
2540  *
2541  * The channel can be created only once. The MCU will accept source buffers
2542  * and stream buffers only after a channel has been created.
2543  */
2544 static int allegro_create_channel(struct allegro_channel *channel)
2545 {
2546         struct allegro_dev *dev = channel->dev;
2547         unsigned long timeout;
2548
2549         if (channel_exists(channel)) {
2550                 v4l2_warn(&dev->v4l2_dev,
2551                           "channel already exists\n");
2552                 return 0;
2553         }
2554
2555         channel->user_id = allegro_next_user_id(dev);
2556         if (channel->user_id < 0) {
2557                 v4l2_err(&dev->v4l2_dev,
2558                          "no free channels available\n");
2559                 return -EBUSY;
2560         }
2561         set_bit(channel->user_id, &dev->channel_user_ids);
2562
2563         v4l2_dbg(1, debug, &dev->v4l2_dev,
2564                  "user %d: creating channel (%4.4s, %dx%d@%d)\n",
2565                  channel->user_id,
2566                  (char *)&channel->codec, channel->width, channel->height,
2567                  DIV_ROUND_UP(channel->framerate.numerator,
2568                               channel->framerate.denominator));
2569
2570         v4l2_ctrl_grab(channel->mpeg_video_h264_profile, true);
2571         v4l2_ctrl_grab(channel->mpeg_video_h264_level, true);
2572         v4l2_ctrl_grab(channel->mpeg_video_h264_i_frame_qp, true);
2573         v4l2_ctrl_grab(channel->mpeg_video_h264_max_qp, true);
2574         v4l2_ctrl_grab(channel->mpeg_video_h264_min_qp, true);
2575         v4l2_ctrl_grab(channel->mpeg_video_h264_p_frame_qp, true);
2576         v4l2_ctrl_grab(channel->mpeg_video_h264_b_frame_qp, true);
2577
2578         v4l2_ctrl_grab(channel->mpeg_video_hevc_profile, true);
2579         v4l2_ctrl_grab(channel->mpeg_video_hevc_level, true);
2580         v4l2_ctrl_grab(channel->mpeg_video_hevc_tier, true);
2581         v4l2_ctrl_grab(channel->mpeg_video_hevc_i_frame_qp, true);
2582         v4l2_ctrl_grab(channel->mpeg_video_hevc_max_qp, true);
2583         v4l2_ctrl_grab(channel->mpeg_video_hevc_min_qp, true);
2584         v4l2_ctrl_grab(channel->mpeg_video_hevc_p_frame_qp, true);
2585         v4l2_ctrl_grab(channel->mpeg_video_hevc_b_frame_qp, true);
2586
2587         v4l2_ctrl_grab(channel->mpeg_video_frame_rc_enable, true);
2588         v4l2_ctrl_grab(channel->mpeg_video_bitrate_mode, true);
2589         v4l2_ctrl_grab(channel->mpeg_video_bitrate, true);
2590         v4l2_ctrl_grab(channel->mpeg_video_bitrate_peak, true);
2591         v4l2_ctrl_grab(channel->mpeg_video_cpb_size, true);
2592         v4l2_ctrl_grab(channel->mpeg_video_gop_size, true);
2593
2594         v4l2_ctrl_grab(channel->encoder_buffer, true);
2595
2596         reinit_completion(&channel->completion);
2597         allegro_mcu_send_create_channel(dev, channel);
2598         timeout = wait_for_completion_timeout(&channel->completion,
2599                                               msecs_to_jiffies(5000));
2600         if (timeout == 0)
2601                 channel->error = -ETIMEDOUT;
2602         if (channel->error)
2603                 goto err;
2604
2605         v4l2_dbg(1, debug, &dev->v4l2_dev,
2606                  "channel %d: accepting buffers\n",
2607                  channel->mcu_channel_id);
2608
2609         return 0;
2610
2611 err:
2612         allegro_destroy_channel(channel);
2613
2614         return channel->error;
2615 }
2616
2617 /**
2618  * allegro_channel_adjust() - Adjust channel parameters to current format
2619  * @channel: the channel to adjust
2620  *
2621  * Various parameters of a channel and their limits depend on the currently
2622  * set format. Adjust the parameters after a format change in one go.
2623  */
2624 static void allegro_channel_adjust(struct allegro_channel *channel)
2625 {
2626         struct allegro_dev *dev = channel->dev;
2627         u32 codec = channel->codec;
2628         struct v4l2_ctrl *ctrl;
2629         s64 min;
2630         s64 max;
2631
2632         channel->sizeimage_encoded =
2633                 estimate_stream_size(channel->width, channel->height);
2634
2635         if (codec == V4L2_PIX_FMT_H264) {
2636                 ctrl = channel->mpeg_video_h264_level;
2637                 min = select_minimum_h264_level(channel->width, channel->height);
2638         } else {
2639                 ctrl = channel->mpeg_video_hevc_level;
2640                 min = select_minimum_hevc_level(channel->width, channel->height);
2641         }
2642         if (ctrl->minimum > min)
2643                 v4l2_dbg(1, debug, &dev->v4l2_dev,
2644                          "%s.minimum: %lld -> %lld\n",
2645                          v4l2_ctrl_get_name(ctrl->id), ctrl->minimum, min);
2646         v4l2_ctrl_lock(ctrl);
2647         __v4l2_ctrl_modify_range(ctrl, min, ctrl->maximum,
2648                                  ctrl->step, ctrl->default_value);
2649         v4l2_ctrl_unlock(ctrl);
2650
2651         ctrl = channel->mpeg_video_bitrate;
2652         if (codec == V4L2_PIX_FMT_H264)
2653                 max = h264_maximum_bitrate(v4l2_ctrl_g_ctrl(channel->mpeg_video_h264_level));
2654         else
2655                 max = hevc_maximum_bitrate(v4l2_ctrl_g_ctrl(channel->mpeg_video_hevc_level));
2656         if (ctrl->maximum < max)
2657                 v4l2_dbg(1, debug, &dev->v4l2_dev,
2658                          "%s: maximum: %lld -> %lld\n",
2659                          v4l2_ctrl_get_name(ctrl->id), ctrl->maximum, max);
2660         v4l2_ctrl_lock(ctrl);
2661         __v4l2_ctrl_modify_range(ctrl, ctrl->minimum, max,
2662                                  ctrl->step, ctrl->default_value);
2663         v4l2_ctrl_unlock(ctrl);
2664
2665         ctrl = channel->mpeg_video_bitrate_peak;
2666         v4l2_ctrl_lock(ctrl);
2667         __v4l2_ctrl_modify_range(ctrl, ctrl->minimum, max,
2668                                  ctrl->step, ctrl->default_value);
2669         v4l2_ctrl_unlock(ctrl);
2670
2671         v4l2_ctrl_activate(channel->mpeg_video_h264_profile,
2672                            codec == V4L2_PIX_FMT_H264);
2673         v4l2_ctrl_activate(channel->mpeg_video_h264_level,
2674                            codec == V4L2_PIX_FMT_H264);
2675         v4l2_ctrl_activate(channel->mpeg_video_h264_i_frame_qp,
2676                            codec == V4L2_PIX_FMT_H264);
2677         v4l2_ctrl_activate(channel->mpeg_video_h264_max_qp,
2678                            codec == V4L2_PIX_FMT_H264);
2679         v4l2_ctrl_activate(channel->mpeg_video_h264_min_qp,
2680                            codec == V4L2_PIX_FMT_H264);
2681         v4l2_ctrl_activate(channel->mpeg_video_h264_p_frame_qp,
2682                            codec == V4L2_PIX_FMT_H264);
2683         v4l2_ctrl_activate(channel->mpeg_video_h264_b_frame_qp,
2684                            codec == V4L2_PIX_FMT_H264);
2685
2686         v4l2_ctrl_activate(channel->mpeg_video_hevc_profile,
2687                            codec == V4L2_PIX_FMT_HEVC);
2688         v4l2_ctrl_activate(channel->mpeg_video_hevc_level,
2689                            codec == V4L2_PIX_FMT_HEVC);
2690         v4l2_ctrl_activate(channel->mpeg_video_hevc_tier,
2691                            codec == V4L2_PIX_FMT_HEVC);
2692         v4l2_ctrl_activate(channel->mpeg_video_hevc_i_frame_qp,
2693                            codec == V4L2_PIX_FMT_HEVC);
2694         v4l2_ctrl_activate(channel->mpeg_video_hevc_max_qp,
2695                            codec == V4L2_PIX_FMT_HEVC);
2696         v4l2_ctrl_activate(channel->mpeg_video_hevc_min_qp,
2697                            codec == V4L2_PIX_FMT_HEVC);
2698         v4l2_ctrl_activate(channel->mpeg_video_hevc_p_frame_qp,
2699                            codec == V4L2_PIX_FMT_HEVC);
2700         v4l2_ctrl_activate(channel->mpeg_video_hevc_b_frame_qp,
2701                            codec == V4L2_PIX_FMT_HEVC);
2702
2703         if (codec == V4L2_PIX_FMT_H264)
2704                 channel->log2_max_frame_num = LOG2_MAX_FRAME_NUM;
2705         channel->temporal_mvp_enable = true;
2706         channel->dbf_ovr_en = (codec == V4L2_PIX_FMT_H264);
2707         channel->enable_deblocking_filter_override = (codec == V4L2_PIX_FMT_HEVC);
2708         channel->enable_reordering = (codec == V4L2_PIX_FMT_HEVC);
2709         channel->enable_loop_filter_across_tiles = true;
2710         channel->enable_loop_filter_across_slices = true;
2711
2712         if (codec == V4L2_PIX_FMT_H264) {
2713                 channel->b_hrz_me_range = 8;
2714                 channel->b_vrt_me_range = 8;
2715                 channel->p_hrz_me_range = 16;
2716                 channel->p_vrt_me_range = 16;
2717                 channel->max_cu_size = ilog2(16);
2718                 channel->min_cu_size = ilog2(8);
2719                 channel->max_tu_size = ilog2(4);
2720                 channel->min_tu_size = ilog2(4);
2721         } else {
2722                 channel->b_hrz_me_range = 16;
2723                 channel->b_vrt_me_range = 16;
2724                 channel->p_hrz_me_range = 32;
2725                 channel->p_vrt_me_range = 32;
2726                 channel->max_cu_size = ilog2(32);
2727                 channel->min_cu_size = ilog2(8);
2728                 channel->max_tu_size = ilog2(32);
2729                 channel->min_tu_size = ilog2(4);
2730         }
2731         channel->max_transfo_depth_intra = 1;
2732         channel->max_transfo_depth_inter = 1;
2733 }
2734
2735 static void allegro_set_default_params(struct allegro_channel *channel)
2736 {
2737         channel->width = ALLEGRO_WIDTH_DEFAULT;
2738         channel->height = ALLEGRO_HEIGHT_DEFAULT;
2739         channel->stride = round_up(channel->width, 32);
2740         channel->framerate = ALLEGRO_FRAMERATE_DEFAULT;
2741
2742         channel->colorspace = V4L2_COLORSPACE_REC709;
2743         channel->ycbcr_enc = V4L2_YCBCR_ENC_DEFAULT;
2744         channel->quantization = V4L2_QUANTIZATION_DEFAULT;
2745         channel->xfer_func = V4L2_XFER_FUNC_DEFAULT;
2746
2747         channel->pixelformat = V4L2_PIX_FMT_NV12;
2748         channel->sizeimage_raw = channel->stride * channel->height * 3 / 2;
2749
2750         channel->codec = V4L2_PIX_FMT_H264;
2751 }
2752
2753 static int allegro_queue_setup(struct vb2_queue *vq,
2754                                unsigned int *nbuffers, unsigned int *nplanes,
2755                                unsigned int sizes[],
2756                                struct device *alloc_devs[])
2757 {
2758         struct allegro_channel *channel = vb2_get_drv_priv(vq);
2759         struct allegro_dev *dev = channel->dev;
2760
2761         v4l2_dbg(2, debug, &dev->v4l2_dev,
2762                  "%s: queue setup[%s]: nplanes = %d\n",
2763                  V4L2_TYPE_IS_OUTPUT(vq->type) ? "output" : "capture",
2764                  *nplanes == 0 ? "REQBUFS" : "CREATE_BUFS", *nplanes);
2765
2766         if (*nplanes != 0) {
2767                 if (V4L2_TYPE_IS_OUTPUT(vq->type)) {
2768                         if (sizes[0] < channel->sizeimage_raw)
2769                                 return -EINVAL;
2770                 } else {
2771                         if (sizes[0] < channel->sizeimage_encoded)
2772                                 return -EINVAL;
2773                 }
2774         } else {
2775                 *nplanes = 1;
2776                 if (V4L2_TYPE_IS_OUTPUT(vq->type))
2777                         sizes[0] = channel->sizeimage_raw;
2778                 else
2779                         sizes[0] = channel->sizeimage_encoded;
2780         }
2781
2782         return 0;
2783 }
2784
2785 static int allegro_buf_prepare(struct vb2_buffer *vb)
2786 {
2787         struct vb2_v4l2_buffer *vbuf = to_vb2_v4l2_buffer(vb);
2788         struct allegro_channel *channel = vb2_get_drv_priv(vb->vb2_queue);
2789         struct allegro_dev *dev = channel->dev;
2790
2791         if (V4L2_TYPE_IS_OUTPUT(vb->vb2_queue->type)) {
2792                 if (vbuf->field == V4L2_FIELD_ANY)
2793                         vbuf->field = V4L2_FIELD_NONE;
2794                 if (vbuf->field != V4L2_FIELD_NONE) {
2795                         v4l2_err(&dev->v4l2_dev,
2796                                  "channel %d: unsupported field\n",
2797                                  channel->mcu_channel_id);
2798                         return -EINVAL;
2799                 }
2800         }
2801
2802         return 0;
2803 }
2804
2805 static void allegro_buf_queue(struct vb2_buffer *vb)
2806 {
2807         struct allegro_channel *channel = vb2_get_drv_priv(vb->vb2_queue);
2808         struct vb2_v4l2_buffer *vbuf = to_vb2_v4l2_buffer(vb);
2809         struct vb2_queue *q = vb->vb2_queue;
2810
2811         if (V4L2_TYPE_IS_CAPTURE(q->type) &&
2812             vb2_is_streaming(q) &&
2813             v4l2_m2m_dst_buf_is_last(channel->fh.m2m_ctx)) {
2814                 unsigned int i;
2815
2816                 for (i = 0; i < vb->num_planes; i++)
2817                         vb2_set_plane_payload(vb, i, 0);
2818
2819                 vbuf->field = V4L2_FIELD_NONE;
2820                 vbuf->sequence = channel->csequence++;
2821
2822                 v4l2_m2m_last_buffer_done(channel->fh.m2m_ctx, vbuf);
2823                 allegro_channel_eos_event(channel);
2824                 return;
2825         }
2826
2827         v4l2_m2m_buf_queue(channel->fh.m2m_ctx, vbuf);
2828 }
2829
2830 static int allegro_start_streaming(struct vb2_queue *q, unsigned int count)
2831 {
2832         struct allegro_channel *channel = vb2_get_drv_priv(q);
2833         struct allegro_dev *dev = channel->dev;
2834
2835         v4l2_dbg(2, debug, &dev->v4l2_dev,
2836                  "%s: start streaming\n",
2837                  V4L2_TYPE_IS_OUTPUT(q->type) ? "output" : "capture");
2838
2839         v4l2_m2m_update_start_streaming_state(channel->fh.m2m_ctx, q);
2840
2841         if (V4L2_TYPE_IS_OUTPUT(q->type))
2842                 channel->osequence = 0;
2843         else
2844                 channel->csequence = 0;
2845
2846         return 0;
2847 }
2848
2849 static void allegro_stop_streaming(struct vb2_queue *q)
2850 {
2851         struct allegro_channel *channel = vb2_get_drv_priv(q);
2852         struct allegro_dev *dev = channel->dev;
2853         struct vb2_v4l2_buffer *buffer;
2854         struct allegro_m2m_buffer *shadow, *tmp;
2855
2856         v4l2_dbg(2, debug, &dev->v4l2_dev,
2857                  "%s: stop streaming\n",
2858                  V4L2_TYPE_IS_OUTPUT(q->type) ? "output" : "capture");
2859
2860         if (V4L2_TYPE_IS_OUTPUT(q->type)) {
2861                 mutex_lock(&channel->shadow_list_lock);
2862                 list_for_each_entry_safe(shadow, tmp,
2863                                          &channel->source_shadow_list, head) {
2864                         list_del(&shadow->head);
2865                         v4l2_m2m_buf_done(&shadow->buf.vb, VB2_BUF_STATE_ERROR);
2866                 }
2867                 mutex_unlock(&channel->shadow_list_lock);
2868
2869                 while ((buffer = v4l2_m2m_src_buf_remove(channel->fh.m2m_ctx)))
2870                         v4l2_m2m_buf_done(buffer, VB2_BUF_STATE_ERROR);
2871         } else {
2872                 mutex_lock(&channel->shadow_list_lock);
2873                 list_for_each_entry_safe(shadow, tmp,
2874                                          &channel->stream_shadow_list, head) {
2875                         list_del(&shadow->head);
2876                         v4l2_m2m_buf_done(&shadow->buf.vb, VB2_BUF_STATE_ERROR);
2877                 }
2878                 mutex_unlock(&channel->shadow_list_lock);
2879
2880                 allegro_destroy_channel(channel);
2881                 while ((buffer = v4l2_m2m_dst_buf_remove(channel->fh.m2m_ctx)))
2882                         v4l2_m2m_buf_done(buffer, VB2_BUF_STATE_ERROR);
2883         }
2884
2885         v4l2_m2m_update_stop_streaming_state(channel->fh.m2m_ctx, q);
2886
2887         if (V4L2_TYPE_IS_OUTPUT(q->type) &&
2888             v4l2_m2m_has_stopped(channel->fh.m2m_ctx))
2889                 allegro_channel_eos_event(channel);
2890 }
2891
2892 static const struct vb2_ops allegro_queue_ops = {
2893         .queue_setup = allegro_queue_setup,
2894         .buf_prepare = allegro_buf_prepare,
2895         .buf_queue = allegro_buf_queue,
2896         .start_streaming = allegro_start_streaming,
2897         .stop_streaming = allegro_stop_streaming,
2898         .wait_prepare = vb2_ops_wait_prepare,
2899         .wait_finish = vb2_ops_wait_finish,
2900 };
2901
2902 static int allegro_queue_init(void *priv,
2903                               struct vb2_queue *src_vq,
2904                               struct vb2_queue *dst_vq)
2905 {
2906         int err;
2907         struct allegro_channel *channel = priv;
2908
2909         src_vq->dev = &channel->dev->plat_dev->dev;
2910         src_vq->type = V4L2_BUF_TYPE_VIDEO_OUTPUT;
2911         src_vq->io_modes = VB2_DMABUF | VB2_MMAP;
2912         src_vq->mem_ops = &vb2_dma_contig_memops;
2913         src_vq->drv_priv = channel;
2914         src_vq->timestamp_flags = V4L2_BUF_FLAG_TIMESTAMP_COPY;
2915         src_vq->ops = &allegro_queue_ops;
2916         src_vq->buf_struct_size = sizeof(struct allegro_m2m_buffer);
2917         src_vq->lock = &channel->dev->lock;
2918         err = vb2_queue_init(src_vq);
2919         if (err)
2920                 return err;
2921
2922         dst_vq->dev = &channel->dev->plat_dev->dev;
2923         dst_vq->type = V4L2_BUF_TYPE_VIDEO_CAPTURE;
2924         dst_vq->io_modes = VB2_DMABUF | VB2_MMAP;
2925         dst_vq->mem_ops = &vb2_dma_contig_memops;
2926         dst_vq->drv_priv = channel;
2927         dst_vq->timestamp_flags = V4L2_BUF_FLAG_TIMESTAMP_COPY;
2928         dst_vq->ops = &allegro_queue_ops;
2929         dst_vq->buf_struct_size = sizeof(struct allegro_m2m_buffer);
2930         dst_vq->lock = &channel->dev->lock;
2931         err = vb2_queue_init(dst_vq);
2932         if (err)
2933                 return err;
2934
2935         return 0;
2936 }
2937
2938 static int allegro_clamp_qp(struct allegro_channel *channel,
2939                             struct v4l2_ctrl *ctrl)
2940 {
2941         struct v4l2_ctrl *next_ctrl;
2942
2943         if (ctrl->id == V4L2_CID_MPEG_VIDEO_H264_I_FRAME_QP)
2944                 next_ctrl = channel->mpeg_video_h264_p_frame_qp;
2945         else if (ctrl->id == V4L2_CID_MPEG_VIDEO_H264_P_FRAME_QP)
2946                 next_ctrl = channel->mpeg_video_h264_b_frame_qp;
2947         else
2948                 return 0;
2949
2950         /* Modify range automatically updates the value */
2951         __v4l2_ctrl_modify_range(next_ctrl, ctrl->val, 51, 1, ctrl->val);
2952
2953         return allegro_clamp_qp(channel, next_ctrl);
2954 }
2955
2956 static int allegro_clamp_bitrate(struct allegro_channel *channel,
2957                                  struct v4l2_ctrl *ctrl)
2958 {
2959         struct v4l2_ctrl *ctrl_bitrate = channel->mpeg_video_bitrate;
2960         struct v4l2_ctrl *ctrl_bitrate_peak = channel->mpeg_video_bitrate_peak;
2961
2962         if (ctrl->val == V4L2_MPEG_VIDEO_BITRATE_MODE_VBR &&
2963             ctrl_bitrate_peak->val < ctrl_bitrate->val)
2964                 ctrl_bitrate_peak->val = ctrl_bitrate->val;
2965
2966         return 0;
2967 }
2968
2969 static int allegro_try_ctrl(struct v4l2_ctrl *ctrl)
2970 {
2971         struct allegro_channel *channel = container_of(ctrl->handler,
2972                                                        struct allegro_channel,
2973                                                        ctrl_handler);
2974
2975         switch (ctrl->id) {
2976         case V4L2_CID_MPEG_VIDEO_BITRATE_MODE:
2977                 allegro_clamp_bitrate(channel, ctrl);
2978                 break;
2979         case V4L2_CID_USER_ALLEGRO_ENCODER_BUFFER:
2980                 if (!channel->dev->has_encoder_buffer)
2981                         ctrl->val = 0;
2982                 break;
2983         }
2984
2985         return 0;
2986 }
2987
2988 static int allegro_s_ctrl(struct v4l2_ctrl *ctrl)
2989 {
2990         struct allegro_channel *channel = container_of(ctrl->handler,
2991                                                        struct allegro_channel,
2992                                                        ctrl_handler);
2993         struct allegro_dev *dev = channel->dev;
2994
2995         v4l2_dbg(1, debug, &dev->v4l2_dev,
2996                  "s_ctrl: %s = %d\n", v4l2_ctrl_get_name(ctrl->id), ctrl->val);
2997
2998         switch (ctrl->id) {
2999         case V4L2_CID_MPEG_VIDEO_FRAME_RC_ENABLE:
3000                 channel->frame_rc_enable = ctrl->val;
3001                 break;
3002         case V4L2_CID_MPEG_VIDEO_BITRATE_MODE:
3003                 channel->bitrate = channel->mpeg_video_bitrate->val;
3004                 channel->bitrate_peak = channel->mpeg_video_bitrate_peak->val;
3005                 v4l2_ctrl_activate(channel->mpeg_video_bitrate_peak,
3006                                    ctrl->val == V4L2_MPEG_VIDEO_BITRATE_MODE_VBR);
3007                 break;
3008         case V4L2_CID_MPEG_VIDEO_H264_I_FRAME_QP:
3009         case V4L2_CID_MPEG_VIDEO_H264_P_FRAME_QP:
3010         case V4L2_CID_MPEG_VIDEO_H264_B_FRAME_QP:
3011                 allegro_clamp_qp(channel, ctrl);
3012                 break;
3013         }
3014
3015         return 0;
3016 }
3017
3018 static const struct v4l2_ctrl_ops allegro_ctrl_ops = {
3019         .try_ctrl = allegro_try_ctrl,
3020         .s_ctrl = allegro_s_ctrl,
3021 };
3022
3023 static const struct v4l2_ctrl_config allegro_encoder_buffer_ctrl_config = {
3024         .id = V4L2_CID_USER_ALLEGRO_ENCODER_BUFFER,
3025         .name = "Encoder Buffer Enable",
3026         .type = V4L2_CTRL_TYPE_BOOLEAN,
3027         .min = 0,
3028         .max = 1,
3029         .step = 1,
3030         .def = 1,
3031 };
3032
3033 static int allegro_open(struct file *file)
3034 {
3035         struct video_device *vdev = video_devdata(file);
3036         struct allegro_dev *dev = video_get_drvdata(vdev);
3037         struct allegro_channel *channel = NULL;
3038         struct v4l2_ctrl_handler *handler;
3039         u64 mask;
3040         int ret;
3041         unsigned int bitrate_max;
3042         unsigned int bitrate_def;
3043         unsigned int cpb_size_max;
3044         unsigned int cpb_size_def;
3045
3046         channel = kzalloc(sizeof(*channel), GFP_KERNEL);
3047         if (!channel)
3048                 return -ENOMEM;
3049
3050         v4l2_fh_init(&channel->fh, vdev);
3051
3052         init_completion(&channel->completion);
3053         INIT_LIST_HEAD(&channel->source_shadow_list);
3054         INIT_LIST_HEAD(&channel->stream_shadow_list);
3055         mutex_init(&channel->shadow_list_lock);
3056
3057         channel->dev = dev;
3058
3059         allegro_set_default_params(channel);
3060
3061         handler = &channel->ctrl_handler;
3062         v4l2_ctrl_handler_init(handler, 0);
3063         channel->mpeg_video_h264_profile = v4l2_ctrl_new_std_menu(handler,
3064                         &allegro_ctrl_ops,
3065                         V4L2_CID_MPEG_VIDEO_H264_PROFILE,
3066                         V4L2_MPEG_VIDEO_H264_PROFILE_BASELINE, 0x0,
3067                         V4L2_MPEG_VIDEO_H264_PROFILE_BASELINE);
3068         mask = 1 << V4L2_MPEG_VIDEO_H264_LEVEL_1B;
3069         channel->mpeg_video_h264_level = v4l2_ctrl_new_std_menu(handler,
3070                         &allegro_ctrl_ops,
3071                         V4L2_CID_MPEG_VIDEO_H264_LEVEL,
3072                         V4L2_MPEG_VIDEO_H264_LEVEL_5_1, mask,
3073                         V4L2_MPEG_VIDEO_H264_LEVEL_5_1);
3074         channel->mpeg_video_h264_i_frame_qp =
3075                 v4l2_ctrl_new_std(handler,
3076                                   &allegro_ctrl_ops,
3077                                   V4L2_CID_MPEG_VIDEO_H264_I_FRAME_QP,
3078                                   0, 51, 1, 30);
3079         channel->mpeg_video_h264_max_qp =
3080                 v4l2_ctrl_new_std(handler,
3081                                   &allegro_ctrl_ops,
3082                                   V4L2_CID_MPEG_VIDEO_H264_MAX_QP,
3083                                   0, 51, 1, 51);
3084         channel->mpeg_video_h264_min_qp =
3085                 v4l2_ctrl_new_std(handler,
3086                                   &allegro_ctrl_ops,
3087                                   V4L2_CID_MPEG_VIDEO_H264_MIN_QP,
3088                                   0, 51, 1, 0);
3089         channel->mpeg_video_h264_p_frame_qp =
3090                 v4l2_ctrl_new_std(handler,
3091                                   &allegro_ctrl_ops,
3092                                   V4L2_CID_MPEG_VIDEO_H264_P_FRAME_QP,
3093                                   0, 51, 1, 30);
3094         channel->mpeg_video_h264_b_frame_qp =
3095                 v4l2_ctrl_new_std(handler,
3096                                   &allegro_ctrl_ops,
3097                                   V4L2_CID_MPEG_VIDEO_H264_B_FRAME_QP,
3098                                   0, 51, 1, 30);
3099
3100         channel->mpeg_video_hevc_profile =
3101                 v4l2_ctrl_new_std_menu(handler,
3102                                        &allegro_ctrl_ops,
3103                                        V4L2_CID_MPEG_VIDEO_HEVC_PROFILE,
3104                                        V4L2_MPEG_VIDEO_HEVC_PROFILE_MAIN, 0x0,
3105                                        V4L2_MPEG_VIDEO_HEVC_PROFILE_MAIN);
3106         channel->mpeg_video_hevc_level =
3107                 v4l2_ctrl_new_std_menu(handler,
3108                                        &allegro_ctrl_ops,
3109                                        V4L2_CID_MPEG_VIDEO_HEVC_LEVEL,
3110                                        V4L2_MPEG_VIDEO_HEVC_LEVEL_5_1, 0x0,
3111                                        V4L2_MPEG_VIDEO_HEVC_LEVEL_5_1);
3112         channel->mpeg_video_hevc_tier =
3113                 v4l2_ctrl_new_std_menu(handler,
3114                                        &allegro_ctrl_ops,
3115                                        V4L2_CID_MPEG_VIDEO_HEVC_TIER,
3116                                        V4L2_MPEG_VIDEO_HEVC_TIER_HIGH, 0x0,
3117                                        V4L2_MPEG_VIDEO_HEVC_TIER_MAIN);
3118         channel->mpeg_video_hevc_i_frame_qp =
3119                 v4l2_ctrl_new_std(handler,
3120                                   &allegro_ctrl_ops,
3121                                   V4L2_CID_MPEG_VIDEO_HEVC_I_FRAME_QP,
3122                                   0, 51, 1, 30);
3123         channel->mpeg_video_hevc_max_qp =
3124                 v4l2_ctrl_new_std(handler,
3125                                   &allegro_ctrl_ops,
3126                                   V4L2_CID_MPEG_VIDEO_HEVC_MAX_QP,
3127                                   0, 51, 1, 51);
3128         channel->mpeg_video_hevc_min_qp =
3129                 v4l2_ctrl_new_std(handler,
3130                                   &allegro_ctrl_ops,
3131                                   V4L2_CID_MPEG_VIDEO_HEVC_MIN_QP,
3132                                   0, 51, 1, 0);
3133         channel->mpeg_video_hevc_p_frame_qp =
3134                 v4l2_ctrl_new_std(handler,
3135                                   &allegro_ctrl_ops,
3136                                   V4L2_CID_MPEG_VIDEO_HEVC_P_FRAME_QP,
3137                                   0, 51, 1, 30);
3138         channel->mpeg_video_hevc_b_frame_qp =
3139                 v4l2_ctrl_new_std(handler,
3140                                   &allegro_ctrl_ops,
3141                                   V4L2_CID_MPEG_VIDEO_HEVC_B_FRAME_QP,
3142                                   0, 51, 1, 30);
3143
3144         channel->mpeg_video_frame_rc_enable =
3145                 v4l2_ctrl_new_std(handler,
3146                                   &allegro_ctrl_ops,
3147                                   V4L2_CID_MPEG_VIDEO_FRAME_RC_ENABLE,
3148                                   false, 0x1,
3149                                   true, false);
3150         channel->mpeg_video_bitrate_mode = v4l2_ctrl_new_std_menu(handler,
3151                         &allegro_ctrl_ops,
3152                         V4L2_CID_MPEG_VIDEO_BITRATE_MODE,
3153                         V4L2_MPEG_VIDEO_BITRATE_MODE_CBR, 0,
3154                         V4L2_MPEG_VIDEO_BITRATE_MODE_CBR);
3155
3156         if (channel->codec == V4L2_PIX_FMT_H264) {
3157                 bitrate_max = h264_maximum_bitrate(V4L2_MPEG_VIDEO_H264_LEVEL_5_1);
3158                 bitrate_def = h264_maximum_bitrate(V4L2_MPEG_VIDEO_H264_LEVEL_5_1);
3159                 cpb_size_max = h264_maximum_cpb_size(V4L2_MPEG_VIDEO_H264_LEVEL_5_1);
3160                 cpb_size_def = h264_maximum_cpb_size(V4L2_MPEG_VIDEO_H264_LEVEL_5_1);
3161         } else {
3162                 bitrate_max = hevc_maximum_bitrate(V4L2_MPEG_VIDEO_HEVC_LEVEL_5_1);
3163                 bitrate_def = hevc_maximum_bitrate(V4L2_MPEG_VIDEO_HEVC_LEVEL_5_1);
3164                 cpb_size_max = hevc_maximum_cpb_size(V4L2_MPEG_VIDEO_HEVC_LEVEL_5_1);
3165                 cpb_size_def = hevc_maximum_cpb_size(V4L2_MPEG_VIDEO_HEVC_LEVEL_5_1);
3166         }
3167         channel->mpeg_video_bitrate = v4l2_ctrl_new_std(handler,
3168                         &allegro_ctrl_ops,
3169                         V4L2_CID_MPEG_VIDEO_BITRATE,
3170                         0, bitrate_max, 1, bitrate_def);
3171         channel->mpeg_video_bitrate_peak = v4l2_ctrl_new_std(handler,
3172                         &allegro_ctrl_ops,
3173                         V4L2_CID_MPEG_VIDEO_BITRATE_PEAK,
3174                         0, bitrate_max, 1, bitrate_def);
3175         channel->mpeg_video_cpb_size = v4l2_ctrl_new_std(handler,
3176                         &allegro_ctrl_ops,
3177                         V4L2_CID_MPEG_VIDEO_H264_CPB_SIZE,
3178                         0, cpb_size_max, 1, cpb_size_def);
3179         channel->mpeg_video_gop_size = v4l2_ctrl_new_std(handler,
3180                         &allegro_ctrl_ops,
3181                         V4L2_CID_MPEG_VIDEO_GOP_SIZE,
3182                         0, ALLEGRO_GOP_SIZE_MAX,
3183                         1, ALLEGRO_GOP_SIZE_DEFAULT);
3184         channel->encoder_buffer = v4l2_ctrl_new_custom(handler,
3185                         &allegro_encoder_buffer_ctrl_config, NULL);
3186         v4l2_ctrl_new_std(handler,
3187                           &allegro_ctrl_ops,
3188                           V4L2_CID_MIN_BUFFERS_FOR_OUTPUT,
3189                           1, 32,
3190                           1, 1);
3191         if (handler->error != 0) {
3192                 ret = handler->error;
3193                 goto error;
3194         }
3195
3196         channel->fh.ctrl_handler = handler;
3197
3198         v4l2_ctrl_cluster(3, &channel->mpeg_video_bitrate_mode);
3199
3200         v4l2_ctrl_handler_setup(handler);
3201
3202         channel->mcu_channel_id = -1;
3203         channel->user_id = -1;
3204
3205         INIT_LIST_HEAD(&channel->buffers_reference);
3206         INIT_LIST_HEAD(&channel->buffers_intermediate);
3207
3208         channel->fh.m2m_ctx = v4l2_m2m_ctx_init(dev->m2m_dev, channel,
3209                                                 allegro_queue_init);
3210
3211         if (IS_ERR(channel->fh.m2m_ctx)) {
3212                 ret = PTR_ERR(channel->fh.m2m_ctx);
3213                 goto error;
3214         }
3215
3216         list_add(&channel->list, &dev->channels);
3217         file->private_data = &channel->fh;
3218         v4l2_fh_add(&channel->fh);
3219
3220         allegro_channel_adjust(channel);
3221
3222         return 0;
3223
3224 error:
3225         v4l2_ctrl_handler_free(handler);
3226         kfree(channel);
3227         return ret;
3228 }
3229
3230 static int allegro_release(struct file *file)
3231 {
3232         struct allegro_channel *channel = fh_to_channel(file->private_data);
3233
3234         v4l2_m2m_ctx_release(channel->fh.m2m_ctx);
3235
3236         list_del(&channel->list);
3237
3238         v4l2_ctrl_handler_free(&channel->ctrl_handler);
3239
3240         v4l2_fh_del(&channel->fh);
3241         v4l2_fh_exit(&channel->fh);
3242
3243         kfree(channel);
3244
3245         return 0;
3246 }
3247
3248 static int allegro_querycap(struct file *file, void *fh,
3249                             struct v4l2_capability *cap)
3250 {
3251         strscpy(cap->driver, KBUILD_MODNAME, sizeof(cap->driver));
3252         strscpy(cap->card, "Allegro DVT Video Encoder", sizeof(cap->card));
3253
3254         return 0;
3255 }
3256
3257 static int allegro_enum_fmt_vid(struct file *file, void *fh,
3258                                 struct v4l2_fmtdesc *f)
3259 {
3260         switch (f->type) {
3261         case V4L2_BUF_TYPE_VIDEO_OUTPUT:
3262                 if (f->index >= 1)
3263                         return -EINVAL;
3264                 f->pixelformat = V4L2_PIX_FMT_NV12;
3265                 break;
3266         case V4L2_BUF_TYPE_VIDEO_CAPTURE:
3267                 if (f->index >= 2)
3268                         return -EINVAL;
3269                 if (f->index == 0)
3270                         f->pixelformat = V4L2_PIX_FMT_H264;
3271                 if (f->index == 1)
3272                         f->pixelformat = V4L2_PIX_FMT_HEVC;
3273                 break;
3274         default:
3275                 return -EINVAL;
3276         }
3277         return 0;
3278 }
3279
3280 static int allegro_g_fmt_vid_cap(struct file *file, void *fh,
3281                                  struct v4l2_format *f)
3282 {
3283         struct allegro_channel *channel = fh_to_channel(fh);
3284
3285         f->fmt.pix.field = V4L2_FIELD_NONE;
3286         f->fmt.pix.width = channel->width;
3287         f->fmt.pix.height = channel->height;
3288
3289         f->fmt.pix.colorspace = channel->colorspace;
3290         f->fmt.pix.ycbcr_enc = channel->ycbcr_enc;
3291         f->fmt.pix.quantization = channel->quantization;
3292         f->fmt.pix.xfer_func = channel->xfer_func;
3293
3294         f->fmt.pix.pixelformat = channel->codec;
3295         f->fmt.pix.bytesperline = 0;
3296         f->fmt.pix.sizeimage = channel->sizeimage_encoded;
3297
3298         return 0;
3299 }
3300
3301 static int allegro_try_fmt_vid_cap(struct file *file, void *fh,
3302                                    struct v4l2_format *f)
3303 {
3304         f->fmt.pix.field = V4L2_FIELD_NONE;
3305
3306         f->fmt.pix.width = clamp_t(__u32, f->fmt.pix.width,
3307                                    ALLEGRO_WIDTH_MIN, ALLEGRO_WIDTH_MAX);
3308         f->fmt.pix.height = clamp_t(__u32, f->fmt.pix.height,
3309                                     ALLEGRO_HEIGHT_MIN, ALLEGRO_HEIGHT_MAX);
3310
3311         if (f->fmt.pix.pixelformat != V4L2_PIX_FMT_HEVC &&
3312             f->fmt.pix.pixelformat != V4L2_PIX_FMT_H264)
3313                 f->fmt.pix.pixelformat = V4L2_PIX_FMT_H264;
3314
3315         f->fmt.pix.bytesperline = 0;
3316         f->fmt.pix.sizeimage =
3317                 estimate_stream_size(f->fmt.pix.width, f->fmt.pix.height);
3318
3319         return 0;
3320 }
3321
3322 static int allegro_s_fmt_vid_cap(struct file *file, void *fh,
3323                                  struct v4l2_format *f)
3324 {
3325         struct allegro_channel *channel = fh_to_channel(fh);
3326         struct vb2_queue *vq;
3327         int err;
3328
3329         err = allegro_try_fmt_vid_cap(file, fh, f);
3330         if (err)
3331                 return err;
3332
3333         vq = v4l2_m2m_get_vq(channel->fh.m2m_ctx, f->type);
3334         if (!vq)
3335                 return -EINVAL;
3336         if (vb2_is_busy(vq))
3337                 return -EBUSY;
3338
3339         channel->codec = f->fmt.pix.pixelformat;
3340
3341         allegro_channel_adjust(channel);
3342
3343         return 0;
3344 }
3345
3346 static int allegro_g_fmt_vid_out(struct file *file, void *fh,
3347                                  struct v4l2_format *f)
3348 {
3349         struct allegro_channel *channel = fh_to_channel(fh);
3350
3351         f->fmt.pix.field = V4L2_FIELD_NONE;
3352
3353         f->fmt.pix.width = channel->width;
3354         f->fmt.pix.height = channel->height;
3355
3356         f->fmt.pix.colorspace = channel->colorspace;
3357         f->fmt.pix.ycbcr_enc = channel->ycbcr_enc;
3358         f->fmt.pix.quantization = channel->quantization;
3359         f->fmt.pix.xfer_func = channel->xfer_func;
3360
3361         f->fmt.pix.pixelformat = channel->pixelformat;
3362         f->fmt.pix.bytesperline = channel->stride;
3363         f->fmt.pix.sizeimage = channel->sizeimage_raw;
3364
3365         return 0;
3366 }
3367
3368 static int allegro_try_fmt_vid_out(struct file *file, void *fh,
3369                                    struct v4l2_format *f)
3370 {
3371         f->fmt.pix.field = V4L2_FIELD_NONE;
3372
3373         /*
3374          * The firmware of the Allegro codec handles the padding internally
3375          * and expects the visual frame size when configuring a channel.
3376          * Therefore, unlike other encoder drivers, this driver does not round
3377          * up the width and height to macroblock alignment and does not
3378          * implement the selection api.
3379          */
3380         f->fmt.pix.width = clamp_t(__u32, f->fmt.pix.width,
3381                                    ALLEGRO_WIDTH_MIN, ALLEGRO_WIDTH_MAX);
3382         f->fmt.pix.height = clamp_t(__u32, f->fmt.pix.height,
3383                                     ALLEGRO_HEIGHT_MIN, ALLEGRO_HEIGHT_MAX);
3384
3385         f->fmt.pix.pixelformat = V4L2_PIX_FMT_NV12;
3386         f->fmt.pix.bytesperline = round_up(f->fmt.pix.width, 32);
3387         f->fmt.pix.sizeimage =
3388                 f->fmt.pix.bytesperline * f->fmt.pix.height * 3 / 2;
3389
3390         return 0;
3391 }
3392
3393 static int allegro_s_fmt_vid_out(struct file *file, void *fh,
3394                                  struct v4l2_format *f)
3395 {
3396         struct allegro_channel *channel = fh_to_channel(fh);
3397         int err;
3398
3399         err = allegro_try_fmt_vid_out(file, fh, f);
3400         if (err)
3401                 return err;
3402
3403         channel->width = f->fmt.pix.width;
3404         channel->height = f->fmt.pix.height;
3405         channel->stride = f->fmt.pix.bytesperline;
3406         channel->sizeimage_raw = f->fmt.pix.sizeimage;
3407
3408         channel->colorspace = f->fmt.pix.colorspace;
3409         channel->ycbcr_enc = f->fmt.pix.ycbcr_enc;
3410         channel->quantization = f->fmt.pix.quantization;
3411         channel->xfer_func = f->fmt.pix.xfer_func;
3412
3413         allegro_channel_adjust(channel);
3414
3415         return 0;
3416 }
3417
3418 static int allegro_channel_cmd_stop(struct allegro_channel *channel)
3419 {
3420         if (v4l2_m2m_has_stopped(channel->fh.m2m_ctx))
3421                 allegro_channel_eos_event(channel);
3422
3423         return 0;
3424 }
3425
3426 static int allegro_channel_cmd_start(struct allegro_channel *channel)
3427 {
3428         if (v4l2_m2m_has_stopped(channel->fh.m2m_ctx))
3429                 vb2_clear_last_buffer_dequeued(&channel->fh.m2m_ctx->cap_q_ctx.q);
3430
3431         return 0;
3432 }
3433
3434 static int allegro_encoder_cmd(struct file *file, void *fh,
3435                                struct v4l2_encoder_cmd *cmd)
3436 {
3437         struct allegro_channel *channel = fh_to_channel(fh);
3438         int err;
3439
3440         err = v4l2_m2m_ioctl_try_encoder_cmd(file, fh, cmd);
3441         if (err)
3442                 return err;
3443
3444         err = v4l2_m2m_ioctl_encoder_cmd(file, fh, cmd);
3445         if (err)
3446                 return err;
3447
3448         if (cmd->cmd == V4L2_ENC_CMD_STOP)
3449                 err = allegro_channel_cmd_stop(channel);
3450
3451         if (cmd->cmd == V4L2_ENC_CMD_START)
3452                 err = allegro_channel_cmd_start(channel);
3453
3454         return err;
3455 }
3456
3457 static int allegro_enum_framesizes(struct file *file, void *fh,
3458                                    struct v4l2_frmsizeenum *fsize)
3459 {
3460         switch (fsize->pixel_format) {
3461         case V4L2_PIX_FMT_HEVC:
3462         case V4L2_PIX_FMT_H264:
3463         case V4L2_PIX_FMT_NV12:
3464                 break;
3465         default:
3466                 return -EINVAL;
3467         }
3468
3469         if (fsize->index)
3470                 return -EINVAL;
3471
3472         fsize->type = V4L2_FRMSIZE_TYPE_CONTINUOUS;
3473         fsize->stepwise.min_width = ALLEGRO_WIDTH_MIN;
3474         fsize->stepwise.max_width = ALLEGRO_WIDTH_MAX;
3475         fsize->stepwise.step_width = 1;
3476         fsize->stepwise.min_height = ALLEGRO_HEIGHT_MIN;
3477         fsize->stepwise.max_height = ALLEGRO_HEIGHT_MAX;
3478         fsize->stepwise.step_height = 1;
3479
3480         return 0;
3481 }
3482
3483 static int allegro_ioctl_streamon(struct file *file, void *priv,
3484                                   enum v4l2_buf_type type)
3485 {
3486         struct v4l2_fh *fh = file->private_data;
3487         struct allegro_channel *channel = fh_to_channel(fh);
3488         int err;
3489
3490         if (type == V4L2_BUF_TYPE_VIDEO_CAPTURE) {
3491                 err = allegro_create_channel(channel);
3492                 if (err)
3493                         return err;
3494         }
3495
3496         return v4l2_m2m_streamon(file, fh->m2m_ctx, type);
3497 }
3498
3499 static int allegro_g_parm(struct file *file, void *fh,
3500                           struct v4l2_streamparm *a)
3501 {
3502         struct allegro_channel *channel = fh_to_channel(fh);
3503         struct v4l2_fract *timeperframe;
3504
3505         if (a->type != V4L2_BUF_TYPE_VIDEO_OUTPUT)
3506                 return -EINVAL;
3507
3508         a->parm.output.capability = V4L2_CAP_TIMEPERFRAME;
3509         timeperframe = &a->parm.output.timeperframe;
3510         timeperframe->numerator = channel->framerate.denominator;
3511         timeperframe->denominator = channel->framerate.numerator;
3512
3513         return 0;
3514 }
3515
3516 static int allegro_s_parm(struct file *file, void *fh,
3517                           struct v4l2_streamparm *a)
3518 {
3519         struct allegro_channel *channel = fh_to_channel(fh);
3520         struct v4l2_fract *timeperframe;
3521         int div;
3522
3523         if (a->type != V4L2_BUF_TYPE_VIDEO_OUTPUT)
3524                 return -EINVAL;
3525
3526         a->parm.output.capability = V4L2_CAP_TIMEPERFRAME;
3527         timeperframe = &a->parm.output.timeperframe;
3528
3529         if (timeperframe->numerator == 0 || timeperframe->denominator == 0)
3530                 return allegro_g_parm(file, fh, a);
3531
3532         div = gcd(timeperframe->denominator, timeperframe->numerator);
3533         channel->framerate.numerator = timeperframe->denominator / div;
3534         channel->framerate.denominator = timeperframe->numerator / div;
3535
3536         return 0;
3537 }
3538
3539 static int allegro_subscribe_event(struct v4l2_fh *fh,
3540                                    const struct v4l2_event_subscription *sub)
3541 {
3542         switch (sub->type) {
3543         case V4L2_EVENT_EOS:
3544                 return v4l2_event_subscribe(fh, sub, 0, NULL);
3545         default:
3546                 return v4l2_ctrl_subscribe_event(fh, sub);
3547         }
3548 }
3549
3550 static const struct v4l2_ioctl_ops allegro_ioctl_ops = {
3551         .vidioc_querycap = allegro_querycap,
3552         .vidioc_enum_fmt_vid_cap = allegro_enum_fmt_vid,
3553         .vidioc_enum_fmt_vid_out = allegro_enum_fmt_vid,
3554         .vidioc_g_fmt_vid_cap = allegro_g_fmt_vid_cap,
3555         .vidioc_try_fmt_vid_cap = allegro_try_fmt_vid_cap,
3556         .vidioc_s_fmt_vid_cap = allegro_s_fmt_vid_cap,
3557         .vidioc_g_fmt_vid_out = allegro_g_fmt_vid_out,
3558         .vidioc_try_fmt_vid_out = allegro_try_fmt_vid_out,
3559         .vidioc_s_fmt_vid_out = allegro_s_fmt_vid_out,
3560
3561         .vidioc_create_bufs = v4l2_m2m_ioctl_create_bufs,
3562         .vidioc_reqbufs = v4l2_m2m_ioctl_reqbufs,
3563
3564         .vidioc_expbuf = v4l2_m2m_ioctl_expbuf,
3565         .vidioc_querybuf = v4l2_m2m_ioctl_querybuf,
3566         .vidioc_qbuf = v4l2_m2m_ioctl_qbuf,
3567         .vidioc_dqbuf = v4l2_m2m_ioctl_dqbuf,
3568         .vidioc_prepare_buf = v4l2_m2m_ioctl_prepare_buf,
3569
3570         .vidioc_streamon = allegro_ioctl_streamon,
3571         .vidioc_streamoff = v4l2_m2m_ioctl_streamoff,
3572
3573         .vidioc_try_encoder_cmd = v4l2_m2m_ioctl_try_encoder_cmd,
3574         .vidioc_encoder_cmd = allegro_encoder_cmd,
3575         .vidioc_enum_framesizes = allegro_enum_framesizes,
3576
3577         .vidioc_g_parm          = allegro_g_parm,
3578         .vidioc_s_parm          = allegro_s_parm,
3579
3580         .vidioc_subscribe_event = allegro_subscribe_event,
3581         .vidioc_unsubscribe_event = v4l2_event_unsubscribe,
3582 };
3583
3584 static const struct v4l2_file_operations allegro_fops = {
3585         .owner = THIS_MODULE,
3586         .open = allegro_open,
3587         .release = allegro_release,
3588         .poll = v4l2_m2m_fop_poll,
3589         .unlocked_ioctl = video_ioctl2,
3590         .mmap = v4l2_m2m_fop_mmap,
3591 };
3592
3593 static int allegro_register_device(struct allegro_dev *dev)
3594 {
3595         struct video_device *video_dev = &dev->video_dev;
3596
3597         strscpy(video_dev->name, "allegro", sizeof(video_dev->name));
3598         video_dev->fops = &allegro_fops;
3599         video_dev->ioctl_ops = &allegro_ioctl_ops;
3600         video_dev->release = video_device_release_empty;
3601         video_dev->lock = &dev->lock;
3602         video_dev->v4l2_dev = &dev->v4l2_dev;
3603         video_dev->vfl_dir = VFL_DIR_M2M;
3604         video_dev->device_caps = V4L2_CAP_VIDEO_M2M | V4L2_CAP_STREAMING;
3605         video_set_drvdata(video_dev, dev);
3606
3607         return video_register_device(video_dev, VFL_TYPE_VIDEO, 0);
3608 }
3609
3610 static void allegro_device_run(void *priv)
3611 {
3612         struct allegro_channel *channel = priv;
3613         struct allegro_dev *dev = channel->dev;
3614         struct vb2_v4l2_buffer *src_buf;
3615         struct vb2_v4l2_buffer *dst_buf;
3616         dma_addr_t src_y;
3617         dma_addr_t src_uv;
3618         dma_addr_t dst_addr;
3619         unsigned long dst_size;
3620         u64 src_handle;
3621         u64 dst_handle;
3622
3623         dst_buf = v4l2_m2m_dst_buf_remove(channel->fh.m2m_ctx);
3624         dst_addr = vb2_dma_contig_plane_dma_addr(&dst_buf->vb2_buf, 0);
3625         dst_size = vb2_plane_size(&dst_buf->vb2_buf, 0);
3626         dst_handle = allegro_put_buffer(channel, &channel->stream_shadow_list,
3627                                         dst_buf);
3628         allegro_mcu_send_put_stream_buffer(dev, channel, dst_addr, dst_size,
3629                                            dst_handle);
3630
3631         src_buf = v4l2_m2m_src_buf_remove(channel->fh.m2m_ctx);
3632         src_buf->sequence = channel->osequence++;
3633         src_y = vb2_dma_contig_plane_dma_addr(&src_buf->vb2_buf, 0);
3634         src_uv = src_y + (channel->stride * channel->height);
3635         src_handle = allegro_put_buffer(channel, &channel->source_shadow_list,
3636                                         src_buf);
3637         allegro_mcu_send_encode_frame(dev, channel, src_y, src_uv, src_handle);
3638
3639         v4l2_m2m_job_finish(dev->m2m_dev, channel->fh.m2m_ctx);
3640 }
3641
3642 static const struct v4l2_m2m_ops allegro_m2m_ops = {
3643         .device_run = allegro_device_run,
3644 };
3645
3646 static int allegro_mcu_hw_init(struct allegro_dev *dev,
3647                                const struct fw_info *info)
3648 {
3649         int err;
3650
3651         dev->mbox_command = allegro_mbox_init(dev, info->mailbox_cmd,
3652                                               info->mailbox_size);
3653         dev->mbox_status = allegro_mbox_init(dev, info->mailbox_status,
3654                                              info->mailbox_size);
3655         if (IS_ERR(dev->mbox_command) || IS_ERR(dev->mbox_status)) {
3656                 v4l2_err(&dev->v4l2_dev,
3657                          "failed to initialize mailboxes\n");
3658                 return -EIO;
3659         }
3660
3661         err = allegro_encoder_buffer_init(dev, &dev->encoder_buffer);
3662         dev->has_encoder_buffer = (err == 0);
3663         if (!dev->has_encoder_buffer)
3664                 v4l2_info(&dev->v4l2_dev, "encoder buffer not available\n");
3665
3666         allegro_mcu_enable_interrupts(dev);
3667
3668         /* The mcu sends INIT after reset. */
3669         allegro_mcu_start(dev);
3670         err = allegro_mcu_wait_for_init_timeout(dev, 5000);
3671         if (err < 0) {
3672                 v4l2_err(&dev->v4l2_dev,
3673                          "mcu did not send INIT after reset\n");
3674                 err = -EIO;
3675                 goto err_disable_interrupts;
3676         }
3677
3678         err = allegro_alloc_buffer(dev, &dev->suballocator,
3679                                    info->suballocator_size);
3680         if (err) {
3681                 v4l2_err(&dev->v4l2_dev,
3682                          "failed to allocate %zu bytes for suballocator\n",
3683                          info->suballocator_size);
3684                 goto err_reset_mcu;
3685         }
3686
3687         allegro_mcu_send_init(dev, dev->suballocator.paddr,
3688                               dev->suballocator.size);
3689         err = allegro_mcu_wait_for_init_timeout(dev, 5000);
3690         if (err < 0) {
3691                 v4l2_err(&dev->v4l2_dev,
3692                          "mcu failed to configure sub-allocator\n");
3693                 err = -EIO;
3694                 goto err_free_suballocator;
3695         }
3696
3697         return 0;
3698
3699 err_free_suballocator:
3700         allegro_free_buffer(dev, &dev->suballocator);
3701 err_reset_mcu:
3702         allegro_mcu_reset(dev);
3703 err_disable_interrupts:
3704         allegro_mcu_disable_interrupts(dev);
3705
3706         return err;
3707 }
3708
3709 static int allegro_mcu_hw_deinit(struct allegro_dev *dev)
3710 {
3711         int err;
3712
3713         err = allegro_mcu_reset(dev);
3714         if (err)
3715                 v4l2_warn(&dev->v4l2_dev,
3716                           "mcu failed to enter sleep state\n");
3717
3718         err = allegro_mcu_disable_interrupts(dev);
3719         if (err)
3720                 v4l2_warn(&dev->v4l2_dev,
3721                           "failed to disable interrupts\n");
3722
3723         allegro_free_buffer(dev, &dev->suballocator);
3724
3725         return 0;
3726 }
3727
3728 static void allegro_fw_callback(const struct firmware *fw, void *context)
3729 {
3730         struct allegro_dev *dev = context;
3731         const char *fw_codec_name = "/*(DEBLOBBED)*/";
3732         const struct firmware *fw_codec;
3733         int err;
3734
3735         if (!fw)
3736                 return;
3737
3738         v4l2_dbg(1, debug, &dev->v4l2_dev,
3739                  "requesting codec firmware '%s'\n", fw_codec_name);
3740         err = reject_firmware(&fw_codec, fw_codec_name, &dev->plat_dev->dev);
3741         if (err)
3742                 goto err_release_firmware;
3743
3744         dev->fw_info = allegro_get_firmware_info(dev, fw, fw_codec);
3745         if (!dev->fw_info) {
3746                 v4l2_err(&dev->v4l2_dev, "firmware is not supported\n");
3747                 goto err_release_firmware_codec;
3748         }
3749
3750         v4l2_info(&dev->v4l2_dev,
3751                   "using mcu firmware version '%s'\n", dev->fw_info->version);
3752
3753         pm_runtime_enable(&dev->plat_dev->dev);
3754         err = pm_runtime_resume_and_get(&dev->plat_dev->dev);
3755         if (err)
3756                 goto err_release_firmware_codec;
3757
3758         /* Ensure that the mcu is sleeping at the reset vector */
3759         err = allegro_mcu_reset(dev);
3760         if (err) {
3761                 v4l2_err(&dev->v4l2_dev, "failed to reset mcu\n");
3762                 goto err_suspend;
3763         }
3764
3765         allegro_copy_firmware(dev, fw->data, fw->size);
3766         allegro_copy_fw_codec(dev, fw_codec->data, fw_codec->size);
3767
3768         err = allegro_mcu_hw_init(dev, dev->fw_info);
3769         if (err) {
3770                 v4l2_err(&dev->v4l2_dev, "failed to initialize mcu\n");
3771                 goto err_free_fw_codec;
3772         }
3773
3774         dev->m2m_dev = v4l2_m2m_init(&allegro_m2m_ops);
3775         if (IS_ERR(dev->m2m_dev)) {
3776                 v4l2_err(&dev->v4l2_dev, "failed to init mem2mem device\n");
3777                 goto err_mcu_hw_deinit;
3778         }
3779
3780         err = allegro_register_device(dev);
3781         if (err) {
3782                 v4l2_err(&dev->v4l2_dev, "failed to register video device\n");
3783                 goto err_m2m_release;
3784         }
3785
3786         v4l2_dbg(1, debug, &dev->v4l2_dev,
3787                  "allegro codec registered as /dev/video%d\n",
3788                  dev->video_dev.num);
3789
3790         dev->initialized = true;
3791
3792         release_firmware(fw_codec);
3793         release_firmware(fw);
3794
3795         return;
3796
3797 err_m2m_release:
3798         v4l2_m2m_release(dev->m2m_dev);
3799         dev->m2m_dev = NULL;
3800 err_mcu_hw_deinit:
3801         allegro_mcu_hw_deinit(dev);
3802 err_free_fw_codec:
3803         allegro_free_fw_codec(dev);
3804 err_suspend:
3805         pm_runtime_put(&dev->plat_dev->dev);
3806         pm_runtime_disable(&dev->plat_dev->dev);
3807 err_release_firmware_codec:
3808         release_firmware(fw_codec);
3809 err_release_firmware:
3810         release_firmware(fw);
3811 }
3812
3813 static int allegro_firmware_request_nowait(struct allegro_dev *dev)
3814 {
3815         const char *fw = "/*(DEBLOBBED)*/";
3816
3817         v4l2_dbg(1, debug, &dev->v4l2_dev,
3818                  "requesting firmware '%s'\n", fw);
3819         return reject_firmware_nowait(THIS_MODULE, true, fw,
3820                                        &dev->plat_dev->dev, GFP_KERNEL, dev,
3821                                        allegro_fw_callback);
3822 }
3823
3824 static int allegro_probe(struct platform_device *pdev)
3825 {
3826         struct allegro_dev *dev;
3827         struct resource *res, *sram_res;
3828         int ret;
3829         int irq;
3830         void __iomem *regs, *sram_regs;
3831
3832         dev = devm_kzalloc(&pdev->dev, sizeof(*dev), GFP_KERNEL);
3833         if (!dev)
3834                 return -ENOMEM;
3835         dev->plat_dev = pdev;
3836         init_completion(&dev->init_complete);
3837         INIT_LIST_HEAD(&dev->channels);
3838
3839         mutex_init(&dev->lock);
3840
3841         dev->initialized = false;
3842
3843         res = platform_get_resource_byname(pdev, IORESOURCE_MEM, "regs");
3844         if (!res) {
3845                 dev_err(&pdev->dev,
3846                         "regs resource missing from device tree\n");
3847                 return -EINVAL;
3848         }
3849         regs = devm_ioremap(&pdev->dev, res->start, resource_size(res));
3850         if (!regs) {
3851                 dev_err(&pdev->dev, "failed to map registers\n");
3852                 return -ENOMEM;
3853         }
3854         dev->regmap = devm_regmap_init_mmio(&pdev->dev, regs,
3855                                             &allegro_regmap_config);
3856         if (IS_ERR(dev->regmap)) {
3857                 dev_err(&pdev->dev, "failed to init regmap\n");
3858                 return PTR_ERR(dev->regmap);
3859         }
3860
3861         sram_res = platform_get_resource_byname(pdev, IORESOURCE_MEM, "sram");
3862         if (!sram_res) {
3863                 dev_err(&pdev->dev,
3864                         "sram resource missing from device tree\n");
3865                 return -EINVAL;
3866         }
3867         sram_regs = devm_ioremap(&pdev->dev,
3868                                  sram_res->start,
3869                                  resource_size(sram_res));
3870         if (!sram_regs) {
3871                 dev_err(&pdev->dev, "failed to map sram\n");
3872                 return -ENOMEM;
3873         }
3874         dev->sram = devm_regmap_init_mmio(&pdev->dev, sram_regs,
3875                                           &allegro_sram_config);
3876         if (IS_ERR(dev->sram)) {
3877                 dev_err(&pdev->dev, "failed to init sram\n");
3878                 return PTR_ERR(dev->sram);
3879         }
3880
3881         dev->settings = syscon_regmap_lookup_by_compatible("xlnx,vcu-settings");
3882         if (IS_ERR(dev->settings))
3883                 dev_warn(&pdev->dev, "failed to open settings\n");
3884
3885         dev->clk_core = devm_clk_get(&pdev->dev, "core_clk");
3886         if (IS_ERR(dev->clk_core))
3887                 return PTR_ERR(dev->clk_core);
3888
3889         dev->clk_mcu = devm_clk_get(&pdev->dev, "mcu_clk");
3890         if (IS_ERR(dev->clk_mcu))
3891                 return PTR_ERR(dev->clk_mcu);
3892
3893         irq = platform_get_irq(pdev, 0);
3894         if (irq < 0)
3895                 return irq;
3896         ret = devm_request_threaded_irq(&pdev->dev, irq,
3897                                         allegro_hardirq,
3898                                         allegro_irq_thread,
3899                                         IRQF_SHARED, dev_name(&pdev->dev), dev);
3900         if (ret < 0) {
3901                 dev_err(&pdev->dev, "failed to request irq: %d\n", ret);
3902                 return ret;
3903         }
3904
3905         ret = v4l2_device_register(&pdev->dev, &dev->v4l2_dev);
3906         if (ret)
3907                 return ret;
3908
3909         platform_set_drvdata(pdev, dev);
3910
3911         ret = allegro_firmware_request_nowait(dev);
3912         if (ret < 0) {
3913                 v4l2_err(&dev->v4l2_dev,
3914                          "failed to request firmware: %d\n", ret);
3915                 return ret;
3916         }
3917
3918         return 0;
3919 }
3920
3921 static void allegro_remove(struct platform_device *pdev)
3922 {
3923         struct allegro_dev *dev = platform_get_drvdata(pdev);
3924
3925         if (dev->initialized) {
3926                 video_unregister_device(&dev->video_dev);
3927                 if (dev->m2m_dev)
3928                         v4l2_m2m_release(dev->m2m_dev);
3929                 allegro_mcu_hw_deinit(dev);
3930                 allegro_free_fw_codec(dev);
3931         }
3932
3933         pm_runtime_put(&dev->plat_dev->dev);
3934         pm_runtime_disable(&dev->plat_dev->dev);
3935
3936         v4l2_device_unregister(&dev->v4l2_dev);
3937 }
3938
3939 static int allegro_runtime_resume(struct device *device)
3940 {
3941         struct allegro_dev *dev = dev_get_drvdata(device);
3942         struct regmap *settings = dev->settings;
3943         unsigned int clk_mcu;
3944         unsigned int clk_core;
3945         int err;
3946
3947         if (!settings)
3948                 return -EINVAL;
3949
3950 #define MHZ_TO_HZ(freq) ((freq) * 1000 * 1000)
3951
3952         err = regmap_read(settings, VCU_CORE_CLK, &clk_core);
3953         if (err < 0)
3954                 return err;
3955         err = clk_set_rate(dev->clk_core, MHZ_TO_HZ(clk_core));
3956         if (err < 0)
3957                 return err;
3958         err = clk_prepare_enable(dev->clk_core);
3959         if (err)
3960                 return err;
3961
3962         err = regmap_read(settings, VCU_MCU_CLK, &clk_mcu);
3963         if (err < 0)
3964                 goto disable_clk_core;
3965         err = clk_set_rate(dev->clk_mcu, MHZ_TO_HZ(clk_mcu));
3966         if (err < 0)
3967                 goto disable_clk_core;
3968         err = clk_prepare_enable(dev->clk_mcu);
3969         if (err)
3970                 goto disable_clk_core;
3971
3972 #undef MHZ_TO_HZ
3973
3974         return 0;
3975
3976 disable_clk_core:
3977         clk_disable_unprepare(dev->clk_core);
3978
3979         return err;
3980 }
3981
3982 static int allegro_runtime_suspend(struct device *device)
3983 {
3984         struct allegro_dev *dev = dev_get_drvdata(device);
3985
3986         clk_disable_unprepare(dev->clk_mcu);
3987         clk_disable_unprepare(dev->clk_core);
3988
3989         return 0;
3990 }
3991
3992 static const struct of_device_id allegro_dt_ids[] = {
3993         { .compatible = "allegro,al5e-1.1" },
3994         { /* sentinel */ }
3995 };
3996
3997 MODULE_DEVICE_TABLE(of, allegro_dt_ids);
3998
3999 static const struct dev_pm_ops allegro_pm_ops = {
4000         .runtime_resume = allegro_runtime_resume,
4001         .runtime_suspend = allegro_runtime_suspend,
4002 };
4003
4004 static struct platform_driver allegro_driver = {
4005         .probe = allegro_probe,
4006         .remove_new = allegro_remove,
4007         .driver = {
4008                 .name = "allegro",
4009                 .of_match_table = allegro_dt_ids,
4010                 .pm = &allegro_pm_ops,
4011         },
4012 };
4013
4014 module_platform_driver(allegro_driver);
4015
4016 MODULE_LICENSE("GPL");
4017 MODULE_AUTHOR("Michael Tretter <kernel@pengutronix.de>");
4018 MODULE_DESCRIPTION("Allegro DVT encoder driver");