From patchwork Sun Nov 19 13:05:48 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Fabio Estevam X-Patchwork-Id: 13460455 X-Patchwork-Delegate: daniel.lezcano@linaro.org 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 82647C54E76 for ; Sun, 19 Nov 2023 13:06:02 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S230434AbjKSNGD (ORCPT ); Sun, 19 Nov 2023 08:06:03 -0500 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:46462 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S230155AbjKSNGD (ORCPT ); Sun, 19 Nov 2023 08:06:03 -0500 Received: from mail-pf1-x432.google.com (mail-pf1-x432.google.com [IPv6:2607:f8b0:4864:20::432]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id CD12E194; Sun, 19 Nov 2023 05:05:58 -0800 (PST) Received: by mail-pf1-x432.google.com with SMTP id d2e1a72fcca58-6bbfb8f7ac4so992244b3a.0; Sun, 19 Nov 2023 05:05:58 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1700399158; x=1701003958; 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=yRMmV6zXIBxin2vWyb3fCap7O+hhrgMO3NT51kQpsnI=; b=mDBIVVNKrR9k8vwM0FXck+Cwy4Y7dZq7W6iAEfe08luDOMpnMuRJhwmArsCruovXDo and+yZjb4H39OR/zrJ/CRKcDEj0ZJheksV+AqCLm6+oFJcpmlxIuEt2TTqjLECE+raP8 xI5S8QrlFRh6HnBoo5v/a9oyelo3YDUdaaoIoaaTn0C9OGLyj7MbuxfOvxtBqxNf7vRV +SrQsWV0454vfpit6YWUk/Kq6OOXIFqFfBgGnnSnvJ8VZ+7pA1I+p9dhWbyalWDD6jXf 7Im4ZI37qz786ZPL5lLSqdsIXnZ7/rEO5538ux/wZpS6scP+s2nhGhw28wL2Qumg5BAK R2+g== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1700399158; x=1701003958; 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=yRMmV6zXIBxin2vWyb3fCap7O+hhrgMO3NT51kQpsnI=; b=buB4GDyt6rahVZKWP3sn5Ln6deTt07+QftM4Xp2sFraGkGITfuo0VGwftaOkuL9w5H wORNXzFpbH5/xVFdiN+2ufZuFn7APW9VCPDP5wxtAH4aqeey76yeIt9d0si9tv5qdF3G aXBpnfUAmzzk4euTN7TnQPcGrcCsmCBq8LrsIYe4vlW1pa5dD32lYR2/to2dYwowjNEt ZSm2PzujpHwWExquYVkHhdZE4XsbEGakGKK5JzEkMcmLgULQbEt1AfodB/tE/uu6O1FX cnm/mpybye8M9E8ZoEzE79Kvdiwrat5D7oNtDaBUYnAW9hS22DsXz1l0ta01vOTPTGX3 +KKQ== X-Gm-Message-State: AOJu0YxvBRvk39+3/URFJx+0orNEND9wrp/TIQhi+ofT+Hft5jEh1A93 IAMYJ61Ia31YUuED/CR4ye4= X-Google-Smtp-Source: AGHT+IF4m/bfIYQpQZf9oFAinEAJ7s3bbuDzUSlve8kYx8ux9lus7RxdWF0dp8aC+Ku55+cxXCJOxg== X-Received: by 2002:a17:902:f688:b0:1c3:a4f2:7c99 with SMTP id l8-20020a170902f68800b001c3a4f27c99mr6505219plg.4.1700399158180; Sun, 19 Nov 2023 05:05:58 -0800 (PST) Received: from fabio-Precision-3551.. ([2804:14c:485:4b61:8afe:6d39:e955:7d2a]) by smtp.gmail.com with ESMTPSA id ik14-20020a170902ab0e00b001bde65894c8sm4433696plb.268.2023.11.19.05.05.54 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sun, 19 Nov 2023 05:05:57 -0800 (PST) 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, mazziesaccount@gmail.com, linux-pm@vger.kernel.org, devicetree@vger.kernel.org, Fabio Estevam , Krzysztof Kozlowski Subject: [PATCH v11 1/4] dt-bindings: thermal-zones: Document critical-action Date: Sun, 19 Nov 2023 10:05:48 -0300 Message-Id: <20231119130551.2416869-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 v10: - None .../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 4a8dabc48170..dbd52620d293 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 Sun Nov 19 13:05:49 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Fabio Estevam X-Patchwork-Id: 13460456 X-Patchwork-Delegate: daniel.lezcano@linaro.org 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 53C44C072A2 for ; Sun, 19 Nov 2023 13:06:04 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S230493AbjKSNGG (ORCPT ); Sun, 19 Nov 2023 08:06:06 -0500 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:46464 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S230155AbjKSNGF (ORCPT ); Sun, 19 Nov 2023 08:06:05 -0500 Received: from mail-pf1-x42b.google.com (mail-pf1-x42b.google.com [IPv6:2607:f8b0:4864:20::42b]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id BAC8D138; Sun, 19 Nov 2023 05:06:01 -0800 (PST) Received: by mail-pf1-x42b.google.com with SMTP id d2e1a72fcca58-6cb79883b7fso155922b3a.1; Sun, 19 Nov 2023 05:06:01 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1700399161; x=1701003961; 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=ENUasGHTRIrAkUvNkBNrZAWbqtv5P6bCOPtQDUVFnSM=; b=Xx5jiKa7ScQ2H1/nDoOobviettzE49/94WEXlL3rhNNaCmA5LSuxFBg94p2wgISfaC OX0oho6Ey86HiZs6x/Sm8U6UQ0dLDm9dHNSvU2WHzzEtknNF8BhipUp5kRiQNC635ey9 rJbaiqTJNCi3bTHgS5ttikwo9TfmBTpTquEx7Y39NsTOkBREuee4mGhQWFQSVx4MUxHW lO4/bSgsydaEwG23Z1fOSzWh4oUJHLMT6PmEJifAZIBiqfZbBWhHTmwHr6UpfTGTjZ3+ mZtgOD7R+I68lAgFvHZ7SK86xSmV+7uGYDjxP7y6szBqDWEk5gsdDV5lM4dvQseRsDCb vFlQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1700399161; x=1701003961; 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=ENUasGHTRIrAkUvNkBNrZAWbqtv5P6bCOPtQDUVFnSM=; b=bFaNaeXh78sRzZJU3VIoWmLDQS4ZpR138XS2U9SsenM41EmyPrGnw+kxaeJ4Eh8VjN l4bzUz52pc4X0VAs/XNdIeKWF329rzV55ALrL0ZA8yOpFoJ6AM8pZRtGEVe8LZLSVuTO k5MiA07S5GaxscIbSzcLiHYvTHct8UJSry05rzTIIViqusGi1BJqZYwwH17u1HtUFNc4 6d6y7Ohi49JtIxtstueL0Lh3p6aRJHmXaiVtwtKi3G6OAX+6UHMJ45rB2O+YBZd/a8O0 ZnZBijFxd040auE0rJ5aT2ZkNtHN3Ol/IRrS23tNEU3gXvekKJZWCCzMVPlSNt4fNtPy rnfQ== X-Gm-Message-State: AOJu0YzF5lGGPVoH7wOdDiG3QU0l870xG4u5/hYihfedE/Z1OUlU24Bq EvWAl3hJqHXEP7qbpxXf81c= X-Google-Smtp-Source: AGHT+IFKtWLk1jBgzeZgTFpvbr1KgVTbLNvKSynR52IsQ7v9P4YfG7STY3NV3MRnMlZ2RHiroW6BSQ== X-Received: by 2002:a17:903:2448:b0:1ce:ca8:74d5 with SMTP id l8-20020a170903244800b001ce0ca874d5mr6602177pls.1.1700399161137; Sun, 19 Nov 2023 05:06:01 -0800 (PST) Received: from fabio-Precision-3551.. ([2804:14c:485:4b61:8afe:6d39:e955:7d2a]) by smtp.gmail.com with ESMTPSA id ik14-20020a170902ab0e00b001bde65894c8sm4433696plb.268.2023.11.19.05.05.58 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sun, 19 Nov 2023 05:06:00 -0800 (PST) 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, mazziesaccount@gmail.com, linux-pm@vger.kernel.org, devicetree@vger.kernel.org, Fabio Estevam Subject: [PATCH v11 2/4] thermal_core: Prepare for introduction of thermal reboot Date: Sun, 19 Nov 2023 10:05:49 -0300 Message-Id: <20231119130551.2416869-2-festevam@gmail.com> X-Mailer: git-send-email 2.34.1 In-Reply-To: <20231119130551.2416869-1-festevam@gmail.com> References: <20231119130551.2416869-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 v10: - None 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 9c17d35ccbbd..8c808ff9ddfe 100644 --- a/drivers/thermal/thermal_core.c +++ b/drivers/thermal/thermal_core.c @@ -314,18 +314,24 @@ static void handle_non_critical_trips(struct thermal_zone_device *tz, 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 c3a3b82c4f64..07eb6537ed8b 100644 --- a/kernel/reboot.c +++ b/kernel/reboot.c @@ -970,7 +970,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 @@ -984,7 +984,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); @@ -999,9 +999,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 Sun Nov 19 13:05: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: 13460457 X-Patchwork-Delegate: daniel.lezcano@linaro.org 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 1A7F7C072A2 for ; Sun, 19 Nov 2023 13:06:08 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S231154AbjKSNGJ (ORCPT ); Sun, 19 Nov 2023 08:06:09 -0500 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:46486 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S230155AbjKSNGI (ORCPT ); Sun, 19 Nov 2023 08:06:08 -0500 Received: from mail-pl1-x62c.google.com (mail-pl1-x62c.google.com [IPv6:2607:f8b0:4864:20::62c]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id BBB18B9; Sun, 19 Nov 2023 05:06:04 -0800 (PST) Received: by mail-pl1-x62c.google.com with SMTP id d9443c01a7336-1ce6059c2bbso3643675ad.1; Sun, 19 Nov 2023 05:06:04 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1700399164; x=1701003964; 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=TGau2wnG9D3Hr8rRxRGVzQVzsLMJnulDUCmg/9Pyeu8=; b=fzSyBjPzzcswTNK4Wp6LfMGwj6SKoSuMUy+8Navza01JwJq+SppYUw9mmCKMNn+0mD K8wSUZVUqRWLJNimcDfS5IW6SwhHdNVZHWjJHjc4B8mySpvmvrqiI0OnDTC0/lS46qfZ eW/N24XHiTtYQqLR4SZVVhllbPUZGkKyZpxAhqc1SiA2qH/tBUuePL00dr+EJRG1yRb8 AWK06StYADGXaAxajws3wYkno2hz/VTnswnxjZIFJHXIGrUs738ydCbrRHlFbO+jiNdw hCGNi/n3x90Y5WVw4K80qL453lO4/2Iuf0/a0gJ2Ot3zOWWorR8wNGb39SLm7v15+Q6f W9pg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1700399164; x=1701003964; 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=TGau2wnG9D3Hr8rRxRGVzQVzsLMJnulDUCmg/9Pyeu8=; b=kr37/8ap6OY9yQNNtKrMvHARblAPIXOFRJAww94SqVbopIgckfY5cfhEG+lgtzuGGe WjUTn8RRJzSpYrZ/5dP7tJKJiKcMtHByUQILheCEzRuzQjQnXtaXZ31dCfCAWzBqtO34 NR2on7JlO91dKowlnYdlYMz90amfNzRWAZMRz9qv95qZlg+7uhnXGr7QDexVWUEoU9uk /+MhS3X+VilpC4LZeiXHpBtGAicbeWQ88LCC3ouhlGJAUx2pnRi2TplszJrWZUAoJABF pzx6kDNFTLeRuSzT72UExCzn0xiQ37OMkbTeIiAS6K5sD7spvsM3rH2gbG4TM0lidu3J YWjA== X-Gm-Message-State: AOJu0YyKyNcBY3mMBGK0B7txaL2wTQRBaU7V+q7y/0RK33JzTb7A96H7 iF7iNLivcL/lokKd5EKQyEA= X-Google-Smtp-Source: AGHT+IE2SBSpeJ/QiT6SvHEh/U2Ku9PmI27Y8HMoM9t35Tz8ZawkpZ7SFrFXpzH+gBXAr6hkk9lbmg== X-Received: by 2002:a17:902:e892:b0:1ce:5b6e:bad8 with SMTP id w18-20020a170902e89200b001ce5b6ebad8mr6527572plg.6.1700399164073; Sun, 19 Nov 2023 05:06:04 -0800 (PST) Received: from fabio-Precision-3551.. ([2804:14c:485:4b61:8afe:6d39:e955:7d2a]) by smtp.gmail.com with ESMTPSA id ik14-20020a170902ab0e00b001bde65894c8sm4433696plb.268.2023.11.19.05.06.01 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sun, 19 Nov 2023 05:06:03 -0800 (PST) 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, mazziesaccount@gmail.com, linux-pm@vger.kernel.org, devicetree@vger.kernel.org, Fabio Estevam Subject: [PATCH v11 3/4] reboot: Introduce thermal_zone_device_critical_reboot() Date: Sun, 19 Nov 2023 10:05:50 -0300 Message-Id: <20231119130551.2416869-3-festevam@gmail.com> X-Mailer: git-send-email 2.34.1 In-Reply-To: <20231119130551.2416869-1-festevam@gmail.com> References: <20231119130551.2416869-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 v10: - Rebased against 6.7-rc1 and fixed a conflict. 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 8c808ff9ddfe..1c735f858e50 100644 --- a/drivers/thermal/thermal_core.c +++ b/drivers/thermal/thermal_core.c @@ -327,6 +327,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) @@ -335,6 +337,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, const struct thermal_trip *trip) { 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 cee814d5d1ac..3644326b18ac 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 07eb6537ed8b..f76814037f41 100644 --- a/kernel/reboot.c +++ b/kernel/reboot.c @@ -970,19 +970,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) { @@ -1001,6 +1004,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 Sun Nov 19 13:05: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: 13460458 X-Patchwork-Delegate: daniel.lezcano@linaro.org 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 0CA36C072A2 for ; Sun, 19 Nov 2023 13:06:14 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S231185AbjKSNGP (ORCPT ); Sun, 19 Nov 2023 08:06:15 -0500 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:42496 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S230155AbjKSNGP (ORCPT ); Sun, 19 Nov 2023 08:06:15 -0500 Received: from mail-pf1-x434.google.com (mail-pf1-x434.google.com [IPv6:2607:f8b0:4864:20::434]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id ECA82182; Sun, 19 Nov 2023 05:06:07 -0800 (PST) Received: by mail-pf1-x434.google.com with SMTP id d2e1a72fcca58-6bcdfcde944so1045319b3a.1; Sun, 19 Nov 2023 05:06:07 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1700399167; x=1701003967; 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=A09XQ/iM8ir9KSsU7sYyrVg8iTGWGF8CT8MAp5IDCU8=; b=CnbjXPFYRERgcAbgDuLwh8bsrlHIcCtluP8c9G9x4Ah3yzQjqfUrTPu7RYesp+qWLR zO/8U2JE/oiJ2J7d5liRqtfWO9cZixZbHyOtZP26okN1tR4P3GK8bwS830Myn9dJihKq NY/0T4g73T5IZjkoG81Mam6gf1fYAMTEwb7PXWci+p8Ge/88BjxN1Q/tRwt2EXAmXuZt /qOpchCTsEGlgPkVzs4xOl8UJg2fymUHm9Xt5iK21STQDVCaCRRLkvWbghQciLaN896d Zlug0sPNp3/+knguZI2OnEeJoTfLyIR60Ka+bFQ5mB7zwpmcE/J5BiVRsDkREHk3nTbQ AZEw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1700399167; x=1701003967; 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=A09XQ/iM8ir9KSsU7sYyrVg8iTGWGF8CT8MAp5IDCU8=; b=i4XC2xH8mGnkuwkKa+KK4/H+d7r3vZYIBvmhULgM3cE6CG3IJ0OqrpKt5DzGkjIdpt vL2WqwEL09rjK9cjh8afi+qml8jeMnPA+HChOwRJYycCj0pwl8VtwFpj8Aaf9MscMWLP g38QV+X1/hdp2zy8ym2odYd0uUZQIy91a7ObfkVNfvvodKmLIji5BAjItHLcLrA5FvaB aSzq3m+rY1vovgpeWHaM+vYEGRjIRFudz6FbdcZnqdPDhCiWCaE40ddi6uFRcLHpKdYX Bzt/mc7nnTZyJBisv2MpgT4JyFGKAxzMWbhiFa4/atVKQ2b6LoL9M+7Vk6o8spbtpbCR rAyg== X-Gm-Message-State: AOJu0YzI7bXOlXaoZGudGahHKxZSbTIXUcrRE5W2xE6Ezkeoz9tnRFQm 8UWfyXXwIY05ihI/s6RIp+Q= X-Google-Smtp-Source: AGHT+IFQl4HKK6ys65WrWUwifoI4NPzXWOD3ZBmz1vcxHtWWOBZHlmULJn/28SRkbfmyA643+YWtzA== X-Received: by 2002:a17:902:f691:b0:1cf:55c7:94e9 with SMTP id l17-20020a170902f69100b001cf55c794e9mr3726397plg.2.1700399167219; Sun, 19 Nov 2023 05:06:07 -0800 (PST) Received: from fabio-Precision-3551.. ([2804:14c:485:4b61:8afe:6d39:e955:7d2a]) by smtp.gmail.com with ESMTPSA id ik14-20020a170902ab0e00b001bde65894c8sm4433696plb.268.2023.11.19.05.06.04 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sun, 19 Nov 2023 05:06:06 -0800 (PST) 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, mazziesaccount@gmail.com, linux-pm@vger.kernel.org, devicetree@vger.kernel.org, Fabio Estevam Subject: [PATCH v11 4/4] thermal: thermal_of: Allow rebooting after critical temp Date: Sun, 19 Nov 2023 10:05:51 -0300 Message-Id: <20231119130551.2416869-4-festevam@gmail.com> X-Mailer: git-send-email 2.34.1 In-Reply-To: <20231119130551.2416869-1-festevam@gmail.com> References: <20231119130551.2416869-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 v10: - None 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);