From e3e12f52b214121840b44c91de5b3e5af5d3eb84 Mon Sep 17 00:00:00 2001 From: hc <hc@nodka.com> Date: Mon, 06 Nov 2023 03:04:41 +0000 Subject: [PATCH] rk3568 rt init --- kernel/drivers/soc/rockchip/rockchip_system_monitor.c | 35 +++++++++++++++++++++++++++++------ 1 files changed, 29 insertions(+), 6 deletions(-) diff --git a/kernel/drivers/soc/rockchip/rockchip_system_monitor.c b/kernel/drivers/soc/rockchip/rockchip_system_monitor.c index 8a84d02..ffb95c0 100644 --- a/kernel/drivers/soc/rockchip/rockchip_system_monitor.c +++ b/kernel/drivers/soc/rockchip/rockchip_system_monitor.c @@ -68,6 +68,7 @@ int temp_hysteresis; unsigned int delay; bool is_temp_offline; + bool boosted; }; static unsigned long system_status; @@ -288,6 +289,7 @@ { struct video_info *video_info; unsigned int max_res = 0, max_stream_bitrate = 0, res = 0; + unsigned int max_video_framerate = 0; mutex_lock(&video_info_mutex); if (list_empty(&video_info_list)) { @@ -302,6 +304,8 @@ max_res = res; if (video_info->streamBitrate > max_stream_bitrate) max_stream_bitrate = video_info->streamBitrate; + if (video_info->videoFramerate > max_video_framerate) + max_video_framerate = video_info->videoFramerate; } mutex_unlock(&video_info_mutex); @@ -310,8 +314,9 @@ } else { if (max_stream_bitrate == 10) rockchip_set_system_status(SYS_STATUS_VIDEO_4K_10B); - else - rockchip_set_system_status(SYS_STATUS_VIDEO_4K); + if (max_video_framerate == 60) + rockchip_set_system_status(SYS_STATUS_VIDEO_4K_60P); + rockchip_set_system_status(SYS_STATUS_VIDEO_4K); } } @@ -737,6 +742,20 @@ } EXPORT_SYMBOL(rockchip_monitor_cpu_high_temp_adjust); +void rockchip_monitor_set_boosted(void) +{ + if (system_monitor) + system_monitor->boosted = true; +} +EXPORT_SYMBOL(rockchip_monitor_set_boosted); + +void rockchip_monitor_clear_boosted(void) +{ + if (system_monitor) + system_monitor->boosted = false; +} +EXPORT_SYMBOL(rockchip_monitor_clear_boosted); + static int rockchip_monitor_update_devfreq(struct devfreq *df) { int ret = 0; @@ -764,6 +783,8 @@ if (info->devp && info->devp->data) { df = (struct devfreq *)info->devp->data; rockchip_monitor_update_devfreq(df); + } else if (info->devp && info->devp->low_temp_adjust_volt) { + info->devp->low_temp_adjust_volt(info); } return 0; @@ -1120,7 +1141,7 @@ monitor_set_freq_table(dev, info); - if (info->devp->type == MONITOR_TPYE_DEV) { + if (info->devp->type == MONITOR_TPYE_DEV && info->devp->data) { info->devfreq_nb.notifier_call = system_monitor_devfreq_notifier_call; devfreq = (struct devfreq *)info->devp->data; @@ -1154,11 +1175,12 @@ list_del(&info->node); up_write(&mdev_list_sem); - devfreq = (struct devfreq *)info->devp->data; - if (info->devp->type == MONITOR_TPYE_DEV) + if (info->devp->type == MONITOR_TPYE_DEV && info->devp->data) { + devfreq = (struct devfreq *)info->devp->data; devm_devfreq_unregister_notifier(info->dev, devfreq, &info->devfreq_nb, DEVFREQ_TRANSITION_NOTIFIER); + } kfree(info->low_temp_adjust_table); kfree(info->opp_table); @@ -1413,7 +1435,8 @@ if (limit_freq > info->wide_temp_limit / 1000) limit_freq = info->wide_temp_limit / 1000; } - if (info->status_max_limit && + if (!system_monitor->boosted && + info->status_max_limit && limit_freq > info->status_max_limit) limit_freq = info->status_max_limit; -- Gitblit v1.6.2