From 244b2c5ca8b14627e4a17755e5922221e121c771 Mon Sep 17 00:00:00 2001
From: hc <hc@nodka.com>
Date: Wed, 09 Oct 2024 06:15:07 +0000
Subject: [PATCH] change system file
---
kernel/drivers/devfreq/rockchip_bus.c | 57 ++++++++++++++++++++++++++++++++++++++++++++++++++++-----
1 files changed, 52 insertions(+), 5 deletions(-)
diff --git a/kernel/drivers/devfreq/rockchip_bus.c b/kernel/drivers/devfreq/rockchip_bus.c
index 4d4206e..7a5ce77 100644
--- a/kernel/drivers/devfreq/rockchip_bus.c
+++ b/kernel/drivers/devfreq/rockchip_bus.c
@@ -73,7 +73,9 @@
struct device_node *np = dev->of_node;
struct device_node *child;
unsigned int enable_msk, bus_id, cfg;
- int ret;
+ char *prp_name = "rockchip,soc-bus-table";
+ u32 *table = NULL;
+ int ret = 0, config_cnt, i;
for_each_available_child_of_node(np, child) {
ret = of_property_read_u32_index(child, "bus-id", 0,
@@ -108,7 +110,49 @@
}
}
- return 0;
+ config_cnt = of_property_count_u32_elems(np, prp_name);
+ if (config_cnt <= 0) {
+ return 0;
+ } else if (config_cnt % 3) {
+ dev_err(dev, "Invalid count of %s\n", prp_name);
+ return -EINVAL;
+ }
+
+ table = kmalloc_array(config_cnt, sizeof(u32), GFP_KERNEL);
+ if (!table)
+ return -ENOMEM;
+
+ ret = of_property_read_u32_array(np, prp_name, table, config_cnt);
+ if (ret) {
+ dev_err(dev, "get %s error\n", prp_name);
+ goto free_table;
+ }
+
+ /* table[3n]: bus_id
+ * table[3n + 1]: config
+ * table[3n + 2]: enable_mask
+ */
+ for (i = 0; i < config_cnt; i += 3) {
+ bus_id = table[i];
+ cfg = table[i + 1];
+ enable_msk = table[i + 2];
+
+ if (!cfg) {
+ dev_info(dev, "cfg-val invalid in %s-%d\n", prp_name, bus_id);
+ continue;
+ }
+
+ ret = rockchip_sip_bus_smc_config(bus_id, cfg, enable_msk);
+ if (ret) {
+ dev_err(dev, "bus smc config error: %x!\n", ret);
+ goto free_table;
+ }
+ }
+
+free_table:
+ kfree(table);
+
+ return ret;
}
static int rockchip_bus_set_freq_table(struct rockchip_bus *bus)
@@ -348,7 +392,7 @@
{
struct rockchip_bus *bus = to_rockchip_bus_cpufreq_nb(nb);
struct cpufreq_freqs *freqs = data;
- int id = topology_physical_package_id(freqs->cpu);
+ int id = topology_physical_package_id(freqs->policy->cpu);
if (id < 0 || id >= MAX_CLUSTERS)
return NOTIFY_DONE;
@@ -364,7 +408,7 @@
bus->cpu_freq[CLUSTER1] > bus->cpu_high_freq) &&
bus->cur_rate != bus->high_rate) {
dev_dbg(bus->dev, "cpu%d freq=%d %d, up cci rate to %lu\n",
- freqs->cpu,
+ freqs->policy->cpu,
bus->cpu_freq[CLUSTER0],
bus->cpu_freq[CLUSTER1],
bus->high_rate);
@@ -377,7 +421,7 @@
bus->cpu_freq[CLUSTER1] <= bus->cpu_high_freq &&
bus->cur_rate != bus->low_rate) {
dev_dbg(bus->dev, "cpu%d freq=%d %d, down cci rate to %lu\n",
- freqs->cpu,
+ freqs->policy->cpu,
bus->cpu_freq[CLUSTER0],
bus->cpu_freq[CLUSTER1],
bus->low_rate);
@@ -447,7 +491,10 @@
{ .compatible = "rockchip,rk3288-bus", },
{ .compatible = "rockchip,rk3368-bus", },
{ .compatible = "rockchip,rk3399-bus", },
+ { .compatible = "rockchip,rk3528-bus", },
+ { .compatible = "rockchip,rk3562-bus", },
{ .compatible = "rockchip,rk3568-bus", },
+ { .compatible = "rockchip,rk3588-bus", },
{ .compatible = "rockchip,rv1126-bus", },
{ },
};
--
Gitblit v1.6.2