diff options
author | Andrejs Cainikovs <andrejs.cainikovs@toradex.com> | 2022-05-27 15:20:42 +0200 |
---|---|---|
committer | Stefano Babic <sbabic@denx.de> | 2022-06-28 13:35:09 +0200 |
commit | 0543a1ed2787805dbbf5f32b5bfae323452b4bd9 (patch) | |
tree | 276581632a266b17a662b9b473e904a109e43efb | |
parent | bfa9306e140c136e43d0efc9574991db46ad8c9e (diff) | |
download | u-boot-0543a1ed2787805dbbf5f32b5bfae323452b4bd9.zip u-boot-0543a1ed2787805dbbf5f32b5bfae323452b4bd9.tar.gz u-boot-0543a1ed2787805dbbf5f32b5bfae323452b4bd9.tar.bz2 |
imx8m: fixup thermal trips
Fixup thermal trips in Linux device tree according to SoC thermal
grade.
Signed-off-by: Andrejs Cainikovs <andrejs.cainikovs@toradex.com>
Reviewed-by: Francesco Dolcini <francesco.dolcini@toradex.com>
Tested-by: Adam Ford <aford173@gmail.com>
-rw-r--r-- | arch/arm/mach-imx/imx8m/soc.c | 49 |
1 files changed, 49 insertions, 0 deletions
diff --git a/arch/arm/mach-imx/imx8m/soc.c b/arch/arm/mach-imx/imx8m/soc.c index 5933535..e4e5607 100644 --- a/arch/arm/mach-imx/imx8m/soc.c +++ b/arch/arm/mach-imx/imx8m/soc.c @@ -1203,6 +1203,48 @@ static int cleanup_nodes_for_efi(void *blob) 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; + 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) { #ifdef CONFIG_IMX8MQ @@ -1345,6 +1387,13 @@ usb_modify_speed: #endif cleanup_nodes_for_efi(blob); + + if (fixup_thermal_trips(blob, "cpu-thermal")) + printf("Failed to update cpu-thermal trip(s)"); + if (IS_ENABLED(CONFIG_IMX8MP) && + fixup_thermal_trips(blob, "soc-thermal")) + printf("Failed to update soc-thermal trip(s)"); + return 0; } #endif |