hc
2024-02-19 1c055e55a242a33e574e48be530e06770a210dcd
kernel/drivers/devfreq/rockchip_dmc.c
....@@ -7,7 +7,6 @@
77 */
88
99 #include <dt-bindings/clock/rockchip-ddr.h>
10
-#include <dt-bindings/soc/rockchip-system-status.h>
1110 #include <drm/drm_modeset_lock.h>
1211 #include <linux/arm-smccc.h>
1312 #include <linux/clk.h>
....@@ -141,6 +140,7 @@
141140 unsigned long hdmirx_rate;
142141 unsigned long idle_rate;
143142 unsigned long suspend_rate;
143
+ unsigned long deep_suspend_rate;
144144 unsigned long reboot_rate;
145145 unsigned long boost_rate;
146146 unsigned long fixed_rate;
....@@ -1996,6 +1996,12 @@
19961996 if (of_property_read_u32(pdev->dev.of_node, "wait-mode", &ddr_psci_param->wait_mode))
19971997 ddr_psci_param->wait_mode = 0;
19981998
1999
+ res = sip_smc_dram(SHARE_PAGE_TYPE_DDR, 0, ROCKCHIP_SIP_CONFIG_DRAM_GET_STALL_TIME);
2000
+ if (res.a0)
2001
+ dev_err(dmcfreq->dev, "Current ATF unsupported get_stall_time\n");
2002
+ else
2003
+ dmcfreq->info.stall_time_ns = (unsigned int)res.a1;
2004
+
19992005 dmcfreq->set_auto_self_refresh = rockchip_ddr_set_auto_self_refresh;
20002006
20012007 return 0;
....@@ -2248,6 +2254,9 @@
22482254 case SYS_STATUS_SUSPEND:
22492255 dmcfreq->suspend_rate = freq * 1000;
22502256 break;
2257
+ case SYS_STATUS_DEEP_SUSPEND:
2258
+ dmcfreq->deep_suspend_rate = freq * 1000;
2259
+ break;
22512260 case SYS_STATUS_VIDEO_1080P:
22522261 dmcfreq->video_1080p_rate = freq * 1000;
22532262 break;
....@@ -2389,6 +2398,11 @@
23892398 case SYS_STATUS_SUSPEND:
23902399 dmcfreq->suspend_rate = rockchip_freq_level_2_rate(dmcfreq, level);
23912400 dev_info(dmcfreq->dev, "suspend_rate = %ld\n", dmcfreq->suspend_rate);
2401
+ break;
2402
+ case SYS_STATUS_DEEP_SUSPEND:
2403
+ dmcfreq->deep_suspend_rate = rockchip_freq_level_2_rate(dmcfreq, level);
2404
+ dev_info(dmcfreq->dev, "deep_suspend_rate = %ld\n",
2405
+ dmcfreq->deep_suspend_rate);
23922406 break;
23932407 case SYS_STATUS_VIDEO_1080P:
23942408 dmcfreq->video_1080p_rate = rockchip_freq_level_2_rate(dmcfreq, level);
....@@ -3091,6 +3105,7 @@
30913105 devm_devfreq_register_opp_notifier(dev, devfreq);
30923106
30933107 devfreq->last_status.current_frequency = opp_rate;
3108
+ devfreq->suspend_freq = dmcfreq->deep_suspend_rate;
30943109
30953110 reset_last_status(devfreq);
30963111