From patchwork Sun Oct 1 03:00:12 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Fabio Estevam X-Patchwork-Id: 13405273 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by smtp.lore.kernel.org (Postfix) with ESMTP id 9933AE748F0 for ; Sun, 1 Oct 2023 03:00:28 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S229836AbjJADA2 (ORCPT ); Sat, 30 Sep 2023 23:00:28 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:44136 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S229461AbjJADA2 (ORCPT ); Sat, 30 Sep 2023 23:00:28 -0400 Received: from mail-pj1-x1030.google.com (mail-pj1-x1030.google.com [IPv6:2607:f8b0:4864:20::1030]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id CC0D8DA; Sat, 30 Sep 2023 20:00:24 -0700 (PDT) Received: by mail-pj1-x1030.google.com with SMTP id 98e67ed59e1d1-2773b10bd05so2446084a91.0; Sat, 30 Sep 2023 20:00:24 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1696129224; x=1696734024; darn=vger.kernel.org; h=content-transfer-encoding:mime-version:message-id:date:subject:cc :to:from:from:to:cc:subject:date:message-id:reply-to; bh=tlYn5Ui0Tk2IR6HLELfl3LoEP9WwtCST+Q3mwNvk8yQ=; b=j5KQvNgOXVxWqflyGhd7YeZHfsXLf5ED66q1jPqIYvQGik+NLm3r8GZBcnqSA4sSA1 YwZuQHUNHjiN5gZUTW4ClV+s9zhEoA7Ctmjbtiys3XDzaTpcb2/oAaPbe/zyhlt2MAoZ 6hcDDoZSndnHvcR9nvdWIqrSJ99LMSIl9ue4Wnp5mnjQnl16rHiDN+kKJ3LNQiRQURzX fVdUk7nWd0PhDZ8s5XXMnYaF7QWXcr/jcWqJnCWUcHS36dN18gjO/uKn7DqheaXNdX62 550pnbvv5mq/T8l9In56jmU9NIhN3xH+7exfBrikfbs1KctP+GXRi/UJd9tUoTmyVvxj 1NYA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1696129224; x=1696734024; h=content-transfer-encoding:mime-version:message-id:date:subject:cc :to:from:x-gm-message-state:from:to:cc:subject:date:message-id :reply-to; bh=tlYn5Ui0Tk2IR6HLELfl3LoEP9WwtCST+Q3mwNvk8yQ=; b=tPcsLnPhrUMY8EUrm7MSQ5AXa3CpogljQOjLP5SKpmOnpI0byqGkydV9qR9JuKhfQP wx8memSpMv/ZUqBq0DPtC/qEfY2E5XBRu21h4P9VZVsnWZ8s22jI2sA2/hnbdUQyjhjv Ck4P9zjax8tBA93IqSbSt7ewrCw96jao5rd6jL8L4Xc3DQnEnIZwef63yVJ9iVqbGSpF zcoTtNgXuev5KT3YP5Wo+6BzOUXuW1/UZg7TKKhW5Kp2LEpKMIQrHTvkWsa/fQrQP7/+ /H00Z4jTbxXcQBc49fj+Rz2DxZEeIwifuu3NATKL+VYoPKcv0MNL9tf6qQmII9spUYR0 IRog== X-Gm-Message-State: AOJu0YzzPJdTpg2hKlQ8707KEVg0MfULeRVTzfDVrXQmbPP5JVAQg2xV 6qhH0UXnjMwCqm9iuHognyA= X-Google-Smtp-Source: AGHT+IH/fHBWP1yyCOiGydat5dgxvLrcfnKOdZidkfksbrcw6wMGnjfKWodEDHEgg6UHuN29UmTpaA== X-Received: by 2002:a17:902:e5c1:b0:1c3:6d97:e897 with SMTP id u1-20020a170902e5c100b001c36d97e897mr9401038plf.5.1696129224140; Sat, 30 Sep 2023 20:00:24 -0700 (PDT) Received: from fabio-Precision-3551.. ([2804:14c:485:4b61:355a:d2a5:90:39d5]) by smtp.gmail.com with ESMTPSA id az4-20020a170902a58400b001b8baa83639sm6801788plb.200.2023.09.30.20.00.19 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sat, 30 Sep 2023 20:00:23 -0700 (PDT) From: Fabio Estevam To: daniel.lezcano@linaro.org Cc: rafael@kernel.org, krzysztof.kozlowski+dt@linaro.org, robh+dt@kernel.org, conor+dt@kernel.org, linux-pm@vger.kernel.org, devicetree@vger.kernel.org, Fabio Estevam , Krzysztof Kozlowski Subject: [PATCH v9 1/3] dt-bindings: thermal-zones: Document critical-action Date: Sun, 1 Oct 2023 00:00:12 -0300 Message-Id: <20231001030014.1244633-1-festevam@gmail.com> X-Mailer: git-send-email 2.34.1 MIME-Version: 1.0 Precedence: bulk List-ID: X-Mailing-List: linux-pm@vger.kernel.org From: Fabio Estevam Document the critical-action property to describe the thermal action the OS should perform after the critical temperature is reached. The possible values are "shutdown" and "reboot". The motivation for introducing the critical-action property is that different systems may need different thermal actions when the critical temperature is reached. For example, a desktop PC may want the OS to trigger a shutdown when the critical temperature is reached. However, in some embedded cases, such behavior does not suit well, as the board may be unattended in the field and rebooting may be a better approach. The bootloader may also benefit from this new property as it can check the SoC temperature and in case the temperature is above the critical point, it can trigger a shutdown or reboot accordingly. Signed-off-by: Fabio Estevam Reviewed-by: Krzysztof Kozlowski --- Changes since v8: - Go back to putting critical-action as a thermal-zone property. (Daniel) .../devicetree/bindings/thermal/thermal-zones.yaml | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/Documentation/devicetree/bindings/thermal/thermal-zones.yaml b/Documentation/devicetree/bindings/thermal/thermal-zones.yaml index 4f3acdc4dec0..c2e4d28f885b 100644 --- a/Documentation/devicetree/bindings/thermal/thermal-zones.yaml +++ b/Documentation/devicetree/bindings/thermal/thermal-zones.yaml @@ -75,6 +75,15 @@ patternProperties: framework and assumes that the thermal sensors in this zone support interrupts. + critical-action: + $ref: /schemas/types.yaml#/definitions/string + description: + The action the OS should perform after the critical temperature is reached. + + enum: + - shutdown + - reboot + thermal-sensors: $ref: /schemas/types.yaml#/definitions/phandle-array maxItems: 1 From patchwork Sun Oct 1 03:00:13 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Fabio Estevam X-Patchwork-Id: 13405274 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by smtp.lore.kernel.org (Postfix) with ESMTP id 3361AE748F1 for ; Sun, 1 Oct 2023 03:00:31 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S230209AbjJADAb (ORCPT ); Sat, 30 Sep 2023 23:00:31 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:44140 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S229461AbjJADAa (ORCPT ); Sat, 30 Sep 2023 23:00:30 -0400 Received: from mail-pj1-x1033.google.com (mail-pj1-x1033.google.com [IPv6:2607:f8b0:4864:20::1033]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 7DCF1DD; Sat, 30 Sep 2023 20:00:28 -0700 (PDT) Received: by mail-pj1-x1033.google.com with SMTP id 98e67ed59e1d1-2791d5f1a09so844066a91.1; Sat, 30 Sep 2023 20:00:28 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1696129228; x=1696734028; darn=vger.kernel.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=iOU06e8PhnCbUTuWvgOQvWjBh3E5rw9a04k9RldGU5w=; b=NwOsiJOwYTSgh+JU0PCCzd39im7XRbI2BZ1uUjn9V7v80CB3rBFhn/DryoH8BNaciP WGGiP76t51NMoli0oKf1x5FKBQGXLCxZPqQ3Hw4xpYOct8MGgRJQ6rEYY6DsQB/etxtA KdVrinOJQU9gPujZk+51dO+qetNgZixfNuefOrApK2OyZavq3XqvIbp7qCragcVJRihA tL9I9SaY9zd1vanUZPJRM0x8oMvpRvZcWH4ISgtTjC++i8vuv6ZhGPI/ue4z5Gd0lGKr EOjFMN4YQRByWQ1M2HJ2FHTZpFzssGhn+BAq+RkiIDplQNPQmEyHewsbl352znA68Dnl /dfw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1696129228; x=1696734028; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=iOU06e8PhnCbUTuWvgOQvWjBh3E5rw9a04k9RldGU5w=; b=IsU7FKxYR/BXTo7sEnTpRCBrmBemwi+rDXxBqPmlOT/ZoPcH7M1zeOh/AqkrPfm8WH oLhSKFpwbSccBluW++AwRdw0f4NeloMJjRGgCyqtCNPRtWMikOz1eHQkbo8obKWbezX/ 7+f+Sh+AHyCSgfXfnL//OWtxYP/P/ayakuhzI09Poz+9f82W1G3zH6S+sR7Cg68g9GGP 513BnGj22i3n5XM5hOjTE2WdUh7O2+TaHsxutdqBD0RqaWzjy6f7ftWBJCvExT/IXsa7 0berGyCePWERT9DFS2yyUbHj2M6qXoO9JhmfNWGkKK+tZ3j8ec+4m5VseUwSw6urCDIL PqYw== X-Gm-Message-State: AOJu0YwYcIhl/mB3Te1mas41i5CXUhfW1STUBr4sBekeiaM3wjsXDT/H mG6dN9g1v82/Kn8V6gjkaPEJjkYD3gU= X-Google-Smtp-Source: AGHT+IFnyrvlSvLus7XvJvl+rAgv+NDzgXNSFc2GmZOIv6mqEQCkTPeQd+wNFmnYWV8ViRbyNW4GCA== X-Received: by 2002:a17:903:1c6:b0:1c0:bf60:ba82 with SMTP id e6-20020a17090301c600b001c0bf60ba82mr9419293plh.5.1696129227714; Sat, 30 Sep 2023 20:00:27 -0700 (PDT) Received: from fabio-Precision-3551.. ([2804:14c:485:4b61:355a:d2a5:90:39d5]) by smtp.gmail.com with ESMTPSA id az4-20020a170902a58400b001b8baa83639sm6801788plb.200.2023.09.30.20.00.24 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sat, 30 Sep 2023 20:00:27 -0700 (PDT) From: Fabio Estevam To: daniel.lezcano@linaro.org Cc: rafael@kernel.org, krzysztof.kozlowski+dt@linaro.org, robh+dt@kernel.org, conor+dt@kernel.org, linux-pm@vger.kernel.org, devicetree@vger.kernel.org, Fabio Estevam Subject: [PATCH v9 2/3] reboot: Introduce thermal_zone_device_critical_reboot() Date: Sun, 1 Oct 2023 00:00:13 -0300 Message-Id: <20231001030014.1244633-2-festevam@gmail.com> X-Mailer: git-send-email 2.34.1 In-Reply-To: <20231001030014.1244633-1-festevam@gmail.com> References: <20231001030014.1244633-1-festevam@gmail.com> MIME-Version: 1.0 Precedence: bulk List-ID: X-Mailing-List: linux-pm@vger.kernel.org From: Fabio Estevam Introduce thermal_zone_device_critical_reboot() to trigger an emergency reboot. It is a counterpart of thermal_zone_device_critical() with the difference that it will force a reboot instead of shutdown. The motivation for doing this is to allow the thermal subystem to trigger a reboot when the temperature reaches the critical temperature. Signed-off-by: Fabio Estevam --- Changes since v8: - Introduce thermal_zone_device_critical_reboot() to accomodate Daniel's suggestions. drivers/thermal/thermal_core.c | 19 +++++++++++++++++-- include/linux/reboot.h | 13 ++++++++++++- include/linux/thermal.h | 1 + kernel/reboot.c | 32 +++++++++++++++++++------------- 4 files changed, 49 insertions(+), 16 deletions(-) diff --git a/drivers/thermal/thermal_core.c b/drivers/thermal/thermal_core.c index 38d393f139d8..277aafb294db 100644 --- a/drivers/thermal/thermal_core.c +++ b/drivers/thermal/thermal_core.c @@ -313,21 +313,36 @@ static void handle_non_critical_trips(struct thermal_zone_device *tz, int trip) def_governor->throttle(tz, trip); } -void thermal_zone_device_critical(struct thermal_zone_device *tz) +static void thermal_zone_device_shutdown(struct thermal_zone_device *tz, bool shutdown) { /* * poweroff_delay_ms must be a carefully profiled positive value. * Its a must for forced_emergency_poweroff_work to be scheduled. */ int poweroff_delay_ms = CONFIG_THERMAL_EMERGENCY_POWEROFF_DELAY_MS; + static const char *msg = "Temperature too high"; dev_emerg(&tz->device, "%s: critical temperature reached, " "shutting down\n", tz->type); - hw_protection_shutdown("Temperature too high", poweroff_delay_ms); + if (shutdown) + hw_protection_shutdown(msg, poweroff_delay_ms); + else + hw_protection_reboot(msg, poweroff_delay_ms); +} + +void thermal_zone_device_critical(struct thermal_zone_device *tz) +{ + thermal_zone_device_shutdown(tz, true); } EXPORT_SYMBOL(thermal_zone_device_critical); +void thermal_zone_device_critical_reboot(struct thermal_zone_device *tz) +{ + thermal_zone_device_shutdown(tz, false); +} +EXPORT_SYMBOL(thermal_zone_device_critical_reboot); + static void handle_critical_trips(struct thermal_zone_device *tz, int trip, int trip_temp, enum thermal_trip_type trip_type) { diff --git a/include/linux/reboot.h b/include/linux/reboot.h index c4cc3b89ced1..4683e117c753 100644 --- a/include/linux/reboot.h +++ b/include/linux/reboot.h @@ -177,7 +177,18 @@ void ctrl_alt_del(void); extern void orderly_poweroff(bool force); extern void orderly_reboot(void); -void hw_protection_shutdown(const char *reason, int ms_until_forced); + +void __hw_protection_shutdown(const char *reason, int ms_until_forced, bool shutdown); + +static inline void hw_protection_reboot(const char *reason, int ms_until_forced) +{ + __hw_protection_shutdown(reason, ms_until_forced, false); +} + +static inline void hw_protection_shutdown(const char *reason, int ms_until_forced) +{ + __hw_protection_shutdown(reason, ms_until_forced, true); +} /* * Emergency restart, callable from an interrupt handler. diff --git a/include/linux/thermal.h b/include/linux/thermal.h index 6cfcae22ba12..c5ebb44ae8a6 100644 --- a/include/linux/thermal.h +++ b/include/linux/thermal.h @@ -353,6 +353,7 @@ int thermal_zone_get_offset(struct thermal_zone_device *tz); int thermal_zone_device_enable(struct thermal_zone_device *tz); int thermal_zone_device_disable(struct thermal_zone_device *tz); void thermal_zone_device_critical(struct thermal_zone_device *tz); +void thermal_zone_device_critical_reboot(struct thermal_zone_device *tz); #else static inline struct thermal_zone_device *thermal_zone_device_register_with_trips( const char *type, diff --git a/kernel/reboot.c b/kernel/reboot.c index 395a0ea3c7a8..8b3010b88ed6 100644 --- a/kernel/reboot.c +++ b/kernel/reboot.c @@ -957,21 +957,25 @@ static void hw_failure_emergency_poweroff(int poweroff_delay_ms) } /** - * hw_protection_shutdown - Trigger an emergency system poweroff + * __hw_protection_shutdown - Trigger an emergency system shutdown or reboot * - * @reason: Reason of emergency shutdown to be printed. - * @ms_until_forced: Time to wait for orderly shutdown before tiggering a - * forced shudown. Negative value disables the forced - * shutdown. + * @reason: Reason of emergency shutdown or reboot to be printed. + * @ms_until_forced: Time to wait for orderly shutdown or reboot before + * triggering it. Negative value disables the forced + * shutdown or reboot. + * @shutdown: If true, indicates that a shutdown will happen + * after the critical tempeature is reached. + * If false, indicates that a reboot will happen + * after the critical tempeature is reached. * - * Initiate an emergency system shutdown in order to protect hardware from - * further damage. Usage examples include a thermal protection or a voltage or - * current regulator failures. - * NOTE: The request is ignored if protection shutdown is already pending even - * if the previous request has given a large timeout for forced shutdown. + * Initiate an emergency system shutdown or reboot in order to protect + * hardware from further damage. Usage examples include a thermal protection. + * NOTE: The request is ignored if protection shutdown or reboot is already + * pending even if the previous request has given a large timeout for forced + * shutdown/reboot. * Can be called from any context. */ -void hw_protection_shutdown(const char *reason, int ms_until_forced) +void __hw_protection_shutdown(const char *reason, int ms_until_forced, bool shutdown) { static atomic_t allow_proceed = ATOMIC_INIT(1); @@ -986,9 +990,11 @@ void hw_protection_shutdown(const char *reason, int ms_until_forced) * orderly_poweroff failure */ hw_failure_emergency_poweroff(ms_until_forced); - orderly_poweroff(true); + if (shutdown) + orderly_poweroff(true); + else + orderly_reboot(); } -EXPORT_SYMBOL_GPL(hw_protection_shutdown); static int __init reboot_setup(char *str) { From patchwork Sun Oct 1 03:00:14 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Fabio Estevam X-Patchwork-Id: 13405275 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by smtp.lore.kernel.org (Postfix) with ESMTP id 6424AE748F1 for ; Sun, 1 Oct 2023 03:00:37 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S233822AbjJADAh (ORCPT ); Sat, 30 Sep 2023 23:00:37 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:44154 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S229461AbjJADAg (ORCPT ); Sat, 30 Sep 2023 23:00:36 -0400 Received: from mail-pl1-x629.google.com (mail-pl1-x629.google.com [IPv6:2607:f8b0:4864:20::629]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 775DCDA; Sat, 30 Sep 2023 20:00:31 -0700 (PDT) Received: by mail-pl1-x629.google.com with SMTP id d9443c01a7336-1c72e235debso9342365ad.0; Sat, 30 Sep 2023 20:00:31 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1696129231; x=1696734031; darn=vger.kernel.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=47dEmse1a5JMP/Qf4cGHMz4JqlEGe3n1j3cZCwSDWPw=; b=PC9x+UTDkQH/kPPQNpOs+zv9NfYp74lxerQKQACjiFdMalzEV6vuYLe1j38QrPJncx SHHFCRLddtiDcxIMD1V+9/oeofeSVmE/K3K5yO2wujykqdFPKJbJaGP1GSTmnmg44cjd oP9KTlsd04Yflfj6B+Qy4fitb269eI8khCXI2LWONTNG1xFK8duDz+KJkYeR0MKaf9wG ol/W5f0zHv1vJATnSyw6+stoMlB+Nqv5rfOC5KPmZICVT7uelTBVJUXM0vBcJ01oqlBo O34Y4Uba65Q3abtMR9ZmmmcUUO7yTQxek67f0uehl6YC3M6p4q0uphpiReo+0UjDtZOq /tYQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1696129231; x=1696734031; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=47dEmse1a5JMP/Qf4cGHMz4JqlEGe3n1j3cZCwSDWPw=; b=RjRDBANKvMg97rX2PPtLwxVulAC4KYl7iaKnseUF8lsdGcX0xp2ggFWYm0GxxOt87X AIe0QeZ3cJgGJNZiXgyHJ4RhGLr3mtJn7VT7cbTbXnwsoVL0GuydP/rpe9PPdyhdGeyZ bTwN0aCNbjuOvQpht47Wq/CRZykBRSf9eJHUItSt6nBsg7QJzckWWcJlW/UKYyaFmYoZ RRD0NkHEUiZF8lZtEB84DS6nBCNRDgep90i22b4CtJQ78zyqPR0we/sSfEoHICjrXtPM MO3aUna920/AQJHMhNos+J98GYFbfrvVQlhQ99V8TIer55QL4RC3a0fB3yXMJDgiVWpo viiQ== X-Gm-Message-State: AOJu0YwMFwkXIZKGSldWivE+kWMio5rRqWCD/Y5NRQuLZtcuiX1Auw+A pZ7uDeGddS08GjWxypKx1vw7dPxXgvs= X-Google-Smtp-Source: AGHT+IGVyovU5d0ySaMIGltgKTxvHOQy+zCkoECdIDZR4mm6kpi7TxiSnh77OTvWIpfzw1O48wA7cw== X-Received: by 2002:a17:902:da8d:b0:1c1:fbec:bc3f with SMTP id j13-20020a170902da8d00b001c1fbecbc3fmr9147248plx.5.1696129230855; Sat, 30 Sep 2023 20:00:30 -0700 (PDT) Received: from fabio-Precision-3551.. ([2804:14c:485:4b61:355a:d2a5:90:39d5]) by smtp.gmail.com with ESMTPSA id az4-20020a170902a58400b001b8baa83639sm6801788plb.200.2023.09.30.20.00.28 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sat, 30 Sep 2023 20:00:30 -0700 (PDT) From: Fabio Estevam To: daniel.lezcano@linaro.org Cc: rafael@kernel.org, krzysztof.kozlowski+dt@linaro.org, robh+dt@kernel.org, conor+dt@kernel.org, linux-pm@vger.kernel.org, devicetree@vger.kernel.org, Fabio Estevam Subject: [PATCH v9 3/3] thermal: thermal_core: Allow rebooting after critical temp Date: Sun, 1 Oct 2023 00:00:14 -0300 Message-Id: <20231001030014.1244633-3-festevam@gmail.com> X-Mailer: git-send-email 2.34.1 In-Reply-To: <20231001030014.1244633-1-festevam@gmail.com> References: <20231001030014.1244633-1-festevam@gmail.com> MIME-Version: 1.0 Precedence: bulk List-ID: X-Mailing-List: linux-pm@vger.kernel.org From: Fabio Estevam Currently, the default mechanism is to trigger a shutdown after the critical temperature is reached. In some embedded cases, such behavior does not suit well, as the board may be unattended in the field and rebooting may be a better approach. The bootloader may also check the temperature and only allow the boot to proceed when the temperature is below a certain threshold. Introduce support for allowing a reboot to be triggered after the critical temperature is reached. If the "critical-action" devicetree property is not found, fall back to the shutdown action to preserve the existing default behavior. If a custom ops->critical exists, then it takes preference over critical-actions. Tested on a i.MX8MM board with the following devicetree changes: thermal-zones { cpu-thermal { critical-action = "reboot"; }; }; Signed-off-by: Fabio Estevam --- Changes since v8: - Simplify the logic for calling thermal_zone_device_critical_reboot(). (Daniel). drivers/thermal/thermal_of.c | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/drivers/thermal/thermal_of.c b/drivers/thermal/thermal_of.c index 1e0655b63259..4d6c22e0ed85 100644 --- a/drivers/thermal/thermal_of.c +++ b/drivers/thermal/thermal_of.c @@ -475,6 +475,7 @@ static struct thermal_zone_device *thermal_of_zone_register(struct device_node * struct thermal_zone_params tzp = {}; struct thermal_zone_device_ops *of_ops; struct device_node *np; + const char *action; int delay, pdelay; int ntrips, mask; int ret; @@ -511,6 +512,11 @@ static struct thermal_zone_device *thermal_of_zone_register(struct device_node * mask = GENMASK_ULL((ntrips) - 1, 0); + ret = of_property_read_string(np, "critical-action", &action); + if (!ret) + if (!of_ops->critical && !strcasecmp(action, "reboot")) + of_ops->critical = thermal_zone_device_critical_reboot; + tz = thermal_zone_device_register_with_trips(np->name, trips, ntrips, mask, data, of_ops, &tzp, pdelay, delay);