From 37f49e37ab4cb5d0bc4c60eb5c6d4dd57db767bb Mon Sep 17 00:00:00 2001
From: hc <hc@nodka.com>
Date: Fri, 10 May 2024 07:44:59 +0000
Subject: [PATCH] gmac get mac form eeprom
---
kernel/drivers/soc/rockchip/rockchip_system_monitor.c | 95 +++++++++++++++++++++++++++--------------------
1 files changed, 54 insertions(+), 41 deletions(-)
diff --git a/kernel/drivers/soc/rockchip/rockchip_system_monitor.c b/kernel/drivers/soc/rockchip/rockchip_system_monitor.c
index 0b1f48d..c2fbb66 100644
--- a/kernel/drivers/soc/rockchip/rockchip_system_monitor.c
+++ b/kernel/drivers/soc/rockchip/rockchip_system_monitor.c
@@ -4,7 +4,6 @@
* Author: Finley Xiao <finley.xiao@rock-chips.com>
*/
-#include <dt-bindings/soc/rockchip-system-status.h>
#include <linux/clk-provider.h>
#include <linux/cpu.h>
#include <linux/cpufreq.h>
@@ -24,6 +23,7 @@
#include <linux/regulator/driver.h>
#include <linux/regulator/machine.h>
#include <linux/reboot.h>
+#include <linux/rockchip/rockchip_sip.h>
#include <linux/slab.h>
#include <linux/suspend.h>
#include <linux/thermal.h>
@@ -246,34 +246,6 @@
return video_info;
}
-static struct video_info *rockchip_find_video_info(const char *buf)
-{
- struct video_info *info, *video_info;
-
- video_info = rockchip_parse_video_info(buf);
-
- if (!video_info)
- return NULL;
-
- mutex_lock(&video_info_mutex);
- list_for_each_entry(info, &video_info_list, node) {
- if (info->width == video_info->width &&
- info->height == video_info->height &&
- info->ishevc == video_info->ishevc &&
- info->videoFramerate == video_info->videoFramerate &&
- info->streamBitrate == video_info->streamBitrate) {
- mutex_unlock(&video_info_mutex);
- kfree(video_info);
- return info;
- }
- }
-
- mutex_unlock(&video_info_mutex);
- kfree(video_info);
-
- return NULL;
-}
-
static void rockchip_add_video_info(struct video_info *video_info)
{
if (video_info) {
@@ -285,12 +257,25 @@
static void rockchip_del_video_info(struct video_info *video_info)
{
- if (video_info) {
- mutex_lock(&video_info_mutex);
- list_del(&video_info->node);
- mutex_unlock(&video_info_mutex);
- kfree(video_info);
+ struct video_info *info, *tmp;
+
+ if (!video_info)
+ return;
+
+ mutex_lock(&video_info_mutex);
+ list_for_each_entry_safe(info, tmp, &video_info_list, node) {
+ if (info->width == video_info->width &&
+ info->height == video_info->height &&
+ info->ishevc == video_info->ishevc &&
+ info->videoFramerate == video_info->videoFramerate &&
+ info->streamBitrate == video_info->streamBitrate) {
+ list_del(&info->node);
+ kfree(info);
+ break;
+ }
}
+ kfree(video_info);
+ mutex_unlock(&video_info_mutex);
}
static void rockchip_update_video_info(void)
@@ -338,7 +323,7 @@
switch (buf[0]) {
case '0':
/* clear video flag */
- video_info = rockchip_find_video_info(buf);
+ video_info = rockchip_parse_video_info(buf);
if (video_info) {
rockchip_del_video_info(video_info);
rockchip_update_video_info();
@@ -920,6 +905,7 @@
bool is_low)
{
struct monitor_dev_profile *devp = info->devp;
+ struct arm_smccc_res res;
int ret = 0;
dev_dbg(info->dev, "low_temp %d\n", is_low);
@@ -934,6 +920,17 @@
if (devp->update_volt)
devp->update_volt(info);
+
+ if (devp->opp_info && devp->opp_info->pvtpll_low_temp) {
+ res = sip_smc_pvtpll_config(PVTPLL_LOW_TEMP,
+ devp->opp_info->pvtpll_clk_id,
+ is_low, 0, 0, 0, 0);
+ if (res.a0)
+ dev_err(info->dev,
+ "%s: error cfg id=%u low temp %d (%d)\n",
+ __func__, devp->opp_info->pvtpll_clk_id,
+ is_low, (int)res.a0);
+ }
}
static void rockchip_high_temp_adjust(struct monitor_dev_info *info,
@@ -1028,6 +1025,8 @@
int ret, temp;
if (!info->opp_table)
+ return;
+ if (!system_monitor->tz)
return;
/*
@@ -1336,6 +1335,15 @@
rockchip_set_intermediate_rate(dev, opp_info, info->clk,
old_rate, new_rate,
true, is_set_clk);
+
+ if (old_volt > new_volt) {
+ ret = regulator_set_voltage(vdd_reg, new_volt, INT_MAX);
+ if (ret) {
+ dev_err(dev, "%s: failed to set volt: %lu\n",
+ __func__, new_volt);
+ goto restore_voltage;
+ }
+ }
if (info->regulator_count > 1) {
ret = regulator_set_voltage(mem_reg, new_mem_volt,
INT_MAX);
@@ -1345,11 +1353,13 @@
goto restore_voltage;
}
}
- ret = regulator_set_voltage(vdd_reg, new_volt, INT_MAX);
- if (ret) {
- dev_err(dev, "%s: failed to set volt: %lu\n",
- __func__, new_volt);
- goto restore_voltage;
+ if (old_volt <= new_volt) {
+ ret = regulator_set_voltage(vdd_reg, new_volt, INT_MAX);
+ if (ret) {
+ dev_err(dev, "%s: failed to set volt: %lu\n",
+ __func__, new_volt);
+ goto restore_voltage;
+ }
}
rockchip_set_read_margin(dev, opp_info, target_rm, is_set_rm);
if (is_set_clk && clk_set_rate(info->clk, new_rate)) {
@@ -1394,9 +1404,12 @@
rockchip_get_read_margin(dev, opp_info, old_volt, &target_rm);
rockchip_set_read_margin(dev, opp_info, target_rm, is_set_rm);
restore_voltage:
+ if (old_volt <= new_volt)
+ regulator_set_voltage(vdd_reg, old_volt, INT_MAX);
if (info->regulator_count > 1)
regulator_set_voltage(mem_reg, old_mem_volt, INT_MAX);
- regulator_set_voltage(vdd_reg, old_volt, INT_MAX);
+ if (old_volt > new_volt)
+ regulator_set_voltage(vdd_reg, old_volt, INT_MAX);
disable_clk:
rockchip_monitor_disable_opp_clk(dev, opp_info);
unlock:
--
Gitblit v1.6.2