From fbce87553e52a36453504a9c70cbdb0d549dcf36 Mon Sep 17 00:00:00 2001 From: Finley Xiao Date: Tue, 31 Oct 2023 17:31:00 +0800 Subject: [PATCH 1/5] arm64: dts: rockchip: rk3588s: Add hclk for npu opp table Change-Id: I19d9c380f9bd1ca3bb0a7385f992df75b060f1c1 Signed-off-by: Finley Xiao --- arch/arm64/boot/dts/rockchip/rk3588s.dtsi | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/arch/arm64/boot/dts/rockchip/rk3588s.dtsi b/arch/arm64/boot/dts/rockchip/rk3588s.dtsi index 7d1685fc562d..12d2daa32af5 100644 --- a/arch/arm64/boot/dts/rockchip/rk3588s.dtsi +++ b/arch/arm64/boot/dts/rockchip/rk3588s.dtsi @@ -3447,8 +3447,8 @@ rockchip,pvtm-temp-prop = <(-113) (-113)>; rockchip,pvtm-thermal-zone = "npu-thermal"; - clocks = <&cru PCLK_NPU_GRF>; - clock-names = "pclk"; + clocks = <&cru PCLK_NPU_GRF>, <&cru HCLK_NPU_ROOT>; + clock-names = "pclk", "hclk"; rockchip,grf = <&npu_grf>; volt-mem-read-margin = < 855000 1 From 2deb8446dd4d4ecaf73d4504165fab07edae632d Mon Sep 17 00:00:00 2001 From: Weiwen Chen Date: Tue, 31 Oct 2023 20:44:01 +0800 Subject: [PATCH 2/5] ARM: configs: rockchip: enable CONFIG_PWRSEQ_SIMPLE for rv1106-tb-nofastae.config Signed-off-by: Weiwen Chen Change-Id: I67caa4711b664174f0192133d5b6280573b72fc1 --- arch/arm/configs/rv1106-tb-nofastae.config | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/arch/arm/configs/rv1106-tb-nofastae.config b/arch/arm/configs/rv1106-tb-nofastae.config index ec668078748d..92e443eb8c02 100644 --- a/arch/arm/configs/rv1106-tb-nofastae.config +++ b/arch/arm/configs/rv1106-tb-nofastae.config @@ -312,7 +312,7 @@ CONFIG_MTD_SPI_NOR_MISC=y # CONFIG_PL320_MBOX is not set # CONFIG_PLATFORM_MHU is not set # CONFIG_PWRSEQ_EMMC is not set -# CONFIG_PWRSEQ_SIMPLE is not set +CONFIG_PWRSEQ_SIMPLE=y # CONFIG_RD_BZIP2 is not set # CONFIG_RD_GZIP is not set # CONFIG_RD_LZ4 is not set From 4334bb68c1fee9786ad7a46c390bf8d1d1305cbf Mon Sep 17 00:00:00 2001 From: Hongming Zou Date: Mon, 9 Oct 2023 14:39:57 +0800 Subject: [PATCH 3/5] arm64: dts: rockchip: rk3308-amp: support ap rpmsg Change-Id: I0f50eb6e8a4653f4298c499b29168f0031076c7a Signed-off-by: Hongming Zou --- arch/arm64/boot/dts/rockchip/rk3308b-amp.dtsi | 26 ++++++++++++++++++- 1 file changed, 25 insertions(+), 1 deletion(-) diff --git a/arch/arm64/boot/dts/rockchip/rk3308b-amp.dtsi b/arch/arm64/boot/dts/rockchip/rk3308b-amp.dtsi index a2d39c8ea3ee..5a4548d8149d 100644 --- a/arch/arm64/boot/dts/rockchip/rk3308b-amp.dtsi +++ b/arch/arm64/boot/dts/rockchip/rk3308b-amp.dtsi @@ -15,7 +15,8 @@ pinctrl-0 = <&uart1_xfer>; status = "okay"; amp-cpu-aff-maskbits = /bits/ 64 <0x0 0x1 0x1 0x2 0x2 0x4 0x3 0x8>; - amp-irqs = /bits/ 64 ; + amp-irqs = /bits/ 64 ; }; reserved-memory { @@ -28,6 +29,29 @@ reg = <0x0 0x2e00000 0x0 0x1200000>; no-map; }; + + rpmsg_reserved: rpmsg@7c00000 { + reg = <0x0 0x07c00000 0x0 0x400000>; + no-map; + }; + + rpmsg_dma_reserved: rpmsg-dma@8000000 { + compatible = "shared-dma-pool"; + reg = <0x0 0x08000000 0x0 0x100000>; + no-map; + }; + }; + + rpmsg: rpmsg@7c00000 { + compatible = "rockchip,rpmsg-softirq"; + interrupts = , + ; + rockchip,vdev-nums = <1>; + rockchip,link-id = <0x03>; + reg = <0x0 0x7c00000 0x0 0x20000>; + memory-region = <&rpmsg_dma_reserved>; + + status = "okay"; }; }; From fb2ea0c6bcba1234c432957396143a99e327afdc Mon Sep 17 00:00:00 2001 From: Sandy Huang Date: Thu, 2 Nov 2023 09:55:51 +0800 Subject: [PATCH 4/5] drm/rockchip: vop2: fix NULL point when dump regs or active_regs when vp0 is disabled, the vop2->vps[0].rockchip_crtc.crtc.state is NULL. Signed-off-by: Sandy Huang Change-Id: I93b3ea4f3ddc6076f2105ebcabf7317627b602a3 --- drivers/gpu/drm/rockchip/rockchip_drm_vop2.c | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/drivers/gpu/drm/rockchip/rockchip_drm_vop2.c b/drivers/gpu/drm/rockchip/rockchip_drm_vop2.c index b3f403358d83..31b3abb531e3 100644 --- a/drivers/gpu/drm/rockchip/rockchip_drm_vop2.c +++ b/drivers/gpu/drm/rockchip/rockchip_drm_vop2.c @@ -6326,7 +6326,8 @@ static void vop2_crtc_regs_dump(struct drm_crtc *crtc, struct seq_file *s) /* only need to dump once at first active crtc for vop2 */ for (i = 0; i < vop2_data->nr_vps; i++) { - if (vop2->vps[i].rockchip_crtc.crtc.state->active) { + if (vop2->vps[i].rockchip_crtc.crtc.state && + vop2->vps[i].rockchip_crtc.crtc.state->active) { first_active_crtc = &vop2->vps[i].rockchip_crtc.crtc; break; } @@ -6369,7 +6370,8 @@ static void vop2_crtc_active_regs_dump(struct drm_crtc *crtc, struct seq_file *s /* only need to dump once at first active crtc for vop2 */ for (i = 0; i < vop2_data->nr_vps; i++) { - if (vop2->vps[i].rockchip_crtc.crtc.state->active) { + if (vop2->vps[i].rockchip_crtc.crtc.state && + vop2->vps[i].rockchip_crtc.crtc.state->active) { first_active_crtc = &vop2->vps[i].rockchip_crtc.crtc; break; } From 1dfbd3db7bcb48ddcd94d0803618bb529c805770 Mon Sep 17 00:00:00 2001 From: Damon Ding Date: Thu, 26 Oct 2023 18:06:46 +0800 Subject: [PATCH 5/5] pwm: rockchip: add debugfs to dump regs Signed-off-by: Damon Ding Change-Id: I2cef534c3cb9c655258f6fc6e66e696b6293307e --- drivers/pwm/pwm-rockchip.c | 68 ++++++++++++++++++++++++++++++++++++-- 1 file changed, 66 insertions(+), 2 deletions(-) diff --git a/drivers/pwm/pwm-rockchip.c b/drivers/pwm/pwm-rockchip.c index fa455fb878e3..04b323166b01 100644 --- a/drivers/pwm/pwm-rockchip.c +++ b/drivers/pwm/pwm-rockchip.c @@ -7,6 +7,7 @@ */ #include +#include #include #include #include @@ -65,6 +66,8 @@ struct rockchip_pwm_chip { struct pinctrl *pinctrl; struct pinctrl_state *active_state; const struct rockchip_pwm_data *data; + struct resource *res; + struct dentry *debugfs; void __iomem *base; unsigned long clk_rate; bool vop_pwm_en; /* indicate voppwm mirror register state */ @@ -371,6 +374,57 @@ out: return ret; } +#ifdef CONFIG_DEBUG_FS +static int rockchip_pwm_debugfs_show(struct seq_file *s, void *data) +{ + struct rockchip_pwm_chip *pc = s->private; + u32 regs_start; + int i; + int ret = 0; + + if (!pc->oneshot_en) { + ret = clk_enable(pc->pclk); + if (ret) + return ret; + } + + regs_start = (u32)pc->res->start - pc->channel_id * 0x10; + for (i = 0; i < 0x40; i += 4) { + seq_printf(s, "%08x: %08x %08x %08x %08x\n", regs_start + i * 4, + readl_relaxed(pc->base + (4 * i)), + readl_relaxed(pc->base + (4 * (i + 1))), + readl_relaxed(pc->base + (4 * (i + 2))), + readl_relaxed(pc->base + (4 * (i + 3)))); + } + + if (!pc->oneshot_en) + clk_disable(pc->pclk); + + return ret; +} +DEFINE_SHOW_ATTRIBUTE(rockchip_pwm_debugfs); + +static inline void rockchip_pwm_debugfs_init(struct rockchip_pwm_chip *pc) +{ + pc->debugfs = debugfs_create_file(dev_name(pc->chip.dev), + S_IFREG | 0444, NULL, pc, + &rockchip_pwm_debugfs_fops); +} + +static inline void rockchip_pwm_debugfs_deinit(struct rockchip_pwm_chip *pc) +{ + debugfs_remove(pc->debugfs); +} +#else +static inline void rockchip_pwm_debugfs_init(struct rockchip_pwm_chip *pc) +{ +} + +static inline void rockchip_pwm_debugfs_deinit(struct rockchip_pwm_chip *pc) +{ +} +#endif + static const struct pwm_ops rockchip_pwm_ops = { .get_state = rockchip_pwm_get_state, .apply = rockchip_pwm_apply, @@ -474,8 +528,14 @@ static int rockchip_pwm_probe(struct platform_device *pdev) return -ENOMEM; r = platform_get_resource(pdev, IORESOURCE_MEM, 0); - pc->base = devm_ioremap(&pdev->dev, r->start, - resource_size(r)); + if (!r) { + dev_err(&pdev->dev, "Failed to get pwm register\n"); + return -EINVAL; + } + pc->res = r; + + pc->base = devm_ioremap(&pdev->dev, pc->res->start, + resource_size(pc->res)); if (IS_ERR(pc->base)) return PTR_ERR(pc->base); @@ -578,6 +638,8 @@ static int rockchip_pwm_probe(struct platform_device *pdev) goto err_pclk; } + rockchip_pwm_debugfs_init(pc); + /* Keep the PWM clk enabled if the PWM appears to be up and running. */ if (!enabled) clk_disable(pc->clk); @@ -600,6 +662,8 @@ static int rockchip_pwm_remove(struct platform_device *pdev) struct pwm_state state; u32 val; + rockchip_pwm_debugfs_deinit(pc); + /* * For oneshot mode, it is needed to wait for bit PWM_ENABLE * to 0, which is automatic if all periods have been sent.