aboutsummaryrefslogtreecommitdiff
path: root/arch
diff options
context:
space:
mode:
authorPrimoz Fiser <primoz.fiser@norik.com>2024-01-11 13:56:25 +0100
committerFabio Estevam <festevam@gmail.com>2024-01-12 15:01:55 -0300
commit3233349fa6e2f64ae7f03d9d0ccce3df7a5e7721 (patch)
tree7e8de4b6a7c6860156a3429a0ef66fb01d1a9972 /arch
parent0e00632a837a0d16770fe763fe185c4b9fe05119 (diff)
downloadu-boot-3233349fa6e2f64ae7f03d9d0ccce3df7a5e7721.zip
u-boot-3233349fa6e2f64ae7f03d9d0ccce3df7a5e7721.tar.gz
u-boot-3233349fa6e2f64ae7f03d9d0ccce3df7a5e7721.tar.bz2
imx: imx9: fixup thermal trips from fuses
Read i.MX9 CPU temp grade from fuses and fixup thermal trips in Linux device-tree accordingly. Based on commit 0543a1ed2787 ("imx8m: fixup thermal trips") Signed-off-by: Primoz Fiser <primoz.fiser@norik.com>
Diffstat (limited to 'arch')
-rw-r--r--arch/arm/mach-imx/imx9/soc.c45
1 files changed, 45 insertions, 0 deletions
diff --git a/arch/arm/mach-imx/imx9/soc.c b/arch/arm/mach-imx/imx9/soc.c
index 86b45be..f06339f 100644
--- a/arch/arm/mach-imx/imx9/soc.c
+++ b/arch/arm/mach-imx/imx9/soc.c
@@ -507,8 +507,53 @@ int print_cpuinfo(void)
return 0;
}
+static int fixup_thermal_trips(void *blob, const char *name)
+{
+ int minc, maxc;
+ int node, trip;
+
+ node = fdt_path_offset(blob, "/thermal-zones");
+ if (node < 0)
+ return node;
+
+ node = fdt_subnode_offset(blob, node, name);
+ if (node < 0)
+ return node;
+
+ node = fdt_subnode_offset(blob, node, "trips");
+ if (node < 0)
+ return node;
+
+ get_cpu_temp_grade(&minc, &maxc);
+
+ fdt_for_each_subnode(trip, blob, node) {
+ const char *type;
+ int temp, ret;
+
+ type = fdt_getprop(blob, trip, "type", NULL);
+ if (!type)
+ continue;
+
+ temp = 0;
+ if (!strcmp(type, "critical"))
+ temp = 1000 * (maxc - 5);
+ else if (!strcmp(type, "passive"))
+ temp = 1000 * (maxc - 10);
+ if (temp) {
+ ret = fdt_setprop_u32(blob, trip, "temperature", temp);
+ if (ret)
+ return ret;
+ }
+ }
+
+ return 0;
+}
+
int ft_system_setup(void *blob, struct bd_info *bd)
{
+ if (fixup_thermal_trips(blob, "cpu-thermal"))
+ printf("Failed to update cpu-thermal trip(s)");
+
return 0;
}