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