Merge tag 'fixes_for_v4.20-rc5' of git://git.kernel.org/pub/scm/linux/kernel/git...
[sfrench/cifs-2.6.git] / drivers / media / pci / intel / ipu3 / ipu3-cio2.c
1 // SPDX-License-Identifier: GPL-2.0
2 /*
3  * Copyright (C) 2017 Intel Corporation
4  *
5  * Based partially on Intel IPU4 driver written by
6  *  Sakari Ailus <sakari.ailus@linux.intel.com>
7  *  Samu Onkalo <samu.onkalo@intel.com>
8  *  Jouni Högander <jouni.hogander@intel.com>
9  *  Jouni Ukkonen <jouni.ukkonen@intel.com>
10  *  Antti Laakso <antti.laakso@intel.com>
11  * et al.
12  *
13  */
14
15 #include <linux/delay.h>
16 #include <linux/interrupt.h>
17 #include <linux/module.h>
18 #include <linux/pci.h>
19 #include <linux/pm_runtime.h>
20 #include <linux/property.h>
21 #include <linux/vmalloc.h>
22 #include <media/v4l2-ctrls.h>
23 #include <media/v4l2-device.h>
24 #include <media/v4l2-event.h>
25 #include <media/v4l2-fwnode.h>
26 #include <media/v4l2-ioctl.h>
27 #include <media/videobuf2-dma-sg.h>
28
29 #include "ipu3-cio2.h"
30
31 struct ipu3_cio2_fmt {
32         u32 mbus_code;
33         u32 fourcc;
34         u8 mipicode;
35 };
36
37 /*
38  * These are raw formats used in Intel's third generation of
39  * Image Processing Unit known as IPU3.
40  * 10bit raw bayer packed, 32 bytes for every 25 pixels,
41  * last LSB 6 bits unused.
42  */
43 static const struct ipu3_cio2_fmt formats[] = {
44         {       /* put default entry at beginning */
45                 .mbus_code      = MEDIA_BUS_FMT_SGRBG10_1X10,
46                 .fourcc         = V4L2_PIX_FMT_IPU3_SGRBG10,
47                 .mipicode       = 0x2b,
48         }, {
49                 .mbus_code      = MEDIA_BUS_FMT_SGBRG10_1X10,
50                 .fourcc         = V4L2_PIX_FMT_IPU3_SGBRG10,
51                 .mipicode       = 0x2b,
52         }, {
53                 .mbus_code      = MEDIA_BUS_FMT_SBGGR10_1X10,
54                 .fourcc         = V4L2_PIX_FMT_IPU3_SBGGR10,
55                 .mipicode       = 0x2b,
56         }, {
57                 .mbus_code      = MEDIA_BUS_FMT_SRGGB10_1X10,
58                 .fourcc         = V4L2_PIX_FMT_IPU3_SRGGB10,
59                 .mipicode       = 0x2b,
60         },
61 };
62
63 /*
64  * cio2_find_format - lookup color format by fourcc or/and media bus code
65  * @pixelformat: fourcc to match, ignored if null
66  * @mbus_code: media bus code to match, ignored if null
67  */
68 static const struct ipu3_cio2_fmt *cio2_find_format(const u32 *pixelformat,
69                                                     const u32 *mbus_code)
70 {
71         unsigned int i;
72
73         for (i = 0; i < ARRAY_SIZE(formats); i++) {
74                 if (pixelformat && *pixelformat != formats[i].fourcc)
75                         continue;
76                 if (mbus_code && *mbus_code != formats[i].mbus_code)
77                         continue;
78
79                 return &formats[i];
80         }
81
82         return NULL;
83 }
84
85 static inline u32 cio2_bytesperline(const unsigned int width)
86 {
87         /*
88          * 64 bytes for every 50 pixels, the line length
89          * in bytes is multiple of 64 (line end alignment).
90          */
91         return DIV_ROUND_UP(width, 50) * 64;
92 }
93
94 /**************** FBPT operations ****************/
95
96 static void cio2_fbpt_exit_dummy(struct cio2_device *cio2)
97 {
98         if (cio2->dummy_lop) {
99                 dma_free_coherent(&cio2->pci_dev->dev, CIO2_PAGE_SIZE,
100                                   cio2->dummy_lop, cio2->dummy_lop_bus_addr);
101                 cio2->dummy_lop = NULL;
102         }
103         if (cio2->dummy_page) {
104                 dma_free_coherent(&cio2->pci_dev->dev, CIO2_PAGE_SIZE,
105                                   cio2->dummy_page, cio2->dummy_page_bus_addr);
106                 cio2->dummy_page = NULL;
107         }
108 }
109
110 static int cio2_fbpt_init_dummy(struct cio2_device *cio2)
111 {
112         unsigned int i;
113
114         cio2->dummy_page = dma_alloc_coherent(&cio2->pci_dev->dev,
115                                               CIO2_PAGE_SIZE,
116                                               &cio2->dummy_page_bus_addr,
117                                               GFP_KERNEL);
118         cio2->dummy_lop = dma_alloc_coherent(&cio2->pci_dev->dev,
119                                              CIO2_PAGE_SIZE,
120                                              &cio2->dummy_lop_bus_addr,
121                                              GFP_KERNEL);
122         if (!cio2->dummy_page || !cio2->dummy_lop) {
123                 cio2_fbpt_exit_dummy(cio2);
124                 return -ENOMEM;
125         }
126         /*
127          * List of Pointers(LOP) contains 1024x32b pointers to 4KB page each
128          * Initialize each entry to dummy_page bus base address.
129          */
130         for (i = 0; i < CIO2_PAGE_SIZE / sizeof(*cio2->dummy_lop); i++)
131                 cio2->dummy_lop[i] = cio2->dummy_page_bus_addr >> PAGE_SHIFT;
132
133         return 0;
134 }
135
136 static void cio2_fbpt_entry_enable(struct cio2_device *cio2,
137                                    struct cio2_fbpt_entry entry[CIO2_MAX_LOPS])
138 {
139         /*
140          * The CPU first initializes some fields in fbpt, then sets
141          * the VALID bit, this barrier is to ensure that the DMA(device)
142          * does not see the VALID bit enabled before other fields are
143          * initialized; otherwise it could lead to havoc.
144          */
145         dma_wmb();
146
147         /*
148          * Request interrupts for start and completion
149          * Valid bit is applicable only to 1st entry
150          */
151         entry[0].first_entry.ctrl = CIO2_FBPT_CTRL_VALID |
152                 CIO2_FBPT_CTRL_IOC | CIO2_FBPT_CTRL_IOS;
153 }
154
155 /* Initialize fpbt entries to point to dummy frame */
156 static void cio2_fbpt_entry_init_dummy(struct cio2_device *cio2,
157                                        struct cio2_fbpt_entry
158                                        entry[CIO2_MAX_LOPS])
159 {
160         unsigned int i;
161
162         entry[0].first_entry.first_page_offset = 0;
163         entry[1].second_entry.num_of_pages =
164                 CIO2_PAGE_SIZE / sizeof(u32) * CIO2_MAX_LOPS;
165         entry[1].second_entry.last_page_available_bytes = CIO2_PAGE_SIZE - 1;
166
167         for (i = 0; i < CIO2_MAX_LOPS; i++)
168                 entry[i].lop_page_addr = cio2->dummy_lop_bus_addr >> PAGE_SHIFT;
169
170         cio2_fbpt_entry_enable(cio2, entry);
171 }
172
173 /* Initialize fpbt entries to point to a given buffer */
174 static void cio2_fbpt_entry_init_buf(struct cio2_device *cio2,
175                                      struct cio2_buffer *b,
176                                      struct cio2_fbpt_entry
177                                      entry[CIO2_MAX_LOPS])
178 {
179         struct vb2_buffer *vb = &b->vbb.vb2_buf;
180         unsigned int length = vb->planes[0].length;
181         int remaining, i;
182
183         entry[0].first_entry.first_page_offset = b->offset;
184         remaining = length + entry[0].first_entry.first_page_offset;
185         entry[1].second_entry.num_of_pages =
186                 DIV_ROUND_UP(remaining, CIO2_PAGE_SIZE);
187         /*
188          * last_page_available_bytes has the offset of the last byte in the
189          * last page which is still accessible by DMA. DMA cannot access
190          * beyond this point. Valid range for this is from 0 to 4095.
191          * 0 indicates 1st byte in the page is DMA accessible.
192          * 4095 (CIO2_PAGE_SIZE - 1) means every single byte in the last page
193          * is available for DMA transfer.
194          */
195         entry[1].second_entry.last_page_available_bytes =
196                         (remaining & ~PAGE_MASK) ?
197                                 (remaining & ~PAGE_MASK) - 1 :
198                                 CIO2_PAGE_SIZE - 1;
199         /* Fill FBPT */
200         remaining = length;
201         i = 0;
202         while (remaining > 0) {
203                 entry->lop_page_addr = b->lop_bus_addr[i] >> PAGE_SHIFT;
204                 remaining -= CIO2_PAGE_SIZE / sizeof(u32) * CIO2_PAGE_SIZE;
205                 entry++;
206                 i++;
207         }
208
209         /*
210          * The first not meaningful FBPT entry should point to a valid LOP
211          */
212         entry->lop_page_addr = cio2->dummy_lop_bus_addr >> PAGE_SHIFT;
213
214         cio2_fbpt_entry_enable(cio2, entry);
215 }
216
217 static int cio2_fbpt_init(struct cio2_device *cio2, struct cio2_queue *q)
218 {
219         struct device *dev = &cio2->pci_dev->dev;
220
221         q->fbpt = dma_zalloc_coherent(dev, CIO2_FBPT_SIZE, &q->fbpt_bus_addr,
222                                       GFP_KERNEL);
223         if (!q->fbpt)
224                 return -ENOMEM;
225
226         return 0;
227 }
228
229 static void cio2_fbpt_exit(struct cio2_queue *q, struct device *dev)
230 {
231         dma_free_coherent(dev, CIO2_FBPT_SIZE, q->fbpt, q->fbpt_bus_addr);
232 }
233
234 /**************** CSI2 hardware setup ****************/
235
236 /*
237  * The CSI2 receiver has several parameters affecting
238  * the receiver timings. These depend on the MIPI bus frequency
239  * F in Hz (sensor transmitter rate) as follows:
240  *     register value = (A/1e9 + B * UI) / COUNT_ACC
241  * where
242  *      UI = 1 / (2 * F) in seconds
243  *      COUNT_ACC = counter accuracy in seconds
244  *      For IPU3 COUNT_ACC = 0.0625
245  *
246  * A and B are coefficients from the table below,
247  * depending whether the register minimum or maximum value is
248  * calculated.
249  *                                     Minimum     Maximum
250  * Clock lane                          A     B     A     B
251  * reg_rx_csi_dly_cnt_termen_clane     0     0    38     0
252  * reg_rx_csi_dly_cnt_settle_clane    95    -8   300   -16
253  * Data lanes
254  * reg_rx_csi_dly_cnt_termen_dlane0    0     0    35     4
255  * reg_rx_csi_dly_cnt_settle_dlane0   85    -2   145    -6
256  * reg_rx_csi_dly_cnt_termen_dlane1    0     0    35     4
257  * reg_rx_csi_dly_cnt_settle_dlane1   85    -2   145    -6
258  * reg_rx_csi_dly_cnt_termen_dlane2    0     0    35     4
259  * reg_rx_csi_dly_cnt_settle_dlane2   85    -2   145    -6
260  * reg_rx_csi_dly_cnt_termen_dlane3    0     0    35     4
261  * reg_rx_csi_dly_cnt_settle_dlane3   85    -2   145    -6
262  *
263  * We use the minimum values of both A and B.
264  */
265
266 /*
267  * shift for keeping value range suitable for 32-bit integer arithmetics
268  */
269 #define LIMIT_SHIFT     8
270
271 static s32 cio2_rx_timing(s32 a, s32 b, s64 freq, int def)
272 {
273         const u32 accinv = 16; /* invert of counter resolution */
274         const u32 uiinv = 500000000; /* 1e9 / 2 */
275         s32 r;
276
277         freq >>= LIMIT_SHIFT;
278
279         if (WARN_ON(freq <= 0 || freq > S32_MAX))
280                 return def;
281         /*
282          * b could be 0, -2 or -8, so |accinv * b| is always
283          * less than (1 << ds) and thus |r| < 500000000.
284          */
285         r = accinv * b * (uiinv >> LIMIT_SHIFT);
286         r = r / (s32)freq;
287         /* max value of a is 95 */
288         r += accinv * a;
289
290         return r;
291 };
292
293 /* Calculate the the delay value for termination enable of clock lane HS Rx */
294 static int cio2_csi2_calc_timing(struct cio2_device *cio2, struct cio2_queue *q,
295                                  struct cio2_csi2_timing *timing)
296 {
297         struct device *dev = &cio2->pci_dev->dev;
298         struct v4l2_querymenu qm = {.id = V4L2_CID_LINK_FREQ, };
299         struct v4l2_ctrl *link_freq;
300         s64 freq;
301         int r;
302
303         if (!q->sensor)
304                 return -ENODEV;
305
306         link_freq = v4l2_ctrl_find(q->sensor->ctrl_handler, V4L2_CID_LINK_FREQ);
307         if (!link_freq) {
308                 dev_err(dev, "failed to find LINK_FREQ\n");
309                 return -EPIPE;
310         }
311
312         qm.index = v4l2_ctrl_g_ctrl(link_freq);
313         r = v4l2_querymenu(q->sensor->ctrl_handler, &qm);
314         if (r) {
315                 dev_err(dev, "failed to get menu item\n");
316                 return r;
317         }
318
319         if (!qm.value) {
320                 dev_err(dev, "error invalid link_freq\n");
321                 return -EINVAL;
322         }
323         freq = qm.value;
324
325         timing->clk_termen = cio2_rx_timing(CIO2_CSIRX_DLY_CNT_TERMEN_CLANE_A,
326                                             CIO2_CSIRX_DLY_CNT_TERMEN_CLANE_B,
327                                             freq,
328                                             CIO2_CSIRX_DLY_CNT_TERMEN_DEFAULT);
329         timing->clk_settle = cio2_rx_timing(CIO2_CSIRX_DLY_CNT_SETTLE_CLANE_A,
330                                             CIO2_CSIRX_DLY_CNT_SETTLE_CLANE_B,
331                                             freq,
332                                             CIO2_CSIRX_DLY_CNT_SETTLE_DEFAULT);
333         timing->dat_termen = cio2_rx_timing(CIO2_CSIRX_DLY_CNT_TERMEN_DLANE_A,
334                                             CIO2_CSIRX_DLY_CNT_TERMEN_DLANE_B,
335                                             freq,
336                                             CIO2_CSIRX_DLY_CNT_TERMEN_DEFAULT);
337         timing->dat_settle = cio2_rx_timing(CIO2_CSIRX_DLY_CNT_SETTLE_DLANE_A,
338                                             CIO2_CSIRX_DLY_CNT_SETTLE_DLANE_B,
339                                             freq,
340                                             CIO2_CSIRX_DLY_CNT_SETTLE_DEFAULT);
341
342         dev_dbg(dev, "freq ct value is %d\n", timing->clk_termen);
343         dev_dbg(dev, "freq cs value is %d\n", timing->clk_settle);
344         dev_dbg(dev, "freq dt value is %d\n", timing->dat_termen);
345         dev_dbg(dev, "freq ds value is %d\n", timing->dat_settle);
346
347         return 0;
348 };
349
350 static int cio2_hw_init(struct cio2_device *cio2, struct cio2_queue *q)
351 {
352         static const int NUM_VCS = 4;
353         static const int SID;   /* Stream id */
354         static const int ENTRY;
355         static const int FBPT_WIDTH = DIV_ROUND_UP(CIO2_MAX_LOPS,
356                                         CIO2_FBPT_SUBENTRY_UNIT);
357         const u32 num_buffers1 = CIO2_MAX_BUFFERS - 1;
358         const struct ipu3_cio2_fmt *fmt;
359         void __iomem *const base = cio2->base;
360         u8 lanes, csi2bus = q->csi2.port;
361         u8 sensor_vc = SENSOR_VIR_CH_DFLT;
362         struct cio2_csi2_timing timing;
363         int i, r;
364
365         fmt = cio2_find_format(NULL, &q->subdev_fmt.code);
366         if (!fmt)
367                 return -EINVAL;
368
369         lanes = q->csi2.lanes;
370
371         r = cio2_csi2_calc_timing(cio2, q, &timing);
372         if (r)
373                 return r;
374
375         writel(timing.clk_termen, q->csi_rx_base +
376                 CIO2_REG_CSIRX_DLY_CNT_TERMEN(CIO2_CSIRX_DLY_CNT_CLANE_IDX));
377         writel(timing.clk_settle, q->csi_rx_base +
378                 CIO2_REG_CSIRX_DLY_CNT_SETTLE(CIO2_CSIRX_DLY_CNT_CLANE_IDX));
379
380         for (i = 0; i < lanes; i++) {
381                 writel(timing.dat_termen, q->csi_rx_base +
382                         CIO2_REG_CSIRX_DLY_CNT_TERMEN(i));
383                 writel(timing.dat_settle, q->csi_rx_base +
384                         CIO2_REG_CSIRX_DLY_CNT_SETTLE(i));
385         }
386
387         writel(CIO2_PBM_WMCTRL1_MIN_2CK |
388                CIO2_PBM_WMCTRL1_MID1_2CK |
389                CIO2_PBM_WMCTRL1_MID2_2CK, base + CIO2_REG_PBM_WMCTRL1);
390         writel(CIO2_PBM_WMCTRL2_HWM_2CK << CIO2_PBM_WMCTRL2_HWM_2CK_SHIFT |
391                CIO2_PBM_WMCTRL2_LWM_2CK << CIO2_PBM_WMCTRL2_LWM_2CK_SHIFT |
392                CIO2_PBM_WMCTRL2_OBFFWM_2CK <<
393                CIO2_PBM_WMCTRL2_OBFFWM_2CK_SHIFT |
394                CIO2_PBM_WMCTRL2_TRANSDYN << CIO2_PBM_WMCTRL2_TRANSDYN_SHIFT |
395                CIO2_PBM_WMCTRL2_OBFF_MEM_EN, base + CIO2_REG_PBM_WMCTRL2);
396         writel(CIO2_PBM_ARB_CTRL_LANES_DIV <<
397                CIO2_PBM_ARB_CTRL_LANES_DIV_SHIFT |
398                CIO2_PBM_ARB_CTRL_LE_EN |
399                CIO2_PBM_ARB_CTRL_PLL_POST_SHTDN <<
400                CIO2_PBM_ARB_CTRL_PLL_POST_SHTDN_SHIFT |
401                CIO2_PBM_ARB_CTRL_PLL_AHD_WK_UP <<
402                CIO2_PBM_ARB_CTRL_PLL_AHD_WK_UP_SHIFT,
403                base + CIO2_REG_PBM_ARB_CTRL);
404         writel(CIO2_CSIRX_STATUS_DLANE_HS_MASK,
405                q->csi_rx_base + CIO2_REG_CSIRX_STATUS_DLANE_HS);
406         writel(CIO2_CSIRX_STATUS_DLANE_LP_MASK,
407                q->csi_rx_base + CIO2_REG_CSIRX_STATUS_DLANE_LP);
408
409         writel(CIO2_FB_HPLL_FREQ, base + CIO2_REG_FB_HPLL_FREQ);
410         writel(CIO2_ISCLK_RATIO, base + CIO2_REG_ISCLK_RATIO);
411
412         /* Configure MIPI backend */
413         for (i = 0; i < NUM_VCS; i++)
414                 writel(1, q->csi_rx_base + CIO2_REG_MIPIBE_SP_LUT_ENTRY(i));
415
416         /* There are 16 short packet LUT entry */
417         for (i = 0; i < 16; i++)
418                 writel(CIO2_MIPIBE_LP_LUT_ENTRY_DISREGARD,
419                        q->csi_rx_base + CIO2_REG_MIPIBE_LP_LUT_ENTRY(i));
420         writel(CIO2_MIPIBE_GLOBAL_LUT_DISREGARD,
421                q->csi_rx_base + CIO2_REG_MIPIBE_GLOBAL_LUT_DISREGARD);
422
423         writel(CIO2_INT_EN_EXT_IE_MASK, base + CIO2_REG_INT_EN_EXT_IE);
424         writel(CIO2_IRQCTRL_MASK, q->csi_rx_base + CIO2_REG_IRQCTRL_MASK);
425         writel(CIO2_IRQCTRL_MASK, q->csi_rx_base + CIO2_REG_IRQCTRL_ENABLE);
426         writel(0, q->csi_rx_base + CIO2_REG_IRQCTRL_EDGE);
427         writel(0, q->csi_rx_base + CIO2_REG_IRQCTRL_LEVEL_NOT_PULSE);
428         writel(CIO2_INT_EN_EXT_OE_MASK, base + CIO2_REG_INT_EN_EXT_OE);
429
430         writel(CIO2_REG_INT_EN_IRQ | CIO2_INT_IOC(CIO2_DMA_CHAN) |
431                CIO2_REG_INT_EN_IOS(CIO2_DMA_CHAN),
432                base + CIO2_REG_INT_EN);
433
434         writel((CIO2_PXM_PXF_FMT_CFG_BPP_10 | CIO2_PXM_PXF_FMT_CFG_PCK_64B)
435                << CIO2_PXM_PXF_FMT_CFG_SID0_SHIFT,
436                base + CIO2_REG_PXM_PXF_FMT_CFG0(csi2bus));
437         writel(SID << CIO2_MIPIBE_LP_LUT_ENTRY_SID_SHIFT |
438                sensor_vc << CIO2_MIPIBE_LP_LUT_ENTRY_VC_SHIFT |
439                fmt->mipicode << CIO2_MIPIBE_LP_LUT_ENTRY_FORMAT_TYPE_SHIFT,
440                q->csi_rx_base + CIO2_REG_MIPIBE_LP_LUT_ENTRY(ENTRY));
441         writel(0, q->csi_rx_base + CIO2_REG_MIPIBE_COMP_FORMAT(sensor_vc));
442         writel(0, q->csi_rx_base + CIO2_REG_MIPIBE_FORCE_RAW8);
443         writel(0, base + CIO2_REG_PXM_SID2BID0(csi2bus));
444
445         writel(lanes, q->csi_rx_base + CIO2_REG_CSIRX_NOF_ENABLED_LANES);
446         writel(CIO2_CGC_PRIM_TGE |
447                CIO2_CGC_SIDE_TGE |
448                CIO2_CGC_XOSC_TGE |
449                CIO2_CGC_D3I3_TGE |
450                CIO2_CGC_CSI2_INTERFRAME_TGE |
451                CIO2_CGC_CSI2_PORT_DCGE |
452                CIO2_CGC_SIDE_DCGE |
453                CIO2_CGC_PRIM_DCGE |
454                CIO2_CGC_ROSC_DCGE |
455                CIO2_CGC_XOSC_DCGE |
456                CIO2_CGC_CLKGATE_HOLDOFF << CIO2_CGC_CLKGATE_HOLDOFF_SHIFT |
457                CIO2_CGC_CSI_CLKGATE_HOLDOFF
458                << CIO2_CGC_CSI_CLKGATE_HOLDOFF_SHIFT, base + CIO2_REG_CGC);
459         writel(CIO2_LTRCTRL_LTRDYNEN, base + CIO2_REG_LTRCTRL);
460         writel(CIO2_LTRVAL0_VAL << CIO2_LTRVAL02_VAL_SHIFT |
461                CIO2_LTRVAL0_SCALE << CIO2_LTRVAL02_SCALE_SHIFT |
462                CIO2_LTRVAL1_VAL << CIO2_LTRVAL13_VAL_SHIFT |
463                CIO2_LTRVAL1_SCALE << CIO2_LTRVAL13_SCALE_SHIFT,
464                base + CIO2_REG_LTRVAL01);
465         writel(CIO2_LTRVAL2_VAL << CIO2_LTRVAL02_VAL_SHIFT |
466                CIO2_LTRVAL2_SCALE << CIO2_LTRVAL02_SCALE_SHIFT |
467                CIO2_LTRVAL3_VAL << CIO2_LTRVAL13_VAL_SHIFT |
468                CIO2_LTRVAL3_SCALE << CIO2_LTRVAL13_SCALE_SHIFT,
469                base + CIO2_REG_LTRVAL23);
470
471         for (i = 0; i < CIO2_NUM_DMA_CHAN; i++) {
472                 writel(0, base + CIO2_REG_CDMABA(i));
473                 writel(0, base + CIO2_REG_CDMAC0(i));
474                 writel(0, base + CIO2_REG_CDMAC1(i));
475         }
476
477         /* Enable DMA */
478         writel(q->fbpt_bus_addr >> PAGE_SHIFT,
479                base + CIO2_REG_CDMABA(CIO2_DMA_CHAN));
480
481         writel(num_buffers1 << CIO2_CDMAC0_FBPT_LEN_SHIFT |
482                FBPT_WIDTH << CIO2_CDMAC0_FBPT_WIDTH_SHIFT |
483                CIO2_CDMAC0_DMA_INTR_ON_FE |
484                CIO2_CDMAC0_FBPT_UPDATE_FIFO_FULL |
485                CIO2_CDMAC0_DMA_EN |
486                CIO2_CDMAC0_DMA_INTR_ON_FS |
487                CIO2_CDMAC0_DMA_HALTED, base + CIO2_REG_CDMAC0(CIO2_DMA_CHAN));
488
489         writel(1 << CIO2_CDMAC1_LINENUMUPDATE_SHIFT,
490                base + CIO2_REG_CDMAC1(CIO2_DMA_CHAN));
491
492         writel(0, base + CIO2_REG_PBM_FOPN_ABORT);
493
494         writel(CIO2_PXM_FRF_CFG_CRC_TH << CIO2_PXM_FRF_CFG_CRC_TH_SHIFT |
495                CIO2_PXM_FRF_CFG_MSK_ECC_DPHY_NR |
496                CIO2_PXM_FRF_CFG_MSK_ECC_RE |
497                CIO2_PXM_FRF_CFG_MSK_ECC_DPHY_NE,
498                base + CIO2_REG_PXM_FRF_CFG(q->csi2.port));
499
500         /* Clear interrupts */
501         writel(CIO2_IRQCTRL_MASK, q->csi_rx_base + CIO2_REG_IRQCTRL_CLEAR);
502         writel(~0, base + CIO2_REG_INT_STS_EXT_OE);
503         writel(~0, base + CIO2_REG_INT_STS_EXT_IE);
504         writel(~0, base + CIO2_REG_INT_STS);
505
506         /* Enable devices, starting from the last device in the pipe */
507         writel(1, q->csi_rx_base + CIO2_REG_MIPIBE_ENABLE);
508         writel(1, q->csi_rx_base + CIO2_REG_CSIRX_ENABLE);
509
510         return 0;
511 }
512
513 static void cio2_hw_exit(struct cio2_device *cio2, struct cio2_queue *q)
514 {
515         void __iomem *base = cio2->base;
516         unsigned int i, maxloops = 1000;
517
518         /* Disable CSI receiver and MIPI backend devices */
519         writel(0, q->csi_rx_base + CIO2_REG_IRQCTRL_MASK);
520         writel(0, q->csi_rx_base + CIO2_REG_IRQCTRL_ENABLE);
521         writel(0, q->csi_rx_base + CIO2_REG_CSIRX_ENABLE);
522         writel(0, q->csi_rx_base + CIO2_REG_MIPIBE_ENABLE);
523
524         /* Halt DMA */
525         writel(0, base + CIO2_REG_CDMAC0(CIO2_DMA_CHAN));
526         do {
527                 if (readl(base + CIO2_REG_CDMAC0(CIO2_DMA_CHAN)) &
528                     CIO2_CDMAC0_DMA_HALTED)
529                         break;
530                 usleep_range(1000, 2000);
531         } while (--maxloops);
532         if (!maxloops)
533                 dev_err(&cio2->pci_dev->dev,
534                         "DMA %i can not be halted\n", CIO2_DMA_CHAN);
535
536         for (i = 0; i < CIO2_NUM_PORTS; i++) {
537                 writel(readl(base + CIO2_REG_PXM_FRF_CFG(i)) |
538                        CIO2_PXM_FRF_CFG_ABORT, base + CIO2_REG_PXM_FRF_CFG(i));
539                 writel(readl(base + CIO2_REG_PBM_FOPN_ABORT) |
540                        CIO2_PBM_FOPN_ABORT(i), base + CIO2_REG_PBM_FOPN_ABORT);
541         }
542 }
543
544 static void cio2_buffer_done(struct cio2_device *cio2, unsigned int dma_chan)
545 {
546         struct device *dev = &cio2->pci_dev->dev;
547         struct cio2_queue *q = cio2->cur_queue;
548         int buffers_found = 0;
549         u64 ns = ktime_get_ns();
550
551         if (dma_chan >= CIO2_QUEUES) {
552                 dev_err(dev, "bad DMA channel %i\n", dma_chan);
553                 return;
554         }
555
556         /* Find out which buffer(s) are ready */
557         do {
558                 struct cio2_fbpt_entry *const entry =
559                         &q->fbpt[q->bufs_first * CIO2_MAX_LOPS];
560                 struct cio2_buffer *b;
561
562                 if (entry->first_entry.ctrl & CIO2_FBPT_CTRL_VALID)
563                         break;
564
565                 b = q->bufs[q->bufs_first];
566                 if (b) {
567                         unsigned int bytes = entry[1].second_entry.num_of_bytes;
568
569                         q->bufs[q->bufs_first] = NULL;
570                         atomic_dec(&q->bufs_queued);
571                         dev_dbg(&cio2->pci_dev->dev,
572                                 "buffer %i done\n", b->vbb.vb2_buf.index);
573
574                         b->vbb.vb2_buf.timestamp = ns;
575                         b->vbb.field = V4L2_FIELD_NONE;
576                         b->vbb.sequence = atomic_read(&q->frame_sequence);
577                         if (b->vbb.vb2_buf.planes[0].length != bytes)
578                                 dev_warn(dev, "buffer length is %d received %d\n",
579                                          b->vbb.vb2_buf.planes[0].length,
580                                          bytes);
581                         vb2_buffer_done(&b->vbb.vb2_buf, VB2_BUF_STATE_DONE);
582                 }
583                 atomic_inc(&q->frame_sequence);
584                 cio2_fbpt_entry_init_dummy(cio2, entry);
585                 q->bufs_first = (q->bufs_first + 1) % CIO2_MAX_BUFFERS;
586                 buffers_found++;
587         } while (1);
588
589         if (buffers_found == 0)
590                 dev_warn(&cio2->pci_dev->dev,
591                          "no ready buffers found on DMA channel %u\n",
592                          dma_chan);
593 }
594
595 static void cio2_queue_event_sof(struct cio2_device *cio2, struct cio2_queue *q)
596 {
597         /*
598          * For the user space camera control algorithms it is essential
599          * to know when the reception of a frame has begun. That's often
600          * the best timing information to get from the hardware.
601          */
602         struct v4l2_event event = {
603                 .type = V4L2_EVENT_FRAME_SYNC,
604                 .u.frame_sync.frame_sequence = atomic_read(&q->frame_sequence),
605         };
606
607         v4l2_event_queue(q->subdev.devnode, &event);
608 }
609
610 static const char *const cio2_irq_errs[] = {
611         "single packet header error corrected",
612         "multiple packet header errors detected",
613         "payload checksum (CRC) error",
614         "fifo overflow",
615         "reserved short packet data type detected",
616         "reserved long packet data type detected",
617         "incomplete long packet detected",
618         "frame sync error",
619         "line sync error",
620         "DPHY start of transmission error",
621         "DPHY synchronization error",
622         "escape mode error",
623         "escape mode trigger event",
624         "escape mode ultra-low power state for data lane(s)",
625         "escape mode ultra-low power state exit for clock lane",
626         "inter-frame short packet discarded",
627         "inter-frame long packet discarded",
628         "non-matching Long Packet stalled",
629 };
630
631 static const char *const cio2_port_errs[] = {
632         "ECC recoverable",
633         "DPHY not recoverable",
634         "ECC not recoverable",
635         "CRC error",
636         "INTERFRAMEDATA",
637         "PKT2SHORT",
638         "PKT2LONG",
639 };
640
641 static void cio2_irq_handle_once(struct cio2_device *cio2, u32 int_status)
642 {
643         void __iomem *const base = cio2->base;
644         struct device *dev = &cio2->pci_dev->dev;
645
646         if (int_status & CIO2_INT_IOOE) {
647                 /*
648                  * Interrupt on Output Error:
649                  * 1) SRAM is full and FS received, or
650                  * 2) An invalid bit detected by DMA.
651                  */
652                 u32 oe_status, oe_clear;
653
654                 oe_clear = readl(base + CIO2_REG_INT_STS_EXT_OE);
655                 oe_status = oe_clear;
656
657                 if (oe_status & CIO2_INT_EXT_OE_DMAOE_MASK) {
658                         dev_err(dev, "DMA output error: 0x%x\n",
659                                 (oe_status & CIO2_INT_EXT_OE_DMAOE_MASK)
660                                 >> CIO2_INT_EXT_OE_DMAOE_SHIFT);
661                         oe_status &= ~CIO2_INT_EXT_OE_DMAOE_MASK;
662                 }
663                 if (oe_status & CIO2_INT_EXT_OE_OES_MASK) {
664                         dev_err(dev, "DMA output error on CSI2 buses: 0x%x\n",
665                                 (oe_status & CIO2_INT_EXT_OE_OES_MASK)
666                                 >> CIO2_INT_EXT_OE_OES_SHIFT);
667                         oe_status &= ~CIO2_INT_EXT_OE_OES_MASK;
668                 }
669                 writel(oe_clear, base + CIO2_REG_INT_STS_EXT_OE);
670                 if (oe_status)
671                         dev_warn(dev, "unknown interrupt 0x%x on OE\n",
672                                  oe_status);
673                 int_status &= ~CIO2_INT_IOOE;
674         }
675
676         if (int_status & CIO2_INT_IOC_MASK) {
677                 /* DMA IO done -- frame ready */
678                 u32 clr = 0;
679                 unsigned int d;
680
681                 for (d = 0; d < CIO2_NUM_DMA_CHAN; d++)
682                         if (int_status & CIO2_INT_IOC(d)) {
683                                 clr |= CIO2_INT_IOC(d);
684                                 cio2_buffer_done(cio2, d);
685                         }
686                 int_status &= ~clr;
687         }
688
689         if (int_status & CIO2_INT_IOS_IOLN_MASK) {
690                 /* DMA IO starts or reached specified line */
691                 u32 clr = 0;
692                 unsigned int d;
693
694                 for (d = 0; d < CIO2_NUM_DMA_CHAN; d++)
695                         if (int_status & CIO2_INT_IOS_IOLN(d)) {
696                                 clr |= CIO2_INT_IOS_IOLN(d);
697                                 if (d == CIO2_DMA_CHAN)
698                                         cio2_queue_event_sof(cio2,
699                                                              cio2->cur_queue);
700                         }
701                 int_status &= ~clr;
702         }
703
704         if (int_status & (CIO2_INT_IOIE | CIO2_INT_IOIRQ)) {
705                 /* CSI2 receiver (error) interrupt */
706                 u32 ie_status, ie_clear;
707                 unsigned int port;
708
709                 ie_clear = readl(base + CIO2_REG_INT_STS_EXT_IE);
710                 ie_status = ie_clear;
711
712                 for (port = 0; port < CIO2_NUM_PORTS; port++) {
713                         u32 port_status = (ie_status >> (port * 8)) & 0xff;
714                         u32 err_mask = BIT_MASK(ARRAY_SIZE(cio2_port_errs)) - 1;
715                         void __iomem *const csi_rx_base =
716                                                 base + CIO2_REG_PIPE_BASE(port);
717                         unsigned int i;
718
719                         while (port_status & err_mask) {
720                                 i = ffs(port_status) - 1;
721                                 dev_err(dev, "port %i error %s\n",
722                                         port, cio2_port_errs[i]);
723                                 ie_status &= ~BIT(port * 8 + i);
724                                 port_status &= ~BIT(i);
725                         }
726
727                         if (ie_status & CIO2_INT_EXT_IE_IRQ(port)) {
728                                 u32 csi2_status, csi2_clear;
729
730                                 csi2_status = readl(csi_rx_base +
731                                                 CIO2_REG_IRQCTRL_STATUS);
732                                 csi2_clear = csi2_status;
733                                 err_mask =
734                                         BIT_MASK(ARRAY_SIZE(cio2_irq_errs)) - 1;
735
736                                 while (csi2_status & err_mask) {
737                                         i = ffs(csi2_status) - 1;
738                                         dev_err(dev,
739                                                 "CSI-2 receiver port %i: %s\n",
740                                                         port, cio2_irq_errs[i]);
741                                         csi2_status &= ~BIT(i);
742                                 }
743
744                                 writel(csi2_clear,
745                                        csi_rx_base + CIO2_REG_IRQCTRL_CLEAR);
746                                 if (csi2_status)
747                                         dev_warn(dev,
748                                                  "unknown CSI2 error 0x%x on port %i\n",
749                                                  csi2_status, port);
750
751                                 ie_status &= ~CIO2_INT_EXT_IE_IRQ(port);
752                         }
753                 }
754
755                 writel(ie_clear, base + CIO2_REG_INT_STS_EXT_IE);
756                 if (ie_status)
757                         dev_warn(dev, "unknown interrupt 0x%x on IE\n",
758                                  ie_status);
759
760                 int_status &= ~(CIO2_INT_IOIE | CIO2_INT_IOIRQ);
761         }
762
763         if (int_status)
764                 dev_warn(dev, "unknown interrupt 0x%x on INT\n", int_status);
765 }
766
767 static irqreturn_t cio2_irq(int irq, void *cio2_ptr)
768 {
769         struct cio2_device *cio2 = cio2_ptr;
770         void __iomem *const base = cio2->base;
771         struct device *dev = &cio2->pci_dev->dev;
772         u32 int_status;
773
774         int_status = readl(base + CIO2_REG_INT_STS);
775         dev_dbg(dev, "isr enter - interrupt status 0x%x\n", int_status);
776         if (!int_status)
777                 return IRQ_NONE;
778
779         do {
780                 writel(int_status, base + CIO2_REG_INT_STS);
781                 cio2_irq_handle_once(cio2, int_status);
782                 int_status = readl(base + CIO2_REG_INT_STS);
783                 if (int_status)
784                         dev_dbg(dev, "pending status 0x%x\n", int_status);
785         } while (int_status);
786
787         return IRQ_HANDLED;
788 }
789
790 /**************** Videobuf2 interface ****************/
791
792 static void cio2_vb2_return_all_buffers(struct cio2_queue *q,
793                                         enum vb2_buffer_state state)
794 {
795         unsigned int i;
796
797         for (i = 0; i < CIO2_MAX_BUFFERS; i++) {
798                 if (q->bufs[i]) {
799                         atomic_dec(&q->bufs_queued);
800                         vb2_buffer_done(&q->bufs[i]->vbb.vb2_buf,
801                                         state);
802                 }
803         }
804 }
805
806 static int cio2_vb2_queue_setup(struct vb2_queue *vq,
807                                 unsigned int *num_buffers,
808                                 unsigned int *num_planes,
809                                 unsigned int sizes[],
810                                 struct device *alloc_devs[])
811 {
812         struct cio2_device *cio2 = vb2_get_drv_priv(vq);
813         struct cio2_queue *q = vb2q_to_cio2_queue(vq);
814         unsigned int i;
815
816         *num_planes = q->format.num_planes;
817
818         for (i = 0; i < *num_planes; ++i) {
819                 sizes[i] = q->format.plane_fmt[i].sizeimage;
820                 alloc_devs[i] = &cio2->pci_dev->dev;
821         }
822
823         *num_buffers = clamp_val(*num_buffers, 1, CIO2_MAX_BUFFERS);
824
825         /* Initialize buffer queue */
826         for (i = 0; i < CIO2_MAX_BUFFERS; i++) {
827                 q->bufs[i] = NULL;
828                 cio2_fbpt_entry_init_dummy(cio2, &q->fbpt[i * CIO2_MAX_LOPS]);
829         }
830         atomic_set(&q->bufs_queued, 0);
831         q->bufs_first = 0;
832         q->bufs_next = 0;
833
834         return 0;
835 }
836
837 /* Called after each buffer is allocated */
838 static int cio2_vb2_buf_init(struct vb2_buffer *vb)
839 {
840         struct cio2_device *cio2 = vb2_get_drv_priv(vb->vb2_queue);
841         struct device *dev = &cio2->pci_dev->dev;
842         struct cio2_buffer *b =
843                 container_of(vb, struct cio2_buffer, vbb.vb2_buf);
844         static const unsigned int entries_per_page =
845                 CIO2_PAGE_SIZE / sizeof(u32);
846         unsigned int pages = DIV_ROUND_UP(vb->planes[0].length, CIO2_PAGE_SIZE);
847         unsigned int lops = DIV_ROUND_UP(pages + 1, entries_per_page);
848         struct sg_table *sg;
849         struct sg_page_iter sg_iter;
850         int i, j;
851
852         if (lops <= 0 || lops > CIO2_MAX_LOPS) {
853                 dev_err(dev, "%s: bad buffer size (%i)\n", __func__,
854                         vb->planes[0].length);
855                 return -ENOSPC;         /* Should never happen */
856         }
857
858         memset(b->lop, 0, sizeof(b->lop));
859         /* Allocate LOP table */
860         for (i = 0; i < lops; i++) {
861                 b->lop[i] = dma_alloc_coherent(dev, CIO2_PAGE_SIZE,
862                                                &b->lop_bus_addr[i], GFP_KERNEL);
863                 if (!b->lop[i])
864                         goto fail;
865         }
866
867         /* Fill LOP */
868         sg = vb2_dma_sg_plane_desc(vb, 0);
869         if (!sg)
870                 return -ENOMEM;
871
872         if (sg->nents && sg->sgl)
873                 b->offset = sg->sgl->offset;
874
875         i = j = 0;
876         for_each_sg_page(sg->sgl, &sg_iter, sg->nents, 0) {
877                 if (!pages--)
878                         break;
879                 b->lop[i][j] = sg_page_iter_dma_address(&sg_iter) >> PAGE_SHIFT;
880                 j++;
881                 if (j == entries_per_page) {
882                         i++;
883                         j = 0;
884                 }
885         }
886
887         b->lop[i][j] = cio2->dummy_page_bus_addr >> PAGE_SHIFT;
888         return 0;
889 fail:
890         for (i--; i >= 0; i--)
891                 dma_free_coherent(dev, CIO2_PAGE_SIZE,
892                                   b->lop[i], b->lop_bus_addr[i]);
893         return -ENOMEM;
894 }
895
896 /* Transfer buffer ownership to cio2 */
897 static void cio2_vb2_buf_queue(struct vb2_buffer *vb)
898 {
899         struct cio2_device *cio2 = vb2_get_drv_priv(vb->vb2_queue);
900         struct cio2_queue *q =
901                 container_of(vb->vb2_queue, struct cio2_queue, vbq);
902         struct cio2_buffer *b =
903                 container_of(vb, struct cio2_buffer, vbb.vb2_buf);
904         struct cio2_fbpt_entry *entry;
905         unsigned long flags;
906         unsigned int i, j, next = q->bufs_next;
907         int bufs_queued = atomic_inc_return(&q->bufs_queued);
908         u32 fbpt_rp;
909
910         dev_dbg(&cio2->pci_dev->dev, "queue buffer %d\n", vb->index);
911
912         /*
913          * This code queues the buffer to the CIO2 DMA engine, which starts
914          * running once streaming has started. It is possible that this code
915          * gets pre-empted due to increased CPU load. Upon this, the driver
916          * does not get an opportunity to queue new buffers to the CIO2 DMA
917          * engine. When the DMA engine encounters an FBPT entry without the
918          * VALID bit set, the DMA engine halts, which requires a restart of
919          * the DMA engine and sensor, to continue streaming.
920          * This is not desired and is highly unlikely given that there are
921          * 32 FBPT entries that the DMA engine needs to process, to run into
922          * an FBPT entry, without the VALID bit set. We try to mitigate this
923          * by disabling interrupts for the duration of this queueing.
924          */
925         local_irq_save(flags);
926
927         fbpt_rp = (readl(cio2->base + CIO2_REG_CDMARI(CIO2_DMA_CHAN))
928                    >> CIO2_CDMARI_FBPT_RP_SHIFT)
929                    & CIO2_CDMARI_FBPT_RP_MASK;
930
931         /*
932          * fbpt_rp is the fbpt entry that the dma is currently working
933          * on, but since it could jump to next entry at any time,
934          * assume that we might already be there.
935          */
936         fbpt_rp = (fbpt_rp + 1) % CIO2_MAX_BUFFERS;
937
938         if (bufs_queued <= 1 || fbpt_rp == next)
939                 /* Buffers were drained */
940                 next = (fbpt_rp + 1) % CIO2_MAX_BUFFERS;
941
942         for (i = 0; i < CIO2_MAX_BUFFERS; i++) {
943                 /*
944                  * We have allocated CIO2_MAX_BUFFERS circularly for the
945                  * hw, the user has requested N buffer queue. The driver
946                  * ensures N <= CIO2_MAX_BUFFERS and guarantees that whenever
947                  * user queues a buffer, there necessarily is a free buffer.
948                  */
949                 if (!q->bufs[next]) {
950                         q->bufs[next] = b;
951                         entry = &q->fbpt[next * CIO2_MAX_LOPS];
952                         cio2_fbpt_entry_init_buf(cio2, b, entry);
953                         local_irq_restore(flags);
954                         q->bufs_next = (next + 1) % CIO2_MAX_BUFFERS;
955                         for (j = 0; j < vb->num_planes; j++)
956                                 vb2_set_plane_payload(vb, j,
957                                         q->format.plane_fmt[j].sizeimage);
958                         return;
959                 }
960
961                 dev_dbg(&cio2->pci_dev->dev, "entry %i was full!\n", next);
962                 next = (next + 1) % CIO2_MAX_BUFFERS;
963         }
964
965         local_irq_restore(flags);
966         dev_err(&cio2->pci_dev->dev, "error: all cio2 entries were full!\n");
967         atomic_dec(&q->bufs_queued);
968         vb2_buffer_done(vb, VB2_BUF_STATE_ERROR);
969 }
970
971 /* Called when each buffer is freed */
972 static void cio2_vb2_buf_cleanup(struct vb2_buffer *vb)
973 {
974         struct cio2_device *cio2 = vb2_get_drv_priv(vb->vb2_queue);
975         struct cio2_buffer *b =
976                 container_of(vb, struct cio2_buffer, vbb.vb2_buf);
977         unsigned int i;
978
979         /* Free LOP table */
980         for (i = 0; i < CIO2_MAX_LOPS; i++) {
981                 if (b->lop[i])
982                         dma_free_coherent(&cio2->pci_dev->dev, CIO2_PAGE_SIZE,
983                                           b->lop[i], b->lop_bus_addr[i]);
984         }
985 }
986
987 static int cio2_vb2_start_streaming(struct vb2_queue *vq, unsigned int count)
988 {
989         struct cio2_queue *q = vb2q_to_cio2_queue(vq);
990         struct cio2_device *cio2 = vb2_get_drv_priv(vq);
991         int r;
992
993         cio2->cur_queue = q;
994         atomic_set(&q->frame_sequence, 0);
995
996         r = pm_runtime_get_sync(&cio2->pci_dev->dev);
997         if (r < 0) {
998                 dev_info(&cio2->pci_dev->dev, "failed to set power %d\n", r);
999                 pm_runtime_put_noidle(&cio2->pci_dev->dev);
1000                 return r;
1001         }
1002
1003         r = media_pipeline_start(&q->vdev.entity, &q->pipe);
1004         if (r)
1005                 goto fail_pipeline;
1006
1007         r = cio2_hw_init(cio2, q);
1008         if (r)
1009                 goto fail_hw;
1010
1011         /* Start streaming on sensor */
1012         r = v4l2_subdev_call(q->sensor, video, s_stream, 1);
1013         if (r)
1014                 goto fail_csi2_subdev;
1015
1016         cio2->streaming = true;
1017
1018         return 0;
1019
1020 fail_csi2_subdev:
1021         cio2_hw_exit(cio2, q);
1022 fail_hw:
1023         media_pipeline_stop(&q->vdev.entity);
1024 fail_pipeline:
1025         dev_dbg(&cio2->pci_dev->dev, "failed to start streaming (%d)\n", r);
1026         cio2_vb2_return_all_buffers(q, VB2_BUF_STATE_QUEUED);
1027         pm_runtime_put(&cio2->pci_dev->dev);
1028
1029         return r;
1030 }
1031
1032 static void cio2_vb2_stop_streaming(struct vb2_queue *vq)
1033 {
1034         struct cio2_queue *q = vb2q_to_cio2_queue(vq);
1035         struct cio2_device *cio2 = vb2_get_drv_priv(vq);
1036
1037         if (v4l2_subdev_call(q->sensor, video, s_stream, 0))
1038                 dev_err(&cio2->pci_dev->dev,
1039                         "failed to stop sensor streaming\n");
1040
1041         cio2_hw_exit(cio2, q);
1042         synchronize_irq(cio2->pci_dev->irq);
1043         cio2_vb2_return_all_buffers(q, VB2_BUF_STATE_ERROR);
1044         media_pipeline_stop(&q->vdev.entity);
1045         pm_runtime_put(&cio2->pci_dev->dev);
1046         cio2->streaming = false;
1047 }
1048
1049 static const struct vb2_ops cio2_vb2_ops = {
1050         .buf_init = cio2_vb2_buf_init,
1051         .buf_queue = cio2_vb2_buf_queue,
1052         .buf_cleanup = cio2_vb2_buf_cleanup,
1053         .queue_setup = cio2_vb2_queue_setup,
1054         .start_streaming = cio2_vb2_start_streaming,
1055         .stop_streaming = cio2_vb2_stop_streaming,
1056         .wait_prepare = vb2_ops_wait_prepare,
1057         .wait_finish = vb2_ops_wait_finish,
1058 };
1059
1060 /**************** V4L2 interface ****************/
1061
1062 static int cio2_v4l2_querycap(struct file *file, void *fh,
1063                               struct v4l2_capability *cap)
1064 {
1065         struct cio2_device *cio2 = video_drvdata(file);
1066
1067         strscpy(cap->driver, CIO2_NAME, sizeof(cap->driver));
1068         strscpy(cap->card, CIO2_DEVICE_NAME, sizeof(cap->card));
1069         snprintf(cap->bus_info, sizeof(cap->bus_info),
1070                  "PCI:%s", pci_name(cio2->pci_dev));
1071
1072         return 0;
1073 }
1074
1075 static int cio2_v4l2_enum_fmt(struct file *file, void *fh,
1076                               struct v4l2_fmtdesc *f)
1077 {
1078         if (f->index >= ARRAY_SIZE(formats))
1079                 return -EINVAL;
1080
1081         f->pixelformat = formats[f->index].fourcc;
1082
1083         return 0;
1084 }
1085
1086 /* The format is validated in cio2_video_link_validate() */
1087 static int cio2_v4l2_g_fmt(struct file *file, void *fh, struct v4l2_format *f)
1088 {
1089         struct cio2_queue *q = file_to_cio2_queue(file);
1090
1091         f->fmt.pix_mp = q->format;
1092
1093         return 0;
1094 }
1095
1096 static int cio2_v4l2_try_fmt(struct file *file, void *fh, struct v4l2_format *f)
1097 {
1098         const struct ipu3_cio2_fmt *fmt;
1099         struct v4l2_pix_format_mplane *mpix = &f->fmt.pix_mp;
1100
1101         fmt = cio2_find_format(&mpix->pixelformat, NULL);
1102         if (!fmt)
1103                 fmt = &formats[0];
1104
1105         /* Only supports up to 4224x3136 */
1106         if (mpix->width > CIO2_IMAGE_MAX_WIDTH)
1107                 mpix->width = CIO2_IMAGE_MAX_WIDTH;
1108         if (mpix->height > CIO2_IMAGE_MAX_LENGTH)
1109                 mpix->height = CIO2_IMAGE_MAX_LENGTH;
1110
1111         mpix->num_planes = 1;
1112         mpix->pixelformat = fmt->fourcc;
1113         mpix->colorspace = V4L2_COLORSPACE_RAW;
1114         mpix->field = V4L2_FIELD_NONE;
1115         memset(mpix->reserved, 0, sizeof(mpix->reserved));
1116         mpix->plane_fmt[0].bytesperline = cio2_bytesperline(mpix->width);
1117         mpix->plane_fmt[0].sizeimage = mpix->plane_fmt[0].bytesperline *
1118                                                         mpix->height;
1119         memset(mpix->plane_fmt[0].reserved, 0,
1120                sizeof(mpix->plane_fmt[0].reserved));
1121
1122         /* use default */
1123         mpix->ycbcr_enc = V4L2_YCBCR_ENC_DEFAULT;
1124         mpix->quantization = V4L2_QUANTIZATION_DEFAULT;
1125         mpix->xfer_func = V4L2_XFER_FUNC_DEFAULT;
1126
1127         return 0;
1128 }
1129
1130 static int cio2_v4l2_s_fmt(struct file *file, void *fh, struct v4l2_format *f)
1131 {
1132         struct cio2_queue *q = file_to_cio2_queue(file);
1133
1134         cio2_v4l2_try_fmt(file, fh, f);
1135         q->format = f->fmt.pix_mp;
1136
1137         return 0;
1138 }
1139
1140 static int
1141 cio2_video_enum_input(struct file *file, void *fh, struct v4l2_input *input)
1142 {
1143         if (input->index > 0)
1144                 return -EINVAL;
1145
1146         strscpy(input->name, "camera", sizeof(input->name));
1147         input->type = V4L2_INPUT_TYPE_CAMERA;
1148
1149         return 0;
1150 }
1151
1152 static int
1153 cio2_video_g_input(struct file *file, void *fh, unsigned int *input)
1154 {
1155         *input = 0;
1156
1157         return 0;
1158 }
1159
1160 static int
1161 cio2_video_s_input(struct file *file, void *fh, unsigned int input)
1162 {
1163         return input == 0 ? 0 : -EINVAL;
1164 }
1165
1166 static const struct v4l2_file_operations cio2_v4l2_fops = {
1167         .owner = THIS_MODULE,
1168         .unlocked_ioctl = video_ioctl2,
1169         .open = v4l2_fh_open,
1170         .release = vb2_fop_release,
1171         .poll = vb2_fop_poll,
1172         .mmap = vb2_fop_mmap,
1173 };
1174
1175 static const struct v4l2_ioctl_ops cio2_v4l2_ioctl_ops = {
1176         .vidioc_querycap = cio2_v4l2_querycap,
1177         .vidioc_enum_fmt_vid_cap_mplane = cio2_v4l2_enum_fmt,
1178         .vidioc_g_fmt_vid_cap_mplane = cio2_v4l2_g_fmt,
1179         .vidioc_s_fmt_vid_cap_mplane = cio2_v4l2_s_fmt,
1180         .vidioc_try_fmt_vid_cap_mplane = cio2_v4l2_try_fmt,
1181         .vidioc_reqbufs = vb2_ioctl_reqbufs,
1182         .vidioc_create_bufs = vb2_ioctl_create_bufs,
1183         .vidioc_prepare_buf = vb2_ioctl_prepare_buf,
1184         .vidioc_querybuf = vb2_ioctl_querybuf,
1185         .vidioc_qbuf = vb2_ioctl_qbuf,
1186         .vidioc_dqbuf = vb2_ioctl_dqbuf,
1187         .vidioc_streamon = vb2_ioctl_streamon,
1188         .vidioc_streamoff = vb2_ioctl_streamoff,
1189         .vidioc_expbuf = vb2_ioctl_expbuf,
1190         .vidioc_enum_input = cio2_video_enum_input,
1191         .vidioc_g_input = cio2_video_g_input,
1192         .vidioc_s_input = cio2_video_s_input,
1193 };
1194
1195 static int cio2_subdev_subscribe_event(struct v4l2_subdev *sd,
1196                                        struct v4l2_fh *fh,
1197                                        struct v4l2_event_subscription *sub)
1198 {
1199         if (sub->type != V4L2_EVENT_FRAME_SYNC)
1200                 return -EINVAL;
1201
1202         /* Line number. For now only zero accepted. */
1203         if (sub->id != 0)
1204                 return -EINVAL;
1205
1206         return v4l2_event_subscribe(fh, sub, 0, NULL);
1207 }
1208
1209 static int cio2_subdev_open(struct v4l2_subdev *sd, struct v4l2_subdev_fh *fh)
1210 {
1211         struct v4l2_mbus_framefmt *format;
1212         const struct v4l2_mbus_framefmt fmt_default = {
1213                 .width = 1936,
1214                 .height = 1096,
1215                 .code = formats[0].mbus_code,
1216                 .field = V4L2_FIELD_NONE,
1217                 .colorspace = V4L2_COLORSPACE_RAW,
1218                 .ycbcr_enc = V4L2_YCBCR_ENC_DEFAULT,
1219                 .quantization = V4L2_QUANTIZATION_DEFAULT,
1220                 .xfer_func = V4L2_XFER_FUNC_DEFAULT,
1221         };
1222
1223         /* Initialize try_fmt */
1224         format = v4l2_subdev_get_try_format(sd, fh->pad, CIO2_PAD_SINK);
1225         *format = fmt_default;
1226
1227         /* same as sink */
1228         format = v4l2_subdev_get_try_format(sd, fh->pad, CIO2_PAD_SOURCE);
1229         *format = fmt_default;
1230
1231         return 0;
1232 }
1233
1234 /*
1235  * cio2_subdev_get_fmt - Handle get format by pads subdev method
1236  * @sd : pointer to v4l2 subdev structure
1237  * @cfg: V4L2 subdev pad config
1238  * @fmt: pointer to v4l2 subdev format structure
1239  * return -EINVAL or zero on success
1240  */
1241 static int cio2_subdev_get_fmt(struct v4l2_subdev *sd,
1242                                struct v4l2_subdev_pad_config *cfg,
1243                                struct v4l2_subdev_format *fmt)
1244 {
1245         struct cio2_queue *q = container_of(sd, struct cio2_queue, subdev);
1246         struct v4l2_subdev_format format;
1247         int ret;
1248
1249         if (fmt->which == V4L2_SUBDEV_FORMAT_TRY) {
1250                 fmt->format = *v4l2_subdev_get_try_format(sd, cfg, fmt->pad);
1251                 return 0;
1252         }
1253
1254         if (fmt->pad == CIO2_PAD_SINK) {
1255                 format.which = V4L2_SUBDEV_FORMAT_ACTIVE;
1256                 ret = v4l2_subdev_call(sd, pad, get_fmt, NULL,
1257                                        &format);
1258
1259                 if (ret)
1260                         return ret;
1261                 /* update colorspace etc */
1262                 q->subdev_fmt.colorspace = format.format.colorspace;
1263                 q->subdev_fmt.ycbcr_enc = format.format.ycbcr_enc;
1264                 q->subdev_fmt.quantization = format.format.quantization;
1265                 q->subdev_fmt.xfer_func = format.format.xfer_func;
1266         }
1267
1268         fmt->format = q->subdev_fmt;
1269
1270         return 0;
1271 }
1272
1273 /*
1274  * cio2_subdev_set_fmt - Handle set format by pads subdev method
1275  * @sd : pointer to v4l2 subdev structure
1276  * @cfg: V4L2 subdev pad config
1277  * @fmt: pointer to v4l2 subdev format structure
1278  * return -EINVAL or zero on success
1279  */
1280 static int cio2_subdev_set_fmt(struct v4l2_subdev *sd,
1281                                struct v4l2_subdev_pad_config *cfg,
1282                                struct v4l2_subdev_format *fmt)
1283 {
1284         struct cio2_queue *q = container_of(sd, struct cio2_queue, subdev);
1285
1286         /*
1287          * Only allow setting sink pad format;
1288          * source always propagates from sink
1289          */
1290         if (fmt->pad == CIO2_PAD_SOURCE)
1291                 return cio2_subdev_get_fmt(sd, cfg, fmt);
1292
1293         if (fmt->which == V4L2_SUBDEV_FORMAT_TRY) {
1294                 *v4l2_subdev_get_try_format(sd, cfg, fmt->pad) = fmt->format;
1295         } else {
1296                 /* It's the sink, allow changing frame size */
1297                 q->subdev_fmt.width = fmt->format.width;
1298                 q->subdev_fmt.height = fmt->format.height;
1299                 q->subdev_fmt.code = fmt->format.code;
1300                 fmt->format = q->subdev_fmt;
1301         }
1302
1303         return 0;
1304 }
1305
1306 static int cio2_subdev_enum_mbus_code(struct v4l2_subdev *sd,
1307                                       struct v4l2_subdev_pad_config *cfg,
1308                                       struct v4l2_subdev_mbus_code_enum *code)
1309 {
1310         if (code->index >= ARRAY_SIZE(formats))
1311                 return -EINVAL;
1312
1313         code->code = formats[code->index].mbus_code;
1314         return 0;
1315 }
1316
1317 static int cio2_subdev_link_validate_get_format(struct media_pad *pad,
1318                                                 struct v4l2_subdev_format *fmt)
1319 {
1320         if (is_media_entity_v4l2_subdev(pad->entity)) {
1321                 struct v4l2_subdev *sd =
1322                         media_entity_to_v4l2_subdev(pad->entity);
1323
1324                 fmt->which = V4L2_SUBDEV_FORMAT_ACTIVE;
1325                 fmt->pad = pad->index;
1326                 return v4l2_subdev_call(sd, pad, get_fmt, NULL, fmt);
1327         }
1328
1329         return -EINVAL;
1330 }
1331
1332 static int cio2_video_link_validate(struct media_link *link)
1333 {
1334         struct video_device *vd = container_of(link->sink->entity,
1335                                                 struct video_device, entity);
1336         struct cio2_queue *q = container_of(vd, struct cio2_queue, vdev);
1337         struct cio2_device *cio2 = video_get_drvdata(vd);
1338         struct v4l2_subdev_format source_fmt;
1339         int ret;
1340
1341         if (!media_entity_remote_pad(link->sink->entity->pads)) {
1342                 dev_info(&cio2->pci_dev->dev,
1343                          "video node %s pad not connected\n", vd->name);
1344                 return -ENOTCONN;
1345         }
1346
1347         ret = cio2_subdev_link_validate_get_format(link->source, &source_fmt);
1348         if (ret < 0)
1349                 return 0;
1350
1351         if (source_fmt.format.width != q->format.width ||
1352             source_fmt.format.height != q->format.height) {
1353                 dev_err(&cio2->pci_dev->dev,
1354                         "Wrong width or height %ux%u (%ux%u expected)\n",
1355                         q->format.width, q->format.height,
1356                         source_fmt.format.width, source_fmt.format.height);
1357                 return -EINVAL;
1358         }
1359
1360         if (!cio2_find_format(&q->format.pixelformat, &source_fmt.format.code))
1361                 return -EINVAL;
1362
1363         return 0;
1364 }
1365
1366 static const struct v4l2_subdev_core_ops cio2_subdev_core_ops = {
1367         .subscribe_event = cio2_subdev_subscribe_event,
1368         .unsubscribe_event = v4l2_event_subdev_unsubscribe,
1369 };
1370
1371 static const struct v4l2_subdev_internal_ops cio2_subdev_internal_ops = {
1372         .open = cio2_subdev_open,
1373 };
1374
1375 static const struct v4l2_subdev_pad_ops cio2_subdev_pad_ops = {
1376         .link_validate = v4l2_subdev_link_validate_default,
1377         .get_fmt = cio2_subdev_get_fmt,
1378         .set_fmt = cio2_subdev_set_fmt,
1379         .enum_mbus_code = cio2_subdev_enum_mbus_code,
1380 };
1381
1382 static const struct v4l2_subdev_ops cio2_subdev_ops = {
1383         .core = &cio2_subdev_core_ops,
1384         .pad = &cio2_subdev_pad_ops,
1385 };
1386
1387 /******* V4L2 sub-device asynchronous registration callbacks***********/
1388
1389 struct sensor_async_subdev {
1390         struct v4l2_async_subdev asd;
1391         struct csi2_bus_info csi2;
1392 };
1393
1394 /* The .bound() notifier callback when a match is found */
1395 static int cio2_notifier_bound(struct v4l2_async_notifier *notifier,
1396                                struct v4l2_subdev *sd,
1397                                struct v4l2_async_subdev *asd)
1398 {
1399         struct cio2_device *cio2 = container_of(notifier,
1400                                         struct cio2_device, notifier);
1401         struct sensor_async_subdev *s_asd = container_of(asd,
1402                                         struct sensor_async_subdev, asd);
1403         struct cio2_queue *q;
1404
1405         if (cio2->queue[s_asd->csi2.port].sensor)
1406                 return -EBUSY;
1407
1408         q = &cio2->queue[s_asd->csi2.port];
1409
1410         q->csi2 = s_asd->csi2;
1411         q->sensor = sd;
1412         q->csi_rx_base = cio2->base + CIO2_REG_PIPE_BASE(q->csi2.port);
1413
1414         return 0;
1415 }
1416
1417 /* The .unbind callback */
1418 static void cio2_notifier_unbind(struct v4l2_async_notifier *notifier,
1419                                  struct v4l2_subdev *sd,
1420                                  struct v4l2_async_subdev *asd)
1421 {
1422         struct cio2_device *cio2 = container_of(notifier,
1423                                                 struct cio2_device, notifier);
1424         struct sensor_async_subdev *s_asd = container_of(asd,
1425                                         struct sensor_async_subdev, asd);
1426
1427         cio2->queue[s_asd->csi2.port].sensor = NULL;
1428 }
1429
1430 /* .complete() is called after all subdevices have been located */
1431 static int cio2_notifier_complete(struct v4l2_async_notifier *notifier)
1432 {
1433         struct cio2_device *cio2 = container_of(notifier, struct cio2_device,
1434                                                 notifier);
1435         struct sensor_async_subdev *s_asd;
1436         struct v4l2_async_subdev *asd;
1437         struct cio2_queue *q;
1438         unsigned int pad;
1439         int ret;
1440
1441         list_for_each_entry(asd, &cio2->notifier.asd_list, asd_list) {
1442                 s_asd = container_of(asd, struct sensor_async_subdev, asd);
1443                 q = &cio2->queue[s_asd->csi2.port];
1444
1445                 for (pad = 0; pad < q->sensor->entity.num_pads; pad++)
1446                         if (q->sensor->entity.pads[pad].flags &
1447                                                 MEDIA_PAD_FL_SOURCE)
1448                                 break;
1449
1450                 if (pad == q->sensor->entity.num_pads) {
1451                         dev_err(&cio2->pci_dev->dev,
1452                                 "failed to find src pad for %s\n",
1453                                 q->sensor->name);
1454                         return -ENXIO;
1455                 }
1456
1457                 ret = media_create_pad_link(
1458                                 &q->sensor->entity, pad,
1459                                 &q->subdev.entity, CIO2_PAD_SINK,
1460                                 0);
1461                 if (ret) {
1462                         dev_err(&cio2->pci_dev->dev,
1463                                 "failed to create link for %s\n",
1464                                 q->sensor->name);
1465                         return ret;
1466                 }
1467         }
1468
1469         return v4l2_device_register_subdev_nodes(&cio2->v4l2_dev);
1470 }
1471
1472 static const struct v4l2_async_notifier_operations cio2_async_ops = {
1473         .bound = cio2_notifier_bound,
1474         .unbind = cio2_notifier_unbind,
1475         .complete = cio2_notifier_complete,
1476 };
1477
1478 static int cio2_fwnode_parse(struct device *dev,
1479                              struct v4l2_fwnode_endpoint *vep,
1480                              struct v4l2_async_subdev *asd)
1481 {
1482         struct sensor_async_subdev *s_asd =
1483                         container_of(asd, struct sensor_async_subdev, asd);
1484
1485         if (vep->bus_type != V4L2_MBUS_CSI2_DPHY) {
1486                 dev_err(dev, "Only CSI2 bus type is currently supported\n");
1487                 return -EINVAL;
1488         }
1489
1490         s_asd->csi2.port = vep->base.port;
1491         s_asd->csi2.lanes = vep->bus.mipi_csi2.num_data_lanes;
1492
1493         return 0;
1494 }
1495
1496 static int cio2_notifier_init(struct cio2_device *cio2)
1497 {
1498         int ret;
1499
1500         v4l2_async_notifier_init(&cio2->notifier);
1501
1502         ret = v4l2_async_notifier_parse_fwnode_endpoints(
1503                 &cio2->pci_dev->dev, &cio2->notifier,
1504                 sizeof(struct sensor_async_subdev),
1505                 cio2_fwnode_parse);
1506         if (ret < 0)
1507                 return ret;
1508
1509         if (list_empty(&cio2->notifier.asd_list))
1510                 return -ENODEV; /* no endpoint */
1511
1512         cio2->notifier.ops = &cio2_async_ops;
1513         ret = v4l2_async_notifier_register(&cio2->v4l2_dev, &cio2->notifier);
1514         if (ret) {
1515                 dev_err(&cio2->pci_dev->dev,
1516                         "failed to register async notifier : %d\n", ret);
1517                 v4l2_async_notifier_cleanup(&cio2->notifier);
1518         }
1519
1520         return ret;
1521 }
1522
1523 static void cio2_notifier_exit(struct cio2_device *cio2)
1524 {
1525         v4l2_async_notifier_unregister(&cio2->notifier);
1526         v4l2_async_notifier_cleanup(&cio2->notifier);
1527 }
1528
1529 /**************** Queue initialization ****************/
1530 static const struct media_entity_operations cio2_media_ops = {
1531         .link_validate = v4l2_subdev_link_validate,
1532 };
1533
1534 static const struct media_entity_operations cio2_video_entity_ops = {
1535         .link_validate = cio2_video_link_validate,
1536 };
1537
1538 static int cio2_queue_init(struct cio2_device *cio2, struct cio2_queue *q)
1539 {
1540         static const u32 default_width = 1936;
1541         static const u32 default_height = 1096;
1542         const struct ipu3_cio2_fmt dflt_fmt = formats[0];
1543
1544         struct video_device *vdev = &q->vdev;
1545         struct vb2_queue *vbq = &q->vbq;
1546         struct v4l2_subdev *subdev = &q->subdev;
1547         struct v4l2_mbus_framefmt *fmt;
1548         int r;
1549
1550         /* Initialize miscellaneous variables */
1551         mutex_init(&q->lock);
1552
1553         /* Initialize formats to default values */
1554         fmt = &q->subdev_fmt;
1555         fmt->width = default_width;
1556         fmt->height = default_height;
1557         fmt->code = dflt_fmt.mbus_code;
1558         fmt->field = V4L2_FIELD_NONE;
1559
1560         q->format.width = default_width;
1561         q->format.height = default_height;
1562         q->format.pixelformat = dflt_fmt.fourcc;
1563         q->format.colorspace = V4L2_COLORSPACE_RAW;
1564         q->format.field = V4L2_FIELD_NONE;
1565         q->format.num_planes = 1;
1566         q->format.plane_fmt[0].bytesperline =
1567                                 cio2_bytesperline(q->format.width);
1568         q->format.plane_fmt[0].sizeimage = q->format.plane_fmt[0].bytesperline *
1569                                                 q->format.height;
1570
1571         /* Initialize fbpt */
1572         r = cio2_fbpt_init(cio2, q);
1573         if (r)
1574                 goto fail_fbpt;
1575
1576         /* Initialize media entities */
1577         q->subdev_pads[CIO2_PAD_SINK].flags = MEDIA_PAD_FL_SINK |
1578                 MEDIA_PAD_FL_MUST_CONNECT;
1579         q->subdev_pads[CIO2_PAD_SOURCE].flags = MEDIA_PAD_FL_SOURCE;
1580         subdev->entity.ops = &cio2_media_ops;
1581         subdev->internal_ops = &cio2_subdev_internal_ops;
1582         r = media_entity_pads_init(&subdev->entity, CIO2_PADS, q->subdev_pads);
1583         if (r) {
1584                 dev_err(&cio2->pci_dev->dev,
1585                         "failed initialize subdev media entity (%d)\n", r);
1586                 goto fail_subdev_media_entity;
1587         }
1588
1589         q->vdev_pad.flags = MEDIA_PAD_FL_SINK | MEDIA_PAD_FL_MUST_CONNECT;
1590         vdev->entity.ops = &cio2_video_entity_ops;
1591         r = media_entity_pads_init(&vdev->entity, 1, &q->vdev_pad);
1592         if (r) {
1593                 dev_err(&cio2->pci_dev->dev,
1594                         "failed initialize videodev media entity (%d)\n", r);
1595                 goto fail_vdev_media_entity;
1596         }
1597
1598         /* Initialize subdev */
1599         v4l2_subdev_init(subdev, &cio2_subdev_ops);
1600         subdev->flags = V4L2_SUBDEV_FL_HAS_DEVNODE | V4L2_SUBDEV_FL_HAS_EVENTS;
1601         subdev->owner = THIS_MODULE;
1602         snprintf(subdev->name, sizeof(subdev->name),
1603                  CIO2_ENTITY_NAME " %td", q - cio2->queue);
1604         v4l2_set_subdevdata(subdev, cio2);
1605         r = v4l2_device_register_subdev(&cio2->v4l2_dev, subdev);
1606         if (r) {
1607                 dev_err(&cio2->pci_dev->dev,
1608                         "failed initialize subdev (%d)\n", r);
1609                 goto fail_subdev;
1610         }
1611
1612         /* Initialize vbq */
1613         vbq->type = V4L2_BUF_TYPE_VIDEO_CAPTURE_MPLANE;
1614         vbq->io_modes = VB2_USERPTR | VB2_MMAP | VB2_DMABUF;
1615         vbq->ops = &cio2_vb2_ops;
1616         vbq->mem_ops = &vb2_dma_sg_memops;
1617         vbq->buf_struct_size = sizeof(struct cio2_buffer);
1618         vbq->timestamp_flags = V4L2_BUF_FLAG_TIMESTAMP_MONOTONIC;
1619         vbq->min_buffers_needed = 1;
1620         vbq->drv_priv = cio2;
1621         vbq->lock = &q->lock;
1622         r = vb2_queue_init(vbq);
1623         if (r) {
1624                 dev_err(&cio2->pci_dev->dev,
1625                         "failed to initialize videobuf2 queue (%d)\n", r);
1626                 goto fail_vbq;
1627         }
1628
1629         /* Initialize vdev */
1630         snprintf(vdev->name, sizeof(vdev->name),
1631                  "%s %td", CIO2_NAME, q - cio2->queue);
1632         vdev->release = video_device_release_empty;
1633         vdev->fops = &cio2_v4l2_fops;
1634         vdev->ioctl_ops = &cio2_v4l2_ioctl_ops;
1635         vdev->lock = &cio2->lock;
1636         vdev->v4l2_dev = &cio2->v4l2_dev;
1637         vdev->queue = &q->vbq;
1638         vdev->device_caps = V4L2_CAP_VIDEO_CAPTURE_MPLANE | V4L2_CAP_STREAMING;
1639         video_set_drvdata(vdev, cio2);
1640         r = video_register_device(vdev, VFL_TYPE_GRABBER, -1);
1641         if (r) {
1642                 dev_err(&cio2->pci_dev->dev,
1643                         "failed to register video device (%d)\n", r);
1644                 goto fail_vdev;
1645         }
1646
1647         /* Create link from CIO2 subdev to output node */
1648         r = media_create_pad_link(
1649                 &subdev->entity, CIO2_PAD_SOURCE, &vdev->entity, 0,
1650                 MEDIA_LNK_FL_ENABLED | MEDIA_LNK_FL_IMMUTABLE);
1651         if (r)
1652                 goto fail_link;
1653
1654         return 0;
1655
1656 fail_link:
1657         video_unregister_device(&q->vdev);
1658 fail_vdev:
1659         vb2_queue_release(vbq);
1660 fail_vbq:
1661         v4l2_device_unregister_subdev(subdev);
1662 fail_subdev:
1663         media_entity_cleanup(&vdev->entity);
1664 fail_vdev_media_entity:
1665         media_entity_cleanup(&subdev->entity);
1666 fail_subdev_media_entity:
1667         cio2_fbpt_exit(q, &cio2->pci_dev->dev);
1668 fail_fbpt:
1669         mutex_destroy(&q->lock);
1670
1671         return r;
1672 }
1673
1674 static void cio2_queue_exit(struct cio2_device *cio2, struct cio2_queue *q)
1675 {
1676         video_unregister_device(&q->vdev);
1677         media_entity_cleanup(&q->vdev.entity);
1678         vb2_queue_release(&q->vbq);
1679         v4l2_device_unregister_subdev(&q->subdev);
1680         media_entity_cleanup(&q->subdev.entity);
1681         cio2_fbpt_exit(q, &cio2->pci_dev->dev);
1682         mutex_destroy(&q->lock);
1683 }
1684
1685 static int cio2_queues_init(struct cio2_device *cio2)
1686 {
1687         int i, r;
1688
1689         for (i = 0; i < CIO2_QUEUES; i++) {
1690                 r = cio2_queue_init(cio2, &cio2->queue[i]);
1691                 if (r)
1692                         break;
1693         }
1694
1695         if (i == CIO2_QUEUES)
1696                 return 0;
1697
1698         for (i--; i >= 0; i--)
1699                 cio2_queue_exit(cio2, &cio2->queue[i]);
1700
1701         return r;
1702 }
1703
1704 static void cio2_queues_exit(struct cio2_device *cio2)
1705 {
1706         unsigned int i;
1707
1708         for (i = 0; i < CIO2_QUEUES; i++)
1709                 cio2_queue_exit(cio2, &cio2->queue[i]);
1710 }
1711
1712 /**************** PCI interface ****************/
1713
1714 static int cio2_pci_config_setup(struct pci_dev *dev)
1715 {
1716         u16 pci_command;
1717         int r = pci_enable_msi(dev);
1718
1719         if (r) {
1720                 dev_err(&dev->dev, "failed to enable MSI (%d)\n", r);
1721                 return r;
1722         }
1723
1724         pci_read_config_word(dev, PCI_COMMAND, &pci_command);
1725         pci_command |= PCI_COMMAND_MEMORY | PCI_COMMAND_MASTER |
1726                 PCI_COMMAND_INTX_DISABLE;
1727         pci_write_config_word(dev, PCI_COMMAND, pci_command);
1728
1729         return 0;
1730 }
1731
1732 static int cio2_pci_probe(struct pci_dev *pci_dev,
1733                           const struct pci_device_id *id)
1734 {
1735         struct cio2_device *cio2;
1736         void __iomem *const *iomap;
1737         int r;
1738
1739         cio2 = devm_kzalloc(&pci_dev->dev, sizeof(*cio2), GFP_KERNEL);
1740         if (!cio2)
1741                 return -ENOMEM;
1742         cio2->pci_dev = pci_dev;
1743
1744         r = pcim_enable_device(pci_dev);
1745         if (r) {
1746                 dev_err(&pci_dev->dev, "failed to enable device (%d)\n", r);
1747                 return r;
1748         }
1749
1750         dev_info(&pci_dev->dev, "device 0x%x (rev: 0x%x)\n",
1751                  pci_dev->device, pci_dev->revision);
1752
1753         r = pcim_iomap_regions(pci_dev, 1 << CIO2_PCI_BAR, pci_name(pci_dev));
1754         if (r) {
1755                 dev_err(&pci_dev->dev, "failed to remap I/O memory (%d)\n", r);
1756                 return -ENODEV;
1757         }
1758
1759         iomap = pcim_iomap_table(pci_dev);
1760         if (!iomap) {
1761                 dev_err(&pci_dev->dev, "failed to iomap table\n");
1762                 return -ENODEV;
1763         }
1764
1765         cio2->base = iomap[CIO2_PCI_BAR];
1766
1767         pci_set_drvdata(pci_dev, cio2);
1768
1769         pci_set_master(pci_dev);
1770
1771         r = pci_set_dma_mask(pci_dev, CIO2_DMA_MASK);
1772         if (r) {
1773                 dev_err(&pci_dev->dev, "failed to set DMA mask (%d)\n", r);
1774                 return -ENODEV;
1775         }
1776
1777         r = cio2_pci_config_setup(pci_dev);
1778         if (r)
1779                 return -ENODEV;
1780
1781         r = cio2_fbpt_init_dummy(cio2);
1782         if (r)
1783                 return r;
1784
1785         mutex_init(&cio2->lock);
1786
1787         cio2->media_dev.dev = &cio2->pci_dev->dev;
1788         strscpy(cio2->media_dev.model, CIO2_DEVICE_NAME,
1789                 sizeof(cio2->media_dev.model));
1790         snprintf(cio2->media_dev.bus_info, sizeof(cio2->media_dev.bus_info),
1791                  "PCI:%s", pci_name(cio2->pci_dev));
1792         cio2->media_dev.hw_revision = 0;
1793
1794         media_device_init(&cio2->media_dev);
1795         r = media_device_register(&cio2->media_dev);
1796         if (r < 0)
1797                 goto fail_mutex_destroy;
1798
1799         cio2->v4l2_dev.mdev = &cio2->media_dev;
1800         r = v4l2_device_register(&pci_dev->dev, &cio2->v4l2_dev);
1801         if (r) {
1802                 dev_err(&pci_dev->dev,
1803                         "failed to register V4L2 device (%d)\n", r);
1804                 goto fail_media_device_unregister;
1805         }
1806
1807         r = cio2_queues_init(cio2);
1808         if (r)
1809                 goto fail_v4l2_device_unregister;
1810
1811         /* Register notifier for subdevices we care */
1812         r = cio2_notifier_init(cio2);
1813         if (r)
1814                 goto fail_cio2_queue_exit;
1815
1816         r = devm_request_irq(&pci_dev->dev, pci_dev->irq, cio2_irq,
1817                              IRQF_SHARED, CIO2_NAME, cio2);
1818         if (r) {
1819                 dev_err(&pci_dev->dev, "failed to request IRQ (%d)\n", r);
1820                 goto fail;
1821         }
1822
1823         pm_runtime_put_noidle(&pci_dev->dev);
1824         pm_runtime_allow(&pci_dev->dev);
1825
1826         return 0;
1827
1828 fail:
1829         cio2_notifier_exit(cio2);
1830 fail_cio2_queue_exit:
1831         cio2_queues_exit(cio2);
1832 fail_v4l2_device_unregister:
1833         v4l2_device_unregister(&cio2->v4l2_dev);
1834 fail_media_device_unregister:
1835         media_device_unregister(&cio2->media_dev);
1836         media_device_cleanup(&cio2->media_dev);
1837 fail_mutex_destroy:
1838         mutex_destroy(&cio2->lock);
1839         cio2_fbpt_exit_dummy(cio2);
1840
1841         return r;
1842 }
1843
1844 static void cio2_pci_remove(struct pci_dev *pci_dev)
1845 {
1846         struct cio2_device *cio2 = pci_get_drvdata(pci_dev);
1847
1848         media_device_unregister(&cio2->media_dev);
1849         cio2_notifier_exit(cio2);
1850         cio2_queues_exit(cio2);
1851         cio2_fbpt_exit_dummy(cio2);
1852         v4l2_device_unregister(&cio2->v4l2_dev);
1853         media_device_cleanup(&cio2->media_dev);
1854         mutex_destroy(&cio2->lock);
1855 }
1856
1857 static int __maybe_unused cio2_runtime_suspend(struct device *dev)
1858 {
1859         struct pci_dev *pci_dev = to_pci_dev(dev);
1860         struct cio2_device *cio2 = pci_get_drvdata(pci_dev);
1861         void __iomem *const base = cio2->base;
1862         u16 pm;
1863
1864         writel(CIO2_D0I3C_I3, base + CIO2_REG_D0I3C);
1865         dev_dbg(dev, "cio2 runtime suspend.\n");
1866
1867         pci_read_config_word(pci_dev, pci_dev->pm_cap + CIO2_PMCSR_OFFSET, &pm);
1868         pm = (pm >> CIO2_PMCSR_D0D3_SHIFT) << CIO2_PMCSR_D0D3_SHIFT;
1869         pm |= CIO2_PMCSR_D3;
1870         pci_write_config_word(pci_dev, pci_dev->pm_cap + CIO2_PMCSR_OFFSET, pm);
1871
1872         return 0;
1873 }
1874
1875 static int __maybe_unused cio2_runtime_resume(struct device *dev)
1876 {
1877         struct pci_dev *pci_dev = to_pci_dev(dev);
1878         struct cio2_device *cio2 = pci_get_drvdata(pci_dev);
1879         void __iomem *const base = cio2->base;
1880         u16 pm;
1881
1882         writel(CIO2_D0I3C_RR, base + CIO2_REG_D0I3C);
1883         dev_dbg(dev, "cio2 runtime resume.\n");
1884
1885         pci_read_config_word(pci_dev, pci_dev->pm_cap + CIO2_PMCSR_OFFSET, &pm);
1886         pm = (pm >> CIO2_PMCSR_D0D3_SHIFT) << CIO2_PMCSR_D0D3_SHIFT;
1887         pci_write_config_word(pci_dev, pci_dev->pm_cap + CIO2_PMCSR_OFFSET, pm);
1888
1889         return 0;
1890 }
1891
1892 /*
1893  * Helper function to advance all the elements of a circular buffer by "start"
1894  * positions
1895  */
1896 static void arrange(void *ptr, size_t elem_size, size_t elems, size_t start)
1897 {
1898         struct {
1899                 size_t begin, end;
1900         } arr[2] = {
1901                 { 0, start - 1 },
1902                 { start, elems - 1 },
1903         };
1904
1905 #define CHUNK_SIZE(a) ((a)->end - (a)->begin + 1)
1906
1907         /* Loop as long as we have out-of-place entries */
1908         while (CHUNK_SIZE(&arr[0]) && CHUNK_SIZE(&arr[1])) {
1909                 size_t size0, i;
1910
1911                 /*
1912                  * Find the number of entries that can be arranged on this
1913                  * iteration.
1914                  */
1915                 size0 = min(CHUNK_SIZE(&arr[0]), CHUNK_SIZE(&arr[1]));
1916
1917                 /* Swap the entries in two parts of the array. */
1918                 for (i = 0; i < size0; i++) {
1919                         u8 *d = ptr + elem_size * (arr[1].begin + i);
1920                         u8 *s = ptr + elem_size * (arr[0].begin + i);
1921                         size_t j;
1922
1923                         for (j = 0; j < elem_size; j++)
1924                                 swap(d[j], s[j]);
1925                 }
1926
1927                 if (CHUNK_SIZE(&arr[0]) > CHUNK_SIZE(&arr[1])) {
1928                         /* The end of the first array remains unarranged. */
1929                         arr[0].begin += size0;
1930                 } else {
1931                         /*
1932                          * The first array is fully arranged so we proceed
1933                          * handling the next one.
1934                          */
1935                         arr[0].begin = arr[1].begin;
1936                         arr[0].end = arr[1].begin + size0 - 1;
1937                         arr[1].begin += size0;
1938                 }
1939         }
1940 }
1941
1942 static void cio2_fbpt_rearrange(struct cio2_device *cio2, struct cio2_queue *q)
1943 {
1944         unsigned int i, j;
1945
1946         for (i = 0, j = q->bufs_first; i < CIO2_MAX_BUFFERS;
1947                 i++, j = (j + 1) % CIO2_MAX_BUFFERS)
1948                 if (q->bufs[j])
1949                         break;
1950
1951         if (i == CIO2_MAX_BUFFERS)
1952                 return;
1953
1954         if (j) {
1955                 arrange(q->fbpt, sizeof(struct cio2_fbpt_entry) * CIO2_MAX_LOPS,
1956                         CIO2_MAX_BUFFERS, j);
1957                 arrange(q->bufs, sizeof(struct cio2_buffer *),
1958                         CIO2_MAX_BUFFERS, j);
1959         }
1960
1961         /*
1962          * DMA clears the valid bit when accessing the buffer.
1963          * When stopping stream in suspend callback, some of the buffers
1964          * may be in invalid state. After resume, when DMA meets the invalid
1965          * buffer, it will halt and stop receiving new data.
1966          * To avoid DMA halting, set the valid bit for all buffers in FBPT.
1967          */
1968         for (i = 0; i < CIO2_MAX_BUFFERS; i++)
1969                 cio2_fbpt_entry_enable(cio2, q->fbpt + i * CIO2_MAX_LOPS);
1970 }
1971
1972 static int __maybe_unused cio2_suspend(struct device *dev)
1973 {
1974         struct pci_dev *pci_dev = to_pci_dev(dev);
1975         struct cio2_device *cio2 = pci_get_drvdata(pci_dev);
1976         struct cio2_queue *q = cio2->cur_queue;
1977
1978         dev_dbg(dev, "cio2 suspend\n");
1979         if (!cio2->streaming)
1980                 return 0;
1981
1982         /* Stop stream */
1983         cio2_hw_exit(cio2, q);
1984         synchronize_irq(pci_dev->irq);
1985
1986         pm_runtime_force_suspend(dev);
1987
1988         /*
1989          * Upon resume, hw starts to process the fbpt entries from beginning,
1990          * so relocate the queued buffs to the fbpt head before suspend.
1991          */
1992         cio2_fbpt_rearrange(cio2, q);
1993         q->bufs_first = 0;
1994         q->bufs_next = 0;
1995
1996         return 0;
1997 }
1998
1999 static int __maybe_unused cio2_resume(struct device *dev)
2000 {
2001         struct pci_dev *pci_dev = to_pci_dev(dev);
2002         struct cio2_device *cio2 = pci_get_drvdata(pci_dev);
2003         int r = 0;
2004         struct cio2_queue *q = cio2->cur_queue;
2005
2006         dev_dbg(dev, "cio2 resume\n");
2007         if (!cio2->streaming)
2008                 return 0;
2009         /* Start stream */
2010         r = pm_runtime_force_resume(&cio2->pci_dev->dev);
2011         if (r < 0) {
2012                 dev_err(&cio2->pci_dev->dev,
2013                         "failed to set power %d\n", r);
2014                 return r;
2015         }
2016
2017         r = cio2_hw_init(cio2, q);
2018         if (r)
2019                 dev_err(dev, "fail to init cio2 hw\n");
2020
2021         return r;
2022 }
2023
2024 static const struct dev_pm_ops cio2_pm_ops = {
2025         SET_RUNTIME_PM_OPS(&cio2_runtime_suspend, &cio2_runtime_resume, NULL)
2026         SET_SYSTEM_SLEEP_PM_OPS(&cio2_suspend, &cio2_resume)
2027 };
2028
2029 static const struct pci_device_id cio2_pci_id_table[] = {
2030         { PCI_DEVICE(PCI_VENDOR_ID_INTEL, CIO2_PCI_ID) },
2031         { 0 }
2032 };
2033
2034 MODULE_DEVICE_TABLE(pci, cio2_pci_id_table);
2035
2036 static struct pci_driver cio2_pci_driver = {
2037         .name = CIO2_NAME,
2038         .id_table = cio2_pci_id_table,
2039         .probe = cio2_pci_probe,
2040         .remove = cio2_pci_remove,
2041         .driver = {
2042                 .pm = &cio2_pm_ops,
2043         },
2044 };
2045
2046 module_pci_driver(cio2_pci_driver);
2047
2048 MODULE_AUTHOR("Tuukka Toivonen <tuukka.toivonen@intel.com>");
2049 MODULE_AUTHOR("Tianshu Qiu <tian.shu.qiu@intel.com>");
2050 MODULE_AUTHOR("Jian Xu Zheng <jian.xu.zheng@intel.com>");
2051 MODULE_AUTHOR("Yuning Pu <yuning.pu@intel.com>");
2052 MODULE_AUTHOR("Yong Zhi <yong.zhi@intel.com>");
2053 MODULE_LICENSE("GPL v2");
2054 MODULE_DESCRIPTION("IPU3 CIO2 driver");