From 4fc7543c31a2dbb88ee087c0b1891a604c5c7380 Mon Sep 17 00:00:00 2001 From: Chen Shunqing Date: Tue, 14 May 2024 16:37:49 +0800 Subject: [PATCH 1/9] media: i2c: rk628: fix interrupts can be triggered in suspend Signed-off-by: Chen Shunqing Change-Id: I39955e126729c9ec1ffabcd53d3bc679d354cd0f --- drivers/media/i2c/rk628/rk628.h | 1 + drivers/media/i2c/rk628/rk628_bt1120_v4l2.c | 7 +++++++ drivers/media/i2c/rk628/rk628_csi_v4l2.c | 7 +++++++ 3 files changed, 15 insertions(+) diff --git a/drivers/media/i2c/rk628/rk628.h b/drivers/media/i2c/rk628/rk628.h index e331e26f0f74..a35bba051390 100644 --- a/drivers/media/i2c/rk628/rk628.h +++ b/drivers/media/i2c/rk628/rk628.h @@ -308,6 +308,7 @@ struct rk628 { struct dentry *debug_dir; struct gpio_desc *hdmirx_det_gpio; bool last_mipi_status; + bool is_suspend; }; #define rk628_dbg(rk628, format, ...) \ diff --git a/drivers/media/i2c/rk628/rk628_bt1120_v4l2.c b/drivers/media/i2c/rk628/rk628_bt1120_v4l2.c index 67c350b811a5..4e24bc4f680b 100644 --- a/drivers/media/i2c/rk628/rk628_bt1120_v4l2.c +++ b/drivers/media/i2c/rk628/rk628_bt1120_v4l2.c @@ -252,6 +252,8 @@ static bool tx_5v_power_present(struct v4l2_subdev *sd) ret = rk628_hdmirx_tx_5v_power_detect(bt1120->plugin_det_gpio); v4l2_dbg(2, debug, sd, "%s: %d\n", __func__, ret); + if (bt1120->rk628->is_suspend) + ret = false; return ret; } @@ -1770,9 +1772,11 @@ static int rk628_bt1120_resume(struct device *dev) rk628_cru_initialize(bt1120->rk628); rk628_bt1120_initial(sd); rk628_hdmirx_plugout(sd); + enable_irq(bt1120->plugin_irq); enable_irq(bt1120->hdmirx_irq); schedule_delayed_work(&bt1120->delayed_work_enable_hotplug, msecs_to_jiffies(500)); + bt1120->rk628->is_suspend = false; return 0; } @@ -1785,6 +1789,9 @@ static int rk628_bt1120_suspend(struct device *dev) v4l2_info(sd, "%s: suspend!\n", __func__); + bt1120->rk628->is_suspend = true; + rk628_hdmirx_plugout(sd); + disable_irq(bt1120->plugin_irq); disable_irq(bt1120->hdmirx_irq); cancel_delayed_work_sync(&bt1120->delayed_work_res_change); cancel_delayed_work_sync(&bt1120->delayed_work_enable_hotplug); diff --git a/drivers/media/i2c/rk628/rk628_csi_v4l2.c b/drivers/media/i2c/rk628/rk628_csi_v4l2.c index 2a53a1107c71..2ff0a1ce11cc 100644 --- a/drivers/media/i2c/rk628/rk628_csi_v4l2.c +++ b/drivers/media/i2c/rk628/rk628_csi_v4l2.c @@ -383,6 +383,8 @@ static bool tx_5v_power_present(struct v4l2_subdev *sd) ret = rk628_hdmirx_tx_5v_power_detect(csi->plugin_det_gpio); v4l2_dbg(2, debug, sd, "%s: %d\n", __func__, ret); + if (csi->rk628->is_suspend) + ret = false; return ret; } @@ -3009,9 +3011,11 @@ static int rk628_csi_resume(struct device *dev) rk628_cru_initialize(csi->rk628); rk628_csi_initial(sd); rk628_hdmirx_plugout(sd); + enable_irq(csi->plugin_irq); enable_irq(csi->hdmirx_irq); schedule_delayed_work(&csi->delayed_work_enable_hotplug, msecs_to_jiffies(500)); + csi->rk628->is_suspend = false; return 0; } @@ -3024,6 +3028,9 @@ static int rk628_csi_suspend(struct device *dev) v4l2_info(sd, "%s: suspend!\n", __func__); + csi->rk628->is_suspend = true; + rk628_hdmirx_plugout(sd); + disable_irq(csi->plugin_irq); disable_irq(csi->hdmirx_irq); cancel_delayed_work_sync(&csi->delayed_work_res_change); cancel_delayed_work_sync(&csi->delayed_work_enable_hotplug); From 2828cf9ec3f3e8e6fbf7f31f79c308013adf6b31 Mon Sep 17 00:00:00 2001 From: Shunhua Lan Date: Sat, 13 Apr 2024 12:41:47 +0800 Subject: [PATCH 2/9] media: i2c: rk628: modify audio status report set audio present and rate ctrls to volatile so that app can get the audio status immediately Change-Id: I91ba1795b0b33ee83d2e2f0195d813a1c7fcfedd Signed-off-by: Shunhua Lan --- drivers/media/i2c/rk628/rk628_csi_v4l2.c | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/drivers/media/i2c/rk628/rk628_csi_v4l2.c b/drivers/media/i2c/rk628/rk628_csi_v4l2.c index 2ff0a1ce11cc..729b813a3658 100644 --- a/drivers/media/i2c/rk628/rk628_csi_v4l2.c +++ b/drivers/media/i2c/rk628/rk628_csi_v4l2.c @@ -2891,6 +2891,11 @@ static int rk628_csi_get_custom_ctrl(struct v4l2_ctrl *ctrl) if (ctrl->id == RK_V4L2_CID_AUDIO_SAMPLING_RATE) { ret = get_audio_sampling_rate(sd); *ctrl->p_new.p_s32 = ret; + } else if (ctrl->id == RK_V4L2_CID_AUDIO_PRESENT) { + ret = tx_5v_power_present(sd) ? rk628_hdmirx_audio_present(csi->audio_info) : 0; + *ctrl->p_new.p_s32 = ret; + } else { + ret = -EINVAL; } return ret; @@ -2913,6 +2918,7 @@ static const struct v4l2_ctrl_config rk628_csi_ctrl_audio_sampling_rate = { }; static const struct v4l2_ctrl_config rk628_csi_ctrl_audio_present = { + .ops = &rk628_csi_custom_ctrl_ops, .id = RK_V4L2_CID_AUDIO_PRESENT, .name = "Audio present", .type = V4L2_CTRL_TYPE_BOOLEAN, @@ -3410,8 +3416,12 @@ static int rk628_csi_probe(struct i2c_client *client, /* custom controls */ csi->audio_sampling_rate_ctrl = v4l2_ctrl_new_custom(&csi->hdl, &rk628_csi_ctrl_audio_sampling_rate, NULL); + if (csi->audio_sampling_rate_ctrl) + csi->audio_sampling_rate_ctrl->flags |= V4L2_CTRL_FLAG_VOLATILE; csi->audio_present_ctrl = v4l2_ctrl_new_custom(&csi->hdl, &rk628_csi_ctrl_audio_present, NULL); + if (csi->audio_present_ctrl) + csi->audio_present_ctrl->flags |= V4L2_CTRL_FLAG_VOLATILE; sd->ctrl_handler = &csi->hdl; if (csi->hdl.error) { From d42cd4ceda8110a3aa094fb4dcc02c098ea0f731 Mon Sep 17 00:00:00 2001 From: Cai YiWei Date: Sat, 11 May 2024 17:45:17 +0800 Subject: [PATCH 3/9] media: rockchip: isp: fix multi sensor for isp39 1.fix stop no to disable yuvme 2.limit dhaz thumb size, cam_n * col * row <= 80 Change-Id: Ib90ba6fb1664dd85860b639653ad424fc0f2e37d Signed-off-by: Cai YiWei --- .../platform/rockchip/isp/isp_params_v39.c | 9 +++++- drivers/media/platform/rockchip/isp/procfs.c | 29 ++++++++++++++----- 2 files changed, 29 insertions(+), 9 deletions(-) diff --git a/drivers/media/platform/rockchip/isp/isp_params_v39.c b/drivers/media/platform/rockchip/isp/isp_params_v39.c index 4029a2428e6c..8baa82746b32 100644 --- a/drivers/media/platform/rockchip/isp/isp_params_v39.c +++ b/drivers/media/platform/rockchip/isp/isp_params_v39.c @@ -2512,6 +2512,11 @@ isp_dhaz_config(struct rkisp_isp_params_vdev *params_vdev, ISP39_DHAZ_THUMB_ROW_MAX : arg->thumb_row & ~1; thumb_col = arg->thumb_col > ISP39_DHAZ_THUMB_COL_MAX ? ISP39_DHAZ_THUMB_COL_MAX : arg->thumb_col & ~1; + if (dev->hw_dev->dev_link_num > 1 && thumb_row > 4 && + !dev->hw_dev->is_frm_buf && thumb_col > 4) { + thumb_row = 4; + thumb_col = 4; + } blk_het = ALIGN(h / thumb_row, 2); blk_wid = ALIGN(w / thumb_col, 2); priv_val->dhaz_blk_num = thumb_row * thumb_col; @@ -3959,6 +3964,8 @@ void __isp_isr_other_en(struct rkisp_isp_params_vdev *params_vdev, mask = ISP39_MODULE_YNR | ISP39_MODULE_CNR | ISP39_MODULE_SHARP; if ((module_ens & mask) && ((module_ens & mask) != mask)) dev_err(params_vdev->dev->dev, "ynr cnr sharp no enable together\n"); + if (module_ens & ISP39_MODULE_YUVME && !(module_ens & ISP39_MODULE_BAY3D)) + dev_err(params_vdev->dev->dev, "yuvme need bay3d enable together\n"); v4l2_dbg(4, rkisp_debug, ¶ms_vdev->dev->v4l2_dev, "%s id:%d seq:%d module_en_update:0x%llx module_ens:0x%llx\n", __func__, id, new_params->frame_id, module_en_update, module_ens); @@ -4922,7 +4929,7 @@ rkisp_params_disable_isp_v39(struct rkisp_isp_params_vdev *params_vdev) int i; params_vdev->isp39_params->module_ens = 0; - params_vdev->isp39_params->module_en_update = 0x7ffffffffff; + params_vdev->isp39_params->module_en_update = ~ISP39_MODULE_FORCE; for (i = 0; i < params_vdev->dev->unite_div; i++) { __isp_isr_other_en(params_vdev, params_vdev->isp39_params, RKISP_PARAMS_ALL, i); diff --git a/drivers/media/platform/rockchip/isp/procfs.c b/drivers/media/platform/rockchip/isp/procfs.c index 27cfca937447..9818f9b59e87 100644 --- a/drivers/media/platform/rockchip/isp/procfs.c +++ b/drivers/media/platform/rockchip/isp/procfs.c @@ -12,6 +12,7 @@ #include "regs_v2x.h" #include "isp_params_v3x.h" #include "isp_params_v32.h" +#include "isp_params_v39.h" #ifdef CONFIG_PROC_FS @@ -830,6 +831,7 @@ static void isp32_show(struct rkisp_device *dev, struct seq_file *p) static void isp39_show(struct rkisp_device *dev, struct seq_file *p) { + struct rkisp_isp_params_val_v39 *priv = dev->params_vdev.priv_val; u32 full_range_flg = CIF_ISP_CTRL_ISP_CSM_Y_FULL_ENA | CIF_ISP_CTRL_ISP_CSM_C_FULL_ENA; static const char * const effect[] = { "OFF", "BLACKWHITE" }; u32 val, val1, val2; @@ -869,27 +871,38 @@ static void isp39_show(struct rkisp_device *dev, struct seq_file *p) seq_printf(p, "%-10s %s(0x%x)\n", "HDRDRC", (val & 1) ? "ON" : "OFF", val); val = rkisp_read(dev, ISP3X_HDRMGE_CTRL, false); seq_printf(p, "%-10s %s(0x%x)\n", "HDRMGE", (val & 1) ? "ON" : "OFF", val); + val = rkisp_read(dev, ISP3X_DHAZ_CTRL, false); + val1 = rkisp_read(dev, ISP39_DHAZ_THUMB_SIZE, false); + seq_printf(p, "%-10s %s(0x%x) contrast:%d hist:%d enhance:%d blk(row:%d col:%d)\n", + "DHAZ", (val & 1) ? "ON" : "OFF", val, + !!(val & BIT(4)), !!(val & BIT(8)), !!(val & BIT(20)), + val1 & 0x1f, (val1 & 0x1f00) >> 8); val = rkisp_read(dev, ISP3X_BAY3D_CTRL, false); val1 = rkisp_read(dev, ISP39_BAY3D_CTRL1, false); val2 = rkisp_read(dev, ISP39_BAY3D_CTRL2, false); - seq_printf(p, "%-10s %s(0x%x 0x%x 0x%x)\n", "BAY3D", - (val & 1) ? "ON" : "OFF", val, val1, val2); + seq_printf(p, "%-10s %s(0x%x 0x%x 0x%x) bypass:%d iirsparse:%d size:%d\n", + "BAY3D", (val & 1) ? "ON" : "OFF", val, val1, val2, + !!(val & BIT(1)), !!(val & BIT(2)), + priv ? priv->buf_3dnr_iir.size : 0); + val = rkisp_read(dev, ISP39_YUVME_CTRL, false); + seq_printf(p, "%-10s %s(0x%x) bypass:%d size:%d\n", + "YUVME", (val & 1) ? "ON" : "OFF", val, !!(val & BIT(1)), + priv ? priv->buf_3dnr_cur.size : 0); val = rkisp_read(dev, ISP3X_YNR_GLOBAL_CTRL, false); - seq_printf(p, "%-10s %s(0x%x)\n", "YNR", (val & 1) ? "ON" : "OFF", val); + seq_printf(p, "%-10s %s(0x%x) bypass(lospnr:%d hispnr:%d)\n", + "YNR", (val & 1) ? "ON" : "OFF", val, + !!(val & BIT(1)), !!(val & BIT(2))); val = rkisp_read(dev, ISP3X_CNR_CTRL, false); seq_printf(p, "%-10s %s(0x%x)\n", "CNR", (val & 1) ? "ON" : "OFF", val); val = rkisp_read(dev, ISP3X_SHARP_EN, false); - seq_printf(p, "%-10s %s(0x%x)\n", "SHARP", (val & 1) ? "ON" : "OFF", val); - val = rkisp_read(dev, ISP3X_DHAZ_CTRL, false); - seq_printf(p, "%-10s %s(0x%x)\n", "DHAZ", (val & 1) ? "ON" : "OFF", val); + seq_printf(p, "%-10s %s(0x%x) bypass:%d\n", "SHARP", + (val & 1) ? "ON" : "OFF", val, !!(val & BIT(1))); val = rkisp_read(dev, ISP3X_3DLUT_CTRL, false); seq_printf(p, "%-10s %s(0x%x)\n", "3DLUT", (val & 1) ? "ON" : "OFF", val); val = rkisp_read(dev, ISP3X_LDCH_STS, false); seq_printf(p, "%-10s %s(0x%x)\n", "LDCH", (val & 1) ? "ON" : "OFF", val); val = rkisp_read(dev, ISP39_LDCV_CTRL, false); seq_printf(p, "%-10s %s(0x%x)\n", "LDCV", (val & 1) ? "ON" : "OFF", val); - val = rkisp_read(dev, ISP39_YUVME_CTRL, false); - seq_printf(p, "%-10s %s(0x%x)\n", "YUVME", (val & 1) ? "ON" : "OFF", val); val = rkisp_read(dev, ISP39_RGBIR_CTRL, false); seq_printf(p, "%-10s %s(0x%x)\n", "RGBIR", (val & 1) ? "ON" : "OFF", val); val = rkisp_read(dev, ISP3X_ISP_CTRL0, false); From d9a3c682cbf5ea5139957c98bce4b5e94f192ef7 Mon Sep 17 00:00:00 2001 From: Chandler Chen Date: Thu, 16 May 2024 11:44:46 +0800 Subject: [PATCH 4/9] video: rockchip: mpp: add reset ready check for vdpu383 Change-Id: I915959cc5ca9f01934e201bae110af540ac8dccb Signed-off-by: Chandler Chen --- drivers/video/rockchip/mpp/mpp_rkvdec2.c | 18 +++++++++++++++++- 1 file changed, 17 insertions(+), 1 deletion(-) diff --git a/drivers/video/rockchip/mpp/mpp_rkvdec2.c b/drivers/video/rockchip/mpp/mpp_rkvdec2.c index f94b23e2401b..1edd6400466b 100644 --- a/drivers/video/rockchip/mpp/mpp_rkvdec2.c +++ b/drivers/video/rockchip/mpp/mpp_rkvdec2.c @@ -1416,15 +1416,31 @@ static int rkvdec_vdpu383_reset(struct mpp_dev *mpp) { struct rkvdec2_dev *dec = to_rkvdec2_dev(mpp); struct rkvdec_link_dev *link = dec->link_dec; + int ret = 0; + u32 irq_status = 0; mpp_debug_enter(); + /* disable irq */ + writel(link->info->ip_en_val & BIT(15), link->reg_base + link->info->ip_en_base); /* use ip reset to reset core and mmu */ writel(link->info->ip_reset_en, link->reg_base + link->info->ip_reset_base); - udelay(5); + ret = readl_relaxed_poll_timeout(link->reg_base + link->info->status_base, + irq_status, + irq_status & 0x800, + 0, 200); + if (ret) + dev_err(mpp->dev, "reset timeout\n"); /* clear reset ready status bit */ writel(link->info->ip_reset_mask, link->reg_base + link->info->status_base); + /* clear irq and status */ + writel_relaxed(0xffff0000, link->reg_base + link->info->irq_base); + writel_relaxed(0xffff0000, link->reg_base + link->info->status_base); + + /* enable irq */ + writel(link->info->ip_en_val, link->reg_base + link->info->ip_en_base); + mpp_debug_leave(); return 0; From 0f466460c862d7554ac1e4382b8c9bae78821cb3 Mon Sep 17 00:00:00 2001 From: Chandler Chen Date: Thu, 16 May 2024 14:44:14 +0800 Subject: [PATCH 5/9] video: rockchip: mpp: reset rkvdec before pm suspend For link mode, decoder may still running after frame ready status was written in link table. Do soft reset before powering off the decoder to ensure decoder is fully idle. fixes https://redmine.rock-chips.com/issues/477479 rockchip-pm-domain 27380000.power-management:power-controller: failed to set idle on domain 'vdec', target_idle = 1, val=0 Change-Id: I30a337bb4cd9193627ae95fae137c12d73027c38 Signed-off-by: Chandler Chen --- drivers/video/rockchip/mpp/mpp_rkvdec2.c | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/drivers/video/rockchip/mpp/mpp_rkvdec2.c b/drivers/video/rockchip/mpp/mpp_rkvdec2.c index 1edd6400466b..7f6a4d89cd3a 100644 --- a/drivers/video/rockchip/mpp/mpp_rkvdec2.c +++ b/drivers/video/rockchip/mpp/mpp_rkvdec2.c @@ -2027,6 +2027,14 @@ static int __maybe_unused rkvdec2_runtime_suspend(struct device *dev) disable_irq(mpp->iommu_info->irq); } + /* + * to ensure hardware is fully idle, + * reset and wait for reset ready before suspend. + */ + if (mpp->hw_ops->reset) + mpp->hw_ops->reset(mpp); + mpp_iommu_refresh(mpp->iommu_info, mpp->dev); + if (mpp->hw_ops->clk_off) mpp->hw_ops->clk_off(mpp); } From c3c63e6eebdac5840bd2a4308d54a519833c1a37 Mon Sep 17 00:00:00 2001 From: Sugar Zhang Date: Tue, 2 Apr 2024 14:06:09 +0800 Subject: [PATCH 6/9] clk: rockchip: rk3576: Export CLK_AUDIO_FRAC_SRC Signed-off-by: Sugar Zhang Change-Id: I57d467cdba4295a78a9d2b73ff90add51eee8acf --- drivers/clk/rockchip/clk-rk3576.c | 16 ++++++++-------- include/dt-bindings/clock/rockchip,rk3576-cru.h | 4 ++++ 2 files changed, 12 insertions(+), 8 deletions(-) diff --git a/drivers/clk/rockchip/clk-rk3576.c b/drivers/clk/rockchip/clk-rk3576.c index 19f3c94e8202..abbbab4df754 100644 --- a/drivers/clk/rockchip/clk-rk3576.c +++ b/drivers/clk/rockchip/clk-rk3576.c @@ -455,25 +455,25 @@ static struct rockchip_clk_branch rk3576_clk_branches[] __initdata = { COMPOSITE(ACLK_VO0VOP_CHANNEL, "aclk_vo0vop_channel", gpll_cpll_lpll_bpll_p, CLK_IS_CRITICAL, RK3576_CLKSEL_CON(19), 12, 2, MFLAGS, 8, 4, DFLAGS, RK3576_CLKGATE_CON(2), 1, GFLAGS), - MUX(0, "clk_audio_frac_0_src", gpll_cpll_aupll_24m_p, 0, + MUX(CLK_AUDIO_FRAC_0_SRC, "clk_audio_frac_0_src", gpll_cpll_aupll_24m_p, 0, RK3576_CLKSEL_CON(13), 0, 2, MFLAGS), COMPOSITE_FRAC(CLK_AUDIO_FRAC_0, "clk_audio_frac_0", "clk_audio_frac_0_src", 0, - RK3576_CLKSEL_CON(12), 0, + RK3576_CLKSEL_CON(12), CLK_FRAC_DIVIDER_NO_LIMIT, RK3576_CLKGATE_CON(1), 10, GFLAGS), - MUX(0, "clk_audio_frac_1_src", gpll_cpll_aupll_24m_p, 0, + MUX(CLK_AUDIO_FRAC_1_SRC, "clk_audio_frac_1_src", gpll_cpll_aupll_24m_p, 0, RK3576_CLKSEL_CON(15), 0, 2, MFLAGS), COMPOSITE_FRAC(CLK_AUDIO_FRAC_1, "clk_audio_frac_1", "clk_audio_frac_1_src", 0, - RK3576_CLKSEL_CON(14), 0, + RK3576_CLKSEL_CON(14), CLK_FRAC_DIVIDER_NO_LIMIT, RK3576_CLKGATE_CON(1), 11, GFLAGS), - MUX(0, "clk_audio_frac_2_src", gpll_cpll_aupll_24m_p, 0, + MUX(CLK_AUDIO_FRAC_2_SRC, "clk_audio_frac_2_src", gpll_cpll_aupll_24m_p, 0, RK3576_CLKSEL_CON(17), 0, 2, MFLAGS), COMPOSITE_FRAC(CLK_AUDIO_FRAC_2, "clk_audio_frac_2", "clk_audio_frac_2_src", 0, - RK3576_CLKSEL_CON(16), 0, + RK3576_CLKSEL_CON(16), CLK_FRAC_DIVIDER_NO_LIMIT, RK3576_CLKGATE_CON(1), 12, GFLAGS), - MUX(0, "clk_audio_frac_3_src", gpll_cpll_aupll_24m_p, 0, + MUX(CLK_AUDIO_FRAC_3_SRC, "clk_audio_frac_3_src", gpll_cpll_aupll_24m_p, 0, RK3576_CLKSEL_CON(19), 0, 2, MFLAGS), COMPOSITE_FRAC(CLK_AUDIO_FRAC_3, "clk_audio_frac_3", "clk_audio_frac_3_src", 0, - RK3576_CLKSEL_CON(18), 0, + RK3576_CLKSEL_CON(18), CLK_FRAC_DIVIDER_NO_LIMIT, RK3576_CLKGATE_CON(1), 13, GFLAGS), MUX(0, "clk_uart_frac_0_src", gpll_cpll_aupll_24m_p, 0, RK3576_CLKSEL_CON(22), 0, 2, MFLAGS), diff --git a/include/dt-bindings/clock/rockchip,rk3576-cru.h b/include/dt-bindings/clock/rockchip,rk3576-cru.h index 8125fcbdd38c..4d262a77aa1f 100644 --- a/include/dt-bindings/clock/rockchip,rk3576-cru.h +++ b/include/dt-bindings/clock/rockchip,rk3576-cru.h @@ -553,6 +553,10 @@ #define ACLK_CRYPTO_NS 551 #define CLK_PKA_CRYPTO_NS 552 #define ACLK_RKVDEC_ROOT_BAK 553 +#define CLK_AUDIO_FRAC_0_SRC 554 +#define CLK_AUDIO_FRAC_1_SRC 555 +#define CLK_AUDIO_FRAC_2_SRC 556 +#define CLK_AUDIO_FRAC_3_SRC 557 /* secure clk */ #define CLK_STIMER0_ROOT 600 From d73c871ae796519c9b26fd5263a8806a442a440a Mon Sep 17 00:00:00 2001 From: Sugar Zhang Date: Tue, 2 Apr 2024 14:06:09 +0800 Subject: [PATCH 7/9] arm64: dts: rockchip: rk3576: Assign audio_frac_1 to AUPLL Currently, it serves 48k series sample rate for better jitter performance. Signed-off-by: Sugar Zhang Change-Id: I11045e45d8deb297d45e4fa9704fc25fcd3857e0 --- arch/arm64/boot/dts/rockchip/rk3576.dtsi | 3 +++ 1 file changed, 3 insertions(+) diff --git a/arch/arm64/boot/dts/rockchip/rk3576.dtsi b/arch/arm64/boot/dts/rockchip/rk3576.dtsi index 1ff0eace6c78..a4350df06215 100644 --- a/arch/arm64/boot/dts/rockchip/rk3576.dtsi +++ b/arch/arm64/boot/dts/rockchip/rk3576.dtsi @@ -1772,13 +1772,16 @@ #reset-cells = <1>; assigned-clocks = + <&cru CLK_AUDIO_FRAC_1_SRC>, <&cru PLL_GPLL>, <&cru PLL_CPLL>, <&cru PLL_AUPLL>, <&cru CLK_UART_FRAC_0>, <&cru CLK_UART_FRAC_1>, <&cru CLK_UART_FRAC_2>, <&cru CLK_AUDIO_FRAC_0>, <&cru CLK_AUDIO_FRAC_1>, <&cru CLK_CPLL_DIV2>, <&cru CLK_CPLL_DIV4>, <&cru CLK_CPLL_DIV10>, <&cru FCLK_DDR_CM0_CORE>; + assigned-clock-parents = <&cru PLL_AUPLL>; assigned-clock-rates = + <0>, <1188000000>, <1000000000>, <786432000>, <18432000>, <96000000>, <128000000>, From feb16e5db3c5e6ff7f18bc3c850c3758fad87caa Mon Sep 17 00:00:00 2001 From: Finley Xiao Date: Tue, 14 May 2024 17:40:24 +0800 Subject: [PATCH 8/9] soc: rockchip: power-domain: Add memory reset support for rk3576 This fixes panic when pd power on. rockchip-pm-domain 27380000.power-management:power-controller: failed to set domain 'nputop', target_on= 1, val=0 Kernel panic - not syncing: panic_on_set_domain set ... Call trace: dump_backtrace+0xf4/0x114 show_stack+0x18/0x24 dump_stack_lvl+0x6c/0x90 dump_stack+0x18/0x38 panic+0x14c/0x338 rockchip_do_pmu_set_power_domain+0x640/0x644 rockchip_pd_power+0x154/0x350 rockchip_pd_power_on+0x24/0x30 genpd_power_on+0x1d4/0x2ec genpd_power_on+0x7c/0x2ec genpd_runtime_resume+0xb0/0x384 __rpm_callback+0x7c/0x3c4 rpm_resume+0x43c/0x678 __pm_runtime_resume+0x4c/0x90 rknpu_power_on+0xa0/0x2d8 __rknpu_action_ioctl+0x54/0x230 drm_ioctl_kernel+0x80/0xf8 drm_ioctl+0x2d4/0x554 __arm64_sys_ioctl+0x90/0xc8 invoke_syscall+0x40/0x104 el0_svc_common+0xbc/0x168 do_el0_svc+0x1c/0x28 el0_svc+0x1c/0x68 el0t_64_sync_handler+0x68/0xb4 el0t_64_sync+0x164/0x168 Signed-off-by: Finley Xiao Change-Id: Ic73413d48335ef6bc57f3793ba6e3b39d4ecd100 --- drivers/soc/rockchip/pm_domains.c | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/drivers/soc/rockchip/pm_domains.c b/drivers/soc/rockchip/pm_domains.c index 1bd9b8280667..8bb2a5904f83 100644 --- a/drivers/soc/rockchip/pm_domains.c +++ b/drivers/soc/rockchip/pm_domains.c @@ -341,6 +341,7 @@ static void rockchip_pmu_unlock(struct rockchip_pm_domain *pd) .pwr_w_mask = (pwr) << 16, \ .pwr_mask = (pwr), \ .status_mask = (status), \ + .mem_status_mask = (r_status), \ .repair_status_mask = (r_status), \ .req_offset = r_offset, \ .req_w_mask = (req) << 16, \ @@ -2287,6 +2288,9 @@ static const struct rockchip_pmu_info rk3568_pmu = { static const struct rockchip_pmu_info rk3576_pmu = { .pwr_offset = 0x210, .status_offset = 0x230, + .chain_status_offset = 0x248, + .mem_status_offset = 0x250, + .mem_pwr_offset = 0x300, .req_offset = 0x110, .idle_offset = 0x128, .ack_offset = 0x120, From cf28107f98a2ab7f21527b4eef3fcb971096ce16 Mon Sep 17 00:00:00 2001 From: Tao Huang Date: Fri, 17 May 2024 19:13:52 +0800 Subject: [PATCH 9/9] mfd: rkx110_x120: pwm: Add module license Fixes the following error: ERROR: modpost: missing MODULE_LICENSE() in drivers/mfd/rkx110_x120/rkx120_pwm.o Signed-off-by: Tao Huang Change-Id: I27def7b919a0efcffc62f30e159066a4c21cb905 --- drivers/mfd/rkx110_x120/rkx120_pwm.c | 2 ++ 1 file changed, 2 insertions(+) diff --git a/drivers/mfd/rkx110_x120/rkx120_pwm.c b/drivers/mfd/rkx110_x120/rkx120_pwm.c index cb4c38b3c6cb..e5c7bc91fd0a 100644 --- a/drivers/mfd/rkx110_x120/rkx120_pwm.c +++ b/drivers/mfd/rkx110_x120/rkx120_pwm.c @@ -395,3 +395,5 @@ static struct platform_driver rkx120_pwm_driver = { .remove = rkx120_pwm_remove, }; module_platform_driver(rkx120_pwm_driver); + +MODULE_LICENSE("GPL");