From e2935d993b41d249a5f6bad18c37d773612a2083 Mon Sep 17 00:00:00 2001 From: Cai YiWei Date: Tue, 28 Nov 2023 09:33:27 +0800 Subject: [PATCH 1/4] media: rockchip: isp: add mode for rv1106 suspend without rtt Change-Id: I878de96cac813ad6e31ad844b7fcd3c84ce0c5d6 Signed-off-by: Cai YiWei --- drivers/media/platform/rockchip/isp/dev.c | 16 +++++++++++----- drivers/media/platform/rockchip/isp/dev.h | 1 + .../media/platform/rockchip/isp/isp_external.h | 1 + drivers/media/platform/rockchip/isp/rkisp.c | 6 +++++- 4 files changed, 18 insertions(+), 6 deletions(-) diff --git a/drivers/media/platform/rockchip/isp/dev.c b/drivers/media/platform/rockchip/isp/dev.c index 179be066a522..b181f8454a25 100644 --- a/drivers/media/platform/rockchip/isp/dev.c +++ b/drivers/media/platform/rockchip/isp/dev.c @@ -1060,11 +1060,6 @@ static int rkisp_pm_prepare(struct device *dev) if (!hw->is_idle && hw->cur_dev_id == isp_dev->dev_id) isp_dev->suspend_sync = true; spin_unlock_irqrestore(&hw->rdbk_lock, lock_flags); - } else { - /* wait one frame for online */ - isp_dev->suspend_sync = true; - if (hw->isp_size[isp_dev->dev_id].fps) - time = 1000 / hw->isp_size[isp_dev->dev_id].fps; } if (isp_dev->suspend_sync) { @@ -1086,6 +1081,7 @@ static void rkisp_pm_complete(struct device *dev) struct rkisp_pipeline *p = &isp_dev->pipe; struct rkisp_stream *stream; int i, on = 1, rd_mode = isp_dev->rd_mode; + u32 val; if (isp_dev->isp_state & ISP_STOP) { if (pm_runtime_active(dev) && @@ -1158,10 +1154,20 @@ static void rkisp_pm_complete(struct device *dev) isp_dev->is_suspend = false; isp_dev->isp_state = ISP_START | ISP_FRAME_END; + if (isp_dev->is_suspend_one_frame) + isp_dev->is_first_double = true; + if (hw->isp_ver > ISP_V20) { + val = ISP3X_YNR_FST_FRAME | ISP3X_CNR_FST_FRAME | + ISP3X_DHAZ_FST_FRAME | ISP3X_ADRC_FST_FRAME; + if (hw->isp_ver == ISP_V32) + val |= ISP32_SHP_FST_FRAME; + rkisp_unite_set_bits(isp_dev, ISP3X_ISP_CTRL1, 0, val, false); + } for (i = 0; i < RKISP_MAX_STREAM; i++) { stream = &isp_dev->cap_dev.stream[i]; if (i == RKISP_STREAM_VIR || !stream->streaming || !stream->curr_buf) continue; + /* skip first frame due to hw no reference frame information */ stream->skip_frame = 1; } if (hw->cur_dev_id == isp_dev->dev_id) diff --git a/drivers/media/platform/rockchip/isp/dev.h b/drivers/media/platform/rockchip/isp/dev.h index 85b9990b1e54..3e6586428fb8 100644 --- a/drivers/media/platform/rockchip/isp/dev.h +++ b/drivers/media/platform/rockchip/isp/dev.h @@ -278,6 +278,7 @@ struct rkisp_device { bool is_frame_double; bool is_suspend; bool suspend_sync; + bool is_suspend_one_frame; struct rkisp_vicap_input vicap_in; diff --git a/drivers/media/platform/rockchip/isp/isp_external.h b/drivers/media/platform/rockchip/isp/isp_external.h index 5de005fe8d0b..6d4907483830 100644 --- a/drivers/media/platform/rockchip/isp/isp_external.h +++ b/drivers/media/platform/rockchip/isp/isp_external.h @@ -35,6 +35,7 @@ enum rkisp_vicap_link { RKISP_VICAP_ONLINE, RKISP_VICAP_RDBK_AIQ, RKISP_VICAP_RDBK_AUTO, + RKISP_VICAP_RDBK_AUTO_ONE_FRAME, }; struct rkisp_vicap_mode { diff --git a/drivers/media/platform/rockchip/isp/rkisp.c b/drivers/media/platform/rockchip/isp/rkisp.c index b1647b83f46a..64a421b86806 100644 --- a/drivers/media/platform/rockchip/isp/rkisp.c +++ b/drivers/media/platform/rockchip/isp/rkisp.c @@ -3422,6 +3422,7 @@ static int rkisp_set_work_mode_by_vicap(struct rkisp_device *isp_dev, struct rkisp_hw_dev *hw = isp_dev->hw_dev; int rd_mode = isp_dev->rd_mode; + isp_dev->is_suspend_one_frame = false; if (vicap_mode->rdbk_mode == RKISP_VICAP_ONLINE) { if (!hw->is_single) return -EINVAL; @@ -3436,7 +3437,8 @@ static int rkisp_set_work_mode_by_vicap(struct rkisp_device *isp_dev, default: isp_dev->rd_mode = HDR_NORMAL; } - } else if (vicap_mode->rdbk_mode == RKISP_VICAP_RDBK_AUTO) { + } else if (vicap_mode->rdbk_mode == RKISP_VICAP_RDBK_AUTO || + vicap_mode->rdbk_mode == RKISP_VICAP_RDBK_AUTO_ONE_FRAME) { /* switch to readback mode */ switch (rd_mode) { case HDR_LINEX3_DDR: @@ -3448,6 +3450,8 @@ static int rkisp_set_work_mode_by_vicap(struct rkisp_device *isp_dev, default: isp_dev->rd_mode = HDR_RDBK_FRAME1; } + if (vicap_mode->rdbk_mode == RKISP_VICAP_RDBK_AUTO_ONE_FRAME) + isp_dev->is_suspend_one_frame = true; } else { return -EINVAL; } From f82ba785edc5a2ce0e11e9ea2ef20d3d4b063dd5 Mon Sep 17 00:00:00 2001 From: Wu Liangqing Date: Mon, 4 Dec 2023 06:36:13 +0000 Subject: [PATCH 2/4] arm64: configs: rockchip: add CONFIG_ROCKCHIP_VIDEO_TUNNEL Change-Id: I9216b9013aa6a2ac90e167daaed5318f5f1b6a54 Signed-off-by: Wu Liangqing --- arch/arm64/configs/rockchip_defconfig | 1 + 1 file changed, 1 insertion(+) diff --git a/arch/arm64/configs/rockchip_defconfig b/arch/arm64/configs/rockchip_defconfig index 56ac0405a979..65258a5b38b0 100644 --- a/arch/arm64/configs/rockchip_defconfig +++ b/arch/arm64/configs/rockchip_defconfig @@ -687,6 +687,7 @@ CONFIG_ROCKCHIP_MPP_IEP2=y CONFIG_ROCKCHIP_MPP_JPGDEC=y CONFIG_ROCKCHIP_MPP_AV1DEC=y CONFIG_ROCKCHIP_MPP_VDPP=y +CONFIG_ROCKCHIP_VIDEO_TUNNEL=y CONFIG_SOUND=y CONFIG_SND=y CONFIG_SND_DYNAMIC_MINORS=y From 2f92fa5c0555bbcc7642d3e0a2e22be3e79f48f5 Mon Sep 17 00:00:00 2001 From: Wu Liangqing Date: Mon, 4 Dec 2023 08:38:46 +0000 Subject: [PATCH 3/4] arm64: dts: rockchip: rk3588: add rkvtunnel Signed-off-by: Wu Liangqing Change-Id: I07acae6e2b5085986c4485f84c0103db92322c37 --- arch/arm64/boot/dts/rockchip/rk3588s.dtsi | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/arch/arm64/boot/dts/rockchip/rk3588s.dtsi b/arch/arm64/boot/dts/rockchip/rk3588s.dtsi index 3ab70af8fffd..3ec03b70c1a3 100644 --- a/arch/arm64/boot/dts/rockchip/rk3588s.dtsi +++ b/arch/arm64/boot/dts/rockchip/rk3588s.dtsi @@ -2164,6 +2164,11 @@ status = "disabled"; }; + rkvtunnel: rkvtunnel { + compatible = "rockchip,video-tunnel"; + status = "disabled"; + }; + rockchip_suspend: rockchip-suspend { compatible = "rockchip,pm-rk3588"; status = "disabled"; From 6e8cfc3b5519953ede64e2819ba15327f4fa9e16 Mon Sep 17 00:00:00 2001 From: Wu Liangqing Date: Mon, 4 Dec 2023 06:35:02 +0000 Subject: [PATCH 4/4] arm64: dts: rockchip: rk3588-evb: enabled rkvtunnel Change-Id: I942a6b44e9f8251666ea4ebf494800a6b09c94ab Signed-off-by: Wu Liangqing --- arch/arm64/boot/dts/rockchip/rk3588-evb.dtsi | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/arch/arm64/boot/dts/rockchip/rk3588-evb.dtsi b/arch/arm64/boot/dts/rockchip/rk3588-evb.dtsi index e2cffb18cadf..73ab3e990bab 100644 --- a/arch/arm64/boot/dts/rockchip/rk3588-evb.dtsi +++ b/arch/arm64/boot/dts/rockchip/rk3588-evb.dtsi @@ -1076,6 +1076,10 @@ status = "okay"; }; +&rkvtunnel { + status = "okay"; +}; + &rockchip_suspend { status = "okay"; rockchip,sleep-debug-en = <1>;