From patchwork Fri Oct 6 18:04:50 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Fabio Estevam X-Patchwork-Id: 730624 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 69DA0E81E1B for ; Fri, 6 Oct 2023 18:05:08 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S233161AbjJFSFH (ORCPT ); Fri, 6 Oct 2023 14:05:07 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:51250 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S233088AbjJFSFG (ORCPT ); Fri, 6 Oct 2023 14:05:06 -0400 Received: from mail-pl1-x634.google.com (mail-pl1-x634.google.com [IPv6:2607:f8b0:4864:20::634]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 11C22C6; Fri, 6 Oct 2023 11:05:04 -0700 (PDT) Received: by mail-pl1-x634.google.com with SMTP id d9443c01a7336-1c76ef40e84so4030915ad.0; Fri, 06 Oct 2023 11:05:04 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1696615503; x=1697220303; 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=hk+HMYmdsBSiI3wko9Q700ZyaXdyPZJ6QDWD9D8aPsE=; b=K9Adg8vA9t3KF6YnAlHcmvze4uzQeE8WNbQR9jcEVCgI3Gg9g6WcrkVdSBnLhy8LPd e6iIeH3FP1Thy11jhLYEZSnQUdaJWTM+fqE2PaDojgVKsT6zGL6XXXV8kMXCAqduGGLL 2jja62LPL3MicR9P/yqZjxYWF4fVaOjhbsKe6NG2AjwDXuYoy8ZeyVGK7CSm5VnylsKI 8jlHICXJX5/B7+47eUKb19g6YQylyUN2VR4M4ADeCKXSYb5tps8ZsThJ+aV/iEji1JwL An8iBSEpq5skaGBZ04xR731In5I11YaJ6hL3m76OviC6rzH/VqpKNQ2x885VhO6XFmt3 DXhg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1696615503; x=1697220303; 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=hk+HMYmdsBSiI3wko9Q700ZyaXdyPZJ6QDWD9D8aPsE=; b=G1ZHSKmkEarkDUuvP+w1njNaC/C+RExliIX02t62qgBL2kK94DBlkiDlHzYN4sCJdj mulUvHv9gIAojZXQoVeASdvkx4mdRH0UB4BbsoXNVceZ2AXDharuFncO6hAAGIHagR7s YFhlV/ifUf6DLRxjEpze06uFuqP3oBrx7Bk4edyjOiSkC1QNbBLFUK+vUuFXYcWDZisw jn4wcbLpB9P/RPSIJGWUp3Qy7JFUsWCuQRNZVMs+//u38kl6/j8KocgbqIu5dKVRQcdq hhM1tH9xJ6v1aCph9NoLjnNDd0s8yJC6Wyql9QUH+UFt6XAnNuscNuI4Ndx/fbGU/QE4 1z9Q== X-Gm-Message-State: AOJu0YxLCCul0EbjsaZ7gCWMGKNzB7k9ETgVcLE5SBYHNotmW1QGHJz/ trFgU++DAQbNAxQk2VWG7Najal+At50= X-Google-Smtp-Source: AGHT+IHMT9wrw66+siRHGmq7PA4f3HQHS7miNS9pasTVAwUJXcnycWb+h8LEPFjQaBHOtVVDF4qUGw== X-Received: by 2002:a17:902:dacd:b0:1b3:d8ac:8db3 with SMTP id q13-20020a170902dacd00b001b3d8ac8db3mr9336899plx.6.1696615502715; Fri, 06 Oct 2023 11:05:02 -0700 (PDT) Received: from fabio-Precision-3551.. ([2804:14c:485:4b61:d018:9da6:2e69:1658]) by smtp.gmail.com with ESMTPSA id f11-20020a17090274cb00b001bb1f0605b2sm4165355plt.214.2023.10.06.11.04.59 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 06 Oct 2023 11:05:02 -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 v10 1/4] dt-bindings: thermal-zones: Document critical-action Date: Fri, 6 Oct 2023 15:04:50 -0300 Message-Id: <20231006180453.2903342-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, in a desktop PC, it is desired that a shutdown happens after 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 v9: - Emphasize that critical-action should be used with care. (Daniel) .../bindings/thermal/thermal-zones.yaml | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) diff --git a/Documentation/devicetree/bindings/thermal/thermal-zones.yaml b/Documentation/devicetree/bindings/thermal/thermal-zones.yaml index 4f3acdc4dec0..f88fbafecb01 100644 --- a/Documentation/devicetree/bindings/thermal/thermal-zones.yaml +++ b/Documentation/devicetree/bindings/thermal/thermal-zones.yaml @@ -75,6 +75,22 @@ 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. + By default the system will shutdown as a safe action to prevent damage + to the hardware, if the property is not set. + The shutdown action should be always the default and preferred one. + Choose 'reboot' with care, as the hardware may be in thermal stress, + thus leading to infinite reboots that may cause damage to the hardware. + Make sure the firmware/bootloader will act as the last resort and take + over the thermal control. + + enum: + - shutdown + - reboot + thermal-sensors: $ref: /schemas/types.yaml#/definitions/phandle-array maxItems: 1 From patchwork Fri Oct 6 18:04:51 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Fabio Estevam X-Patchwork-Id: 730187 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 DD94CE81E1E for ; Fri, 6 Oct 2023 18:05:09 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S233088AbjJFSFJ (ORCPT ); Fri, 6 Oct 2023 14:05:09 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:51234 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S233172AbjJFSFI (ORCPT ); Fri, 6 Oct 2023 14:05:08 -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 D1A7AE9; Fri, 6 Oct 2023 11:05:06 -0700 (PDT) Received: by mail-pl1-x629.google.com with SMTP id d9443c01a7336-1c746bc3bceso4074415ad.1; Fri, 06 Oct 2023 11:05:06 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1696615506; x=1697220306; 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=h7Qu1YLA3o2ZOBF7t7w1ImFAGjG5u+c/lng1hyDe7ew=; b=OyOgDc3AGkboJ4gjx3uZ0YzF75y/B6wmvCJ7W0ZsEgQYzb0WY/vL6o1I6O2J2P7jl+ babUopwAsmTDQB9mT6hCcsxbu2jKBUkIRT/zncLdZ5TX3HcYiegZEJvYWkVF2GxK5nMG ZAOILbv8v2W9vbXNsUHM3BqDJNjMRuSLeURBJOI0Ssnc+d0GRmpCf8CrIQwzJ8AsgSHO L/I2GNBEyMWyO6D/xtVBLL7MGFQRUIq8Km0C2O8qJW+AkgQ89/5lbNtyut6ib2Rwn9q7 InSbDxi0IFAY4e66Ohm5NK9mGweo871lH+jnTUopS1DurJ09rps+XwEDkF2rfPWxre9y 5bjg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1696615506; x=1697220306; 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=h7Qu1YLA3o2ZOBF7t7w1ImFAGjG5u+c/lng1hyDe7ew=; b=JSddkdi4Of+Tjup6BkLUcDvG7NHhKptm0M9f+jI83cNjY8RA69V30NM+F42mvEDLp8 GHCZmyboNYl0mag94DdsF1yTzQwF3AQKV9FcmXA9AZZMOjWco05S/BXZoUDz7zD/bmaR 1ZIzqWgaHnm0G3pRXcD7TN2buLZNc5wCelUv1uoAA48r1bWFr+xpzN33Y9L5GAkyhUcX AqysmFMbOj7MM+Nzlf1adlD3CK2ljdkmTBPDeYe9krhJYcdN1KxDpBPHs89f/i9QthjR q9JMB1enGGLvxX02x+jAMtSS+twhjxXuaOPcACvOx4hcerUC19hZKnUFk3eI8ByIWZTq V/VQ== X-Gm-Message-State: AOJu0Yy2SqL2/bVLfQ+lAmghE96d82m6LnyAcvlyE6vhZPzZ/nFbBTcs nkry8rvoYXsgy7hQwRc0CHE= X-Google-Smtp-Source: AGHT+IGXP5HEfK9yYoeyDnLEQvWpKkd+eg/QL1jKgphHOAxo9Cs0Hm8JJaUwwgxkLOXUalLOJJeh7Q== X-Received: by 2002:a17:902:ec88:b0:1c0:bf60:ba4f with SMTP id x8-20020a170902ec8800b001c0bf60ba4fmr9297693plg.4.1696615506143; Fri, 06 Oct 2023 11:05:06 -0700 (PDT) Received: from fabio-Precision-3551.. ([2804:14c:485:4b61:d018:9da6:2e69:1658]) by smtp.gmail.com with ESMTPSA id f11-20020a17090274cb00b001bb1f0605b2sm4165355plt.214.2023.10.06.11.05.03 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 06 Oct 2023 11:05:05 -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 v10 2/4] thermal_core: Prepare for introduction of thermal reboot Date: Fri, 6 Oct 2023 15:04:51 -0300 Message-Id: <20231006180453.2903342-2-festevam@gmail.com> X-Mailer: git-send-email 2.34.1 In-Reply-To: <20231006180453.2903342-1-festevam@gmail.com> References: <20231006180453.2903342-1-festevam@gmail.com> MIME-Version: 1.0 Precedence: bulk List-ID: X-Mailing-List: linux-pm@vger.kernel.org From: Fabio Estevam Add some helper functions to make it easier introducing the support for thermal reboot. No functional change. Signed-off-by: Fabio Estevam --- Changes since v9: - Newly introduced. drivers/thermal/thermal_core.c | 14 ++++++++++---- include/linux/reboot.h | 7 ++++++- kernel/reboot.c | 8 ++++---- 3 files changed, 20 insertions(+), 9 deletions(-) diff --git a/drivers/thermal/thermal_core.c b/drivers/thermal/thermal_core.c index 45d0aa0b69b7..3184e9f2eadd 100644 --- a/drivers/thermal/thermal_core.c +++ b/drivers/thermal/thermal_core.c @@ -313,18 +313,24 @@ 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_halt(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; + const char *msg = "Temperature too high"; + + dev_emerg(&tz->device, "%s: critical temperature reached\n", tz->type); - dev_emerg(&tz->device, "%s: critical temperature reached, " - "shutting down\n", tz->type); + if (shutdown) + hw_protection_shutdown(msg, poweroff_delay_ms); +} - hw_protection_shutdown("Temperature too high", poweroff_delay_ms); +void thermal_zone_device_critical(struct thermal_zone_device *tz) +{ + thermal_zone_device_halt(tz, true); } EXPORT_SYMBOL(thermal_zone_device_critical); diff --git a/include/linux/reboot.h b/include/linux/reboot.h index c4cc3b89ced1..4586c663884e 100644 --- a/include/linux/reboot.h +++ b/include/linux/reboot.h @@ -177,7 +177,12 @@ 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_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/kernel/reboot.c b/kernel/reboot.c index 395a0ea3c7a8..b236c4c06bb3 100644 --- a/kernel/reboot.c +++ b/kernel/reboot.c @@ -957,7 +957,7 @@ 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 poweroff * * @reason: Reason of emergency shutdown to be printed. * @ms_until_forced: Time to wait for orderly shutdown before tiggering a @@ -971,7 +971,7 @@ static void hw_failure_emergency_poweroff(int poweroff_delay_ms) * if the previous request has given a large timeout for forced shutdown. * 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 +986,9 @@ 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); } -EXPORT_SYMBOL_GPL(hw_protection_shutdown); static int __init reboot_setup(char *str) { From patchwork Fri Oct 6 18:04:52 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Fabio Estevam X-Patchwork-Id: 730623 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 9C27DE81E1F for ; Fri, 6 Oct 2023 18:05:13 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S233173AbjJFSFM (ORCPT ); Fri, 6 Oct 2023 14:05:12 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:51380 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S233165AbjJFSFL (ORCPT ); Fri, 6 Oct 2023 14:05:11 -0400 Received: from mail-pl1-x62d.google.com (mail-pl1-x62d.google.com [IPv6:2607:f8b0:4864:20::62d]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 3D6DECE; Fri, 6 Oct 2023 11:05:10 -0700 (PDT) Received: by mail-pl1-x62d.google.com with SMTP id d9443c01a7336-1c45c45efeeso1439035ad.0; Fri, 06 Oct 2023 11:05:10 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1696615510; x=1697220310; 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=FXyPDavHOtQ7HLLH2RqJNaI3/l9BPsuhohNmiySwoOg=; b=i9d8EwqHSUuazqB0SGZ4P9g8bUdaE6MJJfcRHLUi/t54gh3XspZS/FsGR8q4gRxnib ewLR7ShkwhgX0cRvnm8IEyfD483z8m2HaoD+xp0bdyjAFN7/4PErytq8OxrhM8Ur4R9R 4tjqiNVttigVYwyvQROGYdpq1zYqu7btsw1cLoo6Pe0gicLC2Al7LAyit2si9o8rHS6a 5aZ2PK8xbsPrd0SZ8n96BLohokSSvCxiLCmU1iG51U2grNhjX/ZeYBejkepfHPNQZ8cN 1azewDAuC54p8Rt9qWcu+r1kDxmspcVVQIyLwhqcQYcSDEPP7rZRbGGr7kI4OXJXDULI 1OMg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1696615510; x=1697220310; 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=FXyPDavHOtQ7HLLH2RqJNaI3/l9BPsuhohNmiySwoOg=; b=EW1gpGgieU/tdvxI92Ra5us2IFh+KnRQiYFMG1Iy54yywXB+GtdwQmKSf8/p1Mvlx2 9uIrZz5+wsz/gtN5+iRGfxPJi0BDXZ+4gu5CvPj3h0WfQjGG58jDVHLuUqL2tZ3fo5yb oeH3EBl+mGA8lkNprXVYLgImpp+mmyCgkTe549/LBZ8uw9yvXDVaVV3xmLfZmW0ayfNq LM8rP9TYuwDhxDz96iQ6Cr0litToySsy/ublyWjZqV2KARjb0VTb65qQaznVXxoEKYie womEyC/sUsHz80QPMIjIDvR6GlamYEz5aRambRze/zsR2QgNytKSknEFwUw/5/32PX27 uB0w== X-Gm-Message-State: AOJu0YyKb/4M9MLM63BzLCiRLStmlAebsDm202CTCANRSR7D2oau6pQL 1l0C5oLJczB+/SJ1Iv24w2w= X-Google-Smtp-Source: AGHT+IG+WP0v8GL/FBPzLrUdKaQ7CC6xmIrILrkXK15KSSjE3UfRZRRlK4drATBHwMiY8mudNTpvUA== X-Received: by 2002:a17:902:e5d2:b0:1c4:1cd3:8062 with SMTP id u18-20020a170902e5d200b001c41cd38062mr9522994plf.2.1696615509539; Fri, 06 Oct 2023 11:05:09 -0700 (PDT) Received: from fabio-Precision-3551.. ([2804:14c:485:4b61:d018:9da6:2e69:1658]) by smtp.gmail.com with ESMTPSA id f11-20020a17090274cb00b001bb1f0605b2sm4165355plt.214.2023.10.06.11.05.06 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 06 Oct 2023 11:05:09 -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 v10 3/4] reboot: Introduce thermal_zone_device_critical_reboot() Date: Fri, 6 Oct 2023 15:04:52 -0300 Message-Id: <20231006180453.2903342-3-festevam@gmail.com> X-Mailer: git-send-email 2.34.1 In-Reply-To: <20231006180453.2903342-1-festevam@gmail.com> References: <20231006180453.2903342-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 v9: - Make it smaller after introducing the previous patch. (Daniel) drivers/thermal/thermal_core.c | 7 +++++++ include/linux/reboot.h | 5 +++++ include/linux/thermal.h | 1 + kernel/reboot.c | 27 ++++++++++++++++----------- 4 files changed, 29 insertions(+), 11 deletions(-) diff --git a/drivers/thermal/thermal_core.c b/drivers/thermal/thermal_core.c index 3184e9f2eadd..b92795529a53 100644 --- a/drivers/thermal/thermal_core.c +++ b/drivers/thermal/thermal_core.c @@ -326,6 +326,8 @@ static void thermal_zone_device_halt(struct thermal_zone_device *tz, bool shutdo 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) @@ -334,6 +336,11 @@ void thermal_zone_device_critical(struct thermal_zone_device *tz) } EXPORT_SYMBOL(thermal_zone_device_critical); +void thermal_zone_device_critical_reboot(struct thermal_zone_device *tz) +{ + thermal_zone_device_halt(tz, false); +} + 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 4586c663884e..abcdde4df697 100644 --- a/include/linux/reboot.h +++ b/include/linux/reboot.h @@ -179,6 +179,11 @@ extern void orderly_poweroff(bool force); extern void orderly_reboot(void); 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); diff --git a/include/linux/thermal.h b/include/linux/thermal.h index 6710a4ace992..a026ce390a87 100644 --- a/include/linux/thermal.h +++ b/include/linux/thermal.h @@ -361,6 +361,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 b236c4c06bb3..7bc01b38629a 100644 --- a/kernel/reboot.c +++ b/kernel/reboot.c @@ -957,19 +957,22 @@ 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. - * Can be called from any context. + * 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. */ void __hw_protection_shutdown(const char *reason, int ms_until_forced, bool shutdown) { @@ -988,6 +991,8 @@ void __hw_protection_shutdown(const char *reason, int ms_until_forced, bool shut hw_failure_emergency_poweroff(ms_until_forced); if (shutdown) orderly_poweroff(true); + else + orderly_reboot(); } static int __init reboot_setup(char *str) From patchwork Fri Oct 6 18:04:53 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Fabio Estevam X-Patchwork-Id: 730186 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 2E624E81E1E for ; Fri, 6 Oct 2023 18:05:17 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S233144AbjJFSFQ (ORCPT ); Fri, 6 Oct 2023 14:05:16 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:51440 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S233165AbjJFSFP (ORCPT ); Fri, 6 Oct 2023 14:05:15 -0400 Received: from mail-pl1-x62b.google.com (mail-pl1-x62b.google.com [IPv6:2607:f8b0:4864:20::62b]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 02D5CC6; Fri, 6 Oct 2023 11:05:14 -0700 (PDT) Received: by mail-pl1-x62b.google.com with SMTP id d9443c01a7336-1c746bc3bceso4074715ad.1; Fri, 06 Oct 2023 11:05:13 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1696615513; x=1697220313; 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=9GzLt7eqjSCCnRTgmtF1m2Nl7kCjjeUWS02UJrHNOb4=; b=IAyRYkOB3ZjINQMESzouL9O0XgQTk5YP8DxT6Z0iEfvnGAFqRjTBLtmqR6Lg9onik9 kpE1rKjq2fTdcFEx9CaGsPkA/Dv9S79+biP0YO0QDGm3OPUTzZX1DaIQVkqq2nkXwyvc 2ZUUdSKHgJlqhgj8e8RUiKsUtZNvg4Ac4oed6fOQCFUUIstTHnKU2FTIoQFsHSNSU8+i HWhHOFPVg5KUiWYITjdjASDfJAebrMVuSZqwwcdwpeE/YmD1yy4d7kUcn8zfSgXPC3hk S6F0AZwglQv2TvspquotNDCQF2AqxfIazxSoYS5vN8gZ/6og63NwrMdhNPYk8nz8mkde z5EA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1696615513; x=1697220313; 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=9GzLt7eqjSCCnRTgmtF1m2Nl7kCjjeUWS02UJrHNOb4=; b=Mimu1/6k2100LZA7xaCLmO35/s7dHXBbnZd59BcyWDMW7Xh/pW5ZdDGlHwqusFcPxA RgNalUOk31rGjPKhoODv5AXioKJAhqwz1CA0/ct8eMhrG1AQKrHiVjXc2jAF/HyeSz/p CkPDzb73vMeXH+JLvLW7x248y0z+Ys+xnF0rVYo068sTot37iwuA6zuXjB6hDGKtQ7/0 LjrLrPzg0UHIW09zBQfRC4whAHx3uppW24jUfNOsKiCnrleAgNkiV3LYgqwIvgitS7HV bNwf31PINljj70l9zJdGgHxezH5IfrLX9wipfCoql+dNRB0qNtHrHP4TECbj67T1rxEK YNPQ== X-Gm-Message-State: AOJu0YxMmfkPc7+/zOkphRyleB3bYZ+L7AO32H/Rf3+Yb+E3L2e1x+yU P05T5OQxIo0y9wIy7nppk5T5UQoOVHY= X-Google-Smtp-Source: AGHT+IHAjDxfF1dQpZF1YV7RdnNH3OLMGhipF0xm8+hRiswMOrfbOBgqkz6p6+vxaIsfd4wGO9P1Pw== X-Received: by 2002:a17:902:ec88:b0:1c0:bf60:ba4f with SMTP id x8-20020a170902ec8800b001c0bf60ba4fmr9297996plg.4.1696615512909; Fri, 06 Oct 2023 11:05:12 -0700 (PDT) Received: from fabio-Precision-3551.. ([2804:14c:485:4b61:d018:9da6:2e69:1658]) by smtp.gmail.com with ESMTPSA id f11-20020a17090274cb00b001bb1f0605b2sm4165355plt.214.2023.10.06.11.05.09 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 06 Oct 2023 11:05:12 -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 v10 4/4] thermal: thermal_of: Allow rebooting after critical temp Date: Fri, 6 Oct 2023 15:04:53 -0300 Message-Id: <20231006180453.2903342-4-festevam@gmail.com> X-Mailer: git-send-email 2.34.1 In-Reply-To: <20231006180453.2903342-1-festevam@gmail.com> References: <20231006180453.2903342-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 v9: - Fixed a typo in the Subject. 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);