root/drivers/media/pci/intel/ipu3/ipu3-cio2.c

/* [<][>][^][v][top][bottom][index][help] */

DEFINITIONS

This source file includes following definitions.
  1. cio2_find_format
  2. cio2_bytesperline
  3. cio2_fbpt_exit_dummy
  4. cio2_fbpt_init_dummy
  5. cio2_fbpt_entry_enable
  6. cio2_fbpt_entry_init_dummy
  7. cio2_fbpt_entry_init_buf
  8. cio2_fbpt_init
  9. cio2_fbpt_exit
  10. cio2_rx_timing
  11. cio2_csi2_calc_timing
  12. cio2_hw_init
  13. cio2_hw_exit
  14. cio2_buffer_done
  15. cio2_queue_event_sof
  16. cio2_irq_handle_once
  17. cio2_irq
  18. cio2_vb2_return_all_buffers
  19. cio2_vb2_queue_setup
  20. cio2_vb2_buf_init
  21. cio2_vb2_buf_queue
  22. cio2_vb2_buf_cleanup
  23. cio2_vb2_start_streaming
  24. cio2_vb2_stop_streaming
  25. cio2_v4l2_querycap
  26. cio2_v4l2_enum_fmt
  27. cio2_v4l2_g_fmt
  28. cio2_v4l2_try_fmt
  29. cio2_v4l2_s_fmt
  30. cio2_video_enum_input
  31. cio2_video_g_input
  32. cio2_video_s_input
  33. cio2_subdev_subscribe_event
  34. cio2_subdev_open
  35. cio2_subdev_get_fmt
  36. cio2_subdev_set_fmt
  37. cio2_subdev_enum_mbus_code
  38. cio2_subdev_link_validate_get_format
  39. cio2_video_link_validate
  40. cio2_notifier_bound
  41. cio2_notifier_unbind
  42. cio2_notifier_complete
  43. cio2_parse_firmware
  44. cio2_queue_init
  45. cio2_queue_exit
  46. cio2_queues_init
  47. cio2_queues_exit
  48. cio2_pci_config_setup
  49. cio2_pci_probe
  50. cio2_pci_remove
  51. cio2_runtime_suspend
  52. cio2_runtime_resume
  53. arrange
  54. cio2_fbpt_rearrange
  55. cio2_suspend
  56. cio2_resume

   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_alloc_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 arithmetic
 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_dma_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_dma_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 = 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_parse_firmware(struct cio2_device *cio2)
1479 {
1480         unsigned int i;
1481         int ret;
1482 
1483         for (i = 0; i < CIO2_NUM_PORTS; i++) {
1484                 struct v4l2_fwnode_endpoint vep = {
1485                         .bus_type = V4L2_MBUS_CSI2_DPHY
1486                 };
1487                 struct sensor_async_subdev *s_asd = NULL;
1488                 struct fwnode_handle *ep;
1489 
1490                 ep = fwnode_graph_get_endpoint_by_id(
1491                         dev_fwnode(&cio2->pci_dev->dev), i, 0,
1492                         FWNODE_GRAPH_ENDPOINT_NEXT);
1493 
1494                 if (!ep)
1495                         continue;
1496 
1497                 ret = v4l2_fwnode_endpoint_parse(ep, &vep);
1498                 if (ret)
1499                         goto err_parse;
1500 
1501                 s_asd = kzalloc(sizeof(*s_asd), GFP_KERNEL);
1502                 if (!s_asd) {
1503                         ret = -ENOMEM;
1504                         goto err_parse;
1505                 }
1506 
1507                 s_asd->csi2.port = vep.base.port;
1508                 s_asd->csi2.lanes = vep.bus.mipi_csi2.num_data_lanes;
1509 
1510                 ret = v4l2_async_notifier_add_fwnode_remote_subdev(
1511                         &cio2->notifier, ep, &s_asd->asd);
1512                 if (ret)
1513                         goto err_parse;
1514 
1515                 fwnode_handle_put(ep);
1516 
1517                 continue;
1518 
1519 err_parse:
1520                 fwnode_handle_put(ep);
1521                 kfree(s_asd);
1522                 return ret;
1523         }
1524 
1525         /*
1526          * Proceed even without sensors connected to allow the device to
1527          * suspend.
1528          */
1529         cio2->notifier.ops = &cio2_async_ops;
1530         ret = v4l2_async_notifier_register(&cio2->v4l2_dev, &cio2->notifier);
1531         if (ret)
1532                 dev_err(&cio2->pci_dev->dev,
1533                         "failed to register async notifier : %d\n", ret);
1534 
1535         return ret;
1536 }
1537 
1538 /**************** Queue initialization ****************/
1539 static const struct media_entity_operations cio2_media_ops = {
1540         .link_validate = v4l2_subdev_link_validate,
1541 };
1542 
1543 static const struct media_entity_operations cio2_video_entity_ops = {
1544         .link_validate = cio2_video_link_validate,
1545 };
1546 
1547 static int cio2_queue_init(struct cio2_device *cio2, struct cio2_queue *q)
1548 {
1549         static const u32 default_width = 1936;
1550         static const u32 default_height = 1096;
1551         const struct ipu3_cio2_fmt dflt_fmt = formats[0];
1552 
1553         struct video_device *vdev = &q->vdev;
1554         struct vb2_queue *vbq = &q->vbq;
1555         struct v4l2_subdev *subdev = &q->subdev;
1556         struct v4l2_mbus_framefmt *fmt;
1557         int r;
1558 
1559         /* Initialize miscellaneous variables */
1560         mutex_init(&q->lock);
1561 
1562         /* Initialize formats to default values */
1563         fmt = &q->subdev_fmt;
1564         fmt->width = default_width;
1565         fmt->height = default_height;
1566         fmt->code = dflt_fmt.mbus_code;
1567         fmt->field = V4L2_FIELD_NONE;
1568 
1569         q->format.width = default_width;
1570         q->format.height = default_height;
1571         q->format.pixelformat = dflt_fmt.fourcc;
1572         q->format.colorspace = V4L2_COLORSPACE_RAW;
1573         q->format.field = V4L2_FIELD_NONE;
1574         q->format.num_planes = 1;
1575         q->format.plane_fmt[0].bytesperline =
1576                                 cio2_bytesperline(q->format.width);
1577         q->format.plane_fmt[0].sizeimage = q->format.plane_fmt[0].bytesperline *
1578                                                 q->format.height;
1579 
1580         /* Initialize fbpt */
1581         r = cio2_fbpt_init(cio2, q);
1582         if (r)
1583                 goto fail_fbpt;
1584 
1585         /* Initialize media entities */
1586         q->subdev_pads[CIO2_PAD_SINK].flags = MEDIA_PAD_FL_SINK |
1587                 MEDIA_PAD_FL_MUST_CONNECT;
1588         q->subdev_pads[CIO2_PAD_SOURCE].flags = MEDIA_PAD_FL_SOURCE;
1589         subdev->entity.ops = &cio2_media_ops;
1590         subdev->internal_ops = &cio2_subdev_internal_ops;
1591         r = media_entity_pads_init(&subdev->entity, CIO2_PADS, q->subdev_pads);
1592         if (r) {
1593                 dev_err(&cio2->pci_dev->dev,
1594                         "failed initialize subdev media entity (%d)\n", r);
1595                 goto fail_subdev_media_entity;
1596         }
1597 
1598         q->vdev_pad.flags = MEDIA_PAD_FL_SINK | MEDIA_PAD_FL_MUST_CONNECT;
1599         vdev->entity.ops = &cio2_video_entity_ops;
1600         r = media_entity_pads_init(&vdev->entity, 1, &q->vdev_pad);
1601         if (r) {
1602                 dev_err(&cio2->pci_dev->dev,
1603                         "failed initialize videodev media entity (%d)\n", r);
1604                 goto fail_vdev_media_entity;
1605         }
1606 
1607         /* Initialize subdev */
1608         v4l2_subdev_init(subdev, &cio2_subdev_ops);
1609         subdev->flags = V4L2_SUBDEV_FL_HAS_DEVNODE | V4L2_SUBDEV_FL_HAS_EVENTS;
1610         subdev->owner = THIS_MODULE;
1611         snprintf(subdev->name, sizeof(subdev->name),
1612                  CIO2_ENTITY_NAME " %td", q - cio2->queue);
1613         subdev->entity.function = MEDIA_ENT_F_VID_IF_BRIDGE;
1614         v4l2_set_subdevdata(subdev, cio2);
1615         r = v4l2_device_register_subdev(&cio2->v4l2_dev, subdev);
1616         if (r) {
1617                 dev_err(&cio2->pci_dev->dev,
1618                         "failed initialize subdev (%d)\n", r);
1619                 goto fail_subdev;
1620         }
1621 
1622         /* Initialize vbq */
1623         vbq->type = V4L2_BUF_TYPE_VIDEO_CAPTURE_MPLANE;
1624         vbq->io_modes = VB2_USERPTR | VB2_MMAP | VB2_DMABUF;
1625         vbq->ops = &cio2_vb2_ops;
1626         vbq->mem_ops = &vb2_dma_sg_memops;
1627         vbq->buf_struct_size = sizeof(struct cio2_buffer);
1628         vbq->timestamp_flags = V4L2_BUF_FLAG_TIMESTAMP_MONOTONIC;
1629         vbq->min_buffers_needed = 1;
1630         vbq->drv_priv = cio2;
1631         vbq->lock = &q->lock;
1632         r = vb2_queue_init(vbq);
1633         if (r) {
1634                 dev_err(&cio2->pci_dev->dev,
1635                         "failed to initialize videobuf2 queue (%d)\n", r);
1636                 goto fail_vbq;
1637         }
1638 
1639         /* Initialize vdev */
1640         snprintf(vdev->name, sizeof(vdev->name),
1641                  "%s %td", CIO2_NAME, q - cio2->queue);
1642         vdev->release = video_device_release_empty;
1643         vdev->fops = &cio2_v4l2_fops;
1644         vdev->ioctl_ops = &cio2_v4l2_ioctl_ops;
1645         vdev->lock = &cio2->lock;
1646         vdev->v4l2_dev = &cio2->v4l2_dev;
1647         vdev->queue = &q->vbq;
1648         vdev->device_caps = V4L2_CAP_VIDEO_CAPTURE_MPLANE | V4L2_CAP_STREAMING;
1649         video_set_drvdata(vdev, cio2);
1650         r = video_register_device(vdev, VFL_TYPE_GRABBER, -1);
1651         if (r) {
1652                 dev_err(&cio2->pci_dev->dev,
1653                         "failed to register video device (%d)\n", r);
1654                 goto fail_vdev;
1655         }
1656 
1657         /* Create link from CIO2 subdev to output node */
1658         r = media_create_pad_link(
1659                 &subdev->entity, CIO2_PAD_SOURCE, &vdev->entity, 0,
1660                 MEDIA_LNK_FL_ENABLED | MEDIA_LNK_FL_IMMUTABLE);
1661         if (r)
1662                 goto fail_link;
1663 
1664         return 0;
1665 
1666 fail_link:
1667         video_unregister_device(&q->vdev);
1668 fail_vdev:
1669         vb2_queue_release(vbq);
1670 fail_vbq:
1671         v4l2_device_unregister_subdev(subdev);
1672 fail_subdev:
1673         media_entity_cleanup(&vdev->entity);
1674 fail_vdev_media_entity:
1675         media_entity_cleanup(&subdev->entity);
1676 fail_subdev_media_entity:
1677         cio2_fbpt_exit(q, &cio2->pci_dev->dev);
1678 fail_fbpt:
1679         mutex_destroy(&q->lock);
1680 
1681         return r;
1682 }
1683 
1684 static void cio2_queue_exit(struct cio2_device *cio2, struct cio2_queue *q)
1685 {
1686         video_unregister_device(&q->vdev);
1687         media_entity_cleanup(&q->vdev.entity);
1688         vb2_queue_release(&q->vbq);
1689         v4l2_device_unregister_subdev(&q->subdev);
1690         media_entity_cleanup(&q->subdev.entity);
1691         cio2_fbpt_exit(q, &cio2->pci_dev->dev);
1692         mutex_destroy(&q->lock);
1693 }
1694 
1695 static int cio2_queues_init(struct cio2_device *cio2)
1696 {
1697         int i, r;
1698 
1699         for (i = 0; i < CIO2_QUEUES; i++) {
1700                 r = cio2_queue_init(cio2, &cio2->queue[i]);
1701                 if (r)
1702                         break;
1703         }
1704 
1705         if (i == CIO2_QUEUES)
1706                 return 0;
1707 
1708         for (i--; i >= 0; i--)
1709                 cio2_queue_exit(cio2, &cio2->queue[i]);
1710 
1711         return r;
1712 }
1713 
1714 static void cio2_queues_exit(struct cio2_device *cio2)
1715 {
1716         unsigned int i;
1717 
1718         for (i = 0; i < CIO2_QUEUES; i++)
1719                 cio2_queue_exit(cio2, &cio2->queue[i]);
1720 }
1721 
1722 /**************** PCI interface ****************/
1723 
1724 static int cio2_pci_config_setup(struct pci_dev *dev)
1725 {
1726         u16 pci_command;
1727         int r = pci_enable_msi(dev);
1728 
1729         if (r) {
1730                 dev_err(&dev->dev, "failed to enable MSI (%d)\n", r);
1731                 return r;
1732         }
1733 
1734         pci_read_config_word(dev, PCI_COMMAND, &pci_command);
1735         pci_command |= PCI_COMMAND_MEMORY | PCI_COMMAND_MASTER |
1736                 PCI_COMMAND_INTX_DISABLE;
1737         pci_write_config_word(dev, PCI_COMMAND, pci_command);
1738 
1739         return 0;
1740 }
1741 
1742 static int cio2_pci_probe(struct pci_dev *pci_dev,
1743                           const struct pci_device_id *id)
1744 {
1745         struct cio2_device *cio2;
1746         void __iomem *const *iomap;
1747         int r;
1748 
1749         cio2 = devm_kzalloc(&pci_dev->dev, sizeof(*cio2), GFP_KERNEL);
1750         if (!cio2)
1751                 return -ENOMEM;
1752         cio2->pci_dev = pci_dev;
1753 
1754         r = pcim_enable_device(pci_dev);
1755         if (r) {
1756                 dev_err(&pci_dev->dev, "failed to enable device (%d)\n", r);
1757                 return r;
1758         }
1759 
1760         dev_info(&pci_dev->dev, "device 0x%x (rev: 0x%x)\n",
1761                  pci_dev->device, pci_dev->revision);
1762 
1763         r = pcim_iomap_regions(pci_dev, 1 << CIO2_PCI_BAR, pci_name(pci_dev));
1764         if (r) {
1765                 dev_err(&pci_dev->dev, "failed to remap I/O memory (%d)\n", r);
1766                 return -ENODEV;
1767         }
1768 
1769         iomap = pcim_iomap_table(pci_dev);
1770         if (!iomap) {
1771                 dev_err(&pci_dev->dev, "failed to iomap table\n");
1772                 return -ENODEV;
1773         }
1774 
1775         cio2->base = iomap[CIO2_PCI_BAR];
1776 
1777         pci_set_drvdata(pci_dev, cio2);
1778 
1779         pci_set_master(pci_dev);
1780 
1781         r = pci_set_dma_mask(pci_dev, CIO2_DMA_MASK);
1782         if (r) {
1783                 dev_err(&pci_dev->dev, "failed to set DMA mask (%d)\n", r);
1784                 return -ENODEV;
1785         }
1786 
1787         r = cio2_pci_config_setup(pci_dev);
1788         if (r)
1789                 return -ENODEV;
1790 
1791         r = cio2_fbpt_init_dummy(cio2);
1792         if (r)
1793                 return r;
1794 
1795         mutex_init(&cio2->lock);
1796 
1797         cio2->media_dev.dev = &cio2->pci_dev->dev;
1798         strscpy(cio2->media_dev.model, CIO2_DEVICE_NAME,
1799                 sizeof(cio2->media_dev.model));
1800         snprintf(cio2->media_dev.bus_info, sizeof(cio2->media_dev.bus_info),
1801                  "PCI:%s", pci_name(cio2->pci_dev));
1802         cio2->media_dev.hw_revision = 0;
1803 
1804         media_device_init(&cio2->media_dev);
1805         r = media_device_register(&cio2->media_dev);
1806         if (r < 0)
1807                 goto fail_mutex_destroy;
1808 
1809         cio2->v4l2_dev.mdev = &cio2->media_dev;
1810         r = v4l2_device_register(&pci_dev->dev, &cio2->v4l2_dev);
1811         if (r) {
1812                 dev_err(&pci_dev->dev,
1813                         "failed to register V4L2 device (%d)\n", r);
1814                 goto fail_media_device_unregister;
1815         }
1816 
1817         r = cio2_queues_init(cio2);
1818         if (r)
1819                 goto fail_v4l2_device_unregister;
1820 
1821         v4l2_async_notifier_init(&cio2->notifier);
1822 
1823         /* Register notifier for subdevices we care */
1824         r = cio2_parse_firmware(cio2);
1825         if (r)
1826                 goto fail_clean_notifier;
1827 
1828         r = devm_request_irq(&pci_dev->dev, pci_dev->irq, cio2_irq,
1829                              IRQF_SHARED, CIO2_NAME, cio2);
1830         if (r) {
1831                 dev_err(&pci_dev->dev, "failed to request IRQ (%d)\n", r);
1832                 goto fail_clean_notifier;
1833         }
1834 
1835         pm_runtime_put_noidle(&pci_dev->dev);
1836         pm_runtime_allow(&pci_dev->dev);
1837 
1838         return 0;
1839 
1840 fail_clean_notifier:
1841         v4l2_async_notifier_unregister(&cio2->notifier);
1842         v4l2_async_notifier_cleanup(&cio2->notifier);
1843         cio2_queues_exit(cio2);
1844 fail_v4l2_device_unregister:
1845         v4l2_device_unregister(&cio2->v4l2_dev);
1846 fail_media_device_unregister:
1847         media_device_unregister(&cio2->media_dev);
1848         media_device_cleanup(&cio2->media_dev);
1849 fail_mutex_destroy:
1850         mutex_destroy(&cio2->lock);
1851         cio2_fbpt_exit_dummy(cio2);
1852 
1853         return r;
1854 }
1855 
1856 static void cio2_pci_remove(struct pci_dev *pci_dev)
1857 {
1858         struct cio2_device *cio2 = pci_get_drvdata(pci_dev);
1859 
1860         media_device_unregister(&cio2->media_dev);
1861         v4l2_async_notifier_unregister(&cio2->notifier);
1862         v4l2_async_notifier_cleanup(&cio2->notifier);
1863         cio2_queues_exit(cio2);
1864         cio2_fbpt_exit_dummy(cio2);
1865         v4l2_device_unregister(&cio2->v4l2_dev);
1866         media_device_cleanup(&cio2->media_dev);
1867         mutex_destroy(&cio2->lock);
1868 }
1869 
1870 static int __maybe_unused cio2_runtime_suspend(struct device *dev)
1871 {
1872         struct pci_dev *pci_dev = to_pci_dev(dev);
1873         struct cio2_device *cio2 = pci_get_drvdata(pci_dev);
1874         void __iomem *const base = cio2->base;
1875         u16 pm;
1876 
1877         writel(CIO2_D0I3C_I3, base + CIO2_REG_D0I3C);
1878         dev_dbg(dev, "cio2 runtime suspend.\n");
1879 
1880         pci_read_config_word(pci_dev, pci_dev->pm_cap + CIO2_PMCSR_OFFSET, &pm);
1881         pm = (pm >> CIO2_PMCSR_D0D3_SHIFT) << CIO2_PMCSR_D0D3_SHIFT;
1882         pm |= CIO2_PMCSR_D3;
1883         pci_write_config_word(pci_dev, pci_dev->pm_cap + CIO2_PMCSR_OFFSET, pm);
1884 
1885         return 0;
1886 }
1887 
1888 static int __maybe_unused cio2_runtime_resume(struct device *dev)
1889 {
1890         struct pci_dev *pci_dev = to_pci_dev(dev);
1891         struct cio2_device *cio2 = pci_get_drvdata(pci_dev);
1892         void __iomem *const base = cio2->base;
1893         u16 pm;
1894 
1895         writel(CIO2_D0I3C_RR, base + CIO2_REG_D0I3C);
1896         dev_dbg(dev, "cio2 runtime resume.\n");
1897 
1898         pci_read_config_word(pci_dev, pci_dev->pm_cap + CIO2_PMCSR_OFFSET, &pm);
1899         pm = (pm >> CIO2_PMCSR_D0D3_SHIFT) << CIO2_PMCSR_D0D3_SHIFT;
1900         pci_write_config_word(pci_dev, pci_dev->pm_cap + CIO2_PMCSR_OFFSET, pm);
1901 
1902         return 0;
1903 }
1904 
1905 /*
1906  * Helper function to advance all the elements of a circular buffer by "start"
1907  * positions
1908  */
1909 static void arrange(void *ptr, size_t elem_size, size_t elems, size_t start)
1910 {
1911         struct {
1912                 size_t begin, end;
1913         } arr[2] = {
1914                 { 0, start - 1 },
1915                 { start, elems - 1 },
1916         };
1917 
1918 #define CHUNK_SIZE(a) ((a)->end - (a)->begin + 1)
1919 
1920         /* Loop as long as we have out-of-place entries */
1921         while (CHUNK_SIZE(&arr[0]) && CHUNK_SIZE(&arr[1])) {
1922                 size_t size0, i;
1923 
1924                 /*
1925                  * Find the number of entries that can be arranged on this
1926                  * iteration.
1927                  */
1928                 size0 = min(CHUNK_SIZE(&arr[0]), CHUNK_SIZE(&arr[1]));
1929 
1930                 /* Swap the entries in two parts of the array. */
1931                 for (i = 0; i < size0; i++) {
1932                         u8 *d = ptr + elem_size * (arr[1].begin + i);
1933                         u8 *s = ptr + elem_size * (arr[0].begin + i);
1934                         size_t j;
1935 
1936                         for (j = 0; j < elem_size; j++)
1937                                 swap(d[j], s[j]);
1938                 }
1939 
1940                 if (CHUNK_SIZE(&arr[0]) > CHUNK_SIZE(&arr[1])) {
1941                         /* The end of the first array remains unarranged. */
1942                         arr[0].begin += size0;
1943                 } else {
1944                         /*
1945                          * The first array is fully arranged so we proceed
1946                          * handling the next one.
1947                          */
1948                         arr[0].begin = arr[1].begin;
1949                         arr[0].end = arr[1].begin + size0 - 1;
1950                         arr[1].begin += size0;
1951                 }
1952         }
1953 }
1954 
1955 static void cio2_fbpt_rearrange(struct cio2_device *cio2, struct cio2_queue *q)
1956 {
1957         unsigned int i, j;
1958 
1959         for (i = 0, j = q->bufs_first; i < CIO2_MAX_BUFFERS;
1960                 i++, j = (j + 1) % CIO2_MAX_BUFFERS)
1961                 if (q->bufs[j])
1962                         break;
1963 
1964         if (i == CIO2_MAX_BUFFERS)
1965                 return;
1966 
1967         if (j) {
1968                 arrange(q->fbpt, sizeof(struct cio2_fbpt_entry) * CIO2_MAX_LOPS,
1969                         CIO2_MAX_BUFFERS, j);
1970                 arrange(q->bufs, sizeof(struct cio2_buffer *),
1971                         CIO2_MAX_BUFFERS, j);
1972         }
1973 
1974         /*
1975          * DMA clears the valid bit when accessing the buffer.
1976          * When stopping stream in suspend callback, some of the buffers
1977          * may be in invalid state. After resume, when DMA meets the invalid
1978          * buffer, it will halt and stop receiving new data.
1979          * To avoid DMA halting, set the valid bit for all buffers in FBPT.
1980          */
1981         for (i = 0; i < CIO2_MAX_BUFFERS; i++)
1982                 cio2_fbpt_entry_enable(cio2, q->fbpt + i * CIO2_MAX_LOPS);
1983 }
1984 
1985 static int __maybe_unused cio2_suspend(struct device *dev)
1986 {
1987         struct pci_dev *pci_dev = to_pci_dev(dev);
1988         struct cio2_device *cio2 = pci_get_drvdata(pci_dev);
1989         struct cio2_queue *q = cio2->cur_queue;
1990 
1991         dev_dbg(dev, "cio2 suspend\n");
1992         if (!cio2->streaming)
1993                 return 0;
1994 
1995         /* Stop stream */
1996         cio2_hw_exit(cio2, q);
1997         synchronize_irq(pci_dev->irq);
1998 
1999         pm_runtime_force_suspend(dev);
2000 
2001         /*
2002          * Upon resume, hw starts to process the fbpt entries from beginning,
2003          * so relocate the queued buffs to the fbpt head before suspend.
2004          */
2005         cio2_fbpt_rearrange(cio2, q);
2006         q->bufs_first = 0;
2007         q->bufs_next = 0;
2008 
2009         return 0;
2010 }
2011 
2012 static int __maybe_unused cio2_resume(struct device *dev)
2013 {
2014         struct cio2_device *cio2 = dev_get_drvdata(dev);
2015         int r = 0;
2016         struct cio2_queue *q = cio2->cur_queue;
2017 
2018         dev_dbg(dev, "cio2 resume\n");
2019         if (!cio2->streaming)
2020                 return 0;
2021         /* Start stream */
2022         r = pm_runtime_force_resume(&cio2->pci_dev->dev);
2023         if (r < 0) {
2024                 dev_err(&cio2->pci_dev->dev,
2025                         "failed to set power %d\n", r);
2026                 return r;
2027         }
2028 
2029         r = cio2_hw_init(cio2, q);
2030         if (r)
2031                 dev_err(dev, "fail to init cio2 hw\n");
2032 
2033         return r;
2034 }
2035 
2036 static const struct dev_pm_ops cio2_pm_ops = {
2037         SET_RUNTIME_PM_OPS(&cio2_runtime_suspend, &cio2_runtime_resume, NULL)
2038         SET_SYSTEM_SLEEP_PM_OPS(&cio2_suspend, &cio2_resume)
2039 };
2040 
2041 static const struct pci_device_id cio2_pci_id_table[] = {
2042         { PCI_DEVICE(PCI_VENDOR_ID_INTEL, CIO2_PCI_ID) },
2043         { 0 }
2044 };
2045 
2046 MODULE_DEVICE_TABLE(pci, cio2_pci_id_table);
2047 
2048 static struct pci_driver cio2_pci_driver = {
2049         .name = CIO2_NAME,
2050         .id_table = cio2_pci_id_table,
2051         .probe = cio2_pci_probe,
2052         .remove = cio2_pci_remove,
2053         .driver = {
2054                 .pm = &cio2_pm_ops,
2055         },
2056 };
2057 
2058 module_pci_driver(cio2_pci_driver);
2059 
2060 MODULE_AUTHOR("Tuukka Toivonen <tuukka.toivonen@intel.com>");
2061 MODULE_AUTHOR("Tianshu Qiu <tian.shu.qiu@intel.com>");
2062 MODULE_AUTHOR("Jian Xu Zheng");
2063 MODULE_AUTHOR("Yuning Pu <yuning.pu@intel.com>");
2064 MODULE_AUTHOR("Yong Zhi <yong.zhi@intel.com>");
2065 MODULE_LICENSE("GPL v2");
2066 MODULE_DESCRIPTION("IPU3 CIO2 driver");

/* [<][>][^][v][top][bottom][index][help] */