summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJakob Unterwurzacher <jakob.unterwurzacher@theobroma-systems.com>2018-05-28 11:40:51 +0200
committerJakob Unterwurzacher <jakob.unterwurzacher@theobroma-systems.com>2018-05-28 11:40:51 +0200
commit02ca88080f3f12ea6dc6c6a3f1d78f6a1682dbb5 (patch)
tree315ee80e5041045530ced05806899e3aea409f15
parentdf47165fbd387bcd6598ae00fd1133c16709c849 (diff)
more clocks, more debug output
-rw-r--r--arch/arm64/boot/dts/rockchip/rk3399-puma-peafowl.dts28
-rw-r--r--drivers/clk/rockchip/clk-rk3399.c2
-rw-r--r--drivers/media/platform/rockchip/isp1/capture.c10
-rw-r--r--drivers/media/platform/rockchip/isp1/dev.c14
-rw-r--r--drivers/media/platform/rockchip/isp1/mipi_dphy_sy.c8
-rw-r--r--drivers/media/platform/rockchip/isp1/rkisp1.c19
-rw-r--r--drivers/media/v4l2-core/videobuf-core.c6
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 <linux/clk.h>
+#include <linux/clk-provider.h>
#include <linux/interrupt.h>
#include <linux/module.h>
#include <linux/of.h>
@@ -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;