From 4d84c1dabe42caaf9e0ec8c47816d1cca4315d01 Mon Sep 17 00:00:00 2001 From: Luo Wei Date: Thu, 18 Jan 2024 16:33:54 +0800 Subject: [PATCH 1/7] mfd: display-serdes: change default pinctrl to init Signed-off-by: Luo Wei Change-Id: I28261b1c785f89859c7c4758a57dcffdba223036 --- drivers/mfd/display-serdes/serdes-core.c | 7 ------- 1 file changed, 7 deletions(-) diff --git a/drivers/mfd/display-serdes/serdes-core.c b/drivers/mfd/display-serdes/serdes-core.c index 3d9a6e675673..ecf890cdda72 100644 --- a/drivers/mfd/display-serdes/serdes-core.c +++ b/drivers/mfd/display-serdes/serdes-core.c @@ -327,13 +327,6 @@ int serdes_set_pinctrl_default(struct serdes *serdes) { int ret = 0; - if ((!IS_ERR(serdes->pinctrl_node)) && (!IS_ERR(serdes->pins_default))) { - ret = pinctrl_select_state(serdes->pinctrl_node, serdes->pins_default); - if (ret) - dev_err(serdes->dev, "could not set default pins\n"); - SERDES_DBG_MFD("%s: name=%s default\n", __func__, dev_name(serdes->dev)); - } - if ((!IS_ERR(serdes->pinctrl_node)) && (!IS_ERR(serdes->pins_init))) { ret = pinctrl_select_state(serdes->pinctrl_node, serdes->pins_init); if (ret) From 46adc2c927fca871e6489b7706cf377c2875abc0 Mon Sep 17 00:00:00 2001 From: Luo Wei Date: Thu, 18 Jan 2024 18:41:40 +0800 Subject: [PATCH 2/7] mfd: display-serdes: rohm gpio0 support 1MHZ used for pwm Signed-off-by: Luo Wei Change-Id: I358b2f9c51ecbdc0c913a1123818a2e22a1e4078 --- drivers/mfd/display-serdes/maxim/maxim-max96752.c | 3 +++ drivers/mfd/display-serdes/maxim/maxim-max96772.c | 3 +++ drivers/mfd/display-serdes/rohm/rohm-bu18rl82.c | 7 +++++-- 3 files changed, 11 insertions(+), 2 deletions(-) diff --git a/drivers/mfd/display-serdes/maxim/maxim-max96752.c b/drivers/mfd/display-serdes/maxim/maxim-max96752.c index 8da93ea60a68..e39649d9972c 100644 --- a/drivers/mfd/display-serdes/maxim/maxim-max96752.c +++ b/drivers/mfd/display-serdes/maxim/maxim-max96752.c @@ -248,6 +248,9 @@ static struct function_desc max96752_functions_desc[] = { FUNCTION_DESC_GPIO_OUTPUT_HIGH(15), FUNCTION_DES_DELAY_MS(10), + FUNCTION_DES_DELAY_MS(20), + FUNCTION_DES_DELAY_MS(30), + FUNCTION_DES_DELAY_MS(40), FUNCTION_DES_DELAY_MS(50), FUNCTION_DES_DELAY_MS(100), FUNCTION_DES_DELAY_MS(200), diff --git a/drivers/mfd/display-serdes/maxim/maxim-max96772.c b/drivers/mfd/display-serdes/maxim/maxim-max96772.c index 20599620e061..a4a6089468ae 100644 --- a/drivers/mfd/display-serdes/maxim/maxim-max96772.c +++ b/drivers/mfd/display-serdes/maxim/maxim-max96772.c @@ -253,6 +253,9 @@ static struct function_desc max96772_functions_desc[] = { FUNCTION_DESC_GPIO_OUTPUT_HIGH(15), FUNCTION_DES_DELAY_MS(10), + FUNCTION_DES_DELAY_MS(20), + FUNCTION_DES_DELAY_MS(30), + FUNCTION_DES_DELAY_MS(40), FUNCTION_DES_DELAY_MS(50), FUNCTION_DES_DELAY_MS(100), FUNCTION_DES_DELAY_MS(200), diff --git a/drivers/mfd/display-serdes/rohm/rohm-bu18rl82.c b/drivers/mfd/display-serdes/rohm/rohm-bu18rl82.c index 385b26691495..1b9baf2daa8d 100644 --- a/drivers/mfd/display-serdes/rohm/rohm-bu18rl82.c +++ b/drivers/mfd/display-serdes/rohm/rohm-bu18rl82.c @@ -60,7 +60,7 @@ static const char *serdes_gpio_groups[] = { .group_names = serdes_gpio_groups, \ .num_group_names = ARRAY_SIZE(serdes_gpio_groups), \ .data = (void *)(const struct serdes_function_data []) { \ - { .gpio_rx_en = 1, .gpio_id = id + 2 } \ + { .gpio_rx_en = 1, .gpio_id = id ? (id + 2) : 0x12 } \ }, \ } \ @@ -71,7 +71,7 @@ static const char *serdes_gpio_groups[] = { .group_names = serdes_gpio_groups, \ .num_group_names = ARRAY_SIZE(serdes_gpio_groups), \ .data = (void *)(const struct serdes_function_data []) { \ - { .gpio_rx_en = 0, .gpio_id = id + 2 } \ + { .gpio_rx_en = 0, .gpio_id = id ? (id + 2) : 0x12 } \ }, \ } \ @@ -167,6 +167,9 @@ static struct function_desc bu18rl82_functions_desc[] = { FUNCTION_DESC_GPIO_OUTPUT_LOW(), FUNCTION_DES_DELAY_MS(10), + FUNCTION_DES_DELAY_MS(20), + FUNCTION_DES_DELAY_MS(30), + FUNCTION_DES_DELAY_MS(40), FUNCTION_DES_DELAY_MS(50), FUNCTION_DES_DELAY_MS(100), FUNCTION_DES_DELAY_MS(200), From e4e3454d08a7fdb293236e59bf720fac835b4d8c Mon Sep 17 00:00:00 2001 From: Luo Wei Date: Thu, 18 Jan 2024 18:54:35 +0800 Subject: [PATCH 3/7] arm64: dts: rockchip: rk3588-vehicle-evb: set 40ms delay for display Signed-off-by: Luo Wei Change-Id: Id0961505a8b4ce9e3aa4ada0223bd9ec5eecf44a --- .../rk3588-vehicle-serdes-display-v20.dtsi | 22 ++++++++++------- ...ehicle-serdes-mfd-display-maxim-split.dtsi | 24 +++++++++---------- ...k3588-vehicle-serdes-mfd-display-rohm.dtsi | 22 ++++++++++------- 3 files changed, 40 insertions(+), 28 deletions(-) diff --git a/arch/arm64/boot/dts/rockchip/rk3588-vehicle-serdes-display-v20.dtsi b/arch/arm64/boot/dts/rockchip/rk3588-vehicle-serdes-display-v20.dtsi index 596d4e76e74f..697448625974 100644 --- a/arch/arm64/boot/dts/rockchip/rk3588-vehicle-serdes-display-v20.dtsi +++ b/arch/arm64/boot/dts/rockchip/rk3588-vehicle-serdes-display-v20.dtsi @@ -652,6 +652,7 @@ 02a8 0003 02a9 0004 02aa 0005 + 02af 0002 //gpio0 1MHZ 0045 0080 0046 0007 0047 0080 @@ -880,9 +881,9 @@ function = "DES_TO_SER_GPIO3"; }; - 100ms-delay { + 40ms-delay { pins = "BU18RL82_GPIO1"; - function = "DELAY_100MS"; + function = "DELAY_40MS"; }; lcd-pwr-en { @@ -972,6 +973,7 @@ 002d 0018 0030 0018 0033 0018 + 02af 0002 //gpio0 1MHZ 0045 0080 0046 0007 004b 0038 @@ -1178,9 +1180,9 @@ function = "DES_TO_SER_GPIO3"; }; - 100ms-delay { + 40ms-delay { pins = "BU18RL82_GPIO1"; - function = "DELAY_100MS"; + function = "DELAY_40MS"; }; lcd-pwr-en { @@ -1290,6 +1292,7 @@ 0275 0020 0296 0004 0297 000d + 02af 0002 //gpio0 1MHZ 02b2 00c8 02b4 0001 02b8 00ff @@ -1487,9 +1490,9 @@ function = "DES_TO_SER_GPIO3"; }; - 100ms-delay { + 40ms-delay { pins = "BU18RL82_GPIO1"; - function = "DELAY_100MS"; + function = "DELAY_40MS"; }; lcd-pwr-en { @@ -1595,6 +1598,7 @@ 02a8 0003 02a9 0004 02aa 0005 + 02af 0002 //gpio0 1MHZ 0045 0080 0046 0007 0047 0080 @@ -1826,9 +1830,9 @@ function = "DES_TO_SER_GPIO3"; }; - 100ms-delay { + 40ms-delay { pins = "BU18RL82_GPIO1"; - function = "DELAY_100MS"; + function = "DELAY_40MS"; }; lcd-pwr-en { @@ -1930,6 +1934,7 @@ 0275 0020 0296 0004 0297 000d + 02af 0002 //gpio0 1MHZ 02b2 00c8 02b4 0001 02b8 00ff @@ -2198,6 +2203,7 @@ 002d 0018 0030 0018 0033 0018 + 02af 0002 //gpio0 1MHZ 0045 0080 0046 0007 004b 0038 diff --git a/arch/arm64/boot/dts/rockchip/rk3588-vehicle-serdes-mfd-display-maxim-split.dtsi b/arch/arm64/boot/dts/rockchip/rk3588-vehicle-serdes-mfd-display-maxim-split.dtsi index 11754d89a902..7dd62e5150fe 100644 --- a/arch/arm64/boot/dts/rockchip/rk3588-vehicle-serdes-mfd-display-maxim-split.dtsi +++ b/arch/arm64/boot/dts/rockchip/rk3588-vehicle-serdes-mfd-display-maxim-split.dtsi @@ -693,9 +693,9 @@ pins = "MAX96752_GPIO2"; function = "DES_TXID8_TO_SER"; }; - 100ms-delay { + 40ms-delay { pins = "MAX96752_GPIO15"; - function = "DELAY_100MS"; + function = "DELAY_40MS"; }; lcd-pwr-on { pins = "MAX96752_GPIO3"; @@ -823,9 +823,9 @@ pins = "MAX96752_GPIO2"; function = "DES_TXID14_TO_SER"; }; - 100ms-delay { + 40ms-delay { pins = "MAX96752_GPIO15"; - function = "DELAY_100MS"; + function = "DELAY_40MS"; }; lcd-pwr-on { pins = "MAX96752_GPIO3"; @@ -1367,9 +1367,9 @@ pins = "MAX96752_GPIO2"; function = "DES_TXID1_TO_SER"; }; - 100ms-delay { + 40ms-delay { pins = "MAX96752_GPIO15"; - function = "DELAY_100MS"; + function = "DELAY_40MS"; }; lcd-pwr-on { pins = "MAX96752_GPIO3"; @@ -1495,9 +1495,9 @@ pins = "MAX96752_GPIO2"; function = "DES_TXID4_TO_SER"; }; - 100ms-delay { + 40ms-delay { pins = "MAX96752_GPIO15"; - function = "DELAY_100MS"; + function = "DELAY_40MS"; }; lcd-pwr-on { pins = "MAX96752_GPIO3"; @@ -2044,9 +2044,9 @@ pins = "MAX96752_GPIO2"; function = "DES_TXID1_TO_SER"; }; - 100ms-delay { + 40ms-delay { pins = "MAX96752_GPIO15"; - function = "DELAY_100MS"; + function = "DELAY_40MS"; }; lcd-pwr-on { pins = "MAX96752_GPIO3"; @@ -2173,9 +2173,9 @@ pins = "MAX96752_GPIO2"; function = "DES_TXID4_TO_SER"; }; - 100ms-delay { + 40ms-delay { pins = "MAX96752_GPIO15"; - function = "DELAY_100MS"; + function = "DELAY_40MS"; }; lcd-pwr-on { pins = "MAX96752_GPIO3"; diff --git a/arch/arm64/boot/dts/rockchip/rk3588-vehicle-serdes-mfd-display-rohm.dtsi b/arch/arm64/boot/dts/rockchip/rk3588-vehicle-serdes-mfd-display-rohm.dtsi index 96fa9caf7125..b5abcf8e6e16 100644 --- a/arch/arm64/boot/dts/rockchip/rk3588-vehicle-serdes-mfd-display-rohm.dtsi +++ b/arch/arm64/boot/dts/rockchip/rk3588-vehicle-serdes-mfd-display-rohm.dtsi @@ -683,6 +683,7 @@ 02a8 0003 02a9 0004 02aa 0005 + 02af 0002 //gpio0 1MHZ 0045 0080 0046 0007 //1920 004b 00d0 @@ -880,9 +881,9 @@ function = "DES_TO_SER_GPIO3"; }; - 100ms-delay { + 40ms-delay { pins = "BU18RL82_GPIO1"; - function = "DELAY_100MS"; + function = "DELAY_40MS"; }; lcd-pwr-en { @@ -1022,6 +1023,7 @@ 02a8 0003 02a9 0004 02aa 0005 + 02af 0002 //gpio0 1MHZ 0045 0080 0046 0007 //1920 004b 00d0 @@ -1219,9 +1221,9 @@ function = "DES_TO_SER_GPIO3"; }; - 100ms-delay { + 40ms-delay { pins = "BU18RL82_GPIO1"; - function = "DELAY_100MS"; + function = "DELAY_40MS"; }; lcd-pwr-en { @@ -1349,6 +1351,7 @@ 0275 0020 0296 0004 0297 000d + 02af 0002 //gpio0 1MHZ 02b2 00c8 02b4 0001 02b8 00ff @@ -1552,9 +1555,9 @@ function = "DES_TO_SER_GPIO3"; }; - 100ms-delay { + 40ms-delay { pins = "BU18RL82_GPIO1"; - function = "DELAY_100MS"; + function = "DELAY_40MS"; }; lcd-pwr-en { @@ -1700,6 +1703,7 @@ 02a8 0003 02a9 0004 02aa 0005 + 02af 0002 //gpio0 1MHZ 0045 0080 0046 0007 //1920 004b 00d0 @@ -1899,9 +1903,9 @@ function = "DES_TO_SER_GPIO3"; }; - 100ms-delay { + 40ms-delay { pins = "BU18RL82_GPIO1"; - function = "DELAY_100MS"; + function = "DELAY_40MS"; }; lcd-pwr-en { @@ -2024,6 +2028,7 @@ 0275 0020 0296 0004 0297 000d + 02af 0002 //gpio0 1MHZ 02b2 00c8 02b4 0001 02b8 00ff @@ -2335,6 +2340,7 @@ 02a8 0003 02a9 0004 02aa 0005 + 02af 0002 //gpio0 1MHZ 0045 0080 0046 0007 //1920 004b 00d0 From ea5b7f59a7ad5da0afc9b7ffd20a1a716d468ba4 Mon Sep 17 00:00:00 2001 From: Cai YiWei Date: Thu, 18 Jan 2024 15:03:42 +0800 Subject: [PATCH 4/7] media: rockchip: isp: frame start to check and config next buf Change-Id: I6329dc9638b9f4cef2b7fac3a8ba77c255723a38 Signed-off-by: Cai YiWei --- .../media/platform/rockchip/isp/capture_v32.c | 39 +++++++------------ drivers/media/platform/rockchip/isp/dev.c | 2 +- .../media/platform/rockchip/isp/isp_rockit.c | 11 +----- drivers/media/platform/rockchip/isp/rkisp.c | 6 ++- 4 files changed, 21 insertions(+), 37 deletions(-) diff --git a/drivers/media/platform/rockchip/isp/capture_v32.c b/drivers/media/platform/rockchip/isp/capture_v32.c index 52a78de9eb94..9d76ff076a14 100644 --- a/drivers/media/platform/rockchip/isp/capture_v32.c +++ b/drivers/media/platform/rockchip/isp/capture_v32.c @@ -1081,20 +1081,20 @@ static void update_mi(struct rkisp_stream *stream) if (!ISP3X_ISP_OUT_LINE(rkisp_read(dev, ISP3X_ISP_DEBUG2, true))) { stream->ops->enable_mi(stream); stream_self_update(stream); - if (!stream->curr_buf) { - stream->curr_buf = stream->next_buf; - stream->next_buf = NULL; - } /* maybe no next buf to preclose mi */ stream->ops->disable_mi(stream); - } else if (stream->is_pause) { + } else { /* isp working and mi closed * config buf and enable mi, capture at next frame */ stream->ops->enable_mi(stream); stream->is_pause = false; } - } else if (stream->is_pause) { + if (!stream->curr_buf) { + stream->curr_buf = stream->next_buf; + stream->next_buf = NULL; + } + } else { /* isp working and mi no to close * config buf will auto update at frame end */ @@ -1143,11 +1143,12 @@ static void update_mi(struct rkisp_stream *stream) } v4l2_dbg(2, rkisp_debug, &dev->v4l2_dev, - "%s stream:%d Y:0x%x CB:0x%x | Y_SHD:0x%x\n", - __func__, stream->id, + "%s stream:%d cur:%p next:%p Y:0x%x CB:0x%x | Y_SHD:0x%x pause:%d stop:%d\n", + __func__, stream->id, stream->curr_buf, stream->next_buf, rkisp_read(dev, stream->config->mi.y_base_ad_init, false), rkisp_read(dev, stream->config->mi.cb_base_ad_init, false), - rkisp_read(dev, stream->config->mi.y_base_ad_shd, true)); + rkisp_read(dev, stream->config->mi.y_base_ad_shd, true), + stream->is_pause, stream->ops->is_stream_stopped(stream)); } static int set_mirror_flip(struct rkisp_stream *stream) @@ -1376,17 +1377,16 @@ static int mi_frame_start(struct rkisp_stream *stream, u32 mis) rkisp_stream_config_rsz(stream, false); stream->is_crop_upd = false; } - /* update buf for multi sensor at readback */ - if (!mis && !stream->ispdev->hw_dev->is_single && - !stream->curr_buf && - !list_empty(&stream->buf_queue)) { + if (!list_empty(&stream->buf_queue) && + ((dev->hw_dev->is_single && !stream->next_buf) || + (!dev->hw_dev->is_single && !stream->curr_buf))) { stream->next_buf = list_first_entry(&stream->buf_queue, struct rkisp_buffer, queue); list_del(&stream->next_buf->queue); stream->ops->update_mi(stream); } /* check frame loss */ - if (mis && stream->ops->is_stream_stopped(stream)) + if (stream->ops->is_stream_stopped(stream)) stream->dbg.frameloss++; } spin_unlock_irqrestore(&stream->vbq_lock, lock_flags); @@ -1678,16 +1678,7 @@ static void rkisp_buf_queue(struct vb2_buffer *vb) stream->id, ispbuf->buff_addr[0]); spin_lock_irqsave(&stream->vbq_lock, lock_flags); - /* single sensor with pingpong buf, update next if need */ - if (dev->hw_dev->is_single && - stream->id != RKISP_STREAM_VIR && - stream->id != RKISP_STREAM_LUMA && - stream->streaming && !stream->next_buf) { - stream->next_buf = ispbuf; - stream->ops->update_mi(stream); - } else { - list_add_tail(&ispbuf->queue, &stream->buf_queue); - } + list_add_tail(&ispbuf->queue, &stream->buf_queue); spin_unlock_irqrestore(&stream->vbq_lock, lock_flags); } diff --git a/drivers/media/platform/rockchip/isp/dev.c b/drivers/media/platform/rockchip/isp/dev.c index ebf4a8c02a76..a913914439f7 100644 --- a/drivers/media/platform/rockchip/isp/dev.c +++ b/drivers/media/platform/rockchip/isp/dev.c @@ -1167,7 +1167,7 @@ static void rkisp_pm_complete(struct device *dev) } 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) + if (i == RKISP_STREAM_VIR || !stream->streaming) continue; /* skip first frame due to hw no reference frame information */ if (isp_dev->is_first_double) diff --git a/drivers/media/platform/rockchip/isp/isp_rockit.c b/drivers/media/platform/rockchip/isp/isp_rockit.c index 8fb41ec43afe..9c155d0973ef 100644 --- a/drivers/media/platform/rockchip/isp/isp_rockit.c +++ b/drivers/media/platform/rockchip/isp/isp_rockit.c @@ -202,16 +202,7 @@ int rkisp_rockit_buf_queue(struct rockit_cfg *input_rockit_cfg) stream->id, isprk_buf, isprk_buf->isp_buf.buff_addr[0], isprk_buf->isp_buf.buff_addr[1]); - /* single sensor with pingpong buf, update next if need */ - if (ispdev->hw_dev->is_single && !ispdev->is_suspend && - stream->id != RKISP_STREAM_VIR && - stream->id != RKISP_STREAM_LUMA && - stream->streaming && !stream->next_buf) { - stream->next_buf = &isprk_buf->isp_buf; - stream->ops->update_mi(stream); - } else { - list_add_tail(&isprk_buf->isp_buf.queue, &stream->buf_queue); - } + list_add_tail(&isprk_buf->isp_buf.queue, &stream->buf_queue); spin_unlock_irqrestore(&stream->vbq_lock, lock_flags); return 0; diff --git a/drivers/media/platform/rockchip/isp/rkisp.c b/drivers/media/platform/rockchip/isp/rkisp.c index c3eda3fa3fec..98792343a656 100644 --- a/drivers/media/platform/rockchip/isp/rkisp.c +++ b/drivers/media/platform/rockchip/isp/rkisp.c @@ -1075,6 +1075,9 @@ void rkisp_check_idle(struct rkisp_device *dev, u32 irq) unsigned long lock_flags = 0; u32 val = 0; + if (!IS_HDR_RDBK(dev->rd_mode)) + return; + spin_lock_irqsave(&dev->hw_dev->rdbk_lock, lock_flags); dev->irq_ends |= (irq & dev->irq_ends_mask); v4l2_dbg(3, rkisp_debug, &dev->v4l2_dev, @@ -1086,8 +1089,7 @@ void rkisp_check_idle(struct rkisp_device *dev, u32 irq) if (!completion_done(&dev->hw_dev->monitor.cmpl)) complete(&dev->hw_dev->monitor.cmpl); } - if ((dev->irq_ends & dev->irq_ends_mask) != dev->irq_ends_mask || - !IS_HDR_RDBK(dev->rd_mode)) { + if ((dev->irq_ends & dev->irq_ends_mask) != dev->irq_ends_mask) { spin_unlock_irqrestore(&dev->hw_dev->rdbk_lock, lock_flags); return; } From 0f0f4a15764b9db6bb5cb0b75d750cb4d17a63ff Mon Sep 17 00:00:00 2001 From: Cai YiWei Date: Tue, 9 Jan 2024 10:16:28 +0800 Subject: [PATCH 5/7] ARM: dts: rockchip: rv1106: add dvbm node to isp Change-Id: Ic78df4181ff8ab565e437aca2eb4279d74a0b7da Signed-off-by: Cai YiWei --- arch/arm/boot/dts/rv1106.dtsi | 3 +++ 1 file changed, 3 insertions(+) diff --git a/arch/arm/boot/dts/rv1106.dtsi b/arch/arm/boot/dts/rv1106.dtsi index 6180d18da690..4f368120156c 100644 --- a/arch/arm/boot/dts/rv1106.dtsi +++ b/arch/arm/boot/dts/rv1106.dtsi @@ -314,18 +314,21 @@ rkisp_vir1: rkisp-vir1 { compatible = "rockchip,rkisp-vir"; rockchip,hw = <&rkisp>; + dvbm = <&rkdvbm>; status = "disabled"; }; rkisp_vir2: rkisp-vir2 { compatible = "rockchip,rkisp-vir"; rockchip,hw = <&rkisp>; + dvbm = <&rkdvbm>; status = "disabled"; }; rkisp_vir3: rkisp-vir3 { compatible = "rockchip,rkisp-vir"; rockchip,hw = <&rkisp>; + dvbm = <&rkdvbm>; status = "disabled"; }; From f1f585a98a26b1c3c73fa2ba1f9814f1e7f295d6 Mon Sep 17 00:00:00 2001 From: Sandy Huang Date: Wed, 18 Oct 2023 19:33:37 +0800 Subject: [PATCH 6/7] drm/rockchip: vop2: force to disable cluster-win1 when cluster-win0 is disabled the IC designed need use cluster-win0 first, and at the following case, will appear close cluster-win0 before cluster-win1 and lead to panic: reboot: -> drm_file_free()@drm_file.c -> drm_fb_release(file); -> schedule_work(&arg.work) -> drm_mode_rmfb_work_fn() -> drm_framebuffer_remove(fb) -> atomic_remove_fb(fb); -> drm_atomic_commit(state); -> drm_atomic_helper_check -> drm_atomic_normalize_zpos -> vop2_plane_atomic_check -> vop2_cluster_two_win_mode_check[panic] error log: [ 46.626480][ T27] pc : vop2_cluster_two_win_mode_check+0xd8/0x160 [ 46.626692][ T17] binder: send failed reply for transaction 35888, target dead [ 46.627357][ T27] lr : vop2_plane_atomic_check+0x5e0/0x790 ... [ 46.638943][ T27] Call trace: [ 46.639227][ T27] vop2_cluster_two_win_mode_check+0xd8/0x160 [ 46.639759][ T27] vop2_plane_atomic_check+0x5e0/0x790 [ 46.640241][ T27] drm_atomic_helper_check_planes+0xf0/0x1f8 [ 46.640768][ T27] drm_atomic_helper_check+0x50/0x90 [ 46.641234][ T27] drm_atomic_check_only+0x428/0x920 [ 46.641711][ T27] drm_atomic_commit+0x5c/0xd0 [ 46.642124][ T27] drm_framebuffer_remove+0x278/0x47c [ 46.642596][ T27] drm_mode_rmfb_work_fn+0x40/0xa8 [ 46.643044][ T27] process_one_work+0x1a8/0x3b8 [ 46.643474][ T27] worker_thread+0x300/0x430 [ 46.643875][ T27] kthread+0xec/0x1b8 [ 46.644230][ T27] ret_from_fork+0x10/0x20 Signed-off-by: Sandy Huang Change-Id: I4ebfe9715515e3b547138461975d32fbd0441e85 --- drivers/gpu/drm/rockchip/rockchip_drm_vop2.c | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/drivers/gpu/drm/rockchip/rockchip_drm_vop2.c b/drivers/gpu/drm/rockchip/rockchip_drm_vop2.c index 7d86537d8403..425338e041b0 100644 --- a/drivers/gpu/drm/rockchip/rockchip_drm_vop2.c +++ b/drivers/gpu/drm/rockchip/rockchip_drm_vop2.c @@ -4547,6 +4547,13 @@ static int vop2_cluster_two_win_mode_check(struct drm_plane_state *pstate) main_pstate = drm_atomic_get_new_plane_state(state, &main_win->base); + if (!main_pstate || !main_pstate->fb) { + DRM_INFO("force to disable %s when cluster-win0 is disabled\n", win->name); + pstate->visible = false; + + return 0; + } + if (pstate->fb->modifier != main_pstate->fb->modifier) { DRM_ERROR("%s(fb->modifier: 0x%llx) must use same data layout as %s(fb->modifier: 0x%llx)\n", win->name, pstate->fb->modifier, main_win->name, main_pstate->fb->modifier); From c10152d3e7dd7eea6c9e65cdc8fc97d46692fec1 Mon Sep 17 00:00:00 2001 From: Lan Honglin Date: Tue, 16 Jan 2024 15:58:09 +0800 Subject: [PATCH 7/7] media: i2c: sc450ai: add 1344X760 config fix i2c communication error when fastae convergence too slow Change-Id: Id5f522f139aa1f2982877efac45179830478d4c1 Signed-off-by: Lan Honglin --- drivers/media/i2c/sc450ai.c | 215 +++++++++++++++++++++++++++++++++++- 1 file changed, 214 insertions(+), 1 deletion(-) diff --git a/drivers/media/i2c/sc450ai.c b/drivers/media/i2c/sc450ai.c index 254f51678c5e..da39d54640ff 100644 --- a/drivers/media/i2c/sc450ai.c +++ b/drivers/media/i2c/sc450ai.c @@ -174,6 +174,199 @@ static const struct regval sc450ai_global_regs[] = { {REG_NULL, 0x00}, }; +/* + * Xclk 27Mhz + * max_framerate 120fps + * mipi_datarate per lane 720Mbps, 2lane + * binning to 1344x760 + */ +static const struct regval sc450ai_linear_10_1344x760_120fps_regs[] = { + {0x0103, 0x01}, + {0x0100, 0x00}, + {0x36e9, 0x80}, + {0x36f9, 0x80}, + {0x3018, 0x3a}, + {0x3019, 0x0c}, + {0x301c, 0x78}, + {0x301f, 0x75}, + {0x302e, 0x00}, + {0x3208, 0x05}, + {0x3209, 0x40}, + {0x320a, 0x02}, + {0x320b, 0xf8}, + {0x320c, 0x03}, + {0x320d, 0xa8}, + {0x320e, 0x03}, + {0x320f, 0x0c}, + {0x3211, 0x04}, + {0x3213, 0x04}, + {0x3214, 0x11}, + {0x3215, 0x31}, + {0x3220, 0x01}, + {0x3223, 0xc0}, + {0x3253, 0x10}, + {0x325f, 0x44}, + {0x3274, 0x09}, + {0x3280, 0x01}, + {0x3301, 0x08}, + {0x3306, 0x24}, + {0x3309, 0x60}, + {0x330b, 0x64}, + {0x330d, 0x30}, + {0x3315, 0x00}, + {0x331f, 0x59}, + {0x335d, 0x60}, + {0x3364, 0x56}, + {0x338f, 0x80}, + {0x3390, 0x08}, + {0x3391, 0x18}, + {0x3392, 0x38}, + {0x3393, 0x0a}, + {0x3394, 0x10}, + {0x3395, 0x18}, + {0x3396, 0x08}, + {0x3397, 0x18}, + {0x3398, 0x38}, + {0x3399, 0x0f}, + {0x339a, 0x12}, + {0x339b, 0x14}, + {0x339c, 0x18}, + {0x33af, 0x18}, + {0x360f, 0x13}, + {0x3621, 0xec}, + {0x3627, 0xa0}, + {0x3630, 0x90}, + {0x3633, 0x56}, + {0x3637, 0x1d}, + {0x3638, 0x0a}, + {0x363c, 0x0f}, + {0x363d, 0x0f}, + {0x363e, 0x08}, + {0x3670, 0x4a}, + {0x3671, 0xe0}, + {0x3672, 0xe0}, + {0x3673, 0xe0}, + {0x3674, 0xb0}, + {0x3675, 0x88}, + {0x3676, 0x8c}, + {0x367a, 0x48}, + {0x367b, 0x58}, + {0x367c, 0x48}, + {0x367d, 0x58}, + {0x3690, 0x34}, + {0x3691, 0x43}, + {0x3692, 0x44}, + {0x3699, 0x03}, + {0x369a, 0x0f}, + {0x369b, 0x1f}, + {0x369c, 0x40}, + {0x369d, 0x48}, + {0x36a2, 0x48}, + {0x36a3, 0x78}, + {0x36b0, 0x54}, + {0x36b1, 0x75}, + {0x36b2, 0x35}, + {0x36b3, 0x48}, + {0x36b4, 0x78}, + {0x36b7, 0xa0}, + {0x36b8, 0xa0}, + {0x36b9, 0x20}, + {0x36bd, 0x40}, + {0x36be, 0x48}, + {0x36d0, 0x20}, + {0x36e0, 0x08}, + {0x36e1, 0x08}, + {0x36e2, 0x12}, + {0x36e3, 0x48}, + {0x36e4, 0x78}, + {0x36fa, 0x0d}, + {0x36fb, 0xa4}, + {0x36fc, 0x00}, + {0x36fd, 0x24}, + {0x3907, 0x00}, + {0x3908, 0x41}, + {0x391e, 0x01}, + {0x391f, 0x11}, + {0x3933, 0x82}, + {0x3934, 0x0b}, + {0x3935, 0x02}, + {0x3936, 0x5e}, + {0x3937, 0x76}, + {0x3938, 0x78}, + {0x3939, 0x00}, + {0x393a, 0x28}, + {0x393b, 0x00}, + {0x393c, 0x1d}, + {0x3e00, 0x00}, + {0x3e01, 0x61}, + {0x3e02, 0x00}, + {0x3e03, 0x0b}, + {0x3e08, 0x03}, + {0x3e1b, 0x2a}, + {0x440e, 0x02}, + {0x4509, 0x20}, + {0x4837, 0x16}, + {0x5000, 0x4e}, + {0x5001, 0x44}, + {0x5780, 0x76}, + {0x5784, 0x08}, + {0x5785, 0x04}, + {0x5787, 0x0a}, + {0x5788, 0x0a}, + {0x5789, 0x0a}, + {0x578a, 0x0a}, + {0x578b, 0x0a}, + {0x578c, 0x0a}, + {0x578d, 0x40}, + {0x5790, 0x08}, + {0x5791, 0x04}, + {0x5792, 0x04}, + {0x5793, 0x08}, + {0x5794, 0x04}, + {0x5795, 0x04}, + {0x5799, 0x46}, + {0x579a, 0x77}, + {0x57a1, 0x04}, + {0x57a8, 0xd0}, + {0x57aa, 0x2a}, + {0x57ab, 0x7f}, + {0x57ac, 0x00}, + {0x57ad, 0x00}, + {0x5900, 0x01}, + {0x5901, 0x04}, + {0x59e0, 0xfe}, + {0x59e1, 0x40}, + {0x59e2, 0x3f}, + {0x59e3, 0x38}, + {0x59e4, 0x30}, + {0x59e5, 0x3f}, + {0x59e6, 0x38}, + {0x59e7, 0x30}, + {0x59e8, 0x3f}, + {0x59e9, 0x3c}, + {0x59ea, 0x38}, + {0x59eb, 0x3f}, + {0x59ec, 0x3c}, + {0x59ed, 0x38}, + {0x59ee, 0xfe}, + {0x59ef, 0x40}, + {0x59f4, 0x3f}, + {0x59f5, 0x38}, + {0x59f6, 0x30}, + {0x59f7, 0x3f}, + {0x59f8, 0x38}, + {0x59f9, 0x30}, + {0x59fa, 0x3f}, + {0x59fb, 0x3c}, + {0x59fc, 0x38}, + {0x59fd, 0x3f}, + {0x59fe, 0x3c}, + {0x59ff, 0x38}, + {0x36e9, 0x44}, + {0x36f9, 0x20}, + {REG_NULL, 0x00}, +}; + /* * Xclk 27Mhz * max_framerate 60fps @@ -374,6 +567,23 @@ static const struct sc450ai_mode supported_modes[] = { .link_freq_idx = 0, .vc[PAD0] = V4L2_MBUS_CSI2_CHANNEL_0, }, + { + .width = 1344, + .height = 760, + .max_fps = { + .numerator = 10000, + .denominator = 1200000, + }, + .exp_def = 0x0080, + .hts_def = 0x03a8, + .vts_def = 0x030c, + .bus_fmt = MEDIA_BUS_FMT_SBGGR10_1X10, + .reg_list = sc450ai_linear_10_1344x760_120fps_regs, + .hdr_mode = NO_HDR, + .xvclk_freq = 27000000, + .link_freq_idx = 0, + .vc[PAD0] = V4L2_MBUS_CSI2_CHANNEL_0, + }, }; static const s64 link_freq_menu_items[] = { @@ -1557,7 +1767,10 @@ static int sc450ai_probe(struct i2c_client *client, pm_runtime_set_active(dev); pm_runtime_enable(dev); - pm_runtime_idle(dev); + if (sc450ai->is_thunderboot) + pm_runtime_get_sync(dev); + else + pm_runtime_idle(dev); return 0;