Difference between revisions of "eLinux.org:Jetson/L4T/Camera BringUp"

From eLinux.org
Jump to: navigation, search
(Replaced content with "Move to https://elinux.org/Jetson/l4t/Camera_BringUp")
(Tag: Replaced)
 
(9 intermediate revisions by the same user not shown)
Line 1: Line 1:
== Get Prepared ==
+
Move to https://elinux.org/Jetson/l4t/Camera_BringUp
* Please read through "Camera Development" section in https://developer.nvidia.com/embedded/dlc/l4t-documentation-28-1
 
== FAQ ==
 
=== Tips for debugging ===
 
* Boost the clock for debug.
 
sudo su
 
echo 1 > /sys/kernel/debug/bpmp/debug/clk/vi/mrq_rate_locked
 
echo 1 > /sys/kernel/debug/bpmp/debug/clk/isp/mrq_rate_locked
 
echo 1 > /sys/kernel/debug/bpmp/debug/clk/nvcsi/mrq_rate_locked
 
cat /sys/kernel/debug/bpmp/debug/clk/vi/max_rate
 
cat /sys/kernel/debug/bpmp/debug/clk/isp/max_rate
 
cat /sys/kernel/debug/bpmp/debug/clk/nvcsi/max_rate
 
echo ${max_rate} > /sys/kernel/debug/bpmp/debug/clk/vi/rate
 
echo ${max_rate} > /sys/kernel/debug/bpmp/debug/clk/isp/rate
 
echo ${max_rate} > /sys/kernel/debug/bpmp/debug/clk/nvcsi/rate
 
 
 
'''TX1'''
 
* if you saw below error message
 
tegra-vi4 15700000.vi: PXL_SOF syncpt timeout! err = -11
 
 
 
* please check below 4 items in your sensor device tree, these should follow the settings in your sensor datasheet
 
                                mode0 {
 
                                        cil_settletime = "0";
 
                                        active_w = "1920";
 
                                        active_h = "1080";
 
                                        embedded_metadata_height = "1";
 
 
 
* if you saw below error message
 
video4linux video0: MW_ACK_DONE syncpoint time out!
 
 
 
* Enable the csi debug message from below command, and use v4l2-ctl to verify the driver first.
 
sudo su
 
cd /sys/kernel/debug/dynamic_debug/
 
echo file csi2_fops.c +p > control
 
 
 
v4l2-ctl -d /dev/video0 --set-ctrl bypass_mode=0 --stream-mmap --stream-count=3
 
 
 
* please check below
 
please review the configuration of "line_length" in sensor driver
 
try to increase the delay between video lines data send via CSI
 
review the sensor datasheet to check the settings of FPS range
 
 
 
 
 
 
 
 
 
'''TX2'''
 
* if you saw below message it could be the sensor output embedded data line but DT didn't declare embedded_metadata_height or it value is 0
 
arm-smmu 12000000.iommu: Unhandled context fault: iova=0x00000000, fsynr=0x200011, cb=19, sid=4(0x4 - VI), pgd=0, pud=0, pmd=0, pte=0
 
 
 
<br />
 
 
 
=== Steps to enable more debug messages ===
 
* To enable logs from user-space for more details
 
sudo su
 
kill the process of argus_daemon/nvargus-daemon or nvcamera-daemon
 
export enableCamPclLogs=5
 
export enableCamScfLogs=5
 
/usr/sbin/argus_daemon(nvargus-daemon)      option for argus
 
/usr/sbin/nvcamera-daemon  option for gst-launch
 
 
 
launch camera from another console
 
 
 
* To enable trace for more information
 
echo 1 > /sys/kernel/debug/tracing/tracing_on
 
echo 30720 > /sys/kernel/debug/tracing/buffer_size_kb
 
echo 1 > /sys/kernel/debug/tracing/events/tegra_rtcpu/enable
 
echo 1 > /sys/kernel/debug/tracing/events/freertos/enable
 
echo 2 > /sys/kernel/debug/camrtc/log-level
 
echo 1 > /sys/kernel/debug/tracing/events/camera_common/enable
 
echo > /sys/kernel/debug/tracing/trace
 
cat /sys/kernel/debug/tracing/trace
 
 
 
VI error decoder map from trace
 
CSIMUX_FRAME data bit field
 
    bit 0:2 STREAM_ID
 
    bit 3 VPR
 
    bit 4 FS_flag
 
    bit 5 FE_flag
 
    bit 6 FE_CSI_FAULT
 
    bit 7 FS_FAULT
 
    bit 8 FORCE_FE_FAULT
 
    bit 9 FE_FRAME_ID_FAULT
 
    bit 10 PXL_ENABLE_FAULT
 
    bit 20:25 '''CSI_FAULT_CODE'''
 
'''CSI_FAULT_CODE''' data bit field
 
    bit 20 PP FSM timeout
 
    bit 21 PH single bit error repaired
 
    bit 22 CRC error on payload
 
    bit 23 Line short error
 
 
 
The bit 22 CRC error on payload. It could be CRC error at frame end package. Please contact with sensor vendor to check the CRC header.
 
    kworker/0:1-2059  [000] ...1  434.733650: rtcpu_vinotify_handle_msg: tstamp:13948014423 tag:CSIMUX_FRAME channel:0x00 frame:2 vi_tstamp:1063112012 data:0x00<big>4</big>00060
 
 
 
The bit 5 and 7 indicate lose the FE package cause the FS_FAULT
 
    kworker/4:0-30 [004] ...1 241.772651: rtcpu_vinotify_handle_msg: tstamp:7868711648 tag:CSIMUX_FRAME channel:0x00 frame:1 vi_tstamp:3573743671 data:0x000000a0
 
 
 
The CSIMUX_FRAME bit 21 PH single bit error repaired. Possible the sensor didn't send the ECC package.
 
    kworker/4:0-2238  [004] ...1  543.467972: rtcpu_vinotify_handle_msg: tstamp:17333540584 tag:CSIMUX_FRAME channel:0x00 frame:0 vi_tstamp:153670980 data:0x00200060
 
Can try disable the ECC check.
 
<source lang="cpp" line start="2" highlight="4-6">
 
diff --git a/drivers/media/platform/tegra/camera/csi/csi4_fops.c b/drivers/media/platform/tegra/camera/csi/csi4_fops.c
 
index 0377d7b..b3d01d3 100644
 
--- a/drivers/media/platform/tegra/camera/csi/csi4_fops.c
 
+++ b/drivers/media/platform/tegra/camera/csi/csi4_fops.c
 
@@ -76,8 +76,18 @@ static void csi4_stream_init(struct tegra_csi_channel *chan, int port_num)
 
        csi4_stream_write(chan, port_num, INTR_STATUS, 0x3ffff);
 
        csi4_stream_write(chan, port_num, ERR_INTR_STATUS, 0x7ffff);
 
        csi4_stream_write(chan, port_num, ERROR_STATUS2VI_MASK, 0x0);
 
-      csi4_stream_write(chan, port_num, INTR_MASK, 0x0);
 
-      csi4_stream_write(chan, port_num, ERR_INTR_MASK, 0x0);
 
+
 
+      csi4_stream_write(chan, port_num, INTR_MASK, PH_ECC_MULTI_BIT_ERR |
 
+                      PD_CRC_ERR_VC0 | PH_ECC_SINGLE_BIT_ERR_VC0);
 
+      csi4_stream_write(chan, port_num, ERR_INTR_MASK, PH_ECC_MULTI_BIT_ERR |
 
+                      PD_CRC_ERR_VC0 | PH_ECC_SINGLE_BIT_ERR_VC0);
 
+      csi4_stream_write(chan, port_num, ERROR_STATUS2VI_MASK,
 
+                      CFG_ERR_STATUS2VI_MASK_VC0 |
 
+                      CFG_ERR_STATUS2VI_MASK_VC1 |
 
+                      CFG_ERR_STATUS2VI_MASK_VC2 |
 
+                      CFG_ERR_STATUS2VI_MASK_VC3);
 
}
 
</source>
 
 
CHANSEL_FAULT data bit field
 
    bit 16:31  LINE_NUMBER
 
    bit 15 DTYPE_MISMATCH
 
    bit 14 EMBED_INFRINGE
 
    bit 13 EMBED_LONG_LINE
 
    bit 12 EMBED_SPURIOUS
 
    bit 11 EMBED_RUNAWAY
 
    bit 10 EMBED_MISSING_LE
 
    bit 9 PIXEL_SHORT_LINE
 
    bit 8 PIXEL_LONG_LINE
 
    bit 7 PIXEL_SPURIOUS
 
    bit 6 PIXEL_RUNAWAY
 
    bit 5 PIXEL_MISSING_LE
 
    bit 4 PIXEL_LINE_TIMER
 
    bit 3 EMBED_EOF
 
    bit 2 EMBED_SOF
 
    bit 1 PIXEL_EOF
 
    bit 0 PIXEL_SOF
 
 
 
The trace show the 0x0ada0040 0x40 means CHANSEL_FAULT of PIXEL_RUNAWAY means VI receives more lines than expected. The 0xad9(2778) is the lines report from the sensor driver.
 
    kworker/5:2-275 [005] ...1 122.290528: rtcpu_vinotify_handle_msg: tstamp:4155862787 tag:CHANSEL_PXL_SOF channel:0x00 frame:0 vi_tstamp:4155862337 data:0x00000001
 
    kworker/5:2-275 [005] ...1 122.290531: rtcpu_vinotify_handle_msg: tstamp:4155867990 tag:CHANSEL_LOAD_FRAMED channel:0x01 frame:0 vi_tstamp:4155867544 data:0x08000000
 
    kworker/5:2-275 [005] ...1 122.342572: rtcpu_vinotify_handle_msg: tstamp:4156521216 tag:CHANSEL_PXL_EOF channel:0x00 frame:0 vi_tstamp:4156520630 data:0x0ad90002
 
    kworker/5:2-275 [005] ...1 122.342579: rtcpu_vinotify_handle_msg: tstamp:4156521395 tag:CHANSEL_FAULT channel:0x00 frame:0 vi_tstamp:4156520667 data:0x0ada0040
 
    kworker/5:2-275 [005] ...1 122.342582: rtcpu_vinotify_handle_msg: tstamp:4156522342 tag:CHANSEL_LOAD_FRAMED channel:0x01 frame:0 vi_tstamp:4156521558 data:0x08000000
 
    kworker/5:2-275 [005] ...1 122.342585: rtcpu_vinotify_handle_msg: tstamp:4156522509 tag:CHANSEL_FAULT_FE channel:0x01 frame:0 vi_tstamp:4156521559 data:0x00000001
 
    kworker/5:2-275 [005] ...1 122.342588: rtcpu_vinotify_handle_msg: tstamp:4156522706 tag:ATOMP_FE channel:0x00 frame:0 vi_tstamp:4156521562 data:0x00000000
 
 
 
CSIMUX_STREAM data bit field
 
    bit 31 FIFO_BADPKT_STREAM_HI
 
    bit 30 FIFO_LOF_STREAM_HI
 
    bit 29 FIFO_OVERFLOW_STREAM_HI
 
    bit 28 SPURIOUS_DATA_STREAM_HI
 
    bit 27 FIFO_BADPKT_STREAM_LO
 
    bit 26 FIFO_LOF_STREAM_LO
 
    bit 25 FIFO_OVERFLOW_STREAM_LO
 
    bit 24 SPURIOUS_DATA_STREAM_LO
 
    bit 23 FIFO_BADPKT_STREAM_5
 
    bit 22 FIFO_LOF_STREAM_5
 
    bit 21 FIFO_OVERFLOW_STREAM_5
 
    bit 20 SPURIOUS_DATA_STREAM_5
 
    bit 19 FIFO_BADPKT_STREAM_4
 
    bit 18 FIFO_LOF_STREAM_4
 
    bit 17 FIFO_OVERFLOW_STREAM_4
 
    bit 16 SPURIOUS_DATA_STREAM_4
 
    bit 15 FIFO_BADPKT_STREAM_3
 
    bit 14 FIFO_LOF_STREAM_3
 
    bit 13 FIFO_OVERFLOW_STREAM_3
 
    bit 12 SPURIOUS_DATA_STREAM_3
 
    bit 11 FIFO_BADPKT_STREAM_2
 
    bit 10 FIFO_LOF_STREAM_2
 
    bit  9 FIFO_OVERFLOW_STREAM_2
 
    bit  8 SPURIOUS_DATA_STREAM_2
 
    bit  7 FIFO_BADPKT_STREAM_1
 
    bit  6 FIFO_LOF_STREAM_1
 
    bit  5 FIFO_OVERFLOW_STREAM_1
 
    bit  4 SPURIOUS_DATA_STREAM_1
 
    bit  3 FIFO_BADPKT_STREAM_0
 
    bit  2 FIFO_LOF_STREAM_0
 
    bit  1 FIFO_OVERFLOW_STREAM_0
 
    bit  0 SPURIOUS_DATA_STREAM_0
 
 
 
FIFO_OVERFLOW. It could be the pix_clk_hz in DT too small cause the ISP can't handle the input.
 
    kworker/5:3-1359  [005] ...1  253.671478: rtcpu_vinotify_handle_msg: tstamp:8279969890 tag:ISPBUF_FIFO_OVERFLOW channel:0x00 frame:12340 vi_tstamp:3985001981 data:0x00000000
 
 
 
Didn't receive any package from the MIPI bus. Make sure the sensor have output data to the MIPI bus   
 
    kworker/5:2-2980  [005] ...1  4162.509492: rtos_queue_peek_from_isr_failed: tstamp:130384213094 queue:0x0b4a3c58
 
    kworker/5:2-2980  [005] ...1  4162.509496: rtcpu_start: tstamp:130384214513
 
    kworker/5:2-2980  [005] ...1  4162.665213: rtos_queue_peek_from_isr_failed: tstamp:130389214019 queue:0x0b4a3c58
 
    kworker/5:2-2980  [005] ...1  4162.821197: rtos_queue_peek_from_isr_failed: tstamp:130394214523 queue:0x0b4a3c58
 
    kworker/5:2-2980  [005] ...1  4162.977226: rtos_queue_peek_from_isr_failed: tstamp:130399215027 queue:0x0b4a3c58
 
    kworker/5:2-2980  [005] ...1  4163.133208: rtos_queue_peek_from_isr_failed: tstamp:130404215532 queue:0x0b4a3c58
 
    kworker/5:2-2980  [005] ...1  4163.289207: rtos_queue_peek_from_isr_failed: tstamp:130409216052 queue:0x0b4a3c58
 
    kworker/5:2-2980  [005] ...1  4163.445214: rtos_queue_peek_from_isr_failed: tstamp:130414216548 queue:0x0b4a3c58
 
    kworker/5:2-2980  [005] ...1  4163.601218: rtos_queue_peek_from_isr_failed: tstamp:130419217056 queue:0x0b4a3c58
 
    kworker/5:2-2980  [005] ...1  4163.757169: rtos_queue_peek_from_isr_failed: tstamp:130424217548 queue:0x0b4a3c58
 
    kworker/5:2-2980  [005] ...1  4163.913235: rtos_queue_peek_from_isr_failed: tstamp:130429218108 queue:0x0b4a3c58
 
    kworker/5:2-2980  [005] ...1  4164.069227: rtos_queue_peek_from_isr_failed: tstamp:130434218588 queue:0x0b4a3c58
 
    kworker/5:2-2980  [005] ...1  4164.225233: rtos_queue_peek_from_isr_failed: tstamp:130439219082 queue:0x0b4a3c58
 
    kworker/5:2-2980  [005] ...1  4164.433230: rtos_queue_peek_from_isr_failed: tstamp:130444219591 queue:0x0b4a3c58
 
 
 
Some sensor output "User Defined packet" during FE and FS case thee CSIMUX_STREAM:PIXEL_SPURIOUS. Trace log like below.
 
 
 
    kworker/0:2-1954  [000] ...1  5874.768392: rtcpu_vinotify_handle_msg: tstamp:183893684462 tag:CSIMUX_STREAM channel:0xff frame:0 vi_tstamp:3505057581 data:0x00000100
 
    kworker/0:2-1954  [000] ...1  5874.820431: rtcpu_vinotify_handle_msg: tstamp:183894116571 tag:CHANSEL_PXL_SOF channel:0x00 frame:2 vi_tstamp:3505489579 data:0x00000001
 
    kworker/0:2-1954  [000] ...1  5874.820443: rtcpu_vinotify_handle_msg: tstamp:183894692458 tag:CHANSEL_PXL_EOF channel:0x00 frame:2 vi_tstamp:3506065401 data:0x023f0002
 
    kworker/0:2-1954  [000] ...1  5874.820446: rtcpu_vinotify_handle_msg: tstamp:183894692598 tag:ATOMP_FE channel:0x00 frame:2 vi_tstamp:3506065448 data:0x00000000
 
    kworker/0:2-1954  [000] ...1  5874.820448: rtcpu_vinotify_handle_msg: tstamp:183894701430 tag:CSIMUX_STREAM channel:0xff frame:0 vi_tstamp:3506074571 data:0x00000100
 
    kworker/0:2-1954  [000] ...1  5874.820451: rtcpu_vinotify_handle_msg: tstamp:183895326440 tag:CSIMUX_STREAM channel:0xff frame:0 vi_tstamp:3506699568 data:0x00000100
 
    kworker/0:2-1954  [000] ...1  5874.924412: rtcpu_vinotify_handle_msg: tstamp:183897826429 tag:CSIMUX_STREAM channel:0xff frame:0 vi_tstamp:3509199556 data:0x00000100
 
 
 
<source lang="cpp" line start="2" highlight="4-6">
 
diff --git a/drivers/media/platform/tegra/camera/vi/vi4_fops.c b/drivers/media/platform/tegra/camera/vi/vi4_fops.c
 
index 6d2d750..bb16ed6 100644
 
--- a/drivers/media/platform/tegra/camera/vi/vi4_fops.c
 
+++ b/drivers/media/platform/tegra/camera/vi/vi4_fops.c
 
@@ -62,6 +62,15 @@ u32 csimux_config_stream[] = {
 
        CSIMUX_CONFIG_STREAM_5
 
};
 
 
+u32 csimux_notify_mask_stream[] = {
 
+      CSIMUX_NOTIFY_MASK_STREAM_0,
 
+      CSIMUX_NOTIFY_MASK_STREAM_1,
 
+      CSIMUX_NOTIFY_MASK_STREAM_2,
 
+      CSIMUX_NOTIFY_MASK_STREAM_3,
 
+      CSIMUX_NOTIFY_MASK_STREAM_4,
 
+      CSIMUX_NOTIFY_MASK_STREAM_5
 
+};
 
+
 
static void vi4_write(struct tegra_channel *chan, unsigned int addr, u32 val)
 
{
 
        writel(val, chan->vi->iomem + addr);
 
@@ -449,6 +458,7 @@ static int tegra_channel_capture_setup(struct tegra_channel *chan,
 
        vnc_id = chan->vnc_id[index];
 
 
        vi4_write(chan, csimux_config_stream[csi_port], 0x1);
 
+      vi4_write(chan, csimux_notify_mask_stream[csi_port], (0x1 << 16));
 
 
        vi4_channel_write(chan, vnc_id, MATCH,
 
                        ((stream << STREAM_SHIFT) & STREAM) |
 
diff --git a/drivers/media/platform/tegra/camera/vi/vi4_registers.h b/drivers/media/platform/tegra/camera/vi/vi4_registers.h
 
index 588ebb3..6a4205b 100644
 
--- a/drivers/media/platform/tegra/camera/vi/vi4_registers.h
 
+++ b/drivers/media/platform/tegra/camera/vi/vi4_registers.h
 
@@ -50,6 +50,14 @@
 
#define CSIMUX_CONFIG_STREAM_3        0x430
 
#define CSIMUX_CONFIG_STREAM_4        0x434
 
#define CSIMUX_CONFIG_STREAM_5        0x438
 
+
 
+#define CSIMUX_NOTIFY_MASK_STREAM_0    0x440
 
+#define CSIMUX_NOTIFY_MASK_STREAM_1    0x444
 
+#define CSIMUX_NOTIFY_MASK_STREAM_2    0x448
 
+#define CSIMUX_NOTIFY_MASK_STREAM_3    0x44c
 
+#define CSIMUX_NOTIFY_MASK_STREAM_4    0x450
 
+#define CSIMUX_NOTIFY_MASK_STREAM_5    0x454
 
+
 
#define FRAMEIDGEN                                    (0xf << 26)
 
#define STICKYFAULT                                    (0x1 << 25)
 
#define VPR                                            (0x1 << 24)
 
</source>
 

Latest revision as of 01:13, 2 June 2021