If the thermal sensor is enabled in U-Boot, adjust the cpu-thermal
trip points for industrial rated parts.  This should apply to 8MQ,
8MM, 8MN, and 8MP.

Signed-off-by: Adam Ford <aford...@gmail.com>
Reviewed-by: Tim Harvey <thar...@gateworks.com>
---
V2:  Switch the check from looking for industrial or checkoing for
     anything but commerical.  This expands the trip point updates
     other grades as well.

diff --git a/arch/arm/mach-imx/imx8m/soc.c b/arch/arm/mach-imx/imx8m/soc.c
index 8e23e6da32..7175295c3c 100644
--- a/arch/arm/mach-imx/imx8m/soc.c
+++ b/arch/arm/mach-imx/imx8m/soc.c
@@ -30,6 +30,7 @@
 #include <fsl_wdog.h>
 #include <imx_sip.h>
 #include <linux/bitops.h>
+#include <imx_thermal.h>
 
 DECLARE_GLOBAL_DATA_PTR;
 
@@ -1207,10 +1208,10 @@ static int cleanup_nodes_for_efi(void *blob)
 
 int ft_system_setup(void *blob, struct bd_info *bd)
 {
+       __maybe_unused int nodeoff;
 #ifdef CONFIG_IMX8MQ
        int i = 0;
        int rc;
-       int nodeoff;
 
        if (get_boot_device() == USB_BOOT) {
                disable_dcss_nodes(blob);
@@ -1346,6 +1347,24 @@ usb_modify_speed:
                disable_cpu_nodes(blob, 2);
 #endif
 
+#if defined(CONFIG_IMX_TMU)
+       int minc, maxc, prop;
+
+       nodeoff = fdt_path_offset(blob, "/thermal-zones/cpu-thermal/trips");
+
+       /* Only update non-Commerical grade parts */
+       if (get_cpu_temp_grade(&minc, &maxc) != TEMP_COMMERCIAL) {
+               fdt_for_each_subnode(prop, blob, nodeoff) {
+                       const char *type = fdt_getprop(blob, prop, "type", 
NULL);
+
+                       if (type && (!strcmp("critical", type)))
+                               fdt_setprop_u32(blob, prop, "temperature", maxc 
* 1000);
+                       else if (type && (!strcmp("passive", type)))
+                               fdt_setprop_u32(blob, prop, "temperature", 
(maxc - 10) * 1000);
+               }
+       }
+#endif
+
        cleanup_nodes_for_efi(blob);
        return 0;
 }
-- 
2.34.1

Reply via email to