From 9b9c5ddc2f06a6b87d2c1b210219f69de83296c5 Mon Sep 17 00:00:00 2001
From: Dafna Hirschfeld <dafna.hirschfeld@collabora.com>
Date: Wed, 15 Jul 2020 15:02:21 +0200
Subject: [PATCH] add trace_printk to debug the MIS of interrupts

---
 drivers/staging/media/rkisp1/Makefile         | 1 +
 drivers/staging/media/rkisp1/rkisp1-capture.c | 3 +++
 drivers/staging/media/rkisp1/rkisp1-dev.c     | 6 ++++++
 drivers/staging/media/rkisp1/rkisp1-isp.c     | 6 ++++++
 4 files changed, 16 insertions(+)

diff --git a/drivers/staging/media/rkisp1/Makefile b/drivers/staging/media/rkisp1/Makefile
index ab32a77db8f7d..e1ca4ac5c236a 100644
--- a/drivers/staging/media/rkisp1/Makefile
+++ b/drivers/staging/media/rkisp1/Makefile
@@ -1,5 +1,6 @@
 # SPDX-License-Identifier: GPL-2.0
 
+ccflags-y += -DDEBUG
 obj-$(CONFIG_VIDEO_ROCKCHIP_ISP1) += rockchip-isp1.o
 rockchip-isp1-objs += 	rkisp1-capture.o \
 			rkisp1-common.o \
diff --git a/drivers/staging/media/rkisp1/rkisp1-capture.c b/drivers/staging/media/rkisp1/rkisp1-capture.c
index c05280950ea0f..fbbba70a03701 100644
--- a/drivers/staging/media/rkisp1/rkisp1-capture.c
+++ b/drivers/staging/media/rkisp1/rkisp1-capture.c
@@ -648,10 +648,13 @@ void rkisp1_capture_isr(struct rkisp1_device *rkisp1)
 {
 	unsigned int i;
 	u32 status;
+	struct rkisp1_isp *isp = &rkisp1->isp;
 
 	status = rkisp1_read(rkisp1, RKISP1_CIF_MI_MIS);
 	rkisp1_write(rkisp1, status, RKISP1_CIF_MI_ICR);
 
+	trace_printk("cap mis 0x%08x sp=%ld mp=%ld frame seq=%u\n", status, status & BIT(1), status & BIT(0),
+				atomic_read(&isp->frame_sequence));
 	for (i = 0; i < ARRAY_SIZE(rkisp1->capture_devs); ++i) {
 		struct rkisp1_capture *cap = &rkisp1->capture_devs[i];
 
diff --git a/drivers/staging/media/rkisp1/rkisp1-dev.c b/drivers/staging/media/rkisp1/rkisp1-dev.c
index a0eb8f08708b9..64ffcf792f164 100644
--- a/drivers/staging/media/rkisp1/rkisp1-dev.c
+++ b/drivers/staging/media/rkisp1/rkisp1-dev.c
@@ -101,6 +101,8 @@
  *  +-----------+    +-----------+
  */
 
+u64 mytime;
+
 struct rkisp1_match_data {
 	const char * const *clks;
 	unsigned int size;
@@ -391,6 +393,7 @@ static irqreturn_t rkisp1_isr(int irq, void *ctx)
 {
 	struct device *dev = ctx;
 	struct rkisp1_device *rkisp1 = dev_get_drvdata(dev);
+	u64 t = ktime_get_ns();
 
 	/*
 	 * Call rkisp1_capture_isr() first to handle the frame that
@@ -398,9 +401,12 @@ static irqreturn_t rkisp1_isr(int irq, void *ctx)
 	 * it is potentially incremented by rkisp1_isp_isr() in the vertical
 	 * sync.
 	 */
+	trace_printk("START %llu\n", t - mytime);
+	mytime  = t;
 	rkisp1_capture_isr(rkisp1);
 	rkisp1_isp_isr(rkisp1);
 	rkisp1_mipi_isr(rkisp1);
+	trace_printk("END\n");
 
 	return IRQ_HANDLED;
 }
diff --git a/drivers/staging/media/rkisp1/rkisp1-isp.c b/drivers/staging/media/rkisp1/rkisp1-isp.c
index 6ec1e9816e9f2..39f88eb60714f 100644
--- a/drivers/staging/media/rkisp1/rkisp1-isp.c
+++ b/drivers/staging/media/rkisp1/rkisp1-isp.c
@@ -23,6 +23,7 @@
 
 #define RKISP1_ISP_DEV_NAME	RKISP1_DRIVER_NAME "_isp"
 
+extern u64 mytime;
 /*
  * NOTE: MIPI controller and input MUX are also configured in this file.
  * This is because ISP Subdev describes not only ISP submodule (input size,
@@ -534,6 +535,7 @@ static void rkisp1_isp_start(struct rkisp1_device *rkisp1)
 	struct rkisp1_sensor_async *sensor = rkisp1->active_sensor;
 	u32 val;
 
+	mytime = 0;
 	rkisp1_config_clk(rkisp1);
 
 	/* Activate MIPI */
@@ -925,6 +927,7 @@ static int rkisp1_isp_s_stream(struct v4l2_subdev *sd, int enable)
 	if (!enable) {
 		rkisp1_isp_stop(rkisp1);
 		rkisp1_mipi_csi2_stop(rkisp1->active_sensor);
+		mytime = 0;
 		return 0;
 	}
 
@@ -1050,6 +1053,7 @@ void rkisp1_mipi_isr(struct rkisp1_device *rkisp1)
 	u32 val, status;
 
 	status = rkisp1_read(rkisp1, RKISP1_CIF_MIPI_MIS);
+	trace_printk("mipi mis 0x%08x %ld\n", status, status & RKISP1_CIF_MIPI_FRAME_END);
 	if (!status)
 		return;
 
@@ -1110,6 +1114,8 @@ void rkisp1_isp_isr(struct rkisp1_device *rkisp1)
 	u32 status, isp_err;
 
 	status = rkisp1_read(rkisp1, RKISP1_CIF_ISP_MIS);
+	trace_printk("isp mis 0x%08x v-start=%ld isp-frame=%ld\n", status, status & RKISP1_CIF_ISP_V_START,
+								status & RKISP1_CIF_ISP_FRAME);
 	if (!status)
 		return;
 
-- 
GitLab