From patchwork Wed Nov 29 12:43: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: 748414 Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b="fmOp5RuF" Received: from mail-pf1-x42c.google.com (mail-pf1-x42c.google.com [IPv6:2607:f8b0:4864:20::42c]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 64719D44; Wed, 29 Nov 2023 04:43:57 -0800 (PST) Received: by mail-pf1-x42c.google.com with SMTP id d2e1a72fcca58-6cb90b33c1dso1718425b3a.0; Wed, 29 Nov 2023 04:43:57 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1701261837; x=1701866637; 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=99akWKbL/dr3OMyUe936f8PphzhTHLmmt/wOQM8LOn4=; b=fmOp5RuFlGC8GcfcwvirX/NMb/Nw03iN04jFsQ32q74pzt5x5ZHyOjrAeSdfeAfRov bAOepgRVcSEh3zZGUTL92KBtsxCmaJxCtbowLuPtpp6Igr7otIf1CalTpQRgi8HFriUh y7+W6dl8VVaLaoMfDYkMaPEn49AtW1X352RBejyM98r9WCNL/SEi0rhMPp3mwEKq0xL+ 9J/bImvZ31UsFNoJurspsEZR3+4Gv089bJdjrjoJIXcXhWR7Lpeo2IZD02Z1IzU5D9rL XYnHgqUh6Inw4ClQejOKUgJAS8orkJzgBkKxhyZeq+1gW4L4fKVTTUoXFBCmCDf8m6FF rSqQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1701261837; x=1701866637; 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=99akWKbL/dr3OMyUe936f8PphzhTHLmmt/wOQM8LOn4=; b=TbNmoPFf9loGqpLUn6n+tnkGr4tWTQg13Fz1pLC3I3Bl8qxR2uXS1M/hcVnqsEFdUv PrjwjIKt+LesdSnKAWtA7KKhawLTr8oUUXZ10sD51CbtSOCF2LkuQ4Y3MVvItp/35EfU MVOCoLM0TwNbaFnaK4TcArjKQ15okX46DS35krfRk46Kt7Nymswc5sUELy6o6MCQCO7F TRF3lUfI6dKA9L46grwM+oYCnFmf826ox/2UgZ0tlFkNLZd3E2jyM7g8e48AJIUt/g7m N71r5C5Hk2Eq/QyUgTCjIAJJp9qRE4TEoStSdS13NJjLf42tzxptiYEmHVp9VVB69D59 tSuw== X-Gm-Message-State: AOJu0YwipD1ZFnOdp6l6Zyl3DV932uAUYQXY8DqvthPmRklnDKEZ3Zxo geOVubaOOkfGYcfQfNwy5GpocSQ07SI= X-Google-Smtp-Source: AGHT+IGtQtpdMfjUxd3dgi+rLem+nVoDhqcv+UwBIoAxkzEBqCcsYFwaoE0vDKwqDV6nS6gC0X8/IA== X-Received: by 2002:a05:6a20:da91:b0:187:df59:5c43 with SMTP id iy17-20020a056a20da9100b00187df595c43mr24079385pzb.2.1701261836741; Wed, 29 Nov 2023 04:43:56 -0800 (PST) Received: from fabio-Precision-3551.. ([2804:14c:485:4b61:5db0:20f8:912:48b]) by smtp.gmail.com with ESMTPSA id fe21-20020a056a002f1500b0068bbd43a6e2sm11028416pfb.10.2023.11.29.04.43.53 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 29 Nov 2023 04:43:56 -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 v12 1/4] dt-bindings: thermal-zones: Document critical-action Date: Wed, 29 Nov 2023 09:43:27 -0300 Message-Id: <20231129124330.519423-1-festevam@gmail.com> X-Mailer: git-send-email 2.34.1 Precedence: bulk X-Mailing-List: linux-pm@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 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 v11: - 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 Wed Nov 29 12:43: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: 749708 Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b="gFABox7T" 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 70C2C10D4; Wed, 29 Nov 2023 04:44:00 -0800 (PST) Received: by mail-pf1-x432.google.com with SMTP id d2e1a72fcca58-6bf20d466cdso617034b3a.1; Wed, 29 Nov 2023 04:44:00 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1701261840; x=1701866640; 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=OJ1zqy6y1N//ubnnquRNTd9KIH2W8I83a9N25tLdllg=; b=gFABox7T6xGPsgzYB2FHvXdOYaJIiiquijOzzXn2czsdtK7Ox4PcsrAqiepHytQ9jl j65lfs/74KoNqiIs7xiTdoois7cEyq3Mq1p0VDKPaTZyYrrOtOG/tMkoyszRWbjKJqJc qSBUH7hHpEBokZSxhNpJGsJmbgoLlt2rFHniOjFwE8DR+c8PIKB6qnYcQKfusy6Emk1q pUwYStxSFOwY4ZyyGEIU+mlfhWOP6xEPM5Zw455dyzxHv/H/E9L4/jyYxTXcFIHKM4CD dxUk+qnTyB60sj/A2+kj9iSOAs1qHu18Jdo4xfKJA9934NWda4XXOUo7/VYfAwXwaosT vjnQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1701261840; x=1701866640; 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=OJ1zqy6y1N//ubnnquRNTd9KIH2W8I83a9N25tLdllg=; b=mA2FDRC+/oFWfjhmFoIVHQlvIVn/8aifpm8MuNk7dPU+x1ZfGdcZXc5gKxoieWBY+A SNuBuIiWYswysa5oChhLze4yuS3U6PNiy+96o8DdX+SLjHwjobovamxfEJfmc5i5GZ4n LJ6UEuIjyGwrh4l/Kp6X75EMY4KOLCi3OL28phJgg4N0c1axR5dWQgD1C3skYoTyJBDA MwA6HBSyrgXn/qvg/D8t41U8olqH9a/eI4KQ7i6agVDaxcEPuXAEvL/cmIyvfpIxJ6Lt lpFkNbY+lJbYTqYg5wtPAJTfm/OlgTaTU2aR4NaPAIvus6CvB+PWeEuxld5JNCz0I/Bb v0/g== X-Gm-Message-State: AOJu0YzWuLa4WYSiZgJTjUXA52G7tANgoFxVJSbzFyBeTZx5q965oM9X YJECEZ8VKP5Vk/Z5fSpTMcxph8S7O6o= X-Google-Smtp-Source: AGHT+IEGdkN1rfQtPkhL7w2yOgVIXhMckUbDGamGNT+VQkUiYtAn04rGf5LzLdGGH6vXf3X2xTdmZw== X-Received: by 2002:a05:6a00:2d97:b0:6cb:a2fa:1dcf with SMTP id fb23-20020a056a002d9700b006cba2fa1dcfmr22098052pfb.3.1701261839826; Wed, 29 Nov 2023 04:43:59 -0800 (PST) Received: from fabio-Precision-3551.. ([2804:14c:485:4b61:5db0:20f8:912:48b]) by smtp.gmail.com with ESMTPSA id fe21-20020a056a002f1500b0068bbd43a6e2sm11028416pfb.10.2023.11.29.04.43.57 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 29 Nov 2023 04:43:59 -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 v12 2/4] thermal_core: Prepare for introduction of thermal reboot Date: Wed, 29 Nov 2023 09:43:28 -0300 Message-Id: <20231129124330.519423-2-festevam@gmail.com> X-Mailer: git-send-email 2.34.1 In-Reply-To: <20231129124330.519423-1-festevam@gmail.com> References: <20231129124330.519423-1-festevam@gmail.com> Precedence: bulk X-Mailing-List: linux-pm@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 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 v11: - 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 625ba07cbe2f..e40b1fc6513c 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 Wed Nov 29 12:43:29 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Fabio Estevam X-Patchwork-Id: 748413 Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b="JuHY/1Iy" Received: from mail-il1-x136.google.com (mail-il1-x136.google.com [IPv6:2607:f8b0:4864:20::136]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id B992DD44; Wed, 29 Nov 2023 04:44:03 -0800 (PST) Received: by mail-il1-x136.google.com with SMTP id e9e14a558f8ab-35b0b36716fso6459255ab.0; Wed, 29 Nov 2023 04:44:03 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1701261843; x=1701866643; 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=9OlrK86XcWSt3v7Pox0FKoMqKha7dRcJSUQTUI1VMtg=; b=JuHY/1Iyqvgk1wdRKkX2qoUyplUqT0dXiANZkbmLDM5DLJDrm18CHkDREuXyGOySva DJy5V+iEptDjngdkZ61agDkDMboU5u3H0IJ/mibYuadWi13EvSJ9Y0gawInKh78Joawi xPT7m9NdWH/RXVpqpMByNOGacMXpkHJCQHM6YqDwUKfEKsV1bJyJuXqM9RoNOWBlL82q Jqr7vNlYPxAJclWaU++xY1YG/KOTIHkJ9AVAbPME6XIoaNprs6HXUNAKS66S9usAz9+S pEDCN1oipRJle20Ot8TV6UFzg2C0XxvyisNtd7NxcTszSmGAdP17q6Vj40HhPzUFL5N1 +a1Q== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1701261843; x=1701866643; 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=9OlrK86XcWSt3v7Pox0FKoMqKha7dRcJSUQTUI1VMtg=; b=bo62mUu0wKx6/CwwoldFXeRMItzeMgoAM5VyC+meZpPX6JBKHfda9OHSTcUaZclLnH uJstyGyV8VxF/xV7KdDw4vnqigQ4svuLcPZXlcMoh7yJCSWdudFtSwXRCAy4nI0gEFsm JXelTPTjWbrL3rUEa0hvV/lQr9Urh2s+4A1ifNVhRVTt8J/QSS1mSTguWbkQHcF9+bWM /mui1a65M8SubTdSHDlZADlV03p8iI/2BcgnOdvl7c6BycVOYoyERmmXuHcoBDityuV6 4v4T97D4j9PSxLb73wz9gi4vgqc+zZE+LTyYZy0tzANj+lzUh+jO8km0ezF7tTOEW11b FdIQ== X-Gm-Message-State: AOJu0YwlP+oEEo2Msg8XSnRMQ1yrnejdooxagfhKhcOXOjhJlmYETkEx CwIDQgZsgLuvsFSVRrB9PpA= X-Google-Smtp-Source: AGHT+IF8vix7r5HLakcCz87bbDhj+o+LJxGDDwKNOKgxN0wZIIgMevVBZ/jFZjDXuZFlXhB5NGA5cw== X-Received: by 2002:a92:ce8c:0:b0:35c:7b32:241f with SMTP id r12-20020a92ce8c000000b0035c7b32241fmr13255039ilo.2.1701261842976; Wed, 29 Nov 2023 04:44:02 -0800 (PST) Received: from fabio-Precision-3551.. ([2804:14c:485:4b61:5db0:20f8:912:48b]) by smtp.gmail.com with ESMTPSA id fe21-20020a056a002f1500b0068bbd43a6e2sm11028416pfb.10.2023.11.29.04.44.00 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 29 Nov 2023 04:44:02 -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 v12 3/4] reboot: Introduce thermal_zone_device_critical_reboot() Date: Wed, 29 Nov 2023 09:43:29 -0300 Message-Id: <20231129124330.519423-3-festevam@gmail.com> X-Mailer: git-send-email 2.34.1 In-Reply-To: <20231129124330.519423-1-festevam@gmail.com> References: <20231129124330.519423-1-festevam@gmail.com> Precedence: bulk X-Mailing-List: linux-pm@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 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 v11: - Move the hermal_zone_device_critical_reboot() prototype to thermal_core.h (Daniel) drivers/thermal/thermal_core.c | 7 +++++++ drivers/thermal/thermal_core.h | 1 + include/linux/reboot.h | 5 +++++ 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 e40b1fc6513c..9d47347d4242 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/drivers/thermal/thermal_core.h b/drivers/thermal/thermal_core.h index 0a3b3ec5120b..c447d21012d0 100644 --- a/drivers/thermal/thermal_core.h +++ b/drivers/thermal/thermal_core.h @@ -114,6 +114,7 @@ int thermal_zone_device_set_policy(struct thermal_zone_device *, char *); int thermal_build_list_of_policies(char *buf); void __thermal_zone_device_update(struct thermal_zone_device *tz, enum thermal_notify_event event); +void thermal_zone_device_critical_reboot(struct thermal_zone_device *tz); /* Helpers */ #define for_each_trip(__tz, __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/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 Wed Nov 29 12:43:30 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Fabio Estevam X-Patchwork-Id: 749707 Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b="VCL3w5H6" Received: from mail-il1-x12a.google.com (mail-il1-x12a.google.com [IPv6:2607:f8b0:4864:20::12a]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 15B1410C3; Wed, 29 Nov 2023 04:44:07 -0800 (PST) Received: by mail-il1-x12a.google.com with SMTP id e9e14a558f8ab-35b0b36716fso6459295ab.0; Wed, 29 Nov 2023 04:44:07 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1701261846; x=1701866646; 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=elZXM+Abii+KZRVpe/jUXO4xHCec/DFLJnfi96Bh/bI=; b=VCL3w5H6AhOOuoK8J0LlVReAQHQ6ujrGRHx97oSizgqfSuYzFSwUfRMB4iBgxiKtIW WIDOoEWLd3H0vqmVah2zHF5FirThu1SNY1o56x/aft4nW9KwXkwza3gU7BxjD92c2HaJ qlm1bFV3NBnNFVTjFJyYnBaABrv/nUxovDIqkFxOQ5wNkHRzhVeI0xMg2jvM1z0HKzNE +YgLN1+ktXSWZKi8YXJZ4dM1t9jNhr9XjuWPOMy2HcAeMtili4dH/12wKghQF48FwEZ3 PWQh8ylcbztF7n1JSq1b8nl6Jr1RdQflaC4eZcmYXSuRAKx75CHgPH22JpczE/Yb58/+ aOCg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1701261846; x=1701866646; 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=elZXM+Abii+KZRVpe/jUXO4xHCec/DFLJnfi96Bh/bI=; b=l4MY20o5jMdXYaKLPLsL6pCLIyFZafDmn7S7yUXwD7NwhVEg69r/VTscdaVs2JWTvy mr30jjUU2cjuXC4LyIJG4C7BJsddhbKsSEu/4gKhyQToCVwVKN+CMHJjwL/7uVMr5eR6 oNGQAfnVR2AYUDnqBDHwN/d1RqLq7/oZTc9gShJgOoVXdQ3s66P8ZOtcf46m9elGwRs+ dZfiWd9rRpDI0o+SW6T3jRPL7Uz3/pQ3AeBTO+so7Mjvb127VgQ3Fc0oJVU7CPcf1W1c WQtOegAS3ueWVeBH5qU8rlQzJM9W0nlsOQXlBo0UaZPiOZtZ0Wv0jBKnXoW45AFUABm2 hS2w== X-Gm-Message-State: AOJu0YzVCRwY4kOk/a1RTpi6UtilCnhilZjXyOO9MfqeTMURIdArDJpD KipNmhsBhiW4Yv05BZ+e1kY= X-Google-Smtp-Source: AGHT+IEgdZdb28X+dRlRrJtWHp6v/WXK2rCkT0E/McCMcHVjkqEHXEyo1SLHHLPCH3n8MjLRWmhdig== X-Received: by 2002:a92:ce8c:0:b0:35c:7b32:241f with SMTP id r12-20020a92ce8c000000b0035c7b32241fmr13255152ilo.2.1701261846313; Wed, 29 Nov 2023 04:44:06 -0800 (PST) Received: from fabio-Precision-3551.. ([2804:14c:485:4b61:5db0:20f8:912:48b]) by smtp.gmail.com with ESMTPSA id fe21-20020a056a002f1500b0068bbd43a6e2sm11028416pfb.10.2023.11.29.04.44.03 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 29 Nov 2023 04:44:05 -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 v12 4/4] thermal: thermal_of: Allow rebooting after critical temp Date: Wed, 29 Nov 2023 09:43:30 -0300 Message-Id: <20231129124330.519423-4-festevam@gmail.com> X-Mailer: git-send-email 2.34.1 In-Reply-To: <20231129124330.519423-1-festevam@gmail.com> References: <20231129124330.519423-1-festevam@gmail.com> Precedence: bulk X-Mailing-List: linux-pm@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 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 v11: - 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);