From 1c08964430925c30944a45ce39d3805e63ff4239 Mon Sep 17 00:00:00 2001 From: Steven Liu Date: Fri, 10 Nov 2023 11:06:25 +0800 Subject: [PATCH 1/8] arm64: configs: rockchip_linux: change RPMSG config to RPMSG_MBOX Signed-off-by: Steven Liu Change-Id: I98f03d79d53ff2c2a32a6c00e3d579cabf18e000 --- arch/arm64/configs/rockchip_linux_defconfig | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/arch/arm64/configs/rockchip_linux_defconfig b/arch/arm64/configs/rockchip_linux_defconfig index 5bf34e9f0734..1de95454d1eb 100644 --- a/arch/arm64/configs/rockchip_linux_defconfig +++ b/arch/arm64/configs/rockchip_linux_defconfig @@ -512,7 +512,7 @@ CONFIG_IOMMU_LIMIT_IOVA_ALIGNMENT=y CONFIG_IOMMU_IOVA_ALIGNMENT=4 CONFIG_ROCKCHIP_IOMMU=y CONFIG_ARM_SMMU_V3=y -CONFIG_RPMSG_ROCKCHIP=y +CONFIG_RPMSG_ROCKCHIP_MBOX=y CONFIG_RPMSG_VIRTIO=y CONFIG_CPU_PX30=y CONFIG_CPU_RK1808=y From 9625dd4e2af2db29ea16eba877a369cf8daa1e6d Mon Sep 17 00:00:00 2001 From: Jianwei Fan Date: Fri, 10 Nov 2023 03:35:42 +0000 Subject: [PATCH 2/8] media: i2c: imx577: fix exposure control range according to datasheet Change-Id: Idcb10103015279e1a5e532f490b7b28685d0c0a5 Signed-off-by: Jianwei Fan --- drivers/media/i2c/imx577.c | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/drivers/media/i2c/imx577.c b/drivers/media/i2c/imx577.c index b1567c2341d0..3c08848263d0 100644 --- a/drivers/media/i2c/imx577.c +++ b/drivers/media/i2c/imx577.c @@ -62,7 +62,7 @@ #define IMX577_REG_EXPOSURE_H 0x0202 #define IMX577_REG_EXPOSURE_L 0x0203 -#define IMX577_EXPOSURE_MIN 4 +#define IMX577_EXPOSURE_MIN 8 #define IMX577_EXPOSURE_STEP 1 #define IMX577_VTS_MAX 0xffff @@ -2031,7 +2031,7 @@ static int imx577_set_ctrl(struct v4l2_ctrl *ctrl) case V4L2_CID_VBLANK: if (imx577->cur_mode->hdr_mode == NO_HDR) { /* Update max exposure while meeting expected vblanking */ - max = imx577->cur_mode->height + ctrl->val - 4; + max = imx577->cur_mode->height + ctrl->val - 22; __v4l2_ctrl_modify_range(imx577->exposure, imx577->exposure->minimum, max, imx577->exposure->step, @@ -2195,7 +2195,7 @@ static int imx577_initialize_controls(struct imx577 *imx577) IMX577_VTS_MAX - mode->height, 1, vblank_def); imx577->cur_vts = mode->vts_def; - exposure_max = mode->vts_def - 4; + exposure_max = mode->vts_def - 22; imx577->exposure = v4l2_ctrl_new_std(handler, &imx577_ctrl_ops, V4L2_CID_EXPOSURE, IMX577_EXPOSURE_MIN, exposure_max, IMX577_EXPOSURE_STEP, From ef29dab5748793ed2ee3c0ef6382fa4e5c3930ff Mon Sep 17 00:00:00 2001 From: Hongming Zou Date: Fri, 10 Nov 2023 14:35:50 +0800 Subject: [PATCH 3/8] arm64: rk3308_linux_defconfig: enable Rockchip RPMsg +CONFIG_RPMSG_ROCKCHIP_SOFTIRQ=y +CONFIG_RPMSG_VIRTIO=y Change-Id: Ib677ca3d11c0489a99fe75aa9252e5c31a8b1584 Signed-off-by: Hongming Zou --- arch/arm64/configs/rk3308_linux_defconfig | 2 ++ 1 file changed, 2 insertions(+) diff --git a/arch/arm64/configs/rk3308_linux_defconfig b/arch/arm64/configs/rk3308_linux_defconfig index 789e6093f016..488f35693c1e 100644 --- a/arch/arm64/configs/rk3308_linux_defconfig +++ b/arch/arm64/configs/rk3308_linux_defconfig @@ -256,6 +256,8 @@ CONFIG_COMMON_CLK_RK808=y # CONFIG_ARM_ARCH_TIMER_EVTSTREAM is not set # CONFIG_IOMMU_SUPPORT is not set # CONFIG_CPU_PX30 is not set +CONFIG_RPMSG_ROCKCHIP_SOFTIRQ=y +CONFIG_RPMSG_VIRTIO=y CONFIG_CPU_RK3308=y # CONFIG_CPU_RK3328 is not set # CONFIG_CPU_RK3368 is not set From 45a89eb8faab7fe0f46b49a6613e10e7fc58acd7 Mon Sep 17 00:00:00 2001 From: Yifeng Zhao Date: Thu, 12 Oct 2023 16:33:07 +0800 Subject: [PATCH 4/8] mmc: dw_mmc: Fix DM 4GB TF card write data errors in RV1106 Before resetting the controller, it is necessary to increase the delay by 1 us or wait for a slight decrease in FIFO, so that no errors will occur during the DM 4GB TF card testing process. Signed-off-by: Yifeng Zhao Change-Id: Ic03a4d88367e3fea00f648f4a21df1669f4f0832 --- drivers/mmc/host/dw_mmc.c | 1 + 1 file changed, 1 insertion(+) diff --git a/drivers/mmc/host/dw_mmc.c b/drivers/mmc/host/dw_mmc.c index e763bb833330..b224bcd7fced 100644 --- a/drivers/mmc/host/dw_mmc.c +++ b/drivers/mmc/host/dw_mmc.c @@ -2230,6 +2230,7 @@ static void dw_mci_tasklet_func(unsigned long priv) ((fifo_count >> 17) & 0x7FF) <= RV1106_RAMDON_DATA_SIZE / 4, 0, 5000 * USEC_PER_MSEC)) data->error = -ETIMEDOUT; + udelay(1); dw_mci_reset(host); } send_stop_abort(host, data); From 614d7a8339e1240b1447996979662c53fe8ba958 Mon Sep 17 00:00:00 2001 From: Guochun Huang Date: Mon, 13 Nov 2023 08:55:20 +0000 Subject: [PATCH 5/8] clk/rockchip/regmap: rate should not be zero Change-Id: I4cf808ae4948b203be18772ce20ec2e0f892b0b7 Signed-off-by: Guochun Huang --- .../rockchip/regmap/clk-regmap-fractional-divider.c | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/drivers/clk/rockchip/regmap/clk-regmap-fractional-divider.c b/drivers/clk/rockchip/regmap/clk-regmap-fractional-divider.c index 3d5f1d2691e3..1acbc16e7aae 100644 --- a/drivers/clk/rockchip/regmap/clk-regmap-fractional-divider.c +++ b/drivers/clk/rockchip/regmap/clk-regmap-fractional-divider.c @@ -47,6 +47,16 @@ static void clk_regmap_fractional_divider_approximation(struct clk_hw *hw, struct clk_hw *p_parent; unsigned long scale; + if (!rate) { + *m = 0; + *n = 1; + + dev_dbg(fd->dev, "%s rate:(%ld) maybe invalid frequency setting!\n", + clk_hw_get_name(hw), rate); + + return; + } + p_rate = clk_hw_get_rate(clk_hw_get_parent(hw)); if ((rate * 20 > p_rate) && (p_rate % rate != 0)) { p_parent = clk_hw_get_parent(clk_hw_get_parent(hw)); From 8cfed66d7fe4bb3aca7338d1f49f5b65721a311a Mon Sep 17 00:00:00 2001 From: XiaoDong Huang Date: Mon, 13 Nov 2023 16:18:33 +0800 Subject: [PATCH 6/8] soc: rockchip: fiq debugger: check "target_cpu" before switch cpu Signed-off-by: XiaoDong Huang Change-Id: I2ed0fb4c5aa60b735a7570e13dffd2ee8e646f3b --- drivers/soc/rockchip/fiq_debugger/rk_fiq_debugger.c | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/drivers/soc/rockchip/fiq_debugger/rk_fiq_debugger.c b/drivers/soc/rockchip/fiq_debugger/rk_fiq_debugger.c index 1fb72a5601ea..6dafdde7b6b0 100644 --- a/drivers/soc/rockchip/fiq_debugger/rk_fiq_debugger.c +++ b/drivers/soc/rockchip/fiq_debugger/rk_fiq_debugger.c @@ -763,6 +763,11 @@ static int fiq_debugger_cpu_offine_migrate_fiq(unsigned int cpu) if ((sip_fiq_debugger_is_enabled()) && (sip_fiq_debugger_get_target_cpu() == cpu)) { target_cpu = cpumask_any_but(cpu_online_mask, cpu); + if (target_cpu >= nr_cpu_ids) { + pr_err("%s: migrate fiq fail!\n", __func__); + return -EBUSY; + } + sip_fiq_debugger_switch_cpu(target_cpu); } From 1aef70a303fe99ba3bac1233eaad023b84808fee Mon Sep 17 00:00:00 2001 From: Elaine Zhang Date: Wed, 8 Nov 2023 11:30:41 +0800 Subject: [PATCH 7/8] rtc: rockchip: fix the rtc suspend crash In some special products, after rtc probe, The system quickly goes to sleep before the calibration function of delay_work is executed. In rtc suspend will clamp rtc. In the off process, if delay_work is executed, the system will crash. Added calibration judgments to turn off delay_work when rtc suspend. Signed-off-by: Elaine Zhang Change-Id: Ib212eabd18c27ddeff5c50e5b8ac0444a2cafc23 --- drivers/rtc/rtc-rockchip.c | 30 +++++++++++++++++++++++++++++- 1 file changed, 29 insertions(+), 1 deletion(-) diff --git a/drivers/rtc/rtc-rockchip.c b/drivers/rtc/rtc-rockchip.c index 8dd82ef4d45f..7175ffef7c7c 100644 --- a/drivers/rtc/rtc-rockchip.c +++ b/drivers/rtc/rtc-rockchip.c @@ -555,6 +555,31 @@ static void rockchip_rtc_compensation_delay_work(struct work_struct *work) return; } +static bool rockchip_rtc_is_trimed(struct rockchip_rtc *rtc) +{ + int ret, comp_done; + + ret = regmap_read(rtc->regmap, RTC_CTRL, &comp_done); + if (ret) { + pr_err("%s: Failed to read RTC_CTRL: %d\n", __func__, ret); + return false; + } + return (comp_done & CLK32K_COMP_EN) == CLK32K_COMP_EN; +} + +static void rockchip_rtc_trim_start(struct rockchip_rtc *rtc) +{ + if (!rockchip_rtc_is_trimed(rtc)) + queue_delayed_work(system_long_wq, &rtc->trim_work, + msecs_to_jiffies(5000)); +} + +static void __maybe_unused rockchip_rtc_trim_close(struct rockchip_rtc *rtc) +{ + if (!rockchip_rtc_is_trimed(rtc)) + cancel_delayed_work_sync(&rtc->trim_work); +} + /* Enable the alarm if it should be enabled (in case it was disabled to * prevent use as a wake source). */ @@ -568,6 +593,8 @@ static int rockchip_rtc_suspend(struct device *dev) if (device_may_wakeup(dev)) enable_irq_wake(rtc->irq); + rockchip_rtc_trim_close(rtc); + if (rtc->grf) { switch (rtc->mode) { case ROCKCHIP_RV1106_RTC: @@ -610,6 +637,7 @@ static int rockchip_rtc_resume(struct device *dev) dev_err(dev, "Cannot enable clock.\n"); return ret; } + rockchip_rtc_trim_start(rtc); return 0; } @@ -761,7 +789,7 @@ static int rockchip_rtc_probe(struct platform_device *pdev) rtc->irq); INIT_DELAYED_WORK(&rtc->trim_work, rockchip_rtc_compensation_delay_work); - queue_delayed_work(system_long_wq, &rtc->trim_work, 3000); + rockchip_rtc_trim_start(rtc); return rtc_register_device(rtc->rtc); } From 1d795ddee4f73b2739410f99c22280b00f452187 Mon Sep 17 00:00:00 2001 From: Liang Chen Date: Mon, 13 Nov 2023 16:24:01 +0800 Subject: [PATCH 8/8] soc: rockchip: cpuinfo: optimize error log Do not output error when return -EPROBE_DEFER. Change-Id: I94a9e0349a69ce76ee939bc29d2862cd4f20c1e9 Signed-off-by: Liang Chen --- drivers/soc/rockchip/rockchip-cpuinfo.c | 9 +++------ 1 file changed, 3 insertions(+), 6 deletions(-) diff --git a/drivers/soc/rockchip/rockchip-cpuinfo.c b/drivers/soc/rockchip/rockchip-cpuinfo.c index 5785d423a7e1..02befb165d98 100644 --- a/drivers/soc/rockchip/rockchip-cpuinfo.c +++ b/drivers/soc/rockchip/rockchip-cpuinfo.c @@ -57,12 +57,9 @@ static int rockchip_cpuinfo_probe(struct platform_device *pdev) } cell = nvmem_cell_get(dev, "id"); - if (IS_ERR(cell)) { - dev_err(dev, "failed to get id cell: %ld\n", PTR_ERR(cell)); - if (PTR_ERR(cell) == -EPROBE_DEFER) - return PTR_ERR(cell); - return PTR_ERR(cell); - } + if (IS_ERR(cell)) + return dev_err_probe(dev, PTR_ERR(cell), "failed to get id cell\n"); + efuse_buf = nvmem_cell_read(cell, &len); nvmem_cell_put(cell); if (IS_ERR(efuse_buf))