From 02ca88080f3f12ea6dc6c6a3f1d78f6a1682dbb5 Mon Sep 17 00:00:00 2001 From: Jakob Unterwurzacher Date: Mon, 28 May 2018 11:40:51 +0200 Subject: more clocks, more debug output --- .../boot/dts/rockchip/rk3399-puma-peafowl.dts | 28 +++++++++++++++++----- drivers/clk/rockchip/clk-rk3399.c | 2 ++ drivers/media/platform/rockchip/isp1/capture.c | 10 ++++++-- drivers/media/platform/rockchip/isp1/dev.c | 14 +++++++---- .../media/platform/rockchip/isp1/mipi_dphy_sy.c | 8 ++++++- drivers/media/platform/rockchip/isp1/rkisp1.c | 19 +++++++++++++-- drivers/media/v4l2-core/videobuf-core.c | 6 ++++- 7 files changed, 71 insertions(+), 16 deletions(-) diff --git a/arch/arm64/boot/dts/rockchip/rk3399-puma-peafowl.dts b/arch/arm64/boot/dts/rockchip/rk3399-puma-peafowl.dts index 6fd734361e2d..b89095b2ea7a 100644 --- a/arch/arm64/boot/dts/rockchip/rk3399-puma-peafowl.dts +++ b/arch/arm64/boot/dts/rockchip/rk3399-puma-peafowl.dts @@ -22,8 +22,10 @@ clocks = <&cru SCLK_MIPIDPHY_REF>, <&cru SCLK_DPHY_TX1RX1_CFG>, <&cru PCLK_VIO_GRF>, - <&cru PCLK_MIPI_DSI1>; - clock-names = "dphy-ref", "dphy-cfg", "grf", "pclk"; + <&cru PCLK_MIPI_DSI1>, + <&cru SCLK_DPHY_PLL>, <&cru PCLK_MIPI_DSI0>, <&cru SCLK_DPHY_TX0_CFG>; + clock-names = "dphy-ref", "dphy-cfg", "grf", "pclk", + "ref", "pclk0", "phy0_cfg"; power-domains = <&power RK3399_PD_VIO>; resets = <&cru SRST_P_MIPI_DSI1>; @@ -58,6 +60,10 @@ }; }; +&mipi_dphy_rx0 { + status = "okay"; +}; + &i2c1 { hdmi2csi { status = "okay"; @@ -86,9 +92,6 @@ }; }; -&rkisp1_0 { - status = "okay"; -}; &rkisp1_1 { status = "okay"; @@ -108,7 +111,6 @@ status = "okay"; }; - &pinctrl { peafowl { peafowl_gpios: peafowl_gpios { @@ -118,3 +120,17 @@ }; }; }; + +// EXPERIMENTALLY ENABLED - WE DO NOT USE ISP0 +&rkisp1_0 { + status = "okay"; +}; + +&isp0_mmu { + status = "okay"; +}; + +&mipi_dphy_rx0 { + status = "okay"; +}; + diff --git a/drivers/clk/rockchip/clk-rk3399.c b/drivers/clk/rockchip/clk-rk3399.c index c6d65bf067f7..22d453964f72 100644 --- a/drivers/clk/rockchip/clk-rk3399.c +++ b/drivers/clk/rockchip/clk-rk3399.c @@ -1318,6 +1318,8 @@ static struct rockchip_clk_branch rk3399_clk_branches[] __initdata = { RK3399_CLKGATE_CON(27), 1, GFLAGS), GATE(ACLK_ISP0_WRAPPER, "aclk_isp0_wrapper", "aclk_isp0", 0, RK3399_CLKGATE_CON(27), 5, GFLAGS), + + // ???? GATE(HCLK_ISP1_WRAPPER, "hclk_isp1_wrapper", "aclk_isp0", 0, RK3399_CLKGATE_CON(27), 7, GFLAGS), diff --git a/drivers/media/platform/rockchip/isp1/capture.c b/drivers/media/platform/rockchip/isp1/capture.c index 2ab64bda743e..a5f1656a4e9b 100644 --- a/drivers/media/platform/rockchip/isp1/capture.c +++ b/drivers/media/platform/rockchip/isp1/capture.c @@ -808,6 +808,7 @@ static int sp_config_mi(struct rkisp1_stream *stream) sp_set_y_height(base, stream->out_fmt.height); sp_set_y_line_length(base, stream->u.sp.y_stride); + printk("%s:%d: enabling sp_frame_end interrupt\n", __func__, __LINE__); sp_frame_end_int_enable(base); if (output_isp_fmt->uv_swap) sp_set_uv_swap(base); @@ -873,6 +874,7 @@ static void update_mi(struct rkisp1_stream *stream) * throw data to it if there is no available buffer. */ if (stream->next_buf) { + printk_ratelimited(KERN_DEBUG "%s:%d: setting y_add to %x\n", __func__, __LINE__, stream->next_buf->buff_addr[RKISP1_PLANE_Y]); mi_set_y_addr(stream, stream->next_buf->buff_addr[RKISP1_PLANE_Y]); mi_set_cb_addr(stream, @@ -1051,6 +1053,7 @@ static int rkisp1_start(struct rkisp1_stream *stream) * when run at 120fps. */ if (other->state != RKISP1_STATE_STREAMING) { + printk("%s:%d: force_cfg_update\n", __func__, __LINE__); force_cfg_update(base); mi_frame_end(stream); } @@ -1114,11 +1117,13 @@ static void rkisp1_buf_queue(struct vb2_buffer *vb) struct capture_fmt *isp_fmt = &stream->out_isp_fmt; int i; - printk("%s:%d: called\n", __func__, __LINE__); + printk("%s:%d: called, mplanes=%d\n", __func__, __LINE__, isp_fmt->mplanes); memset(ispbuf->buff_addr, 0, sizeof(ispbuf->buff_addr)); - for (i = 0; i < isp_fmt->mplanes; i++) + for (i = 0; i < isp_fmt->mplanes; i++) { ispbuf->buff_addr[i] = vb2_dma_contig_plane_dma_addr(vb, i); + printk("%s:%d: buff_addr[%d]=%x\n", __func__, __LINE__, i, ispbuf->buff_addr[i]); + } if (isp_fmt->mplanes == 1) { for (i = 0; i < isp_fmt->cplanes - 1; i++) { @@ -1163,6 +1168,7 @@ static int rkisp1_create_dummy_buf(struct rkisp1_stream *stream) return -ENOMEM; } + printk("%s:%d: vaddr=%px\n", __func__, __LINE__, dummy_buf->vaddr); return 0; } diff --git a/drivers/media/platform/rockchip/isp1/dev.c b/drivers/media/platform/rockchip/isp1/dev.c index 8499b78ea2c3..1a669726f04b 100644 --- a/drivers/media/platform/rockchip/isp1/dev.c +++ b/drivers/media/platform/rockchip/isp1/dev.c @@ -33,6 +33,7 @@ */ #include +#include #include #include #include @@ -485,11 +486,13 @@ static irqreturn_t rkisp1_irq_handler(int irq, void *ctx) struct device *dev = ctx; struct rkisp1_device *rkisp1_dev = dev_get_drvdata(dev); void __iomem *base = rkisp1_dev->base_addr; - unsigned int mis_val, i; - - printk_ratelimited(KERN_DEBUG "%s:%d: called\n", __func__, __LINE__); + unsigned int mis_val, i, isp_ris, mipi_ris; mis_val = readl(rkisp1_dev->base_addr + CIF_ISP_MIS); + isp_ris = readl(rkisp1_dev->base_addr + CIF_ISP_RIS); + mipi_ris = readl(rkisp1_dev->base_addr + CIF_MIPI_RIS); + printk_ratelimited(KERN_DEBUG "%s:%d: called, isp_ris=%x isp_mis=%x, mipi_ris=%x\n", __func__, __LINE__, isp_ris, mis_val, mipi_ris); + if (mis_val) rkisp1_isp_isr(mis_val, rkisp1_dev); @@ -500,8 +503,10 @@ static irqreturn_t rkisp1_irq_handler(int irq, void *ctx) for (i = 0; i < RKISP1_MAX_STREAM; ++i) { struct rkisp1_stream *stream = &rkisp1_dev->stream[i]; - if (stream->ops->is_frame_end_int_masked(base)) + if (stream->ops->is_frame_end_int_masked(base)) { + printk_ratelimited(KERN_DEBUG "%s:%d: is_frame_end_int_masked\n", __func__, __LINE__); rkisp1_mi_isr(stream); + } } return IRQ_HANDLED; @@ -520,6 +525,7 @@ static int rkisp1_enable_sys_clk(struct rkisp1_device *rkisp1_dev) int i, ret = -EINVAL; for (i = 0; i < rkisp1_dev->clk_size; i++) { + printk("%s:%d: enabling clk #%d, name=%s\n", __func__, __LINE__, i, __clk_get_name(rkisp1_dev->clks[i])); ret = clk_prepare_enable(rkisp1_dev->clks[i]); if (ret < 0) goto err; diff --git a/drivers/media/platform/rockchip/isp1/mipi_dphy_sy.c b/drivers/media/platform/rockchip/isp1/mipi_dphy_sy.c index 8b1e385dbcde..6b7af1b61dbe 100644 --- a/drivers/media/platform/rockchip/isp1/mipi_dphy_sy.c +++ b/drivers/media/platform/rockchip/isp1/mipi_dphy_sy.c @@ -619,6 +619,8 @@ static const char * const rk3399_mipidphy_clks[] = { "dphy-cfg", "grf", "pclk", + + "ref", "pclk0", "phy0_cfg", }; static int mipidphy_rx_stream_on(struct mipidphy_priv *priv, @@ -700,6 +702,7 @@ static int mipidphy_txrx_stream_on(struct mipidphy_priv *priv, // write_grf_reg(priv, GRF_DSI_CSI_TESTBUS_SEL, 1); // not defined for RK3399 #if BEHAVE_LIKE_MARVIN + // With value 0 we get 60 interrupts/s. With 1, we get none. write_grf_reg(priv, GRF_DPHY_RX1_SRC_SEL, 0); // PHY_REG(RK3399_GRF_SOC_CON24, 1, 4) #else write_grf_reg(priv, GRF_DPHY_RX1_SRC_SEL, 1); @@ -712,6 +715,7 @@ static int mipidphy_txrx_stream_on(struct mipidphy_priv *priv, write_grf_reg(priv, GRF_DPHY_TX1RX1_FORCETXSTOPMODE, 0); write_grf_reg(priv, GRF_DPHY_TX1RX1_TURNREQUEST, 0); // GRF_SOC_CON24 offset 0 width 4 write_grf_reg(priv, GRF_DPHY_TX1RX1_TURNDISABLE, 0xf); + write_grf_reg(priv, GRF_DPHY_TX1RX1_ENABLE, GENMASK(sensor->lanes - 1, 0)); // PHY_REG(RK3399_GRF_SOC_CON23, 4, 0) /* dphy start */ @@ -1025,7 +1029,7 @@ static int rockchip_mipidphy_probe(struct platform_device *pdev) const struct of_device_id *of_id; const struct dphy_drv_data *drv_data; int i, ret; - struct reset_control *rst; + //struct reset_control *rst; printk("%s:%d: called\n", __func__, __LINE__); @@ -1098,6 +1102,7 @@ static int rockchip_mipidphy_probe(struct platform_device *pdev) pm_runtime_enable(&pdev->dev); +/* printk("%s:%d: deasserting reset\n", __func__, __LINE__); rst = devm_reset_control_get(dev, "apb"); if (IS_ERR(rst)) { @@ -1106,6 +1111,7 @@ static int rockchip_mipidphy_probe(struct platform_device *pdev) } reset_control_deassert(rst); udelay(10); +*/ return 0; } diff --git a/drivers/media/platform/rockchip/isp1/rkisp1.c b/drivers/media/platform/rockchip/isp1/rkisp1.c index 0fe8a820a06e..8694fe4128a9 100644 --- a/drivers/media/platform/rockchip/isp1/rkisp1.c +++ b/drivers/media/platform/rockchip/isp1/rkisp1.c @@ -160,7 +160,10 @@ static int rkisp1_config_isp(struct rkisp1_device *dev) out_crop = &dev->isp_sdev.out_crop; in_crop = &dev->isp_sdev.in_crop; + printk("%s:%d: called. fmt_type=%x, mbus.type=%x\n", __func__, __LINE__, in_fmt->fmt_type, sensor->mbus.type); + if (in_fmt->fmt_type == FMT_BAYER) { + printk("%s:%d: fmt_type=FMT_BAYER\n", __func__, __LINE__); acq_mult = 1; if (out_fmt->fmt_type == FMT_BAYER) { if (sensor->mbus.type == V4L2_MBUS_BT656) @@ -179,18 +182,26 @@ static int rkisp1_config_isp(struct rkisp1_device *dev) isp_ctrl = CIF_ISP_CTRL_ISP_MODE_BAYER_ITU601; } } else if (in_fmt->fmt_type == FMT_YUV) { + printk("%s:%d: fmt_type=FMT_YUV\n", __func__, __LINE__); acq_mult = 2; if (sensor->mbus.type == V4L2_MBUS_CSI2) { + printk("%s:%d: mbus.type=V4L2_MBUS_CSI2\n", __func__, __LINE__); isp_ctrl = CIF_ISP_CTRL_ISP_MODE_ITU601; } else { - if (sensor->mbus.type == V4L2_MBUS_BT656) + if (sensor->mbus.type == V4L2_MBUS_BT656) { + printk("%s:%d: mbus.type=V4L2_MBUS_BT656\n", __func__, __LINE__); isp_ctrl = CIF_ISP_CTRL_ISP_MODE_ITU656; - else + } + else { + printk(KERN_ERR "%s:%d: mbus.type= OTHER!?\n", __func__, __LINE__); isp_ctrl = CIF_ISP_CTRL_ISP_MODE_ITU601; + } } irq_mask |= CIF_ISP_DATA_LOSS; + } else { + printk(KERN_ERR "%s:%d: Unknown fmt_type!?\n", __func__, __LINE__); } /* Set up input acquisition properties */ @@ -230,6 +241,8 @@ static int rkisp1_config_isp(struct rkisp1_device *dev) /* interrupt mask */ irq_mask |= CIF_ISP_FRAME | CIF_ISP_V_START | CIF_ISP_PIC_SIZE_ERROR | CIF_ISP_FRAME_IN; + + printk("%s:%d: irq_mask=%x\n", __func__, __LINE__, irq_mask); writel(irq_mask, base + CIF_ISP_IMSC); if (out_fmt->fmt_type == FMT_BAYER) @@ -1149,6 +1162,8 @@ void rkisp1_isp_isr(unsigned int isp_mis, struct rkisp1_device *dev) unsigned int isp_mis_tmp = 0; unsigned int isp_err = 0; + printk_ratelimited(KERN_DEBUG "%s:%d: called\n", __func__, __LINE__); + /* start edge of v_sync */ if (isp_mis & CIF_ISP_V_START) { riksp1_isp_queue_event_sof(&dev->isp_sdev); diff --git a/drivers/media/v4l2-core/videobuf-core.c b/drivers/media/v4l2-core/videobuf-core.c index 51bf5252b6ec..463a3f11e5dd 100644 --- a/drivers/media/v4l2-core/videobuf-core.c +++ b/drivers/media/v4l2-core/videobuf-core.c @@ -43,7 +43,7 @@ MODULE_LICENSE("GPL"); #define dprintk(level, fmt, arg...) \ do { \ - if (debug >= level) \ + if (1 || debug >= level) \ printk(KERN_DEBUG "vbuf: " fmt, ## arg); \ } while (0) @@ -532,6 +532,8 @@ int videobuf_qbuf(struct videobuf_queue *q, struct v4l2_buffer *b) unsigned long flags = 0; int retval; + printk("%s:%d: called\n", __func__, __LINE__); + MAGIC_CHECK(q->int_ops->magic, MAGIC_QTYPE_OPS); if (b->memory == V4L2_MEMORY_MMAP) @@ -614,6 +616,8 @@ int videobuf_qbuf(struct videobuf_queue *q, struct v4l2_buffer *b) spin_lock_irqsave(q->irqlock, flags); q->ops->buf_queue(q, buf); spin_unlock_irqrestore(q->irqlock, flags); + } else { + printk("%s:%d: not streaming\n", __func__, __LINE__); } dprintk(1, "qbuf: succeeded\n"); retval = 0; -- cgit v1.2.3