.. | .. |
---|
7 | 7 | */ |
---|
8 | 8 | |
---|
9 | 9 | #include <dt-bindings/clock/rockchip-ddr.h> |
---|
10 | | -#include <dt-bindings/soc/rockchip-system-status.h> |
---|
11 | 10 | #include <drm/drm_modeset_lock.h> |
---|
12 | 11 | #include <linux/arm-smccc.h> |
---|
13 | 12 | #include <linux/clk.h> |
---|
.. | .. |
---|
141 | 140 | unsigned long hdmirx_rate; |
---|
142 | 141 | unsigned long idle_rate; |
---|
143 | 142 | unsigned long suspend_rate; |
---|
| 143 | + unsigned long deep_suspend_rate; |
---|
144 | 144 | unsigned long reboot_rate; |
---|
145 | 145 | unsigned long boost_rate; |
---|
146 | 146 | unsigned long fixed_rate; |
---|
.. | .. |
---|
1996 | 1996 | if (of_property_read_u32(pdev->dev.of_node, "wait-mode", &ddr_psci_param->wait_mode)) |
---|
1997 | 1997 | ddr_psci_param->wait_mode = 0; |
---|
1998 | 1998 | |
---|
| 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 | + |
---|
1999 | 2005 | dmcfreq->set_auto_self_refresh = rockchip_ddr_set_auto_self_refresh; |
---|
2000 | 2006 | |
---|
2001 | 2007 | return 0; |
---|
.. | .. |
---|
2248 | 2254 | case SYS_STATUS_SUSPEND: |
---|
2249 | 2255 | dmcfreq->suspend_rate = freq * 1000; |
---|
2250 | 2256 | break; |
---|
| 2257 | + case SYS_STATUS_DEEP_SUSPEND: |
---|
| 2258 | + dmcfreq->deep_suspend_rate = freq * 1000; |
---|
| 2259 | + break; |
---|
2251 | 2260 | case SYS_STATUS_VIDEO_1080P: |
---|
2252 | 2261 | dmcfreq->video_1080p_rate = freq * 1000; |
---|
2253 | 2262 | break; |
---|
.. | .. |
---|
2389 | 2398 | case SYS_STATUS_SUSPEND: |
---|
2390 | 2399 | dmcfreq->suspend_rate = rockchip_freq_level_2_rate(dmcfreq, level); |
---|
2391 | 2400 | 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); |
---|
2392 | 2406 | break; |
---|
2393 | 2407 | case SYS_STATUS_VIDEO_1080P: |
---|
2394 | 2408 | dmcfreq->video_1080p_rate = rockchip_freq_level_2_rate(dmcfreq, level); |
---|
.. | .. |
---|
3091 | 3105 | devm_devfreq_register_opp_notifier(dev, devfreq); |
---|
3092 | 3106 | |
---|
3093 | 3107 | devfreq->last_status.current_frequency = opp_rate; |
---|
| 3108 | + devfreq->suspend_freq = dmcfreq->deep_suspend_rate; |
---|
3094 | 3109 | |
---|
3095 | 3110 | reset_last_status(devfreq); |
---|
3096 | 3111 | |
---|