From 82e97736336ab6ece0cbdeec5be7d2ed22fef5e4 Mon Sep 17 00:00:00 2001 From: Zhang Yubing Date: Tue, 30 Apr 2024 09:10:02 +0800 Subject: [PATCH 01/13] drm/rockchip: dw-dp: support user simulate aux for sideband message Change-Id: I23be5e753ac650fe08afe42819ebe4e55a8cf708 Signed-off-by: Zhang Yubing --- drivers/gpu/drm/rockchip/dw-dp.c | 35 ++++++++++++++++++++++++++++++++ 1 file changed, 35 insertions(+) diff --git a/drivers/gpu/drm/rockchip/dw-dp.c b/drivers/gpu/drm/rockchip/dw-dp.c index 4b9cf4fdd22f..c8ab7ce2a657 100644 --- a/drivers/gpu/drm/rockchip/dw-dp.c +++ b/drivers/gpu/drm/rockchip/dw-dp.c @@ -46,6 +46,7 @@ #include "rockchip_drm_drv.h" #include "rockchip_drm_vop.h" +#include "rockchip_dp_mst_aux_client.h" #define DPTX_VERSION_NUMBER 0x0000 #define DPTX_VERSION_TYPE 0x0004 @@ -496,6 +497,7 @@ struct dw_dp { struct drm_dp_mst_topology_mgr mst_mgr; struct dw_dp_mst_enc mst_enc[DPTX_MAX_STREAMS]; struct list_head mst_conn_list; + struct rockchip_dp_aux_client *aux_client; struct drm_info_list *debugfs_files; }; @@ -3123,6 +3125,17 @@ static ssize_t dw_dp_aux_transfer(struct drm_dp_aux *aux, return ret; } +static ssize_t dw_dp_sim_aux_transfer(struct drm_dp_aux *aux, + struct drm_dp_aux_msg *msg) +{ + struct dw_dp *dp = container_of(aux, struct dw_dp, aux); + + if (dp->aux_client && dp->aux_client->transfer) + return dp->aux_client->transfer(dp->aux_client, aux, msg); + else + return dw_dp_aux_transfer(aux, msg); +} + static enum drm_mode_status dw_dp_bridge_mode_valid(struct drm_bridge *bridge, const struct drm_display_info *info, @@ -5353,6 +5366,17 @@ static const struct drm_encoder_funcs dw_dp_encoder_funcs = { .late_register = dw_dp_encoder_late_register, }; +static void dw_dp_mst_poll_hpd_irq(void *data) +{ + struct dw_dp *dp = data; + + mutex_lock(&dp->irq_lock); + dp->hotplug.long_hpd = false; + mutex_unlock(&dp->irq_lock); + + schedule_work(&dp->hpd_work); +} + static int dw_dp_bind(struct device *dev, struct device *master, void *data) { struct dw_dp *dp = dev_get_drvdata(dev); @@ -5402,6 +5426,12 @@ static int dw_dp_bind(struct device *dev, struct device *master, void *data) goto error_unregister_aux; } + if (dp->aux_client) { + dp->aux_client->register_hpd_irq(dp->aux_client, dw_dp_mst_poll_hpd_irq, dp); + dp->aux_client->register_transfer(dp->aux_client, dw_dp_aux_transfer); + dp->aux.transfer = dw_dp_sim_aux_transfer; + } + pm_runtime_enable(dp->dev); pm_runtime_get_sync(dp->dev); @@ -5684,6 +5714,11 @@ static int dw_dp_probe(struct platform_device *pdev) return ret; } + dp->aux_client = rockchip_dp_get_aux_client(dev->of_node, "rockchip,mst-sim"); + if (IS_ERR(dp->aux_client)) + return dev_err_probe(dev, PTR_ERR(dp->aux_client), + "failed to get dp aux_client\n"); + dp->bridge.of_node = dp->support_mst ? dp->mst_enc[0].port_node : dev->of_node; dp->bridge.funcs = &dw_dp_bridge_funcs; dp->bridge.ops = DRM_BRIDGE_OP_DETECT | DRM_BRIDGE_OP_EDID | From 7fc20e2dfe428cdddd170187802bab075144e473 Mon Sep 17 00:00:00 2001 From: Zhang Yubing Date: Tue, 7 May 2024 11:32:19 +0800 Subject: [PATCH 02/13] drm/rockchip: dw-dp: support fix virtual channel payload id For simulation aux client, the virtual channel pyaload id can't send by sideband MSG. In this case, the MST device often config a fix payload id. It need DPTX also config fix payload id to match the MST device. Change-Id: I49148e92a80091a50a5b1f44496430f39d9c1aee Signed-off-by: Zhang Yubing --- drivers/gpu/drm/rockchip/dw-dp.c | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/drivers/gpu/drm/rockchip/dw-dp.c b/drivers/gpu/drm/rockchip/dw-dp.c index c8ab7ce2a657..296387d22397 100644 --- a/drivers/gpu/drm/rockchip/dw-dp.c +++ b/drivers/gpu/drm/rockchip/dw-dp.c @@ -3858,6 +3858,7 @@ static int dw_dp_mst_encoder_atomic_check(struct drm_encoder *encoder, struct dw_dp_mst_conn *mst_conn = container_of(connector, struct dw_dp_mst_conn, connector); struct drm_dp_mst_topology_state *mst_state; + struct drm_dp_mst_atomic_payload *payload; int pbn, slot; mst_state = drm_atomic_get_mst_topology_state(crtc_state->state, &dp->mst_mgr); @@ -3918,6 +3919,14 @@ static int dw_dp_mst_encoder_atomic_check(struct drm_encoder *encoder, drm_dp_mst_update_slots(mst_state, DP_CAP_ANSI_8B10B); + payload = drm_atomic_get_mst_payload_state(mst_state, mst_conn->port); + if (dp->aux_client && !payload->vcpi) { + payload->vcpi = mst_enc->stream_id + 1; + dev_info(dp->dev, "[MST PORT:%p] assigned VCPI #%d\n", + payload->port, payload->vcpi); + mst_state->payload_mask |= BIT(payload->vcpi - 1); + } + return 0; } From 31cd4f11b5ec31fc361256a04237416f278b62b2 Mon Sep 17 00:00:00 2001 From: Alex Wang Date: Wed, 5 Jun 2024 10:15:41 +0800 Subject: [PATCH 03/13] input: rockchip_pwm_remotectl: support pwm shutdown Change-Id: I71f70a2f24958ffa2048f18220dc19ea42bfd818 Signed-off-by: Alex Wang --- drivers/input/remotectl/rockchip_pwm_remotectl.c | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/drivers/input/remotectl/rockchip_pwm_remotectl.c b/drivers/input/remotectl/rockchip_pwm_remotectl.c index 606c0857831a..83d73a77327f 100644 --- a/drivers/input/remotectl/rockchip_pwm_remotectl.c +++ b/drivers/input/remotectl/rockchip_pwm_remotectl.c @@ -1013,7 +1013,6 @@ static int rk_pwm_remove(struct platform_device *pdev) return 0; } -#ifdef CONFIG_PM static int remotectl_suspend(struct device *dev) { int cpu = 0; @@ -1031,6 +1030,7 @@ static int remotectl_suspend(struct device *dev) return 0; } +#ifdef CONFIG_PM static int remotectl_resume(struct device *dev) { struct cpumask cpumask; @@ -1066,6 +1066,11 @@ static const struct dev_pm_ops remotectl_pm_ops = { }; #endif +static void rk_pwm_remotectl_shutdown(struct platform_device *pdev) +{ + remotectl_suspend(&pdev->dev); +} + static struct platform_driver rk_pwm_driver = { .driver = { .name = "remotectl-pwm", @@ -1075,6 +1080,7 @@ static struct platform_driver rk_pwm_driver = { #endif }, .remove = rk_pwm_remove, + .shutdown = rk_pwm_remotectl_shutdown, }; module_platform_driver_probe(rk_pwm_driver, rk_pwm_probe); From a1b63a3c9bdc1b2de3c5b61fbd13bde74be444de Mon Sep 17 00:00:00 2001 From: Cai Wenzhong Date: Thu, 6 Jun 2024 10:30:31 +0800 Subject: [PATCH 04/13] media: i2c: maxim: remote: os04a10: fix kernel-6.1 compile error Signed-off-by: Cai Wenzhong Change-Id: Icd2a15b4e8f8f838aaadc62d82b3aa223f9dc0d2 --- drivers/media/i2c/maxim/remote/os04a10.c | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/drivers/media/i2c/maxim/remote/os04a10.c b/drivers/media/i2c/maxim/remote/os04a10.c index 471257f46a58..2a7c63ccf06e 100644 --- a/drivers/media/i2c/maxim/remote/os04a10.c +++ b/drivers/media/i2c/maxim/remote/os04a10.c @@ -107,6 +107,8 @@ #define OS04A10_NAME "os04a10" +#define USED_SYS_DEBUG + #define OS04A10_FLIP_REG 0x3820 #define MIRROR_BIT_MASK BIT(1) #define FLIP_BIT_MASK BIT(2) @@ -3028,7 +3030,7 @@ err_destroy_mutex: #if KERNEL_VERSION(6, 1, 0) > LINUX_VERSION_CODE static int os04a10_remove(struct i2c_client *client) #else -static int os04a10_remove(struct i2c_client *client) +static void os04a10_remove(struct i2c_client *client) #endif { struct v4l2_subdev *sd = i2c_get_clientdata(client); From 808adcf967b00f92333419c76be4f28e4f26aa0d Mon Sep 17 00:00:00 2001 From: Sandy Huang Date: Wed, 5 Jun 2024 10:31:32 +0800 Subject: [PATCH 05/13] drm/rockchip: vop2: remove no need locked check at load lut Fix the following warning: [ 12.265470] ------------[ cut here ]------------ [ 12.265488] WARNING: CPU: 2 PID: 196 at drivers/gpu/drm/rockchip/rockchip_drm_vop2.c:3454 vop2_crtc_load_lut+0x444/0x4c0 [ 12.265490] Modules linked in: [ 12.265498] CPU: 2 PID: 196 Comm: kworker/u16:4 Not tainted 5.10.198 [ 12.265500] Hardware name: Rockchip RK3588S RT-ICS WED 23588S V11 Board (DT) [ 12.265506] Workqueue: events_unbound commit_work [ 12.265511] pstate: 40c00009 (nZcv daif +PAN +UAO -TCO BTYPE=--) [ 12.265515] pc : vop2_crtc_load_lut+0x444/0x4c0 [ 12.265518] lr : vop2_crtc_load_lut+0x44/0x4c0 [ 12.265520] sp : ffffffc00adb3bd0 [ 12.265522] x29: ffffffc00adb3bd0 x28: ffffffc00961a1a0 [ 12.265526] x27: ffffff8107a52000 x26: ffffff81026f0080 [ 12.265531] x25: ffffff8107a51c00 x24: ffffff81026f54a8 [ 12.265536] x23: ffffff8107a51c00 x22: ffffff81026f0080 [ 12.265540] x21: ffffff81026f5080 x20: ffffff81026f0080 [ 12.265544] x19: ffffff81026f13b8 x18: 0000000000000030 [ 12.265548] x17: 0000000000000182 x16: 0000000000000018 [ 12.265552] x15: ffffffffffffffff x14: 0000000000000438 [ 12.265557] x13: 0000000000201834 x12: 0000000004000201 [ 12.265561] x11: 0000000000000011 x10: 0000000000000001 [ 12.265565] x9 : ffffffc00887e0e4 x8 : ffffff8144dcc058 [ 12.265569] x7 : 0000000080008001 x6 : 00000000000003ff [ 12.265573] x5 : ffffff81026ae080 x4 : 0000000000000400 [ 12.265577] x3 : 0000000000000400 x2 : 00000000000003ff [ 12.265581] x1 : 00000000000003ff x0 : 0000000000000000 [ 12.265586] Call trace: [ 12.265590] vop2_crtc_load_lut+0x444/0x4c0 [ 12.265594] vop2_crtc_atomic_flush+0x790/0x2200 [ 12.265598] drm_atomic_helper_commit_planes+0x158/0x214 [ 12.265601] rockchip_drm_atomic_helper_commit_tail_rpm+0xf0/0x1b0 [ 12.265604] commit_tail+0xa8/0x17c [ 12.265607] commit_work+0x1c/0x30 [ 12.265612] process_one_work+0x20c/0x49c [ 12.265614] worker_thread+0x1a0/0x534 [ 12.265617] kthread+0x130/0x134 [ 12.265621] ret_from_fork+0x10/0x34 Signed-off-by: Sandy Huang Change-Id: I3e7fc89598f45b88d4a6e1de0e2771f89936fe7a --- drivers/gpu/drm/rockchip/rockchip_drm_vop2.c | 3 --- 1 file changed, 3 deletions(-) diff --git a/drivers/gpu/drm/rockchip/rockchip_drm_vop2.c b/drivers/gpu/drm/rockchip/rockchip_drm_vop2.c index cfc7d20f0abd..482fda4db9f0 100644 --- a/drivers/gpu/drm/rockchip/rockchip_drm_vop2.c +++ b/drivers/gpu/drm/rockchip/rockchip_drm_vop2.c @@ -3769,9 +3769,6 @@ static void vop2_crtc_load_lut(struct drm_crtc *crtc) if (!vop2->is_enabled || !vp->lut || !vop2->lut_regs) return; - if (WARN_ON(!drm_modeset_is_locked(&crtc->mutex))) - return; - if (vop2->version == VOP_VERSION_RK3568) { rk3568_crtc_load_lut(crtc); } else { From d3b6fbf3c02c97e6080774dc2b5ebd34df3bafdb Mon Sep 17 00:00:00 2001 From: Sandy Huang Date: Wed, 5 Jun 2024 10:33:58 +0800 Subject: [PATCH 06/13] drm/rockchip: vop: remove no need locked check at load lut Fix the following warning: [ 12.265470] ------------[ cut here ]------------ [ 12.265488] WARNING: CPU: 2 PID: 196 at drivers/gpu/drm/rockchip/rockchip_drm_vop2.c:3454 vop2_crtc_load_lut+0x444/0x4c0 [ 12.265490] Modules linked in: [ 12.265498] CPU: 2 PID: 196 Comm: kworker/u16:4 Not tainted 5.10.198 [ 12.265500] Hardware name: Rockchip RK3588S RT-ICS WED 23588S V11 Board (DT) [ 12.265506] Workqueue: events_unbound commit_work [ 12.265511] pstate: 40c00009 (nZcv daif +PAN +UAO -TCO BTYPE=--) [ 12.265515] pc : vop2_crtc_load_lut+0x444/0x4c0 [ 12.265518] lr : vop2_crtc_load_lut+0x44/0x4c0 [ 12.265520] sp : ffffffc00adb3bd0 [ 12.265522] x29: ffffffc00adb3bd0 x28: ffffffc00961a1a0 [ 12.265526] x27: ffffff8107a52000 x26: ffffff81026f0080 [ 12.265531] x25: ffffff8107a51c00 x24: ffffff81026f54a8 [ 12.265536] x23: ffffff8107a51c00 x22: ffffff81026f0080 [ 12.265540] x21: ffffff81026f5080 x20: ffffff81026f0080 [ 12.265544] x19: ffffff81026f13b8 x18: 0000000000000030 [ 12.265548] x17: 0000000000000182 x16: 0000000000000018 [ 12.265552] x15: ffffffffffffffff x14: 0000000000000438 [ 12.265557] x13: 0000000000201834 x12: 0000000004000201 [ 12.265561] x11: 0000000000000011 x10: 0000000000000001 [ 12.265565] x9 : ffffffc00887e0e4 x8 : ffffff8144dcc058 [ 12.265569] x7 : 0000000080008001 x6 : 00000000000003ff [ 12.265573] x5 : ffffff81026ae080 x4 : 0000000000000400 [ 12.265577] x3 : 0000000000000400 x2 : 00000000000003ff [ 12.265581] x1 : 00000000000003ff x0 : 0000000000000000 [ 12.265586] Call trace: [ 12.265590] vop2_crtc_load_lut+0x444/0x4c0 [ 12.265594] vop2_crtc_atomic_flush+0x790/0x2200 [ 12.265598] drm_atomic_helper_commit_planes+0x158/0x214 [ 12.265601] rockchip_drm_atomic_helper_commit_tail_rpm+0xf0/0x1b0 [ 12.265604] commit_tail+0xa8/0x17c [ 12.265607] commit_work+0x1c/0x30 [ 12.265612] process_one_work+0x20c/0x49c [ 12.265614] worker_thread+0x1a0/0x534 [ 12.265617] kthread+0x130/0x134 [ 12.265621] ret_from_fork+0x10/0x34 Signed-off-by: Sandy Huang Change-Id: I5d7d9b0a2eb7331441d4ef0f84b8333ba6c6d855 --- drivers/gpu/drm/rockchip/rockchip_drm_vop.c | 3 --- 1 file changed, 3 deletions(-) diff --git a/drivers/gpu/drm/rockchip/rockchip_drm_vop.c b/drivers/gpu/drm/rockchip/rockchip_drm_vop.c index d254de5ae4e6..922bdaa03d82 100644 --- a/drivers/gpu/drm/rockchip/rockchip_drm_vop.c +++ b/drivers/gpu/drm/rockchip/rockchip_drm_vop.c @@ -1464,9 +1464,6 @@ static void vop_crtc_load_lut(struct drm_crtc *crtc) if (!vop->is_enabled || !vop->lut || !vop->lut_regs) return; - if (WARN_ON(!drm_modeset_is_locked(&crtc->mutex))) - return; - if (!VOP_CTRL_SUPPORT(vop, update_gamma_lut)) { spin_lock(&vop->reg_lock); VOP_CTRL_SET(vop, dsp_lut_en, 0); From 2f9046d9e7aaa0bc76316351c57eef4f5d2856de Mon Sep 17 00:00:00 2001 From: Alex Wang Date: Wed, 5 Jun 2024 10:16:47 +0800 Subject: [PATCH 07/13] arm64: dts: rockchip: add rk3576-virtual-poweroff.dtsi to support virtual-poweroff for RK3576 Change-Id: Id5cbe1e34014382128f648b9d87b3002adfe63df Signed-off-by: Alex Wang --- .../dts/rockchip/rk3576-evb1-v10-android9.dts | 1 + .../dts/rockchip/rk3576-virtual-poweroff.dtsi | 41 +++++++++++++++++++ 2 files changed, 42 insertions(+) create mode 100644 arch/arm64/boot/dts/rockchip/rk3576-virtual-poweroff.dtsi diff --git a/arch/arm64/boot/dts/rockchip/rk3576-evb1-v10-android9.dts b/arch/arm64/boot/dts/rockchip/rk3576-evb1-v10-android9.dts index 919e55b52ea3..be3abfd7b499 100644 --- a/arch/arm64/boot/dts/rockchip/rk3576-evb1-v10-android9.dts +++ b/arch/arm64/boot/dts/rockchip/rk3576-evb1-v10-android9.dts @@ -8,6 +8,7 @@ #include "rk3576.dtsi" #include "rk3576-evb1.dtsi" +#include "rk3576-virtual-poweroff.dtsi" #include "rk3576-evb1-cam-dcphy0.dtsi" #include "rk3576-android9.dtsi" diff --git a/arch/arm64/boot/dts/rockchip/rk3576-virtual-poweroff.dtsi b/arch/arm64/boot/dts/rockchip/rk3576-virtual-poweroff.dtsi new file mode 100644 index 000000000000..0c880d9552b9 --- /dev/null +++ b/arch/arm64/boot/dts/rockchip/rk3576-virtual-poweroff.dtsi @@ -0,0 +1,41 @@ +// SPDX-License-Identifier: (GPL-2.0+ OR MIT) +/* + * Copyright (c) 2024 Rockchip Electronics Co., Ltd. + * + */ + +&vcca_1v8_s0 { + regulator-state-mem { + regulator-on-in-suspend; + }; +}; + +&rk806 { + pinctrl-1 = <&rk806_dvs1_slp>; +}; + +&rockchip_suspend { + status = "okay"; + rockchip,sleep-debug-en = <1>; + rockchip,virtual-poweroff = <1>; + rockchip,virtual-poweroff-irqs = <132>; + + rockchip,sleep-mode-config = < + (0 + | RKPM_SLP_ARMOFF_LOGOFF + ) + >; + rockchip,wakeup-config = < + (0 + | RKPM_GPIO_WKUP_EN + | RKPM_PWM_WKUP_EN + ) + >; + rockchip,sleep-io-ret-config = < + (0 + | RKPM_VCCIO3_RET_EN + ) + >; + + rockchip,regulator-on-before-mem = <&vdd_npu_s0>; +}; From f96a08b93ce5205a9688a2fad03a6c1d32db446b Mon Sep 17 00:00:00 2001 From: Sandy Huang Date: Mon, 3 Jun 2024 17:55:02 +0800 Subject: [PATCH 08/13] drm/rockchip: vop2: update rk3562 aclk auto cs div After set pre_scan_hblank minimum value to 8 by the following commit, the aclk and dclk must meet as: aclk > 1/2 * dclk. commit ce8f21340fe4 ("drm/rockchip: vop2: set pre_scan_hblank minimum value to 8") Signed-off-by: Sandy Huang Change-Id: I4968a29ef0aab4e413990c1b9a406efec067c9d0 --- drivers/gpu/drm/rockchip/rockchip_drm_vop2.c | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/drivers/gpu/drm/rockchip/rockchip_drm_vop2.c b/drivers/gpu/drm/rockchip/rockchip_drm_vop2.c index 482fda4db9f0..4be03b33e8c1 100644 --- a/drivers/gpu/drm/rockchip/rockchip_drm_vop2.c +++ b/drivers/gpu/drm/rockchip/rockchip_drm_vop2.c @@ -6956,11 +6956,11 @@ static void vop2_crtc_csu_set_rate(struct drm_crtc *crtc) aclk_rate = clk_get_rate(vop2->aclk); dclk_rate = clk_get_rate(vp->dclk); - if (!dclk_rate) + if (!dclk_rate || !aclk_rate) return; - /* aclk >= 1/2 * dclk */ - csu_div = aclk_rate * 2 / dclk_rate; + /* aclk > 1/2 * dclk */ + csu_div = (aclk_rate - 1) * 2 / dclk_rate; rockchip_csu_set_div(vop2->csu_aclk, csu_div); } From 7040afe8be629d4ec9db1f5f15fdd58b0922cd10 Mon Sep 17 00:00:00 2001 From: Jon Lin Date: Thu, 6 Jun 2024 15:50:48 +0800 Subject: [PATCH 09/13] PCI: dw: rockchip: Configure register after clock initialization Change-Id: I7c043ca64ff0953593093f498dec711049832f87 Signed-off-by: Jon Lin --- drivers/pci/controller/dwc/pcie-dw-rockchip.c | 17 +++++++++-------- 1 file changed, 9 insertions(+), 8 deletions(-) diff --git a/drivers/pci/controller/dwc/pcie-dw-rockchip.c b/drivers/pci/controller/dwc/pcie-dw-rockchip.c index ef0edbd81896..a396e520fc1c 100644 --- a/drivers/pci/controller/dwc/pcie-dw-rockchip.c +++ b/drivers/pci/controller/dwc/pcie-dw-rockchip.c @@ -1202,6 +1202,12 @@ retry_regulator: reset_control_deassert(rk_pcie->rsts); + ret = rk_pcie_clk_init(rk_pcie); + if (ret) { + dev_err(dev, "clock init failed\n"); + goto disable_phy; + } + /* * Misc interrupts was masked by default. However, they will be * unmasked by FW before jumpping into kernel. Mask all misc interrupts, @@ -1213,17 +1219,11 @@ retry_regulator: ret = rk_pcie_request_sys_irq(rk_pcie, pdev); if (ret) { dev_err(dev, "pcie irq init failed\n"); - goto disable_phy; + goto disable_clk; } platform_set_drvdata(pdev, rk_pcie); - ret = rk_pcie_clk_init(rk_pcie); - if (ret) { - dev_err(dev, "clock init failed\n"); - goto disable_phy; - } - dw_pcie_dbi_ro_wr_en(pci); rk_pcie_fast_link_setup(rk_pcie); @@ -1337,10 +1337,11 @@ remove_rst_wq: remove_irq_domain: if (rk_pcie->irq_domain) irq_domain_remove(rk_pcie->irq_domain); +disable_clk: + clk_bulk_disable_unprepare(rk_pcie->clk_cnt, rk_pcie->clks); disable_phy: phy_power_off(rk_pcie->phy); phy_exit(rk_pcie->phy); - clk_bulk_disable_unprepare(rk_pcie->clk_cnt, rk_pcie->clks); disable_vpcie3v3: rk_pcie_disable_power(rk_pcie); release_driver: From 9191e17ba051100a868cbe2f3e69a8663f9119eb Mon Sep 17 00:00:00 2001 From: Damon Ding Date: Tue, 4 Jun 2024 18:10:56 +0800 Subject: [PATCH 10/13] arm64: dts: rockchip: rk3588-evb: add edp0/edp1 sound support Signed-off-by: Damon Ding Change-Id: I227893150c6d963ba47de1354d0ae2109a230685 --- arch/arm64/boot/dts/rockchip/rk3588-evb.dtsi | 18 ++++++++++++++++++ 1 file changed, 18 insertions(+) diff --git a/arch/arm64/boot/dts/rockchip/rk3588-evb.dtsi b/arch/arm64/boot/dts/rockchip/rk3588-evb.dtsi index c76ade45698f..a76388bb8181 100644 --- a/arch/arm64/boot/dts/rockchip/rk3588-evb.dtsi +++ b/arch/arm64/boot/dts/rockchip/rk3588-evb.dtsi @@ -105,6 +105,24 @@ }; }; + edp0_sound: edp0-sound { + status = "disabled"; + compatible = "rockchip,hdmi"; + rockchip,mclk-fs = <128>; + rockchip,card-name = "rockchip-edp0"; + rockchip,cpu = <&i2s5_8ch>; + rockchip,codec = <&edp0 0>; + }; + + edp1_sound: edp1-sound { + status = "disabled"; + compatible = "rockchip,hdmi"; + rockchip,mclk-fs = <128>; + rockchip,card-name = "rockchip-edp1"; + rockchip,cpu = <&i2s6_8ch>; + rockchip,codec = <&edp1 0>; + }; + hdmi0_sound: hdmi0-sound { status = "disabled"; compatible = "rockchip,hdmi"; From 69807881ea8fbdc77934b057e37b22c508edcaac Mon Sep 17 00:00:00 2001 From: Damon Ding Date: Tue, 4 Jun 2024 18:12:24 +0800 Subject: [PATCH 11/13] arm64: dts: rockchip: rk3588: add property #sound-dai-cells for edp0/edp1 Signed-off-by: Damon Ding Change-Id: I624115129f93280dc2e69217c28efca5a577e51b --- arch/arm64/boot/dts/rockchip/rk3588.dtsi | 1 + arch/arm64/boot/dts/rockchip/rk3588s.dtsi | 1 + 2 files changed, 2 insertions(+) diff --git a/arch/arm64/boot/dts/rockchip/rk3588.dtsi b/arch/arm64/boot/dts/rockchip/rk3588.dtsi index c75f3d6dcf10..357e879cc0b4 100644 --- a/arch/arm64/boot/dts/rockchip/rk3588.dtsi +++ b/arch/arm64/boot/dts/rockchip/rk3588.dtsi @@ -445,6 +445,7 @@ phy-names = "dp"; power-domains = <&power RK3588_PD_VO1>; rockchip,grf = <&vo1_grf>; + #sound-dai-cells = <1>; status = "disabled"; ports { diff --git a/arch/arm64/boot/dts/rockchip/rk3588s.dtsi b/arch/arm64/boot/dts/rockchip/rk3588s.dtsi index 2cc2481592ec..fee6171e01ab 100644 --- a/arch/arm64/boot/dts/rockchip/rk3588s.dtsi +++ b/arch/arm64/boot/dts/rockchip/rk3588s.dtsi @@ -5176,6 +5176,7 @@ phy-names = "dp"; power-domains = <&power RK3588_PD_VO1>; rockchip,grf = <&vo1_grf>; + #sound-dai-cells = <1>; status = "disabled"; ports { From dcb9c0ef02d9bb448658ac71b1779ad5f4d3eb89 Mon Sep 17 00:00:00 2001 From: Damon Ding Date: Tue, 4 Jun 2024 15:22:56 +0800 Subject: [PATCH 12/13] arm64: dts: rockchip: rk3588-evb1: add hdmi2dp display dts If using the hdmi2dp ext board, eDP uses the hardware link of HDMI, whose phy is multiplexed with eDP, and the HDMI controller does not actually work. Signed-off-by: Damon Ding Change-Id: Icc70e713799e1fa6eb49e419bae1c96a54e838af --- arch/arm64/boot/dts/rockchip/Makefile | 1 + .../rockchip/rk3588-evb1-lp4-v10-hdmi2dp.dts | 85 +++++++++++++++++++ 2 files changed, 86 insertions(+) create mode 100644 arch/arm64/boot/dts/rockchip/rk3588-evb1-lp4-v10-hdmi2dp.dts diff --git a/arch/arm64/boot/dts/rockchip/Makefile b/arch/arm64/boot/dts/rockchip/Makefile index 084ac29ebfac..db2edb5c7352 100644 --- a/arch/arm64/boot/dts/rockchip/Makefile +++ b/arch/arm64/boot/dts/rockchip/Makefile @@ -275,6 +275,7 @@ dtb-$(CONFIG_ARCH_ROCKCHIP) += rk3588-evb1-lp4-v10.dtb dtb-$(CONFIG_ARCH_ROCKCHIP) += rk3588-evb1-lp4-v10-dsi-dsc-MV2100UZ1.dtb dtb-$(CONFIG_ARCH_ROCKCHIP) += rk3588-evb1-lp4-v10-edp-8lanes-M280DCA.dtb dtb-$(CONFIG_ARCH_ROCKCHIP) += rk3588-evb1-lp4-v10-edp-NV140QUM-N61.dtb +dtb-$(CONFIG_ARCH_ROCKCHIP) += rk3588-evb1-lp4-v10-hdmi2dp.dtb dtb-$(CONFIG_ARCH_ROCKCHIP) += rk3588-evb1-lp4-v10-ipc-6x-linux.dtb dtb-$(CONFIG_ARCH_ROCKCHIP) += rk3588-evb1-lp4-v10-linux.dtb dtb-$(CONFIG_ARCH_ROCKCHIP) += rk3588-evb1-lp4-v10-linux-amp.dtb diff --git a/arch/arm64/boot/dts/rockchip/rk3588-evb1-lp4-v10-hdmi2dp.dts b/arch/arm64/boot/dts/rockchip/rk3588-evb1-lp4-v10-hdmi2dp.dts new file mode 100644 index 000000000000..d3f4e3a0a1e0 --- /dev/null +++ b/arch/arm64/boot/dts/rockchip/rk3588-evb1-lp4-v10-hdmi2dp.dts @@ -0,0 +1,85 @@ +// SPDX-License-Identifier: (GPL-2.0+ OR MIT) +/* + * Copyright (c) 2021 Rockchip Electronics Co., Ltd. + * + */ + +/dts-v1/; + +#include "rk3588-evb1-lp4.dtsi" +#include "rk3588-evb1-imx415.dtsi" +#include "rk3588-android.dtsi" + +/ { + model = "Rockchip RK3588 EVB1 LP4 V10 Board + RK HDMI to DP Ext Board"; + compatible = "rockchip,rk3588-evb1-lp4-v10-hdmi2dp", "rockchip,rk3588"; +}; + +&bt_sco { + status = "okay"; +}; + +&bt_sound { + status = "okay"; +}; + +&edp1 { + pinctrl-names = "default"; + pinctrl-0 = <&hdmim0_tx1_hpd>; + status = "okay"; +}; + +&edp1_in_vp1 { + status = "okay"; +}; + +&edp1_sound { + status = "okay"; +}; + +&hdmi1 { + status = "disabled"; +}; + +&hdmi1_in_vp1 { + status = "disabled"; +}; + +&hdmi1_sound { + status = "disabled"; +}; + +&hdptxphy1 { + status = "okay"; +}; + +&hdptxphy_hdmi1 { + status = "disabled"; +}; + +&i2s2_2ch { + status = "okay"; +}; + +&i2s6_8ch { + status = "okay"; +}; + +&route_edp1 { + status = "okay"; + connect = <&vp1_out_edp1>; +}; + +&route_hdmi1 { + status = "disabled"; +}; + +&vp1 { + assigned-clocks = <&cru DCLK_VOP1_SRC>; + assigned-clock-parents = <&cru PLL_V0PLL>; +}; + +&vp2 { + /delete-property/ assigned-clocks; + /delete-property/ assigned-clock-parents; +}; From 3ccf6b6752ac52e9f07c6fbb2647308b1c7d1466 Mon Sep 17 00:00:00 2001 From: Zhang Yubing Date: Sat, 6 May 2023 10:11:51 +0800 Subject: [PATCH 13/13] drm/bridge: analogix_dp: clear old output_if when crtc active change Signed-off-by: Zhang Yubing Change-Id: Ibb2fe312ec1f9e72471eefe25de37883f114564c --- drivers/gpu/drm/rockchip/analogix_dp-rockchip.c | 13 ++++++++----- 1 file changed, 8 insertions(+), 5 deletions(-) diff --git a/drivers/gpu/drm/rockchip/analogix_dp-rockchip.c b/drivers/gpu/drm/rockchip/analogix_dp-rockchip.c index 032aad4ce48f..8f082dc06058 100644 --- a/drivers/gpu/drm/rockchip/analogix_dp-rockchip.c +++ b/drivers/gpu/drm/rockchip/analogix_dp-rockchip.c @@ -419,11 +419,14 @@ static void rockchip_dp_drm_encoder_disable(struct drm_encoder *encoder, struct rockchip_crtc_state *s = to_rockchip_crtc_state(old_crtc->state); int ret; - if (dp->plat_data.split_mode) - s->output_if &= ~(VOP_OUTPUT_IF_eDP1 | VOP_OUTPUT_IF_eDP0); - else - s->output_if &= ~(dp->id ? VOP_OUTPUT_IF_eDP1 : VOP_OUTPUT_IF_eDP0); - s->output_if_left_panel &= ~(dp->id ? VOP_OUTPUT_IF_eDP1 : VOP_OUTPUT_IF_eDP0); + if (old_crtc->state->active_changed) { + if (dp->plat_data.split_mode) + s->output_if &= ~(VOP_OUTPUT_IF_eDP1 | VOP_OUTPUT_IF_eDP0); + else + s->output_if &= ~(dp->id ? VOP_OUTPUT_IF_eDP1 : VOP_OUTPUT_IF_eDP0); + s->output_if_left_panel &= ~(dp->id ? VOP_OUTPUT_IF_eDP1 : VOP_OUTPUT_IF_eDP0); + } + crtc = rockchip_dp_drm_get_new_crtc(encoder, state); /* No crtc means we're doing a full shutdown */ if (!crtc)