RK平台常开PD与CLK的方式

在遇到死机问题时,比较大的可能性是由于某个模块关闭了CLK或者PD,而软件驱动又去访问对应的模块寄存器,因此可以通过修改PD常开与CLK常开进行测试排查。PD、CLK常开也是遇到死机等问题的常用debug手段。以下说明一下如何打开。

1. 直接修改驱动代码

按照如下直接修改即可:

diff --git a/drivers/clk/clk-gate.c b/drivers/clk/clk-gate.c
index 573c9ac4c454..f0a94fcd341f 100644
--- a/drivers/clk/clk-gate.c
+++ b/drivers/clk/clk-gate.c
@@ -16,7 +16,7 @@
 #include <linux/err.h>
 #include <linux/string.h>
 
-static bool clk_always_on;
+static bool clk_always_on  = 1;
 module_param_named(always_on, clk_always_on, bool, 0644);
 MODULE_PARM_DESC(always_on, "Always keep clks on except for system suspend.");
 
diff --git a/drivers/soc/rockchip/pm_domains.c b/drivers/soc/rockchip/pm_domains.c
index d5cc4f05dcc5..e788458d308a 100644
--- a/drivers/soc/rockchip/pm_domains.c
+++ b/drivers/soc/rockchip/pm_domains.c
@@ -103,7 +103,7 @@ struct rockchip_pmu {
 };
 
 static struct rockchip_pmu *g_pmu;
-static bool pm_domain_always_on;
+static bool pm_domain_always_on = 1;
 
 module_param_named(always_on, pm_domain_always_on, bool, 0644);
 MODULE_PARM_DESC(always_on,

比较旧的代码可能没有上述标志位,可以直接按照如下修改:

diff --git a/drivers/clk/clk-gate.c b/drivers/clk/clk-gate.c
old mode 100644
new mode 100755
index 5a0d5b23a3bf..aa5da70d36b3
--- a/drivers/clk/clk-gate.c
+++ b/drivers/clk/clk-gate.c
@@ -46,6 +46,9 @@ static void clk_gate_endisable(struct clk_hw *hw, int enable)
unsigned long uninitialized_var(flags);
u32 reg;
+ if (enable == 0)
+ return 0;
+
set ^= enable;
if (gate->lock)

diff --git a/drivers/soc/rockchip/pm_domains.c
b/drivers/soc/rockchip/pm_domains.c
old mode 100644
new mode 100755
index 862bc3ee0331..ccb365226e79
--- a/drivers/soc/rockchip/pm_domains.c
+++ b/drivers/soc/rockchip/pm_domains.c
@@ -457,6 +457,9 @@ static int rockchip_pd_power(struct rockchip_pm_domain *pd,
bool power_on)
int ret = 0;
struct generic_pm_domain *genpd = &pd->genpd;
+ if (power_on == 0)
+ return 0;
+
rockchip_pmu_lock(pd);
if (rockchip_pmu_domain_is_on(pd) != power_on) {

2.DTS配置打开

可以在dts添加如下配置打开

diff --git a/arch/arm64/boot/dts/rockchip/rk3588-android.dtsi b/arch/arm64/boot/dts/rockchip/rk3588-android.dtsi
index 9996bae70aba1..b97a086af5549 100644
--- a/arch/arm64/boot/dts/rockchip/rk3588-android.dtsi
+++ b/arch/arm64/boot/dts/rockchip/rk3588-android.dtsi
@@ -6,7 +6,7 @@
/ {
chosen: chosen {
- bootargs = "earlycon=uart8250,mmio32,0xfeb50000 console=ttyFIQ0 irqchip.gicv3_pseudo_nmi=0";
+ bootargs = "earlycon=uart8250,mmio32,0xfeb50000 console=ttyFIQ0 irqchip.gicv3_pseudo_nmi=0 clk_gate.always_on=1 pm_domains.always_on=1";
};

3.使用命令方式打开

也可以使用设置节点的命令方式打开:

echo 1 > /sys/module/pm_domains/parameters/always_on
echo 1 > /sys/module/clk_gate/parameters/always_on

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

人生苦短,菜的抠脚

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值