From 5226534d73b528c8adec6b97ae9c2433aea0e7a5 Mon Sep 17 00:00:00 2001 From: Finley Xiao Date: Sun, 26 Dec 2021 20:50:18 +0800 Subject: [PATCH] soc: rockchip_system_monitor: Add support to set init freq As the scmi clk of npu may come from pvtpll, it should power up npu pd and enable the pclk of pvtpll before set scmi clk. The "assigned-clocks" in npu node will be set before npu driver probe, at this time the npu pd may be down, so add "rockchip,init-freq" in opp table node, make set scmi clk after npu pd is up and pclk of pvtpll is enabled. Signed-off-by: Finley Xiao Change-Id: I20fc3b6414601134645fa7f157c8ce5db9569232 --- drivers/soc/rockchip/rockchip_system_monitor.c | 9 ++++++++- include/soc/rockchip/rockchip_system_monitor.h | 1 + 2 files changed, 9 insertions(+), 1 deletion(-) diff --git a/drivers/soc/rockchip/rockchip_system_monitor.c b/drivers/soc/rockchip/rockchip_system_monitor.c index 81fc1afbbe87..24c6288d28f5 100644 --- a/drivers/soc/rockchip/rockchip_system_monitor.c +++ b/drivers/soc/rockchip/rockchip_system_monitor.c @@ -675,6 +675,8 @@ static int monitor_device_parse_dt(struct device *dev, if (!np) return -EINVAL; + of_property_read_u32(np, "rockchip,init-freq", &info->init_freq); + ret = monitor_device_parse_wide_temp_config(np, info); ret &= monitor_device_parse_status_config(np, info); ret &= monitor_device_parse_early_min_volt(np, info); @@ -1107,7 +1109,12 @@ int rockchip_monitor_check_rate_volt(struct monitor_dev_info *info) old_mem_volt = regulator_get_voltage(mem_reg); } - new_rate = old_rate; + if (info->init_freq) { + new_rate = info->init_freq * 1000; + info->init_freq = 0; + } else { + new_rate = old_rate; + } opp = dev_pm_opp_find_freq_ceil(dev, &new_rate); if (IS_ERR(opp)) { opp = dev_pm_opp_find_freq_floor(dev, &new_rate); diff --git a/include/soc/rockchip/rockchip_system_monitor.h b/include/soc/rockchip/rockchip_system_monitor.h index 5c77e7a7a7fe..f6821c305bc2 100644 --- a/include/soc/rockchip/rockchip_system_monitor.h +++ b/include/soc/rockchip/rockchip_system_monitor.h @@ -98,6 +98,7 @@ struct monitor_dev_info { unsigned long high_temp_max_volt; unsigned int video_4k_freq; unsigned int reboot_freq; + unsigned int init_freq; unsigned int status_min_limit; unsigned int status_max_limit; unsigned int early_min_volt;