mirror of
https://github.com/coolsnowwolf/lede.git
synced 2025-04-16 04:13:31 +00:00
67 lines
3.2 KiB
Diff
67 lines
3.2 KiB
Diff
From 6931f85c29d5a0261219cf8a73773d3165806d84 Mon Sep 17 00:00:00 2001
|
|
From: Sascha Hauer <s.hauer@pengutronix.de>
|
|
Date: Fri, 22 Apr 2022 09:28:18 +0200
|
|
Subject: [PATCH] clk: rockchip: Mark hclk_vo as critical on rk3568
|
|
|
|
Whenever pclk_vo is enabled hclk_vo must be enabled as well. This is
|
|
described in the Reference Manual as:
|
|
|
|
| 2.8.6 NIU Clock gating reliance
|
|
|
|
|
| A part of niu clocks have a dependence on another niu clock in order to
|
|
| sharing the internal bus. When these clocks are in use, another niu
|
|
| clock must be opened, and cannot be gated. These clocks and the special
|
|
| clock on which they are relied are as following:
|
|
|
|
|
| Clocks which have dependency The clock which can not be gated
|
|
| -----------------------------------------------------------------
|
|
| ...
|
|
| pclk_vo_niu, hclk_vo_s_niu hclk_vo_niu
|
|
| ...
|
|
|
|
The clock framework doesn't offer a way to enable clock B whenever clock A is
|
|
enabled, at least not when B is not an ancestor of A. Workaround this by
|
|
marking hclk_vo as critical so it is never disabled. This is suboptimal in
|
|
terms of power consumption, but a stop gap solution until the clock framework
|
|
has a way to deal with this.
|
|
|
|
We have this clock tree:
|
|
|
|
| aclk_vo 2 2 0 300000000 0 0 50000 Y
|
|
| aclk_hdcp 0 0 0 300000000 0 0 50000 N
|
|
| pclk_vo 2 3 0 75000000 0 0 50000 Y
|
|
| pclk_edp_ctrl 0 0 0 75000000 0 0 50000 N
|
|
| pclk_dsitx_1 0 0 0 75000000 0 0 50000 N
|
|
| pclk_dsitx_0 1 2 0 75000000 0 0 50000 Y
|
|
| pclk_hdmi_host 1 2 0 75000000 0 0 50000 Y
|
|
| pclk_hdcp 0 0 0 75000000 0 0 50000 N
|
|
| hclk_vo 2 5 0 150000000 0 0 50000 Y
|
|
| hclk_hdcp 0 0 0 150000000 0 0 50000 N
|
|
| hclk_vop 0 2 0 150000000 0 0 50000 N
|
|
|
|
Without this patch the edp, dsitx, hdmi and hdcp driver would enable their
|
|
clocks which then enables pclk_vo, but hclk_vo stays disabled and register
|
|
accesses just hang. hclk_vo is enabled by the VOP2 driver, so reproducibility
|
|
of this issue depends on the probe order.
|
|
|
|
Signed-off-by: Sascha Hauer <s.hauer@pengutronix.de>
|
|
Reviewed-by: Dmitry Osipenko <dmitry.osipenko@collabora.com>
|
|
Reviewed-by: Robin Murphy <robin.murphy@arm.com>
|
|
Tested-by: Michael Riesch <michael.riesch@wolfvision.net>
|
|
Link: https://lore.kernel.org/r/20220422072841.2206452-2-s.hauer@pengutronix.de
|
|
Signed-off-by: Heiko Stuebner <heiko@sntech.de>
|
|
---
|
|
drivers/clk/rockchip/clk-rk3568.c | 1 +
|
|
1 file changed, 1 insertion(+)
|
|
|
|
--- a/drivers/clk/rockchip/clk-rk3568.c
|
|
+++ b/drivers/clk/rockchip/clk-rk3568.c
|
|
@@ -1591,6 +1591,7 @@ static const char *const rk3568_cru_crit
|
|
"hclk_php",
|
|
"pclk_php",
|
|
"hclk_usb",
|
|
+ "hclk_vo",
|
|
};
|
|
|
|
static const char *const rk3568_pmucru_critical_clocks[] __initconst = {
|