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