PDK API Guide for J721E
csirx.h
Go to the documentation of this file.
1 /*
2  * Copyright (c) Texas Instruments Incorporated 2018-2019
3  * All rights reserved.
4  *
5  * Redistribution and use in source and binary forms, with or without
6  * modification, are permitted provided that the following conditions
7  * are met:
8  *
9  * Redistributions of source code must retain the above copyright
10  * notice, this list of conditions and the following disclaimer.
11  *
12  * Redistributions in binary form must reproduce the above copyright
13  * notice, this list of conditions and the following disclaimer in the
14  * documentation and/or other materials provided with the
15  * distribution.
16  *
17  * Neither the name of Texas Instruments Incorporated nor the names of
18  * its contributors may be used to endorse or promote products derived
19  * from this software without specific prior written permission.
20  *
21  * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
22  * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
23  * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
24  * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
25  * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
26  * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
27  * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
28  * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
29  * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
30  * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
31  * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
32  */
33 
43 /* @} */
44 
61 #ifndef CSIRX_H_
62 #define CSIRX_H_
63 
64 /* ========================================================================== */
65 /* Include Files */
66 /* ========================================================================== */
67 
68 #include <ti/csl/csl_csirx.h>
69 #include <ti/drv/fvid2/fvid2.h>
70 #include <ti/drv/csirx/soc/csirx_soc.h>
73 #include <ti/drv/udma/udma.h>
74 
75 #ifdef __cplusplus
76 extern "C" {
77 #endif
78 
79 /* ========================================================================== */
80 /* Macros & Typedefs */
81 /* ========================================================================== */
82 
84 #define CSIRX_CAPT_DRV_ID (FVID2_CSIRX_DRV_BASE + 0x00000000U)
85 
86 /* Capture IOCTL's */
102 #define IOCTL_CSIRX_GET_INST_STATUS (FVID2_CSIRX_DRV_IOCTL_BASE + 0x0000U)
103 
117 #define IOCTL_CSIRX_PRINT_DEBUG_LOGS (FVID2_CSIRX_DRV_IOCTL_BASE + 0x0100U)
118 
130 #define IOCTL_CSIRX_SET_DPHY_CONFIG (FVID2_CSIRX_DRV_IOCTL_BASE + 0x0200U)
131 
146 #define IOCTL_CSIRX_REGISTER_EVENT (FVID2_CSIRX_DRV_IOCTL_BASE + 0x0300U)
147 
162 #define IOCTL_CSIRX_UNREGISTER_EVENT (FVID2_CSIRX_DRV_IOCTL_BASE + 0x0400U)
163 
179 #define IOCTL_CSIRX_GET_INST_CH_NUM (FVID2_CSIRX_DRV_IOCTL_BASE + 0x0500U)
180 
195 #define IOCTL_CSIRX_CH_START (FVID2_CSIRX_DRV_IOCTL_BASE + 0x0600U)
196 
211 #define IOCTL_CSIRX_CH_STOP (FVID2_CSIRX_DRV_IOCTL_BASE + 0x0700U)
212 /* @} */
213 
223 #define CSIRX_CH_TYPE_CAPT ((uint32_t) 0x0U)
224 
226 #define CSIRX_CH_TYPE_OTF ((uint32_t) 0x1U)
227 
229 #define CSIRX_CH_TYPE_LPBK ((uint32_t) 0x2U)
230 /* @} */
231 
241 #define CSIRX_CAPT_STREAM_ID ((uint32_t) 0x0U)
242 
244 #define CSIRX_LPBK_STREAM_ID ((uint32_t) 0x1U)
245 
247 #define CSIRX_OTF_STREAM0_ID ((uint32_t) 0x2U)
248 
250 #define CSIRX_OTF_STREAM1_ID ((uint32_t) 0x3U)
251 
252 /* @} */
254 #define CSIRX_BUF_ALIGNMENT (UDMA_CACHELINE_ALIGNMENT)
255 
256 /* ========================================================================== */
257 /* Structure Declarations */
258 /* ========================================================================== */
259 
263 typedef struct
264 {
265  uint32_t chId;
269  uint32_t chType;
272  uint32_t vcNum;
276  uint32_t inCsiDataType;
319  uint8_t ringOrderId;
322 } Csirx_ChCfg;
323 
327 typedef struct
328 {
337  uint32_t numDataLanes;
339  uint32_t dataLanesMap[CSIRX_CAPT_DATA_LANES_MAX];
346  uint32_t enableErrbypass;
352  uint32_t numPixelsStrm0;
383  uint32_t enableStrm[CSIRX_NUM_STREAM];
390 } Csirx_InstCfg;
391 
396 typedef struct
397 {
398  uint32_t numCh;
406  uint64_t frameDropBuf;
411  uint32_t frameDropBufLen;
414  uint32_t enableChDq;
423 
428 typedef struct
429 {
430  Udma_DrvHandle drvHandle;
433 
437 typedef struct
438 {
439  int32_t retVal;
442 
446 typedef struct
447 {
448  uint32_t queueCount[CSIRX_NUM_CH];
452  uint32_t dequeueCount[CSIRX_NUM_CH];
456  uint32_t dropCount[CSIRX_NUM_CH];
460  uint32_t errorFrameCount[CSIRX_NUM_CH];
464  uint32_t overflowCount;
476  uint32_t crcCount;
480  uint32_t eccCount;
496  uint32_t invalidSpCount;
501  uint32_t strmFIFOOvflCount[CSIRX_NUM_STREAM];
506 
507 /* ========================================================================== */
508 /* Internal/Private Function Declarations */
509 /* ========================================================================== */
510 
511 /* None */
512 
513 /* ========================================================================== */
514 /* Function Declarations */
515 /* ========================================================================== */
523 int32_t Csirx_init(const Csirx_InitParams *initParams);
524 
530 int32_t Csirx_deInit(void);
531 /* ========================================================================== */
532 /* Internal Function Declarations (Needed for other static inlines) */
533 /* ========================================================================== */
534 
541 static inline void Csirx_initParamsInit(Csirx_InitParams *initPrms);
542 
549 static inline void Csirx_createParamsInit(Csirx_CreateParams *createPrms);
550 
557 static inline void Csirx_chCfgInit(Csirx_ChCfg *chCfg);
558 
565 static inline void Csirx_instCfgInit(Csirx_InstCfg *instCfg);
566 
573 static inline void Csirx_instStatusInit(Csirx_InstStatus *status);
574 
575 /* ========================================================================== */
576 /* Static Function Definitions */
577 /* ========================================================================== */
578 
579 static inline void Csirx_initParamsInit(Csirx_InitParams *initPrms)
580 {
581  initPrms->drvHandle = NULL;
582 }
583 
584 static inline void Csirx_createParamsInit(Csirx_CreateParams *createPrms)
585 {
586  uint32_t loopCnt;
587 
588  if (NULL != createPrms)
589  {
590  createPrms->numCh = 0U;
591  for (loopCnt = 0U ; loopCnt < CSIRX_NUM_CH ; loopCnt++)
592  {
593  Csirx_chCfgInit(&createPrms->chCfg[loopCnt]);
594  }
595  Csirx_instCfgInit(&createPrms->instCfg);
596  createPrms->frameDropBufLen = 0U;
597  createPrms->frameDropBuf = 0U;
598  createPrms->enableChDq = 0U;
599  }
600 }
601 
602 static inline void Csirx_chCfgInit(Csirx_ChCfg *chCfgPrms)
603 {
604  chCfgPrms->chId = CSIRX_CH_ID_DEFAULT;
605  chCfgPrms->chType = CSIRX_CH_TYPE_CAPT;
606  chCfgPrms->vcNum = CSIRX_VC_NUM_DEFAULT;
607  chCfgPrms->inCsiDataType = CSIRX_IN_DT_DEFAULT;
608  Fvid2Format_init(&chCfgPrms->outFmt);
609  chCfgPrms->outFmt.width = 0U;
610  chCfgPrms->outFmt.height = 0U;
611  Fvid2Utils_memset(&chCfgPrms->outFmt.pitch[0U],
612  0x0,
613  sizeof (chCfgPrms->outFmt.pitch));
614 
615  /* Initialization of UDMA channel params */
619  /* Make CSI2RX DMA channels as highest priority,
620  it is assumed that order 8-15 is mapped as RT at system level */
621  chCfgPrms->rxChParams.busPriority = 0U;
622  chCfgPrms->rxChParams.busQos = 0U;
623  chCfgPrms->rxChParams.busOrderId = 8U;
624  chCfgPrms->rxChParams.dmaPriority =
626 }
627 
628 static inline void Csirx_instCfgInit(Csirx_InstCfg *modCfgPrms)
629 {
630  uint32_t loopCnt;
631 
632  modCfgPrms->enableCsiv2p0Support = (uint32_t)TRUE;
634  modCfgPrms->enableErrbypass = (uint32_t)TRUE;
635  modCfgPrms->numPixelsStrm0 = (uint32_t)0U;
636  for(loopCnt = 0U ; loopCnt < CSIRX_CAPT_DATA_LANES_MAX ; loopCnt++)
637  {
638  modCfgPrms->dataLanesMap[loopCnt] = (loopCnt + 1U);
639  }
640  for(loopCnt = 0U ; loopCnt < CSIRX_NUM_STREAM ; loopCnt++)
641  {
642  modCfgPrms->enableStrm[loopCnt] = 0;
643  }
644 }
645 
646 static inline void Csirx_instStatusInit(Csirx_InstStatus *captStatus)
647 {
648  uint32_t loopCnt, strmIdx;
649 
650  captStatus->overflowCount = 0U;
651  captStatus->spuriousUdmaIntrCount = 0U;
652  captStatus->spuriousUdmaIntrCount = 0U;
653  captStatus->frontFIFOOvflCount = 0U;
654  captStatus->crcCount = 0U;
655  captStatus->eccCount = 0U;
656  captStatus->correctedEccCount = 0U;
657  captStatus->dataIdErrorCount = 0U;
658  captStatus->invalidAccessCount = 0U;
659  captStatus->invalidSpCount = 0U;
660  for (strmIdx = 0U ; strmIdx < CSIRX_NUM_STREAM ; strmIdx++)
661  {
662  captStatus->strmFIFOOvflCount[strmIdx]= 0U;
663  }
664  for(loopCnt = 0U ; loopCnt < CSIRX_NUM_CH ; loopCnt++)
665  {
666  captStatus->queueCount[loopCnt] = 0U;
667  captStatus->dequeueCount[loopCnt] = 0U;
668  captStatus->dropCount[loopCnt] = 0U;
669  captStatus->errorFrameCount[loopCnt] = 0U;
670  }
671 }
672 
673 #ifdef __cplusplus
674 }
675 #endif
676 
677 #endif /* #ifndef CSIRX_H_ */
678 /* @} */
Udma_ChRxPrms rxChParams
Definition: csirx.h:317
#define TRUE
Definition: csl_types.h:54
uint8_t busPriority
Definition: udma_ch.h:371
uint32_t chId
Definition: csirx.h:265
uint8_t busQos
Definition: udma_ch.h:373
uint32_t frameDropBufLen
Definition: csirx.h:411
uint32_t dataLanesMap[CSIRX_CAPT_DATA_LANES_MAX]
Definition: csirx.h:339
uint32_t errorFrameCount[CSIRX_NUM_CH]
Definition: csirx.h:460
UDMA RX channel parameters.
Definition: udma_ch.h:360
uint32_t overflowCount
Definition: csirx.h:464
Csirx_ChCfg chCfg[CSIRX_NUM_CH]
Definition: csirx.h:401
#define CSIRX_NUM_CH
Number of Channels: Maximum number of channels for configuration.
Definition: csirx_cfg.h:71
static void Csirx_instStatusInit(Csirx_InstStatus *status)
Csirx_InstStatus structure init function.
Definition: csirx.h:646
uint32_t numDataLanes
Definition: csirx.h:337
#define TISCI_MSG_VALUE_RM_UDMAP_CH_SCHED_PRIOR_HIGH
Definition: tisci_rm_udmap.h:204
uint32_t invalidAccessCount
Definition: csirx.h:492
#define CSIRX_CH_ID_DEFAULT
Channel ID: Default channel ID used for initialization.
Definition: csirx_cfg.h:73
Capture driver create status. Returned after calling Fvid2_create().
Definition: csirx.h:437
uint32_t chType
Definition: csirx.h:269
#define CSIRX_CAPT_DATA_LANES_MAX
Defines total number of physical data lanes that can be used per CSIRX instance.
Definition: csirx_soc.h:131
#define CSL_UDMAP_CHAN_TYPE_REF_TR_RING
Definition: csl_udmap.h:187
CSIRX Driver configuration file.
#define CSIRX_VC_NUM_DEFAULT
Virtual Channel ID: Default virtual channel ID used for initialization.
Definition: csirx_cfg.h:76
uint64_t frameDropBuf
Definition: csirx.h:406
UDMA Driver API/interface file.
#define CSIRX_NUM_STREAM
CSIRX DRV Numbers: Number of stream per CSI RX module.
Definition: csirx_soc.h:94
uint32_t height
Definition: csl_fvid2_dataTypes.h:1104
uint32_t dropCount[CSIRX_NUM_CH]
Definition: csirx.h:456
Capture driver create arguments, used when calling Fvid2_create(). Structure containing Streams confi...
Definition: csirx.h:428
uint32_t queueCount[CSIRX_NUM_CH]
Definition: csirx.h:448
static void Csirx_instCfgInit(Csirx_InstCfg *instCfg)
Csirx_InstCfg structure init function.
Definition: csirx.h:628
static void Csirx_createParamsInit(Csirx_CreateParams *createPrms)
Csirx_CreateParams structure init function.
Definition: csirx.h:584
#define CSIRX_CH_TYPE_CAPT
Stream type: capture mode, frames will captured to internal memory or DDR.
Definition: csirx.h:223
uint32_t enableCsiv2p0Support
Definition: csirx.h:329
static void Csirx_initParamsInit(Csirx_InitParams *initPrms)
Csirx_InitParams structure init function.
Definition: csirx.h:579
int32_t Csirx_init(const Csirx_InitParams *initParams)
CSIRX Driver Init function.
void UdmaChRxPrms_init(Udma_ChRxPrms *rxPrms, uint32_t chType)
Udma_ChRxPrms structure init function.
#define NULL
Define NULL if not defined.
Definition: csl_types.h:107
uint32_t invalidSpCount
Definition: csirx.h:496
Fvid2_Format outFmt
Definition: csirx.h:278
uint32_t spuriousUdmaIntrCount
Definition: csirx.h:468
Capture status structure used to get the current status.
Definition: csirx.h:446
uint32_t pitch[FVID2_MAX_PLANES]
Definition: csl_fvid2_dataTypes.h:1107
uint32_t frontFIFOOvflCount
Definition: csirx.h:472
Udma_DrvHandle drvHandle
Definition: csirx.h:430
uint32_t enableErrbypass
Definition: csirx.h:346
#define CSIRX_IN_DT_DEFAULT
Frame Width: Default frame width used for initialization.
Definition: csirx_cfg.h:78
static void Csirx_chCfgInit(Csirx_ChCfg *chCfg)
Csirx_ChCfg structure init function.
Definition: csirx.h:602
uint32_t numPixelsStrm0
Definition: csirx.h:352
FVID2 video buffer format specification.
Definition: csl_fvid2_dataTypes.h:1096
uint32_t enableStrm[CSIRX_NUM_STREAM]
Definition: csirx.h:383
uint8_t chanType
Definition: udma_ch.h:367
int32_t Csirx_deInit(void)
CSIRX Driver de-Init function.
uint8_t busOrderId
Definition: udma_ch.h:375
uint32_t crcCount
Definition: csirx.h:476
uint32_t dataIdErrorCount
Definition: csirx.h:488
uint32_t width
Definition: csl_fvid2_dataTypes.h:1101
Structure containing Channels configurations.
Definition: csirx.h:263
uint8_t dmaPriority
Definition: udma_ch.h:377
#define UDMA_CH_TYPE_RX
RX channel type.
Definition: udma_ch.h:149
uint32_t eccCount
Definition: csirx.h:480
uint32_t numCh
Definition: csirx.h:398
int32_t retVal
Definition: csirx.h:439
static void Fvid2Format_init(Fvid2_Format *fmt)
Fvid2_Format structure init function.
Definition: csl_fvid2_dataTypes.h:2183
uint32_t dequeueCount[CSIRX_NUM_CH]
Definition: csirx.h:452
uint32_t strmFIFOOvflCount[CSIRX_NUM_STREAM]
Definition: csirx.h:501
#define UDMA_DEFAULT_RING_ORDER_ID
Default ring order ID.
Definition: udma_cfg.h:122
Structure containing csirx module initialization arguments.
Definition: csirx.h:327
uint8_t ringOrderId
Definition: csirx.h:319
This file contains the CSL API's for CSI-RX.
Capture driver create arguments, used when calling Fvid2_create(). Structure containing Streams confi...
Definition: csirx.h:396
uint32_t vcNum
Definition: csirx.h:272
uint32_t correctedEccCount
Definition: csirx.h:484
CSIRX event related parameters and API.
uint32_t inCsiDataType
Definition: csirx.h:276
Csirx_InstCfg instCfg
Definition: csirx.h:403
uint32_t enableChDq
Definition: csirx.h:414