From patchwork Sat Sep 16 01:49:26 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Fabio Estevam X-Patchwork-Id: 723839 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 A5805C46CA1 for ; Sat, 16 Sep 2023 01:50:44 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S235779AbjIPBuQ (ORCPT ); Fri, 15 Sep 2023 21:50:16 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:38796 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S237926AbjIPBtq (ORCPT ); Fri, 15 Sep 2023 21:49:46 -0400 Received: from mail-ot1-x333.google.com (mail-ot1-x333.google.com [IPv6:2607:f8b0:4864:20::333]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id DB96F1BF2; Fri, 15 Sep 2023 18:49:40 -0700 (PDT) Received: by mail-ot1-x333.google.com with SMTP id 46e09a7af769-6c0ab18e084so330684a34.1; Fri, 15 Sep 2023 18:49:40 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1694828980; x=1695433780; 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=/xuPSclHlLs4o7tZAEr9Oqaj9rM7BhYSGMKkn2Xlw7U=; b=IW61rrtjcpZefue1pw5RFD1yWu/DmKI2Irb6Emf05LKsij6wiq8BA61wzQdkRJeRtD j8/pfV7oklI6MO6qSvuIcDAEsmy93MsT/Ah7CGXtKPzqM+AsARtgvSuvDLUvqpuZ13fq aCU5KlIbobiV40kqH6Rmd2YB1fGKb/rDcGMumd0UVUnCHkm/bykY9NrUUUrUiRDBxbH+ hzTKQIBKq+FgbhUJTrotLQNhGeyev5UonxMXRSVorIcHng/JFD/WKkMZBgGGb26R1DSk ax72l7H/X5CHUqvmO46Ui5E6Sb3oJWxgT4PrG8o2r6NbO51NkLSZqjVeeTci9GAVUpc9 rQvQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1694828980; x=1695433780; 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=/xuPSclHlLs4o7tZAEr9Oqaj9rM7BhYSGMKkn2Xlw7U=; b=kpRSzLGYTmrVHiEbnrhYnGlaLQKREs4aQKxSQvi6gjvMkhS2+RSXOznv1Ub2v9lpQW mwStaoMneaM/Ze+URlTaxd57DgTw36G4Qs5/LIF25tSUgp6zTxqNzcU1u34MTe87jBhR cjCeMdVamiqE7yZMNrF6Xo/DF/CRJp3IaBkdcCjcXqZc4HvnAZ/wbGvuVW5sgj8xa5vg vUebj3LYiR2cdhTGv4/0nsx4cE6B1locT2cYKOZD6BWwTEeAONc4GRehApkI2VTkB0Xv mmb7epvZM0xHGdJhnbgpabI6xmwonozTPFW7mGfo4lTSXzBJUzGly8yrv42ApdjGcL+m VDOQ== X-Gm-Message-State: AOJu0YxqLisTG9NvY62SdX4Txhk0X6DOgJDBehJUmLGu/OPr8s0TzSCs VMIMUHpua9L89i7PTJ3YLmM= X-Google-Smtp-Source: AGHT+IEnrdg2UFlAMJmRKoqFTkmjZ8+iLTyvNwpjr/5YB7Y1QSm3vTF0XpBV41lXZwQbETA/e6c5WQ== X-Received: by 2002:a05:6870:4250:b0:1d5:bda7:132d with SMTP id v16-20020a056870425000b001d5bda7132dmr3393225oac.4.1694828980117; Fri, 15 Sep 2023 18:49:40 -0700 (PDT) Received: from fabio-Precision-3551.. ([2804:14c:485:4b61:bb17:c38c:aa6:be85]) by smtp.gmail.com with ESMTPSA id eg38-20020a05687098a600b001c4b473581fsm2519986oab.12.2023.09.15.18.49.36 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 15 Sep 2023 18:49:39 -0700 (PDT) From: Fabio Estevam To: rafael@kernel.org Cc: daniel.lezcano@linaro.org, amitk@kernel.org, rui.zhang@intel.com, linux-pm@vger.kernel.org, krzysztof.kozlowski+dt@linaro.org, robh+dt@kernel.org, conor+dt@kernel.org, devicetree@vger.kernel.org, Fabio Estevam , Krzysztof Kozlowski Subject: [PATCH v8 1/3] dt-bindings: thermal-zones: Document critical-action Date: Fri, 15 Sep 2023 22:49:26 -0300 Message-Id: <20230916014928.2848737-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 v7: - Made critical-action a property of the top-level thermal-zone node. (Rafael) .../devicetree/bindings/thermal/thermal-zones.yaml | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/Documentation/devicetree/bindings/thermal/thermal-zones.yaml b/Documentation/devicetree/bindings/thermal/thermal-zones.yaml index 4f3acdc4dec0..d28f3fe1045d 100644 --- a/Documentation/devicetree/bindings/thermal/thermal-zones.yaml +++ b/Documentation/devicetree/bindings/thermal/thermal-zones.yaml @@ -48,6 +48,14 @@ properties: platform-data regarding temperature thresholds and the mitigation actions to take when the temperature crosses those thresholds. + critical-action: + $ref: /schemas/types.yaml#/definitions/string + description: + The action the OS should perform after the critical temperature is reached. + enum: + - shutdown + - reboot + patternProperties: "^[a-zA-Z][a-zA-Z0-9\\-]{1,12}-thermal$": type: object From patchwork Sat Sep 16 01:49:27 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Fabio Estevam X-Patchwork-Id: 723840 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 96828CD37B1 for ; Sat, 16 Sep 2023 01:50:44 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S237683AbjIPBuQ (ORCPT ); Fri, 15 Sep 2023 21:50:16 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:38798 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S237972AbjIPBtu (ORCPT ); Fri, 15 Sep 2023 21:49:50 -0400 Received: from mail-oi1-x22e.google.com (mail-oi1-x22e.google.com [IPv6:2607:f8b0:4864:20::22e]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 87C8B1FCE; Fri, 15 Sep 2023 18:49:44 -0700 (PDT) Received: by mail-oi1-x22e.google.com with SMTP id 5614622812f47-3a9e89fa553so527921b6e.1; Fri, 15 Sep 2023 18:49:44 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1694828984; x=1695433784; 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=4xdcSFdFjeAbW57aqe8jzF0wIE2taB5ecDehO1YAVcs=; b=a/z6nbIo0jyWSUtD3XSc77MP1yvYjbTNc821TSFyeky2W2LyERR0hc4nOBHRW1pD4q awLNNZ2KNKs3CC27OeJCZz30WzheHxW7DUQ/YmonQ2bbNWnBOp/jw/J/FKI3jyP1UrVL XfgYOr7qjyTRVHBiYMHf30HwlRV0WaytPy7k6ZCQ9qe2Sy8Ry2oZiKfK/Tejsg/TU5YW GHDG3tgVeSRbs7e4lpRXtU5JDArT6riSBtm1qQ1UCUUF5aDf2D+B6aTlwAKOqKfTf5Jf 14bscC2fbJPupni2r32xXq01iXabc/lGEOrDeRxrXLpRgYVqdqxMnuw0TDnHNGuGmTEG eGgg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1694828984; x=1695433784; 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=4xdcSFdFjeAbW57aqe8jzF0wIE2taB5ecDehO1YAVcs=; b=mf2UbyFtTmjljqEBeSnxKi+don8B+4NP+p4O6m/nS6c8E58iidRt5DU0Vs3D2bshgp 7OFE+L/4Ib8HAyMgORl8mCcpTWh+IPKZcwXSDIXNCdiVuoibOf7VHtB9Tu0ij2lvY4qs MWGwE1VKgg81VdS9Ggcp/g66mAaQncF03xmoIc9lMGquypAjjxp/zBy83+7hH7ZQtzpo Ecgiu1SxWL1fs5uXNUEDnFDbl9Re0DqgunIZ7RZyMJC/XPrV775kOqvl3MUx+ZRtlRgo 8M+P+yN1Hdy9nY0HeVdlB8r3wkt9G7ZqUjndTfx2TZZoM/26RY1QAcKvK45tkvIEk9+k V8/g== X-Gm-Message-State: AOJu0YyNDl3HHIXKh7hTGcCb8iX8cuQ99a38mmkrx8lnEWst7ckSbcp0 YMaeRC26CYSBMdAQ5Jt14hM= X-Google-Smtp-Source: AGHT+IFCWamhKPSBEyZDPSdvLAZn5P1ZKmoTuUrZJBzRgjKBTieVSoAFrMqcauLw9KsBrUGDAIkAEA== X-Received: by 2002:a05:6870:9596:b0:1a7:f79c:2fbc with SMTP id k22-20020a056870959600b001a7f79c2fbcmr3427334oao.0.1694828983639; Fri, 15 Sep 2023 18:49:43 -0700 (PDT) Received: from fabio-Precision-3551.. ([2804:14c:485:4b61:bb17:c38c:aa6:be85]) by smtp.gmail.com with ESMTPSA id eg38-20020a05687098a600b001c4b473581fsm2519986oab.12.2023.09.15.18.49.40 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 15 Sep 2023 18:49:43 -0700 (PDT) From: Fabio Estevam To: rafael@kernel.org Cc: daniel.lezcano@linaro.org, amitk@kernel.org, rui.zhang@intel.com, linux-pm@vger.kernel.org, krzysztof.kozlowski+dt@linaro.org, robh+dt@kernel.org, conor+dt@kernel.org, devicetree@vger.kernel.org, Fabio Estevam Subject: [PATCH v8 2/3] reboot: Introduce hw_protection_reboot() Date: Fri, 15 Sep 2023 22:49:27 -0300 Message-Id: <20230916014928.2848737-2-festevam@gmail.com> X-Mailer: git-send-email 2.34.1 In-Reply-To: <20230916014928.2848737-1-festevam@gmail.com> References: <20230916014928.2848737-1-festevam@gmail.com> MIME-Version: 1.0 Precedence: bulk List-ID: X-Mailing-List: linux-pm@vger.kernel.org From: Fabio Estevam Introduce hw_protection_reboot() to trigger an emergency reboot. It is a counterpart of hw_protection_shutdown() 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 v7: - None include/linux/reboot.h | 11 ++++++++++- kernel/reboot.c | 33 ++++++++++++++++++++------------- 2 files changed, 30 insertions(+), 14 deletions(-) diff --git a/include/linux/reboot.h b/include/linux/reboot.h index 2b6bb593be5b..b6d59c7a3377 100644 --- a/include/linux/reboot.h +++ b/include/linux/reboot.h @@ -174,7 +174,16 @@ 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/kernel/reboot.c b/kernel/reboot.c index 3bba88c7ffc6..76fa6e9e4f1d 100644 --- a/kernel/reboot.c +++ b/kernel/reboot.c @@ -953,21 +953,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); @@ -982,9 +986,12 @@ 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); +EXPORT_SYMBOL_GPL(__hw_protection_shutdown); static int __init reboot_setup(char *str) { From patchwork Sat Sep 16 01:49:28 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Fabio Estevam X-Patchwork-Id: 724617 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 81ABDCD37B0 for ; Sat, 16 Sep 2023 01:50:44 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S237926AbjIPBuR (ORCPT ); Fri, 15 Sep 2023 21:50:17 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:59128 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S238348AbjIPBtw (ORCPT ); Fri, 15 Sep 2023 21:49:52 -0400 Received: from mail-oi1-x22f.google.com (mail-oi1-x22f.google.com [IPv6:2607:f8b0:4864:20::22f]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id F2C381FE0; Fri, 15 Sep 2023 18:49:47 -0700 (PDT) Received: by mail-oi1-x22f.google.com with SMTP id 5614622812f47-3a9e89fa553so527932b6e.1; Fri, 15 Sep 2023 18:49:47 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1694828987; x=1695433787; 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=8ryaascUldLoAOMrQPhkWv4qVjJ1v1YO4kQEKKPJFhA=; b=lO0mKFihOkabIUaWxpRkIOR3V8hAuf7ZQrPCI6PM8tHSObJK8G6wPUOH+gpp53JwlE a/6QrRzMkW1ggKtxfooYWbAJm8ZaZvT79ijYNr34/Xik4r7baQOVQmvY0NjXI/doWWWn NQXucYBwDRWsQdKctE0yPis+0CpJ6CnJLZKCnbAKlwKi1nuNnDfzqlbJfoDC1gvyJACZ T9sl1WUg6xxq7w81FVbIQYr6chZK5DAf6QjPBVVjtzEKJegbiIKArfkhaD0B/ePLjcIA QHM/rCmsddK5FaTUsKh8hwISyO9dQp1vHIYELlzZfOZmpGrhSMIxKgwvN4st4iC3+WbI gGuw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1694828987; x=1695433787; 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=8ryaascUldLoAOMrQPhkWv4qVjJ1v1YO4kQEKKPJFhA=; b=qViLB48Z87M9dN6AXdMjGHfq0CavJv8wyrBu7so6YxD/r4XWNf90efFq3P0G6Pri4F PmX1lRMNDM1do2Mr7VGWdp0U2tCw4nlW8R9aOpnMJNtS58ezMG5KYlmbhHFQeAtY6hjD eF1URK6HdKPky+TXGkIJ0abixSEFzvvS3V8kRCaIhajGcEQvvwcIs5WN/l2r4kL9mbR7 6KxrZBccRjMOTCLAiHzSe2knALtnWXMJq7nIljYwGJvK4uvLWK+OB2i1fSjiEyn2KExu F6QbJMrBHnmwBUWbkQh4j89IkfwkCWLAy4Yu4MtfkXVuVft36/jvuzP7T+pfNuNhZKlJ 9kuQ== X-Gm-Message-State: AOJu0YybpXb4NEwu4TZLN2yW/1ckqWZmcdGxkyHRjfhzVdJSUM/y9aGW YZd5mxmYMhWetTa3OzXtHJY= X-Google-Smtp-Source: AGHT+IFcAUQhaxv+LcXcq6oSqNf2OMuO3SZhklar+CrKheDOh5TQEBr3Gpor0PjrQF3WfedxbXz5hQ== X-Received: by 2002:a05:6870:e393:b0:1b7:613c:2e30 with SMTP id x19-20020a056870e39300b001b7613c2e30mr3417770oad.2.1694828987210; Fri, 15 Sep 2023 18:49:47 -0700 (PDT) Received: from fabio-Precision-3551.. ([2804:14c:485:4b61:bb17:c38c:aa6:be85]) by smtp.gmail.com with ESMTPSA id eg38-20020a05687098a600b001c4b473581fsm2519986oab.12.2023.09.15.18.49.43 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 15 Sep 2023 18:49:46 -0700 (PDT) From: Fabio Estevam To: rafael@kernel.org Cc: daniel.lezcano@linaro.org, amitk@kernel.org, rui.zhang@intel.com, linux-pm@vger.kernel.org, krzysztof.kozlowski+dt@linaro.org, robh+dt@kernel.org, conor+dt@kernel.org, devicetree@vger.kernel.org, Fabio Estevam Subject: [PATCH v8 3/3] thermal: thermal_core: Allow rebooting after critical temp Date: Fri, 15 Sep 2023 22:49:28 -0300 Message-Id: <20230916014928.2848737-3-festevam@gmail.com> X-Mailer: git-send-email 2.34.1 In-Reply-To: <20230916014928.2848737-1-festevam@gmail.com> References: <20230916014928.2848737-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. Tested on a i.MX8MM board with the following devicetree changes: thermal-zones { critical-action = "reboot"; }; Signed-off-by: Fabio Estevam --- Changes since v7: - Search for the 'critical-action' property in the parent thermal-zone node. (Rafael) drivers/thermal/thermal_core.c | 6 +++++- drivers/thermal/thermal_of.c | 16 ++++++++++++++++ include/linux/thermal.h | 6 ++++++ 3 files changed, 27 insertions(+), 1 deletion(-) diff --git a/drivers/thermal/thermal_core.c b/drivers/thermal/thermal_core.c index 0bdde1ab5d8b..bfa704516957 100644 --- a/drivers/thermal/thermal_core.c +++ b/drivers/thermal/thermal_core.c @@ -320,11 +320,15 @@ void thermal_zone_device_critical(struct thermal_zone_device *tz) * 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 (tz->action == THERMAL_CRITICAL_ACTION_REBOOT) + hw_protection_reboot(msg, poweroff_delay_ms); + else + hw_protection_shutdown(msg, poweroff_delay_ms); } EXPORT_SYMBOL(thermal_zone_device_critical); diff --git a/drivers/thermal/thermal_of.c b/drivers/thermal/thermal_of.c index 4ca905723429..a1472a1965eb 100644 --- a/drivers/thermal/thermal_of.c +++ b/drivers/thermal/thermal_of.c @@ -218,6 +218,20 @@ static struct device_node *of_thermal_zone_find(struct device_node *sensor, int return tz; } +static void thermal_of_get_critical_action(struct device_node *np, + enum thermal_action *action) +{ + const char *action_string; + int ret; + + ret = of_property_read_string(np->parent, "critical-action", &action_string); + if (ret < 0) + *action = THERMAL_CRITICAL_ACTION_SHUTDOWN; + + if (!strcasecmp(action_string, "reboot")) + *action = THERMAL_CRITICAL_ACTION_REBOOT; +} + static int thermal_of_monitor_init(struct device_node *np, int *delay, int *pdelay) { int ret; @@ -516,6 +530,8 @@ static struct thermal_zone_device *thermal_of_zone_register(struct device_node * goto out_kfree_trips; } + thermal_of_get_critical_action(np, &tz->action); + ret = thermal_zone_device_enable(tz); if (ret) { pr_err("Failed to enabled thermal zone '%s', id=%d: %d\n", diff --git a/include/linux/thermal.h b/include/linux/thermal.h index eb17495c8acc..8ea761bead79 100644 --- a/include/linux/thermal.h +++ b/include/linux/thermal.h @@ -34,6 +34,11 @@ struct thermal_cooling_device; struct thermal_instance; struct thermal_attr; +enum thermal_action { + THERMAL_CRITICAL_ACTION_SHUTDOWN = 0, /* shutdown when crit temperature is reached */ + THERMAL_CRITICAL_ACTION_REBOOT, /* reboot when crit temperature is reached */ +}; + enum thermal_trend { THERMAL_TREND_STABLE, /* temperature is stable */ THERMAL_TREND_RAISING, /* temperature is raising */ @@ -183,6 +188,7 @@ struct thermal_zone_device { struct list_head node; struct delayed_work poll_queue; enum thermal_notify_event notify_event; + enum thermal_action action; }; /**