From patchwork Wed Jan 24 12:21:57 2024 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Oleksij Rempel X-Patchwork-Id: 191559 Return-Path: Delivered-To: ouuuleilei@gmail.com Received: by 2002:a05:7300:2553:b0:103:945f:af90 with SMTP id p19csp954390dyi; Wed, 24 Jan 2024 04:31:23 -0800 (PST) X-Google-Smtp-Source: AGHT+IFfkDFVaoxbmCwLaozqh304TyzLUOYo7SSrHDmQs9LTb1DpKtbHsY7HTvRhSpsNXwgFFtw5 X-Received: by 2002:a17:907:1604:b0:a31:4906:192e with SMTP id cw4-20020a170907160400b00a314906192emr47924ejd.61.1706099483384; Wed, 24 Jan 2024 04:31:23 -0800 (PST) ARC-Seal: i=2; a=rsa-sha256; t=1706099483; cv=pass; d=google.com; s=arc-20160816; b=tYTFBBOY0JiEs362PJI1xpN4TMPuIjBuHQt495UrRipz/8dhp/4f6QQtEGAlPLeQsi bIDXFAcyCC/EM6TUcLtdC2q1GawFHeIrd9wNQ8MuCpnexPOU97Rj9Ml3jAfxHFSf53EF K2WCJii/Jg0Q5qgmMG+EXyxeS9AZmwbKuYtUxLG3tqdfv1Md6WxNEN31DZGEUdLdwcFY 5BE4xoxbLq31AowB2AnaBwEUArHQTMsp6iI0v4VowF+ln86EAQY5GBfKFA8etd+YwyFN O41svDOaVBniNjZqc+A7AMAXvqH8d7En6b0NvFGVwUW2tG3qCgW3aUXWVpdwOEEhm+/+ XAUA== ARC-Message-Signature: i=2; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=content-transfer-encoding:mime-version:list-unsubscribe :list-subscribe:list-id:precedence:references:in-reply-to:message-id :date:subject:cc:to:from; bh=OaIWqnA5pnvLKYy6Ex2Z+mLArhZwfXWYm4N91n0bGsE=; fh=cTOyeHIiotxFveWD397Up69SLR8Dqpy9YboYIfW0A00=; b=lQYVSxOyph5QgpuT81VXGuX2v7P+f+WYv7cgXXcuEgCX4S6chFqwrsgN9dusYJJ58N kJ2fUXfZOVKfVWJeKM++TJVTarZZ8/EPLj5MvkZhZgu3IW9IwJEd6ce/ByEL05OZsmsT YQ6F4amfNfhRR2DjXrpZ3d9o5MBqPsd+9lS5is1ba8wSkPDza1TgWtlxE33QPBkZa1V8 zUoOxAgRCzoDnsz370YAcTRptFYfbd/JWafhCATzhJCzH7YdD3s1h3AAP3gxpr+SNArA pKqgSx25Lvj+SwvEU80kWrGn0ReNPxJeRcU/L7nyY7dzKW2MvtlTA0kJ6lLClww6aNhB g/Ug== ARC-Authentication-Results: i=2; mx.google.com; arc=pass (i=1 spf=pass spfdomain=pengutronix.de); spf=pass (google.com: domain of linux-kernel+bounces-36961-ouuuleilei=gmail.com@vger.kernel.org designates 2604:1380:4601:e00::3 as permitted sender) smtp.mailfrom="linux-kernel+bounces-36961-ouuuleilei=gmail.com@vger.kernel.org" Received: from am.mirrors.kernel.org (am.mirrors.kernel.org. [2604:1380:4601:e00::3]) by mx.google.com with ESMTPS id o6-20020a17090608c600b00a30e9a2e0a8si1164952eje.188.2024.01.24.04.31.23 for (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 24 Jan 2024 04:31:23 -0800 (PST) Received-SPF: pass (google.com: domain of linux-kernel+bounces-36961-ouuuleilei=gmail.com@vger.kernel.org designates 2604:1380:4601:e00::3 as permitted sender) client-ip=2604:1380:4601:e00::3; Authentication-Results: mx.google.com; arc=pass (i=1 spf=pass spfdomain=pengutronix.de); spf=pass (google.com: domain of linux-kernel+bounces-36961-ouuuleilei=gmail.com@vger.kernel.org designates 2604:1380:4601:e00::3 as permitted sender) smtp.mailfrom="linux-kernel+bounces-36961-ouuuleilei=gmail.com@vger.kernel.org" Received: from smtp.subspace.kernel.org (wormhole.subspace.kernel.org [52.25.139.140]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by am.mirrors.kernel.org (Postfix) with ESMTPS id F2D941F26878 for ; Wed, 24 Jan 2024 12:23:18 +0000 (UTC) Received: from localhost.localdomain (localhost.localdomain [127.0.0.1]) by smtp.subspace.kernel.org (Postfix) with ESMTP id AC43E64CDA; Wed, 24 Jan 2024 12:22:29 +0000 (UTC) Received: from metis.whiteo.stw.pengutronix.de (metis.whiteo.stw.pengutronix.de [185.203.201.7]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id F04506310B for ; Wed, 24 Jan 2024 12:22:25 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=185.203.201.7 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1706098947; cv=none; b=mkyJKn4ExkNzYk/d5IT16g1nok0OE1o1NUaKnha60Br1RQIcU6NZmQOI+szgBqPezj5KzxPHHfEGlYkuNway6awdj4Y3+Au6MXapAYuW6AAUJScgm9B5jVScXZcIygnL4OY2FzwbRhsqob/5VKunrl+kKA8CpWChc5Klte3AZ0w= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1706098947; c=relaxed/simple; bh=qJyZABOkVgOrJuobub1GO0uw86ox/Ky9FOo5Kw77m4E=; h=From:To:Cc:Subject:Date:Message-Id:In-Reply-To:References: MIME-Version; b=mUr6acdEdPqvQwyJNuNHhw0iw0XmQqIQz/rnTkmQf97Z8zFQbsN+FUi5KCTrel19MdlEb0+exLmcJEgdYp9FpZIOQwcdXwCsWmIh15yw/N6u3JmtsDjd99EYi8kWZkD9bEeMRbmqBEeXLycqYkkl6YHIU6ZzOwtRhw52gTQGFmU= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=none (p=none dis=none) header.from=pengutronix.de; spf=pass smtp.mailfrom=pengutronix.de; arc=none smtp.client-ip=185.203.201.7 Authentication-Results: smtp.subspace.kernel.org; dmarc=none (p=none dis=none) header.from=pengutronix.de Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=pengutronix.de Received: from drehscheibe.grey.stw.pengutronix.de ([2a0a:edc0:0:c01:1d::a2]) by metis.whiteo.stw.pengutronix.de with esmtps (TLS1.3:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.92) (envelope-from ) id 1rScGd-0007o5-1B; Wed, 24 Jan 2024 13:22:07 +0100 Received: from [2a0a:edc0:0:1101:1d::ac] (helo=dude04.red.stw.pengutronix.de) by drehscheibe.grey.stw.pengutronix.de with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 (Exim 4.94.2) (envelope-from ) id 1rScGb-0023Zb-Ux; Wed, 24 Jan 2024 13:22:05 +0100 Received: from ore by dude04.red.stw.pengutronix.de with local (Exim 4.96) (envelope-from ) id 1rScGb-00340u-2t; Wed, 24 Jan 2024 13:22:05 +0100 From: Oleksij Rempel To: Sebastian Reichel , Rob Herring , Krzysztof Kozlowski , Conor Dooley , Srinivas Kandagatla Cc: Oleksij Rempel , kernel@pengutronix.de, linux-kernel@vger.kernel.org, Liam Girdwood , Mark Brown , "Rafael J. Wysocki" , Daniel Lezcano , Zhang Rui , Lukasz Luba , linux-pm@vger.kernel.org, devicetree@vger.kernel.org, =?utf-8?q?S=C3=B8ren_Andersen?= Subject: [PATCH v2 1/8] power: Extend power_on_reason.h for upcoming PSCRR framework Date: Wed, 24 Jan 2024 13:21:57 +0100 Message-Id: <20240124122204.730370-2-o.rempel@pengutronix.de> X-Mailer: git-send-email 2.39.2 In-Reply-To: <20240124122204.730370-1-o.rempel@pengutronix.de> References: <20240124122204.730370-1-o.rempel@pengutronix.de> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 X-SA-Exim-Connect-IP: 2a0a:edc0:0:c01:1d::a2 X-SA-Exim-Mail-From: ore@pengutronix.de X-SA-Exim-Scanned: No (on metis.whiteo.stw.pengutronix.de); SAEximRunCond expanded to false X-PTX-Original-Recipient: linux-kernel@vger.kernel.org X-getmail-retrieved-from-mailbox: INBOX X-GMAIL-THRID: 1788974971806555425 X-GMAIL-MSGID: 1788974971806555425 Prepare for the introduction of the Power State Change Reason Recorder (PSCRR) framework by expanding the power_on_reason.h header. This extension includes new power-on reasons: - POWER_ON_REASON_OVER_CURRENT for over-current conditions. - POWER_ON_REASON_REGULATOR_FAILURE for regulator failures. - POWER_ON_REASON_OVERTEMPERATURE for over temperature situations. Signed-off-by: Oleksij Rempel --- include/linux/power/power_on_reason.h | 3 +++ 1 file changed, 3 insertions(+) diff --git a/include/linux/power/power_on_reason.h b/include/linux/power/power_on_reason.h index 95a1ec0c403c..f2446cece277 100644 --- a/include/linux/power/power_on_reason.h +++ b/include/linux/power/power_on_reason.h @@ -15,5 +15,8 @@ #define POWER_ON_REASON_XTAL_FAIL "crystal oscillator failure" #define POWER_ON_REASON_BROWN_OUT "brown-out reset" #define POWER_ON_REASON_UNKNOWN "unknown reason" +#define POWER_ON_REASON_OVER_CURRENT "over current" +#define POWER_ON_REASON_REGULATOR_FAILURE "regulator failure" +#define POWER_ON_REASON_OVERTEMPERATURE "overtemperature" #endif /* POWER_ON_REASON_H */ From patchwork Wed Jan 24 12:21:58 2024 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Oleksij Rempel X-Patchwork-Id: 191553 Return-Path: Delivered-To: ouuuleilei@gmail.com Received: by 2002:a05:7300:2553:b0:103:945f:af90 with SMTP id p19csp950508dyi; Wed, 24 Jan 2024 04:24:28 -0800 (PST) X-Google-Smtp-Source: AGHT+IFnSWSIvM5+hQdA4AKiiwo4lnxcKHJGCO5J3NL62Z1Hpa7MHaadR4fagFUVL+hHVfta8tTG X-Received: by 2002:a05:620a:a84:b0:783:7f6f:3bbf with SMTP id v4-20020a05620a0a8400b007837f6f3bbfmr7187049qkg.21.1706099068305; Wed, 24 Jan 2024 04:24:28 -0800 (PST) ARC-Seal: i=2; a=rsa-sha256; t=1706099068; cv=pass; d=google.com; s=arc-20160816; b=dmahdU07u7KBoKXgQyLiay94s0Ka1/4vyfEjmoJDR8tYvrAwKwAlH0nKq6fNL+WqyH BhwiHfPZuJlEINfAG3nzmttkwT5ST3VWDVRVtCvrnuaDaNl4QI8ZOaHCTRNsQw0utfB+ ctG2x8FHFoDgKwWLaM/t8W4tDGG5yUdVmiRATgKKKNhJYuTtPl9YiZKPigzlU1YRlDwM xiUi0VqaJsc7Da5gkcYuTanjndqMKzFd+Ics4I60o3SkXiCApK449SXVSGtf2em/zh+R zEqI3FjYaJVeEf6PQFKeEU0qU6H8amJqG+bBQMvnN0QvtodtYl2XSDitgTscnHOXez/l X/Ow== ARC-Message-Signature: i=2; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=content-transfer-encoding:mime-version:list-unsubscribe :list-subscribe:list-id:precedence:references:in-reply-to:message-id :date:subject:cc:to:from; bh=RBwaCYD7CRbsyI7NnjUYJby8Sj8vv+cwyZQQG8Ui5dI=; fh=cTOyeHIiotxFveWD397Up69SLR8Dqpy9YboYIfW0A00=; b=plO/B5NPnbDuZur6tex/8JeFnvIaeFFUhOfo/vqp5gpHyx07oV+C/qSKjuHHMzP8Rl ksnKEz2YhQ5XxEx1qFGDSvmjmiI/20+WBFqc3WvnFwn4MOBcP6RhFIhiudMAPNkCk4ec i3ReAAo1/TwfRdGZWXyJze2ICrLORKbJs/a/8jTQklHHfhKm0V7biEMbbxiXzZolNgXd +BKaVseJnMZSoDC8LTyEFZUo5qDebwot4N5nIFsEpqtGAO2id6nwhaXqCt6c8U40GOFj BXIISb2MQXfx6pPJIYQMAgRPR7+LfpfprqJfrpOUFEvnTrwAeQpHilI+YBgCCYawboNd 320A== ARC-Authentication-Results: i=2; mx.google.com; arc=pass (i=1 spf=pass spfdomain=pengutronix.de); spf=pass (google.com: domain of linux-kernel+bounces-36968-ouuuleilei=gmail.com@vger.kernel.org designates 147.75.199.223 as permitted sender) smtp.mailfrom="linux-kernel+bounces-36968-ouuuleilei=gmail.com@vger.kernel.org" Received: from ny.mirrors.kernel.org (ny.mirrors.kernel.org. [147.75.199.223]) by mx.google.com with ESMTPS id vv11-20020a05620a562b00b007832e7649c8si10153895qkn.301.2024.01.24.04.24.28 for (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 24 Jan 2024 04:24:28 -0800 (PST) Received-SPF: pass (google.com: domain of linux-kernel+bounces-36968-ouuuleilei=gmail.com@vger.kernel.org designates 147.75.199.223 as permitted sender) client-ip=147.75.199.223; Authentication-Results: mx.google.com; arc=pass (i=1 spf=pass spfdomain=pengutronix.de); spf=pass (google.com: domain of linux-kernel+bounces-36968-ouuuleilei=gmail.com@vger.kernel.org designates 147.75.199.223 as permitted sender) smtp.mailfrom="linux-kernel+bounces-36968-ouuuleilei=gmail.com@vger.kernel.org" Received: from smtp.subspace.kernel.org (wormhole.subspace.kernel.org [52.25.139.140]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by ny.mirrors.kernel.org (Postfix) with ESMTPS id 1C5C01C21F41 for ; Wed, 24 Jan 2024 12:24:28 +0000 (UTC) Received: from localhost.localdomain (localhost.localdomain [127.0.0.1]) by smtp.subspace.kernel.org (Postfix) with ESMTP id B711565BC3; Wed, 24 Jan 2024 12:22:32 +0000 (UTC) Received: from metis.whiteo.stw.pengutronix.de (metis.whiteo.stw.pengutronix.de [185.203.201.7]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id F03C462A1F for ; Wed, 24 Jan 2024 12:22:25 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=185.203.201.7 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1706098950; cv=none; b=q4rV3zz2nF15tve0Rh7anDjJPcHsS+E1cvfTz8P+pTqp8b4s3cPL3Ac4u7o4GOT58Fa72XXAkjKy0uMCM10KmsKTnQd63qWEDQR2WRH9u/zwk7CyAHc50+g+krnKG5WIRO0zban1WbbwDQnJn1l41J/0gA5qS1pCa2pfIbJea1Q= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1706098950; c=relaxed/simple; bh=IQtFllAeAbEnjjWov46KcbIiLiSA2S5/+KtiKXOriws=; h=From:To:Cc:Subject:Date:Message-Id:In-Reply-To:References: MIME-Version; b=BzuG+u73XLla4Zkxt7uF60mEz2/J3Nzrxnqk0T5fMpURCCHdJPEH0eRFeiSiYtPn5FqP41K/BIIPzhsVnv6OCJo7JyEBb1dEr7BdnleAWPQ+u3rVP6nCS7KjEovEOEw/lh34vEKXjsUjMQofyTcT0Iuez/30eDiL1S1NuREN6pk= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=none (p=none dis=none) header.from=pengutronix.de; spf=pass smtp.mailfrom=pengutronix.de; arc=none smtp.client-ip=185.203.201.7 Authentication-Results: smtp.subspace.kernel.org; dmarc=none (p=none dis=none) header.from=pengutronix.de Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=pengutronix.de Received: from drehscheibe.grey.stw.pengutronix.de ([2a0a:edc0:0:c01:1d::a2]) by metis.whiteo.stw.pengutronix.de with esmtps (TLS1.3:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.92) (envelope-from ) id 1rScGd-0007o6-1B; Wed, 24 Jan 2024 13:22:07 +0100 Received: from [2a0a:edc0:0:1101:1d::ac] (helo=dude04.red.stw.pengutronix.de) by drehscheibe.grey.stw.pengutronix.de with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 (Exim 4.94.2) (envelope-from ) id 1rScGb-0023Zc-Vt; Wed, 24 Jan 2024 13:22:05 +0100 Received: from ore by dude04.red.stw.pengutronix.de with local (Exim 4.96) (envelope-from ) id 1rScGb-003414-2x; Wed, 24 Jan 2024 13:22:05 +0100 From: Oleksij Rempel To: Sebastian Reichel , Rob Herring , Krzysztof Kozlowski , Conor Dooley , Srinivas Kandagatla Cc: Oleksij Rempel , kernel@pengutronix.de, linux-kernel@vger.kernel.org, Liam Girdwood , Mark Brown , "Rafael J. Wysocki" , Daniel Lezcano , Zhang Rui , Lukasz Luba , linux-pm@vger.kernel.org, devicetree@vger.kernel.org, =?utf-8?q?S=C3=B8ren_Andersen?= Subject: [PATCH v2 2/8] dt-bindings: power: reset: add generic PSCRR binding trackers Date: Wed, 24 Jan 2024 13:21:58 +0100 Message-Id: <20240124122204.730370-3-o.rempel@pengutronix.de> X-Mailer: git-send-email 2.39.2 In-Reply-To: <20240124122204.730370-1-o.rempel@pengutronix.de> References: <20240124122204.730370-1-o.rempel@pengutronix.de> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 X-SA-Exim-Connect-IP: 2a0a:edc0:0:c01:1d::a2 X-SA-Exim-Mail-From: ore@pengutronix.de X-SA-Exim-Scanned: No (on metis.whiteo.stw.pengutronix.de); SAEximRunCond expanded to false X-PTX-Original-Recipient: linux-kernel@vger.kernel.org X-getmail-retrieved-from-mailbox: INBOX X-GMAIL-THRID: 1788974536660692075 X-GMAIL-MSGID: 1788974536660692075 Add binding for Power State Change Reason Recording (PSCRR) subsystem Signed-off-by: Oleksij Rempel --- .../bindings/power/reset/pscrr.yaml | 44 +++++++++++++++++++ 1 file changed, 44 insertions(+) create mode 100644 Documentation/devicetree/bindings/power/reset/pscrr.yaml diff --git a/Documentation/devicetree/bindings/power/reset/pscrr.yaml b/Documentation/devicetree/bindings/power/reset/pscrr.yaml new file mode 100644 index 000000000000..c8738b4930fe --- /dev/null +++ b/Documentation/devicetree/bindings/power/reset/pscrr.yaml @@ -0,0 +1,44 @@ +# SPDX-License-Identifier: (GPL-2.0-only OR BSD-2-Clause) +%YAML 1.2 +--- +$id: http://devicetree.org/schemas/power/reset/pscrr.yaml# +$schema: http://devicetree.org/meta-schemas/core.yaml# + +title: Power State Change Reason (PSCR) + +maintainers: + - Oleksij Rempel + +description: Binding for devices responsible to store reasons for power state + changes such as reboot and power-off. Reasons like unknown, under voltage, + and over temperature are captured for diagnostic or automatic recovery + purposes. + +properties: + pscr-under-voltage: + $ref: /schemas/types.yaml#/definitions/uint32 + description: | + Value to indicate an under-voltage condition of a system critical + regulator as the reason for the power state change. + + pscr-over-current: + $ref: /schemas/types.yaml#/definitions/uint32 + description: | + Value to indicate an over-current condition of a system ctitical regulator + as the reason for the power state change. + + pscr-regulator-failure: + $ref: /schemas/types.yaml#/definitions/uint32 + description: | + Value to indicate an unknown, system ctitical regulator related failure + as the reason for the power state change. + + pscr-over-temperature: + $ref: /schemas/types.yaml#/definitions/uint32 + description: | + Value to indicate a system critical over-temperature condition as the + reason for the power state change. + +additionalProperties: true + +... From patchwork Wed Jan 24 12:21:59 2024 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Oleksij Rempel X-Patchwork-Id: 191555 Return-Path: Delivered-To: ouuuleilei@gmail.com Received: by 2002:a05:7300:2553:b0:103:945f:af90 with SMTP id p19csp950695dyi; Wed, 24 Jan 2024 04:24:48 -0800 (PST) X-Google-Smtp-Source: AGHT+IFpEAvaQaACqFStwitIT8XJw4q/j0yfUwjgwOpvqDGivBTO1D5xgF49ndbdAaouDSSbj15c X-Received: by 2002:a05:620a:5686:b0:783:84bd:833f with SMTP id wg6-20020a05620a568600b0078384bd833fmr7967313qkn.6.1706099088388; Wed, 24 Jan 2024 04:24:48 -0800 (PST) ARC-Seal: i=2; a=rsa-sha256; t=1706099088; cv=pass; d=google.com; s=arc-20160816; b=IMp/6ajUonyyoodxT/dqMKvx2ksEZybrfmIT4T8r2+B3g8vnJjaqNQVYrWd+DwkyZ9 OHAiy22jih4SZSixP3jDMLFOTutWIWT2TwbckCsX5QUZAG2ynPvAgfDE8li6gLmPY+7K /KDNSBWqWcS+8qvGTufn7pZVZp+kE8LhFGuUs2IIuFSgkIrW1ZFPqd/7rZD6NBydauxn udvXtEHpbnpsKAEJhg4x97q+YFHVcAoaeOJpZuV518raX4VsEjH3HRVx8E+cqGearpUL FfBH3dVP1C2IqIQuE+8G+WwJi5AJHFOla+EvrO3TuJsDxh6xBYAX8nlFvhNO4f+Se6HT f3vg== ARC-Message-Signature: i=2; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=content-transfer-encoding:mime-version:list-unsubscribe :list-subscribe:list-id:precedence:references:in-reply-to:message-id :date:subject:cc:to:from; bh=GiVRAUnKSYbMgnTJrGxKvyXFHhVHjUFhOuzbLs11cZg=; fh=cTOyeHIiotxFveWD397Up69SLR8Dqpy9YboYIfW0A00=; b=VzMbe2vPCFbIFIsKrYJXUeR6Qds/Kq8CVNcRM0u1pqNCBO9db4nwLtBOijQDu6gXTd SZs+BwTQxnVOtsWwuCsChxAM7TULHeQCcW2zv0U7xYPj4f0IIuL1HdDImNgz2G8l5eyT 2TZa6rObajZROZ6bQXlwuHqV3RcXHfr/QCgdaaa4fYn/dEETCBOCV6dZDsxZDmBYvx9A ArLykT/KWG0iG+rdA+xw+V5g6PzPLstAxUVwG4O02K0PUCq7lFx9/yIQI386sQeLqxGZ iwWd/EIUxDtiMGBuTKWq01Hyl9IiJSufqP/+AhEc3IxPIlUZRIpxBY1zZW5FzRPTCL5v UkWg== ARC-Authentication-Results: i=2; mx.google.com; arc=pass (i=1 spf=pass spfdomain=pengutronix.de); spf=pass (google.com: domain of linux-kernel+bounces-36969-ouuuleilei=gmail.com@vger.kernel.org designates 147.75.199.223 as permitted sender) smtp.mailfrom="linux-kernel+bounces-36969-ouuuleilei=gmail.com@vger.kernel.org" Received: from ny.mirrors.kernel.org (ny.mirrors.kernel.org. [147.75.199.223]) by mx.google.com with ESMTPS id vv11-20020a05620a562b00b007832e7649c8si10153895qkn.301.2024.01.24.04.24.48 for (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 24 Jan 2024 04:24:48 -0800 (PST) Received-SPF: pass (google.com: domain of linux-kernel+bounces-36969-ouuuleilei=gmail.com@vger.kernel.org designates 147.75.199.223 as permitted sender) client-ip=147.75.199.223; Authentication-Results: mx.google.com; arc=pass (i=1 spf=pass spfdomain=pengutronix.de); spf=pass (google.com: domain of linux-kernel+bounces-36969-ouuuleilei=gmail.com@vger.kernel.org designates 147.75.199.223 as permitted sender) smtp.mailfrom="linux-kernel+bounces-36969-ouuuleilei=gmail.com@vger.kernel.org" Received: from smtp.subspace.kernel.org (wormhole.subspace.kernel.org [52.25.139.140]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by ny.mirrors.kernel.org (Postfix) with ESMTPS id 2211B1C22163 for ; Wed, 24 Jan 2024 12:24:48 +0000 (UTC) Received: from localhost.localdomain (localhost.localdomain [127.0.0.1]) by smtp.subspace.kernel.org (Postfix) with ESMTP id C382765BD6; Wed, 24 Jan 2024 12:22:35 +0000 (UTC) Received: from metis.whiteo.stw.pengutronix.de (metis.whiteo.stw.pengutronix.de [185.203.201.7]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 6575F634F7 for ; Wed, 24 Jan 2024 12:22:28 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=185.203.201.7 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1706098951; cv=none; b=Lfje9tsKS3+w4nIBty3bWV466cJkn4LaKlQ89pBa2VYuXYCusWaZ97kr38iRg88NffHo783+5aDML9akpt/3z+wzVLwKVLi80qaQ7ShtK2mMqc5vzZ2VUXDpb4DjevOwG2DZY7Tj63mRndJRwHfovWCWmox75bMwDpaGzv9C6qw= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1706098951; c=relaxed/simple; bh=Q7CJ22s7cVnisV7JjfaOll6mFN9dCNJwXRW0hKY8Xlg=; h=From:To:Cc:Subject:Date:Message-Id:In-Reply-To:References: MIME-Version; b=llMqPsY/riYZX0SJ1GL51LQ8AxwxULXxNCiDDESl4UOczHKMArjk2jmoyC9gohNeAKnQuY42qJG+VTFHzZkjSy0k2jPQEHIi9A0GyDAV7mAIj7AevCBQ5KydRNWIjXepfjz1m8G8B5pIqRAK5mRJo9IdusUICa66MYo2ECCKYPU= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=none (p=none dis=none) header.from=pengutronix.de; spf=pass smtp.mailfrom=pengutronix.de; arc=none smtp.client-ip=185.203.201.7 Authentication-Results: smtp.subspace.kernel.org; dmarc=none (p=none dis=none) header.from=pengutronix.de Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=pengutronix.de Received: from drehscheibe.grey.stw.pengutronix.de ([2a0a:edc0:0:c01:1d::a2]) by metis.whiteo.stw.pengutronix.de with esmtps (TLS1.3:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.92) (envelope-from ) id 1rScGd-0007o7-1C; Wed, 24 Jan 2024 13:22:07 +0100 Received: from [2a0a:edc0:0:1101:1d::ac] (helo=dude04.red.stw.pengutronix.de) by drehscheibe.grey.stw.pengutronix.de with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 (Exim 4.94.2) (envelope-from ) id 1rScGc-0023Zd-0H; Wed, 24 Jan 2024 13:22:06 +0100 Received: from ore by dude04.red.stw.pengutronix.de with local (Exim 4.96) (envelope-from ) id 1rScGb-00341E-30; Wed, 24 Jan 2024 13:22:05 +0100 From: Oleksij Rempel To: Sebastian Reichel , Rob Herring , Krzysztof Kozlowski , Conor Dooley , Srinivas Kandagatla Cc: Oleksij Rempel , kernel@pengutronix.de, linux-kernel@vger.kernel.org, Liam Girdwood , Mark Brown , "Rafael J. Wysocki" , Daniel Lezcano , Zhang Rui , Lukasz Luba , linux-pm@vger.kernel.org, devicetree@vger.kernel.org, =?utf-8?q?S=C3=B8ren_Andersen?= Subject: [PATCH v2 3/8] power: reset: Introduce PSCR Recording Framework for Non-Volatile Storage Date: Wed, 24 Jan 2024 13:21:59 +0100 Message-Id: <20240124122204.730370-4-o.rempel@pengutronix.de> X-Mailer: git-send-email 2.39.2 In-Reply-To: <20240124122204.730370-1-o.rempel@pengutronix.de> References: <20240124122204.730370-1-o.rempel@pengutronix.de> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 X-SA-Exim-Connect-IP: 2a0a:edc0:0:c01:1d::a2 X-SA-Exim-Mail-From: ore@pengutronix.de X-SA-Exim-Scanned: No (on metis.whiteo.stw.pengutronix.de); SAEximRunCond expanded to false X-PTX-Original-Recipient: linux-kernel@vger.kernel.org X-getmail-retrieved-from-mailbox: INBOX X-GMAIL-THRID: 1788974557638513617 X-GMAIL-MSGID: 1788974557638513617 This commit introduces the Power State Change Reasons Recording (PSCRR) framework into the kernel. The framework is vital for systems where PMICs or watchdogs cannot provide information on power state changes. It stores reasons for system shutdowns and reboots, like under-voltage or software-triggered events, in non-volatile hardware storage. This approach is essential for postmortem analysis in scenarios where traditional storage methods (block devices, RAM) are not feasible. The framework aids bootloaders and early-stage system components in recovery decision-making, although it does not cover resets caused by hardware issues like system freezes or watchdog timeouts. Signed-off-by: Oleksij Rempel --- drivers/power/reset/Kconfig | 19 ++ drivers/power/reset/Makefile | 1 + drivers/power/reset/pscrr.c | 353 +++++++++++++++++++++++++++++++++++ include/linux/pscrr.h | 73 ++++++++ 4 files changed, 446 insertions(+) create mode 100644 drivers/power/reset/pscrr.c create mode 100644 include/linux/pscrr.h diff --git a/drivers/power/reset/Kconfig b/drivers/power/reset/Kconfig index fece990af4a7..c6ce7e647048 100644 --- a/drivers/power/reset/Kconfig +++ b/drivers/power/reset/Kconfig @@ -305,3 +305,22 @@ config POWER_MLXBF This driver supports reset or low power mode handling for Mellanox BlueField. endif + +menuconfig PSCRR + bool "Power State Change Reasons (PSCR) Recording Framework" + help + Enables the Power State Change Reasons (PSCR) Recording framework. + + This framework is designed to store reasons for system shutdowns or + reboots, like under voltage or software-triggered events, in non-volatile + hardware storage. It is particularly useful for postmortem analysis, where + traditional storage methods (like block devices or RAM) are not feasible + due to immediate power-down requirements or insufficient power to retain + data. + + This is useful for bootloaders or other early-stage system components to + make recovery decisions based on the last known system state. Note that it + does not cover hardware-induced resets like system freezes or watchdog + timeouts. + + If unsure, say N. diff --git a/drivers/power/reset/Makefile b/drivers/power/reset/Makefile index a95d1bd275d1..e618c34a30f9 100644 --- a/drivers/power/reset/Makefile +++ b/drivers/power/reset/Makefile @@ -31,6 +31,7 @@ obj-$(CONFIG_POWER_RESET_KEYSTONE) += keystone-reset.o obj-$(CONFIG_POWER_RESET_SYSCON) += syscon-reboot.o obj-$(CONFIG_POWER_RESET_SYSCON_POWEROFF) += syscon-poweroff.o obj-$(CONFIG_POWER_RESET_RMOBILE) += rmobile-reset.o +obj-$(CONFIG_PSCRR) += pscrr.o obj-$(CONFIG_REBOOT_MODE) += reboot-mode.o obj-$(CONFIG_SYSCON_REBOOT_MODE) += syscon-reboot-mode.o obj-$(CONFIG_POWER_RESET_SC27XX) += sc27xx-poweroff.o diff --git a/drivers/power/reset/pscrr.c b/drivers/power/reset/pscrr.c new file mode 100644 index 000000000000..651fc210878d --- /dev/null +++ b/drivers/power/reset/pscrr.c @@ -0,0 +1,353 @@ +// SPDX-License-Identifier: GPL-2.0 +// Copyright (C) 2016, Fuzhou Rockchip Electronics Co., Ltd +// Copyright (c) 2024 Pengutronix, Oleksij Rempel +/* + * Based on drivers/power/reset/reboot-mode.c + * Copyright (c) 2016, Fuzhou Rockchip Electronics Co., Ltd + */ + +#include +#include +#include +#include +#include +#include +#include +#include + +#define PREFIX "pscr-" + +enum pscr system_pscr; + +/* + * struct pscr_to_magic_entry - Entry for mapping PSCR to magic values. + * + * This structure represents a single entry in a list that maps Power State + * Change Reason (PSCR) values to corresponding magic values. Each entry + * associates a specific PSCR with a unique magic value, facilitating easy + * translation between the two. + * + * @pscr: The PSCR value. + * @magic: The corresponding magic value. + * @list: List head for chaining multiple such entries. + */ +struct pscr_to_magic_entry { + enum pscr pscr; + u32 magic; + struct list_head list; +}; + +/* + * struct pscr_map - Maps device tree property names to PSCR values. + * + * @dt_prop_name: Device tree property name without the "pscr-" prefix. + * @pscr: The corresponding PSCR enum value for the given property name. + */ +struct pscr_map { + const char *dt_prop_name; + enum pscr pscr; +}; + +/* + * struct pscr_map - Maps shortened DT property names to PSCR values. + * + * This structure maps device tree property names, with the "pscr-" prefix + * omitted, to their corresponding Power State Change Reason (PSCR) values. + */ +struct pscr_map pscr_map_table[] = { + { "under-voltage", PSCR_UNDER_VOLTAGE }, + { "over-current", PSCR_OVER_CURRENT }, + { "regulator-failure", PSCR_REGULATOR_FAILURE }, + { "over-temperature", PSCR_OVERTEMPERATURE }, +}; + +/* + * pscr_find_from_dt_name - Finds the PSCR value for a given DT property name. + * + * @dt_prop_name: The device tree property name, without the "pscr-" prefix, to + * look up. + * Returns the corresponding PSCR value or -ENOENT if not found. + */ +static int find_pscr_by_string(const char *dt_prop_name) +{ + int i; + + for (i = 0; i < ARRAY_SIZE(pscr_map_table); i++) { + if (!strcmp(dt_prop_name, pscr_map_table[i].dt_prop_name)) + return pscr_map_table[i].pscr; + } + + return -ENOENT; +} + +static enum pscr get_pscr_by_magic(struct pscrr_device *pscrr_dev, u32 magic) +{ + struct pscr_to_magic_entry *map_entry; + + list_for_each_entry(map_entry, &pscrr_dev->pscr_map_list, list) { + if (map_entry->magic == magic) + return map_entry->pscr; + } + + return 0; +} + +static u32 get_magic_by_pscr(struct pscrr_device *pscrr_dev, enum pscr pscr) +{ + struct pscr_to_magic_entry *map_entry; + + list_for_each_entry(map_entry, &pscrr_dev->pscr_map_list, list) { + if (map_entry->pscr == pscr) + return map_entry->magic; + } + + return 0; +} + +/** + * set_power_state_change_reason() - Set the system's power state change reason + * @pscr: The enum value representing the power state change reason + * + * This function sets the system's power state change reason based on the + * provided enum value. + */ +void set_power_state_change_reason(enum pscr pscr) +{ + system_pscr = pscr; +} +EXPORT_SYMBOL_GPL(set_power_state_change_reason); + +static const char *pscr_to_por_string(enum pscr pscr) +{ + switch (pscr) { + case PSCR_UNDER_VOLTAGE: + return POWER_ON_REASON_BROWN_OUT; + case PSCR_OVER_CURRENT: + return POWER_ON_REASON_OVER_CURRENT; + case PSCR_REGULATOR_FAILURE: + return POWER_ON_REASON_REGULATOR_FAILURE; + case PSCR_OVERTEMPERATURE: + return POWER_ON_REASON_OVERTEMPERATURE; + default: + } + + return POWER_ON_REASON_UNKNOWN; +} + +static ssize_t power_state_change_reason_show(struct device *dev, + struct device_attribute *attr, + char *buf) +{ + struct pscrr_device *pscrr_dev = dev_get_drvdata(dev); + + return sprintf(buf, "%s\n", pscr_to_por_string(pscrr_dev->last_pscr)); +} +static DEVICE_ATTR_RO(power_state_change_reason); + +int handle_last_pscr(struct pscrr_device *pscrr_dev) +{ + u32 magic; + int ret; + + ret = pscrr_dev->read(pscrr_dev, &magic); + if (ret) + return ret; + + pscrr_dev->last_pscr = get_pscr_by_magic(pscrr_dev, magic); + + dev_info(pscrr_dev->dev, "Last recorded power state change reason: %s\n", + pscr_to_por_string(pscrr_dev->last_pscr)); + + ret = pscrr_dev->write(pscrr_dev, 0); + if (ret) + dev_err(pscrr_dev->dev, "Failed to clear power state change reason\n"); + + return ret; +} + +static int pscrr_notify(struct notifier_block *this, unsigned long x, void *c) +{ + struct pscrr_device *pscrr_dev = container_of(this, struct pscrr_device, + reboot_notifier); + u32 magic; + + magic = get_magic_by_pscr(pscrr_dev, system_pscr); + pscrr_dev->write(pscrr_dev, magic); + + return NOTIFY_DONE; +} + +/** + * pscrr_process_property() - Process a power state change reason property + * @pscrr_dev: Pointer to the pscrr_device structure + * @prop: Pointer to the property structure to be processed + * + * This function processes a device tree property representing a power state + * change reason and initializes the relevant data structures. + * + * Returns: 0 on success, -ENOMEM on memory allocation failure. + */ +static int pscrr_process_property(struct pscrr_device *pscrr_dev, + struct property *prop) +{ + struct pscr_to_magic_entry *map_entry; + struct device *dev = pscrr_dev->dev; + size_t len = strlen(PREFIX); + int ret; + + if (strncmp(prop->name, PREFIX, len)) + return 0; + + map_entry = devm_kzalloc(dev, sizeof(*map_entry), GFP_KERNEL); + if (!map_entry) + return -ENOMEM; + + ret = of_property_read_u32(dev->of_node, prop->name, &map_entry->magic); + if (ret) { + dev_err(dev, "Can't read magic number for %s: %pe\n", + prop->name, ERR_PTR(ret)); + devm_kfree(dev, map_entry); + return 0; + } + + if (!map_entry->magic) { + dev_err(dev, "%s with magic number == 0\n", prop->name); + devm_kfree(dev, map_entry); + return 0; + } + + map_entry->pscr = find_pscr_by_string(prop->name + len); + if (map_entry->pscr < 0) { + dev_err(dev, "unsupported reason name(%s): %pe\n", + prop->name, ERR_PTR(map_entry->pscr)); + devm_kfree(dev, map_entry); + return 0; + } + + if (map_entry->magic > pscrr_dev->max_magic_val) + pscrr_dev->max_magic_val = map_entry->magic; + + dev_dbg(dev, "registering reason = %s, magic = %d, pscr = %d\n", + prop->name, map_entry->magic, map_entry->pscr); + list_add_tail(&map_entry->list, &pscrr_dev->pscr_map_list); + + return 0; +} + +/* + * pscrr_register() - Register the pscr driver and initialize power state change + * reasons + * @pscrr_dev: Pointer to the pscrr_device structure + * + * This function registers the pscr driver and initializes power state change + * reasons based on device tree properties. + * + * Returns: 0 on success, -ENOMEM on memory allocation failure + */ +int pscrr_register(struct pscrr_device *pscrr_dev) +{ + struct device_node *np = pscrr_dev->dev->of_node; + struct property *prop; + int ret; + + INIT_LIST_HEAD(&pscrr_dev->pscr_map_list); + + for_each_property_of_node(np, prop) { + ret = pscrr_process_property(pscrr_dev, prop); + if (ret) + return ret; + } + + pscrr_dev->reboot_notifier.notifier_call = pscrr_notify; + register_reboot_notifier(&pscrr_dev->reboot_notifier); + + dev_set_drvdata(pscrr_dev->dev, pscrr_dev); + + ret = device_create_file(pscrr_dev->dev, &dev_attr_power_state_change_reason); + if (ret) + dev_err(pscrr_dev->dev, "Could not create sysfs entry\n"); + + return ret; +} +EXPORT_SYMBOL_GPL(pscrr_register); + +/* + * pscrr_unregister() - Unregister the pscr driver's reboot notifier + * @pscrr_dev: Pointer to the pscrr_device structure + * + * This function unregisters the reboot notifier for the pscr driver. + */ +void pscrr_unregister(struct pscrr_device *pscrr_dev) +{ + unregister_reboot_notifier(&pscrr_dev->reboot_notifier); +} +EXPORT_SYMBOL_GPL(pscrr_unregister); + +static void devm_pscrr_release(struct device *dev, void *res) +{ + pscrr_unregister(*(struct pscrr_device **)res); +} + +/** + * devm_pscrr_register - Register a device-managed PSCR driver + * @dev: Device to associate the PSCR driver with + * @pscrr_dev: Pointer to the PSCR driver to be registered + * + * Registers a Power State Change Reason (PSCR) driver as a device-managed + * resource. + * + * Returns: 0 on successful registration or a negative error code on failure. + */ +int devm_pscrr_register(struct device *dev, struct pscrr_device *pscrr_dev) +{ + struct pscrr_device **dr; + int rc; + + dr = devres_alloc(devm_pscrr_release, sizeof(*dr), GFP_KERNEL); + if (!dr) + return -ENOMEM; + + rc = pscrr_register(pscrr_dev); + if (rc) { + devres_free(dr); + return rc; + } + + *dr = pscrr_dev; + devres_add(dev, dr); + + return 0; +} +EXPORT_SYMBOL_GPL(devm_pscrr_register); + +static int devm_pscrr_match(struct device *dev, void *res, void *data) +{ + struct pscrr_device **p = res; + + if (WARN_ON(!p || !*p)) + return 0; + + return *p == data; +} + +/** + * devm_pscrr_unregister - Unregister a managed PSCR driver + * @dev: Device associated with the PSCR driver + * @pscrr_dev: Pointer to the PSCR driver to unregister + * + * Unregisters a device-managed Power State Change Reason (PSCR) driver. + * It handles the cleanup and release of resources associated with the PSCR + * driver which was previously registered. + */ +void devm_pscrr_unregister(struct device *dev, + struct pscrr_device *pscrr_dev) +{ + WARN_ON(devres_release(dev, + devm_pscrr_release, + devm_pscrr_match, pscrr_dev)); +} +EXPORT_SYMBOL_GPL(devm_pscrr_unregister); + +MODULE_AUTHOR("Oleksij Rempel "); +MODULE_DESCRIPTION("Power State Change Reason (PSCR) Recording framework"); +MODULE_LICENSE("GPL"); diff --git a/include/linux/pscrr.h b/include/linux/pscrr.h new file mode 100644 index 000000000000..2de9d9bc9aeb --- /dev/null +++ b/include/linux/pscrr.h @@ -0,0 +1,73 @@ +/* SPDX-License-Identifier: GPL-2.0 */ +#ifndef __PSCRR_H__ +#define __PSCRR_H__ + +/* + * enum pscr - Enumerates reasons for power state changes. + * + * This enum lists the various reasons why a power state change might + * occur in a system. Each value represents a specific condition that + * could trigger a change in power state, such as shutdown or reboot. + * + * PSCR_UNKNOWN: Represents an unknown or unspecified reason. + * PSCR_UNDER_VOLTAGE: Indicates a power state change due to under-voltage. + * PSCR_OVER_CURRENT: Indicates a power state change due to over-current. + * PSCR_REGULATOR_FAILURE: Indicates a failure in a voltage regulator. + * PSCR_OVERTEMPERATURE: Indicates an over-temperature condition. + */ +enum pscr { + PSCR_UNKNOWN, + PSCR_UNDER_VOLTAGE, + PSCR_OVER_CURRENT, + PSCR_REGULATOR_FAILURE, + PSCR_OVERTEMPERATURE, +}; + +/* + * struct pscrr_device - Manages a Power State Change Reason Recorder device. + * + * This structure is utilized for controlling a device responsible for + * recording reasons for power state changes (PSCR). It includes mechanisms + * for mapping PSCR values to specific magic codes, storing these mappings, + * and recovering the last PSCR value from storage during system start-up. + * + * @dev: Device structure pointer. + * @pscr_map_list: List head for structs holding PSCR to magic code mappings. + * @write: Function pointer to write a new mapped PSCR value. + * @read: Function pointer to read the current mapped PSCR value. + * @reboot_notifier: Notifier block for recording PSCR at reboot. + * @max_magic_val: Maximum permissible magic code, used for verifying storage + * capacity and mapping integrity. + * @last_pscr: Last PSCR value recovered from storage at system start, + * representing the reason for the last system power cycle. + */ +struct pscrr_device { + struct device *dev; + struct list_head pscr_map_list; + int (*write)(struct pscrr_device *pscrr_dev, u32 magic); + int (*read)(struct pscrr_device *pscrr_dev, u32 *magic); + struct notifier_block reboot_notifier; + u32 max_magic_val; + enum pscr last_pscr; +}; + +int pscrr_register(struct pscrr_device *pscrr_dev); +void pscrr_unregister(struct pscrr_device *pscrr_dev); +int devm_pscrr_register(struct device *dev, + struct pscrr_device *pscrr_dev); +void devm_pscrr_unregister(struct device *dev, + struct pscrr_device *pscrr_dev); +int handle_last_pscr(struct pscrr_device *pscrr_dev); + +#if IS_ENABLED(CONFIG_PSCRR) + +void set_power_state_change_reason(enum pscr pscr); + +#else + +static inline void set_power_state_change_reason(enum pscr pscr) +{ +} +#endif + +#endif From patchwork Wed Jan 24 12:22:00 2024 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Oleksij Rempel X-Patchwork-Id: 191550 Return-Path: Delivered-To: ouuuleilei@gmail.com Received: by 2002:a05:7300:2553:b0:103:945f:af90 with SMTP id p19csp949962dyi; Wed, 24 Jan 2024 04:23:26 -0800 (PST) X-Google-Smtp-Source: AGHT+IE3/gAw7Ts87OBW+cxavS6/OwwYDrQoFXfaSICl64xvJFHAQBbmUsuOraBLvF8tnXm28Ebb X-Received: by 2002:a05:6214:2248:b0:685:d0cc:2968 with SMTP id c8-20020a056214224800b00685d0cc2968mr3005434qvc.98.1706099006096; Wed, 24 Jan 2024 04:23:26 -0800 (PST) ARC-Seal: i=2; a=rsa-sha256; t=1706099006; cv=pass; d=google.com; s=arc-20160816; b=zrOwe5HhWNZOnYr5h5X5ROXiTfsUlCkr8r0n+2R99lvtPTSG2OTlYTA8LhcvE+SgfI nNML64cxPOmT+5xV/jrxbMF0eL49wX2fmepPG7YysAEnG8HBTv+RuAdg9NCwrMStAj1K DyXe4Ct8AQBOaXSjyrBSANHjEW8khyh0OA3F/BEe9eTwzSuAYGtJDgaC9c9JDsblNpoT w7XBpfcOt1+72/yltHBHAV6d5o3yaxM/JVWvGcXK5pMv8nUOdBDex0UuXuNQ/JR5Bim1 6tMlEo0rOt5MWeHsnZY7K1s0sce+l+WpCMnoBD3goK52P4/omME12yKpP9eYHz+Uljef g0Sg== ARC-Message-Signature: i=2; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=content-transfer-encoding:mime-version:list-unsubscribe :list-subscribe:list-id:precedence:references:in-reply-to:message-id :date:subject:cc:to:from; bh=MCo+mJx8B736yFIbMduNCBjdP1mfg7iqcGmcucw70hE=; fh=cTOyeHIiotxFveWD397Up69SLR8Dqpy9YboYIfW0A00=; b=hhC1GGQ0AC/TLndnTqVUxjLqu1grykcyyDMoTg7C5xlPkGTQhWNTZyhvB4HXDfqC+O dkDabaiJESPeAI13Gjqe6KnXZrtUyqVbvZFe1KuJeaWsZNjiX2NarklUb6BUvGM93pd7 wzTNVjq7BjPaYifmGcQN4eoGIyB0EzpGCA8opVQwYInfeadPAFustfmVs5xiYeB2/XmK XRxLSkZWpr8TfoJToXOIxuNnhil8pfxpwnEuy18GzJOGl+6LS2mEMKcr4ZtmVbMP9U1g 1sxiHz9O98pUzIkvjGFwUnpPXErq9pkNqFqIYqH48oMtEEglOwhLLsRWt2vpfsz20HUh 04GQ== ARC-Authentication-Results: i=2; mx.google.com; arc=pass (i=1 spf=pass spfdomain=pengutronix.de); spf=pass (google.com: domain of linux-kernel+bounces-36964-ouuuleilei=gmail.com@vger.kernel.org designates 147.75.199.223 as permitted sender) smtp.mailfrom="linux-kernel+bounces-36964-ouuuleilei=gmail.com@vger.kernel.org" Received: from ny.mirrors.kernel.org (ny.mirrors.kernel.org. [147.75.199.223]) by mx.google.com with ESMTPS id d19-20020a0caa13000000b00680503d5c6bsi10291293qvb.149.2024.01.24.04.23.25 for (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 24 Jan 2024 04:23:26 -0800 (PST) Received-SPF: pass (google.com: domain of linux-kernel+bounces-36964-ouuuleilei=gmail.com@vger.kernel.org designates 147.75.199.223 as permitted sender) client-ip=147.75.199.223; Authentication-Results: mx.google.com; arc=pass (i=1 spf=pass spfdomain=pengutronix.de); spf=pass (google.com: domain of linux-kernel+bounces-36964-ouuuleilei=gmail.com@vger.kernel.org designates 147.75.199.223 as permitted sender) smtp.mailfrom="linux-kernel+bounces-36964-ouuuleilei=gmail.com@vger.kernel.org" Received: from smtp.subspace.kernel.org (wormhole.subspace.kernel.org [52.25.139.140]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by ny.mirrors.kernel.org (Postfix) with ESMTPS id DEC601C219D0 for ; Wed, 24 Jan 2024 12:23:25 +0000 (UTC) Received: from localhost.localdomain (localhost.localdomain [127.0.0.1]) by smtp.subspace.kernel.org (Postfix) with ESMTP id 255A364CF1; Wed, 24 Jan 2024 12:22:30 +0000 (UTC) Received: from metis.whiteo.stw.pengutronix.de (metis.whiteo.stw.pengutronix.de [185.203.201.7]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 1AACD6310F for ; Wed, 24 Jan 2024 12:22:25 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=185.203.201.7 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1706098947; cv=none; b=RlWAvz3ipUFSdlG9EOe+fO3eGIVtgVYeiRyhI3ePO8420z1EV7Pb9KL9PUWIVyJLug4iFBoTH9bOnA6up7U/KM5MV1Q0DtRxS5RgJ8wqyK7ajEm2366xrZo7aJ/Y5+I1hkCDQPbfiG05TVP9T7TRVuUG0Imp1IfNQhqsFfPzL0U= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1706098947; c=relaxed/simple; bh=HHxbDfRuHjBw0BBMrvLJdWgyYMSpJ3v1+tlxqNpDDsA=; h=From:To:Cc:Subject:Date:Message-Id:In-Reply-To:References: MIME-Version; b=eJMuNV5ZVOlNShni0bhb5XVBfNcqKS7MObi8eQUe7lvTmw6upHQhhdbHJh/YETMF22ovrJtVen9QGJprRWcfVbSEyckSaUvskBa8EtA5jiN4QEi3fLK25VEATbnBbfFUaG9TmEsL8dn9kaDxXWswC+QB5ksgM7WX0iI4gzSA6oU= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=none (p=none dis=none) header.from=pengutronix.de; spf=pass smtp.mailfrom=pengutronix.de; arc=none smtp.client-ip=185.203.201.7 Authentication-Results: smtp.subspace.kernel.org; dmarc=none (p=none dis=none) header.from=pengutronix.de Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=pengutronix.de Received: from drehscheibe.grey.stw.pengutronix.de ([2a0a:edc0:0:c01:1d::a2]) by metis.whiteo.stw.pengutronix.de with esmtps (TLS1.3:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.92) (envelope-from ) id 1rScGd-0007o8-1C; Wed, 24 Jan 2024 13:22:07 +0100 Received: from [2a0a:edc0:0:1101:1d::ac] (helo=dude04.red.stw.pengutronix.de) by drehscheibe.grey.stw.pengutronix.de with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 (Exim 4.94.2) (envelope-from ) id 1rScGc-0023Ze-1P; Wed, 24 Jan 2024 13:22:06 +0100 Received: from ore by dude04.red.stw.pengutronix.de with local (Exim 4.96) (envelope-from ) id 1rScGb-00341O-34; Wed, 24 Jan 2024 13:22:05 +0100 From: Oleksij Rempel To: Sebastian Reichel , Rob Herring , Krzysztof Kozlowski , Conor Dooley , Srinivas Kandagatla Cc: Oleksij Rempel , kernel@pengutronix.de, linux-kernel@vger.kernel.org, Liam Girdwood , Mark Brown , "Rafael J. Wysocki" , Daniel Lezcano , Zhang Rui , Lukasz Luba , linux-pm@vger.kernel.org, devicetree@vger.kernel.org, =?utf-8?q?S=C3=B8ren_Andersen?= Subject: [PATCH v2 4/8] dt-bindings: power: reset: add bindings for NVMEM hardware storing PSCR Data Date: Wed, 24 Jan 2024 13:22:00 +0100 Message-Id: <20240124122204.730370-5-o.rempel@pengutronix.de> X-Mailer: git-send-email 2.39.2 In-Reply-To: <20240124122204.730370-1-o.rempel@pengutronix.de> References: <20240124122204.730370-1-o.rempel@pengutronix.de> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 X-SA-Exim-Connect-IP: 2a0a:edc0:0:c01:1d::a2 X-SA-Exim-Mail-From: ore@pengutronix.de X-SA-Exim-Scanned: No (on metis.whiteo.stw.pengutronix.de); SAEximRunCond expanded to false X-PTX-Original-Recipient: linux-kernel@vger.kernel.org X-getmail-retrieved-from-mailbox: INBOX X-GMAIL-THRID: 1788974471649273266 X-GMAIL-MSGID: 1788974471649273266 Add device tree bindings that describe hardware implementations of Non-Volatile Memory (NVMEM) used for storing Power State Change Reasons (PSCR). Signed-off-by: Oleksij Rempel --- .../bindings/power/reset/pscrr-nvmem.yaml | 53 +++++++++++++++++++ 1 file changed, 53 insertions(+) create mode 100644 Documentation/devicetree/bindings/power/reset/pscrr-nvmem.yaml diff --git a/Documentation/devicetree/bindings/power/reset/pscrr-nvmem.yaml b/Documentation/devicetree/bindings/power/reset/pscrr-nvmem.yaml new file mode 100644 index 000000000000..779920dea283 --- /dev/null +++ b/Documentation/devicetree/bindings/power/reset/pscrr-nvmem.yaml @@ -0,0 +1,53 @@ +# SPDX-License-Identifier: (GPL-2.0-only OR BSD-2-Clause) +%YAML 1.2 +--- +$id: http://devicetree.org/schemas/power/reset/pscrr-nvmem.yaml# +$schema: http://devicetree.org/meta-schemas/core.yaml# + +title: Generic NVMEM Power State Change Reason Recorder + +maintainers: + - Oleksij Rempel + +description: This binding describes the Non-Volatile Memory (NVMEM) hardware + that stores Power State Change Reasons (PSCR). + +allOf: + - $ref: pscrr.yaml# + +properties: + compatible: + const: pscrr-nvmem + + nvmem-cells: + description: | + A phandle pointing to the nvmem-cells node where the power state change + reasons are stored. + maxItems: 1 + + nvmem-cell-names: + items: + - const: pscr + + pscr-under-voltage: true + pscr-over-current: true + pscr-regulator-failure: true + pscr-over-temperature: true + +required: + - compatible + - nvmem-cells + - nvmem-cell-names + +additionalProperties: false + +examples: + - | + power-state-change-reason { + compatible = "pscrr-nvmem"; + nvmem-cells = <&pscr_cell>; + nvmem-cell-names = "pscr"; + pscr-under-voltage = <1>; + pscr-over-temperature = <2>; + }; +... From patchwork Wed Jan 24 12:22:01 2024 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Oleksij Rempel X-Patchwork-Id: 191551 Return-Path: Delivered-To: ouuuleilei@gmail.com Received: by 2002:a05:7300:2553:b0:103:945f:af90 with SMTP id p19csp950241dyi; Wed, 24 Jan 2024 04:23:57 -0800 (PST) X-Google-Smtp-Source: AGHT+IGRlVofz+WPRR/TAbWYNm/gD0uBJ1FmFu2OKMurnZGaeBUry625kppogF43H1Uo/bfXhzii X-Received: by 2002:a17:90a:69c3:b0:286:6cc1:866c with SMTP id s61-20020a17090a69c300b002866cc1866cmr3790119pjj.81.1706099037367; Wed, 24 Jan 2024 04:23:57 -0800 (PST) ARC-Seal: i=2; a=rsa-sha256; t=1706099037; cv=pass; d=google.com; s=arc-20160816; b=l1F4wn67NzO5QWGdlrBsOsjBlnHr14Av1+cibrzkXX/19/kasCxQwGnj5roCo3OEPA RyP7zzoGOzMb6nsoruhhFMgj7ZMqde9GVMJa3thJ+souy5me2V6ldr02p36vp3KeIvNA tP65pj08n593vl8naWypXSAGm1wMWIt+07JtXwL7bdPhdPusVGk76nF3KXZvRzDtwMot 8vjNn20HUAjM5kCskrUu0DNzFfrK9LY+XxNIQgmFD5ubqNMI7+cEYdDiqRvEv6NPsJJV HTWBIJNtmH9H1bPl78H79ERMiS4dj6i2Bk29I6/DghxrpINNokGEBzPubRerzGFlfdoF 58+w== ARC-Message-Signature: i=2; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=content-transfer-encoding:mime-version:list-unsubscribe :list-subscribe:list-id:precedence:references:in-reply-to:message-id :date:subject:cc:to:from; bh=U3bP/TLZzrjpnEIBLPJodnC8KbDW4b/2sT2nek0MY1s=; fh=cTOyeHIiotxFveWD397Up69SLR8Dqpy9YboYIfW0A00=; b=j87hEbIHS59ZhfWtE1Z4kYV4TyvBWutayyckDQe737jXozIgb4YEaVwrYPMnwCJC+P fALglZhZQf268047/Cgk7F9dCdFcsugf4VaVazZuj5j7OS/6IBXm6H60dwnstifmivfF pq4kF2svTRUlfGhMbxTzeox7hMl7OJW4YUaVNQlgI8nHE9tyfCa1BNSXiwAMTScR0n3w UGxKHNTKzYmzOOdMzYf9v8WIXOmvOsBjW31Y6AaLPZD/i0OpowWhY58c06cnOS8S4/Mm CrrT6BIFhyD2M3hXFSz6rIoxjKrNplqpWmasjzwLlg33/0mSMwj0gQI4el1oiRCTjnn9 K3AQ== ARC-Authentication-Results: i=2; mx.google.com; arc=pass (i=1 spf=pass spfdomain=pengutronix.de); spf=pass (google.com: domain of linux-kernel+bounces-36963-ouuuleilei=gmail.com@vger.kernel.org designates 2604:1380:45e3:2400::1 as permitted sender) smtp.mailfrom="linux-kernel+bounces-36963-ouuuleilei=gmail.com@vger.kernel.org" Received: from sv.mirrors.kernel.org (sv.mirrors.kernel.org. [2604:1380:45e3:2400::1]) by mx.google.com with ESMTPS id bv13-20020a17090af18d00b0028e7b59d66dsi11702735pjb.3.2024.01.24.04.23.57 for (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 24 Jan 2024 04:23:57 -0800 (PST) Received-SPF: pass (google.com: domain of linux-kernel+bounces-36963-ouuuleilei=gmail.com@vger.kernel.org designates 2604:1380:45e3:2400::1 as permitted sender) client-ip=2604:1380:45e3:2400::1; Authentication-Results: mx.google.com; arc=pass (i=1 spf=pass spfdomain=pengutronix.de); spf=pass (google.com: domain of linux-kernel+bounces-36963-ouuuleilei=gmail.com@vger.kernel.org designates 2604:1380:45e3:2400::1 as permitted sender) smtp.mailfrom="linux-kernel+bounces-36963-ouuuleilei=gmail.com@vger.kernel.org" Received: from smtp.subspace.kernel.org (wormhole.subspace.kernel.org [52.25.139.140]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by sv.mirrors.kernel.org (Postfix) with ESMTPS id F0A8D286F1D for ; Wed, 24 Jan 2024 12:23:27 +0000 (UTC) Received: from localhost.localdomain (localhost.localdomain [127.0.0.1]) by smtp.subspace.kernel.org (Postfix) with ESMTP id 3A1F764CFA; Wed, 24 Jan 2024 12:22:30 +0000 (UTC) Received: from metis.whiteo.stw.pengutronix.de (metis.whiteo.stw.pengutronix.de [185.203.201.7]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id F04856310C for ; Wed, 24 Jan 2024 12:22:25 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=185.203.201.7 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1706098947; cv=none; b=Q+Q5KjRno+6O6oUhcgDvh+j/0pDCzlrPJDoEdXrw0QpGaHziYKx7IQZM6rO1IC385Ej2WdFhDFxRIrcBLRQLctUdbtpxMrSGAPfEWKRtoHLqXu1A8WcblqzsV8sDsnpbE1/pOOMXAPyMkT0gUDi364BNBgu+LomU/2WybqsAe2k= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1706098947; c=relaxed/simple; bh=viEuHOnCMvFs1FiV9peHFb17kutxKUU/HIZcjaimZ5g=; h=From:To:Cc:Subject:Date:Message-Id:In-Reply-To:References: MIME-Version; b=Z83eAm/Bol6cnlAxqUZJFaiqi+N/2A7IbinFiurd6nnw/HxrxqF0iZ2o93OuS94KGTtdNoM/TnONKhvjFu2qp53YZnPoFuByy5dBk0InY7GMWxE4Vtx26dpOTeF9OW3AZZw136X2DSUMet+/sEFEsBSuBr21I+XUdKqlkiLqC9k= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=none (p=none dis=none) header.from=pengutronix.de; spf=pass smtp.mailfrom=pengutronix.de; arc=none smtp.client-ip=185.203.201.7 Authentication-Results: smtp.subspace.kernel.org; dmarc=none (p=none dis=none) header.from=pengutronix.de Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=pengutronix.de Received: from drehscheibe.grey.stw.pengutronix.de ([2a0a:edc0:0:c01:1d::a2]) by metis.whiteo.stw.pengutronix.de with esmtps (TLS1.3:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.92) (envelope-from ) id 1rScGd-0007o9-1C; Wed, 24 Jan 2024 13:22:07 +0100 Received: from [2a0a:edc0:0:1101:1d::ac] (helo=dude04.red.stw.pengutronix.de) by drehscheibe.grey.stw.pengutronix.de with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 (Exim 4.94.2) (envelope-from ) id 1rScGc-0023Zg-2a; Wed, 24 Jan 2024 13:22:06 +0100 Received: from ore by dude04.red.stw.pengutronix.de with local (Exim 4.96) (envelope-from ) id 1rScGb-00341Y-37; Wed, 24 Jan 2024 13:22:05 +0100 From: Oleksij Rempel To: Sebastian Reichel , Rob Herring , Krzysztof Kozlowski , Conor Dooley , Srinivas Kandagatla Cc: Oleksij Rempel , kernel@pengutronix.de, linux-kernel@vger.kernel.org, Liam Girdwood , Mark Brown , "Rafael J. Wysocki" , Daniel Lezcano , Zhang Rui , Lukasz Luba , linux-pm@vger.kernel.org, devicetree@vger.kernel.org, =?utf-8?q?S=C3=B8ren_Andersen?= Subject: [PATCH v2 5/8] nvmem: provide consumer access to cell size metrics Date: Wed, 24 Jan 2024 13:22:01 +0100 Message-Id: <20240124122204.730370-6-o.rempel@pengutronix.de> X-Mailer: git-send-email 2.39.2 In-Reply-To: <20240124122204.730370-1-o.rempel@pengutronix.de> References: <20240124122204.730370-1-o.rempel@pengutronix.de> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 X-SA-Exim-Connect-IP: 2a0a:edc0:0:c01:1d::a2 X-SA-Exim-Mail-From: ore@pengutronix.de X-SA-Exim-Scanned: No (on metis.whiteo.stw.pengutronix.de); SAEximRunCond expanded to false X-PTX-Original-Recipient: linux-kernel@vger.kernel.org X-getmail-retrieved-from-mailbox: INBOX X-GMAIL-THRID: 1788974504082997098 X-GMAIL-MSGID: 1788974504082997098 Add nvmem_cell_get_size() function to provide access to cell size metrics. In some cases we may get cell size less as consumer would expect it. So, nvmem_cell_write() would fail with incorrect buffer size. Signed-off-by: Oleksij Rempel --- drivers/nvmem/core.c | 25 +++++++++++++++++++++++++ include/linux/nvmem-consumer.h | 7 +++++++ 2 files changed, 32 insertions(+) diff --git a/drivers/nvmem/core.c b/drivers/nvmem/core.c index 980123fb4dde..a21e5649fcda 100644 --- a/drivers/nvmem/core.c +++ b/drivers/nvmem/core.c @@ -1790,6 +1790,31 @@ int nvmem_cell_write(struct nvmem_cell *cell, void *buf, size_t len) EXPORT_SYMBOL_GPL(nvmem_cell_write); +/** + * nvmem_cell_get_size() - Get the size of a given nvmem cell + * @cell: nvmem cell to be queried. + * @bytes: Pointer to store the size of the cell in bytes. Can be NULL. + * @bits: Pointer to store the size of the cell in bits. Can be NULL. + * + * Return: 0 on success or negative on failure. + */ +int nvmem_cell_get_size(struct nvmem_cell *cell, size_t *bytes, size_t *bits) +{ + struct nvmem_cell_entry *entry = cell->entry; + + if (!entry->nvmem) + return -EINVAL; + + if (bytes) + *bytes = entry->bytes; + + if (bits) + *bits = entry->nbits; + + return 0; +} +EXPORT_SYMBOL_GPL(nvmem_cell_get_size); + static int nvmem_cell_read_common(struct device *dev, const char *cell_id, void *val, size_t count) { diff --git a/include/linux/nvmem-consumer.h b/include/linux/nvmem-consumer.h index 34c0e58dfa26..bcb0e17e415d 100644 --- a/include/linux/nvmem-consumer.h +++ b/include/linux/nvmem-consumer.h @@ -56,6 +56,7 @@ void nvmem_cell_put(struct nvmem_cell *cell); void devm_nvmem_cell_put(struct device *dev, struct nvmem_cell *cell); void *nvmem_cell_read(struct nvmem_cell *cell, size_t *len); int nvmem_cell_write(struct nvmem_cell *cell, void *buf, size_t len); +int nvmem_cell_get_size(struct nvmem_cell *cell, size_t *bytes, size_t *bits); int nvmem_cell_read_u8(struct device *dev, const char *cell_id, u8 *val); int nvmem_cell_read_u16(struct device *dev, const char *cell_id, u16 *val); int nvmem_cell_read_u32(struct device *dev, const char *cell_id, u32 *val); @@ -128,6 +129,12 @@ static inline int nvmem_cell_write(struct nvmem_cell *cell, return -EOPNOTSUPP; } +static inline int nvmem_cell_get_size(struct nvmem_cell *cell, size_t *bytes, + size_t *bits) +{ + return -EOPNOTSUPP; +} + static inline int nvmem_cell_read_u8(struct device *dev, const char *cell_id, u8 *val) { From patchwork Wed Jan 24 12:22:02 2024 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Oleksij Rempel X-Patchwork-Id: 191554 Return-Path: Delivered-To: ouuuleilei@gmail.com Received: by 2002:a05:7300:2553:b0:103:945f:af90 with SMTP id p19csp950584dyi; Wed, 24 Jan 2024 04:24:36 -0800 (PST) X-Google-Smtp-Source: AGHT+IFbqDeNQfoK6ZBMjpP5XwR7OexeD+L8RDqYT98AcLPcISRnIPfdgQJjJWonjZ6AK5CwQykr X-Received: by 2002:a0d:dd03:0:b0:5d7:1940:8df8 with SMTP id g3-20020a0ddd03000000b005d719408df8mr535575ywe.95.1706099076312; Wed, 24 Jan 2024 04:24:36 -0800 (PST) ARC-Seal: i=2; a=rsa-sha256; t=1706099076; cv=pass; d=google.com; s=arc-20160816; b=l19D2guD16jrXNvGmrj5dfTLqpSDUzO92VBEnM/hcP3NZ3REiDf8nP67Mf5JXzGE28 nbiIdChieLToZrHvRHOZC/MMgFH7UpgBHWhF2zfTyi553vL3rWVq4vogOhdWtUjYsDU9 iicc/WDq1wmMXl45xpeN+wQO1qJXMn91aY1sCLSDNlL/kcB9TtPNvio6VnmpbGz0EV9s xBZXnyjbZeyMkvWtOrScCYcxV40Nf5PcXf3onPCGIXG1lyoySdY8MC10x2bDCalcBGDr hapVX7YXYvCE1EjCyACGUdPyszgw9+ERLshHmEdOU0x1+grHGKI6BoNItXHxRP8RUnUT ytag== ARC-Message-Signature: i=2; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=content-transfer-encoding:mime-version:list-unsubscribe :list-subscribe:list-id:precedence:references:in-reply-to:message-id :date:subject:cc:to:from; bh=SFCmF6fk/GurUDA5VgRDN9U9YPSRXJPK2sygjGmc12A=; fh=cTOyeHIiotxFveWD397Up69SLR8Dqpy9YboYIfW0A00=; b=wAmhjlss2rF2kpdOM5Ij8KPPqZ+qspa2JJQ9h6gnX00kiHHDGNMusBCh2HM06xJqgA IIRDuhNyUTjsumrC94zD4LGp/3ib4ygDQSYR02Dd5Ecivb//LKhRU/5GXXvwvRclr4q0 bUodm/7N24K0Duick55JhnrkY8CothlQSdX+ETsth9I6oc2F2xWWyCP+06rTkXCHBtUU NE1rE63ac8AevM8x/0z8qskm8ihr61cv+ulhdh6t9gKfkNEaFrT7IGu6WiWdsJfw6V7V 1IYeMv0S7k+iw5wKYpxZHw6aqrrnJSd7OnpsiB2klEx4QiyiPhu+8iOsz5lRKl0M6OpT Vw0w== ARC-Authentication-Results: i=2; mx.google.com; arc=pass (i=1 spf=pass spfdomain=pengutronix.de); spf=pass (google.com: domain of linux-kernel+bounces-36966-ouuuleilei=gmail.com@vger.kernel.org designates 147.75.199.223 as permitted sender) smtp.mailfrom="linux-kernel+bounces-36966-ouuuleilei=gmail.com@vger.kernel.org" Received: from ny.mirrors.kernel.org (ny.mirrors.kernel.org. [147.75.199.223]) by mx.google.com with ESMTPS id x27-20020a0cb21b000000b006818433b30csi10173302qvd.600.2024.01.24.04.24.36 for (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 24 Jan 2024 04:24:36 -0800 (PST) Received-SPF: pass (google.com: domain of linux-kernel+bounces-36966-ouuuleilei=gmail.com@vger.kernel.org designates 147.75.199.223 as permitted sender) client-ip=147.75.199.223; Authentication-Results: mx.google.com; arc=pass (i=1 spf=pass spfdomain=pengutronix.de); spf=pass (google.com: domain of linux-kernel+bounces-36966-ouuuleilei=gmail.com@vger.kernel.org designates 147.75.199.223 as permitted sender) smtp.mailfrom="linux-kernel+bounces-36966-ouuuleilei=gmail.com@vger.kernel.org" Received: from smtp.subspace.kernel.org (wormhole.subspace.kernel.org [52.25.139.140]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by ny.mirrors.kernel.org (Postfix) with ESMTPS id 102341C21FB5 for ; Wed, 24 Jan 2024 12:24:36 +0000 (UTC) Received: from localhost.localdomain (localhost.localdomain [127.0.0.1]) by smtp.subspace.kernel.org (Postfix) with ESMTP id 2B63964CFB; Wed, 24 Jan 2024 12:22:33 +0000 (UTC) Received: from metis.whiteo.stw.pengutronix.de (metis.whiteo.stw.pengutronix.de [185.203.201.7]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id F040A63104 for ; Wed, 24 Jan 2024 12:22:25 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=185.203.201.7 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1706098949; cv=none; b=WvPgReGoazWyTutxvim7smk99Acsp40L+tVJpPc0bzFOHN05FR9N3COq/jfDxdjSfboKeBl6Bd+2eBCwa+cgildokH+t8YhHmw/u6TUnmuWYvYqTscaqY4cCrlndYVnzWvr/rahWzz9zncfJ4IZSq9F27eLw5HaRLkuNSXubBDE= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1706098949; c=relaxed/simple; bh=20N1VN4Z4ICpskuEnxLNHaytZDaOloomTZFu/N940iA=; h=From:To:Cc:Subject:Date:Message-Id:In-Reply-To:References: MIME-Version; b=XwN5JCbzdd9d69HqCHeveUs+3cX5WhV7nuedvwf2yd91m2KVcDmGwfwuS7X+pcWM7Xh8gRHYp0g66GQCE9k7oP4acPD+sCdoaYZCHhNk2qIDQc28ThwjLjbOWcDwHKpGvAHR1ONYuG9V5KL/NostVFoC+8nsSymYN00MlztMcfg= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=none (p=none dis=none) header.from=pengutronix.de; spf=pass smtp.mailfrom=pengutronix.de; arc=none smtp.client-ip=185.203.201.7 Authentication-Results: smtp.subspace.kernel.org; dmarc=none (p=none dis=none) header.from=pengutronix.de Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=pengutronix.de Received: from drehscheibe.grey.stw.pengutronix.de ([2a0a:edc0:0:c01:1d::a2]) by metis.whiteo.stw.pengutronix.de with esmtps (TLS1.3:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.92) (envelope-from ) id 1rScGd-0007oA-1C; Wed, 24 Jan 2024 13:22:07 +0100 Received: from [2a0a:edc0:0:1101:1d::ac] (helo=dude04.red.stw.pengutronix.de) by drehscheibe.grey.stw.pengutronix.de with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 (Exim 4.94.2) (envelope-from ) id 1rScGc-0023Zi-2q; Wed, 24 Jan 2024 13:22:06 +0100 Received: from ore by dude04.red.stw.pengutronix.de with local (Exim 4.96) (envelope-from ) id 1rScGb-00341i-3B; Wed, 24 Jan 2024 13:22:05 +0100 From: Oleksij Rempel To: Sebastian Reichel , Rob Herring , Krzysztof Kozlowski , Conor Dooley , Srinivas Kandagatla Cc: Oleksij Rempel , kernel@pengutronix.de, linux-kernel@vger.kernel.org, Liam Girdwood , Mark Brown , "Rafael J. Wysocki" , Daniel Lezcano , Zhang Rui , Lukasz Luba , linux-pm@vger.kernel.org, devicetree@vger.kernel.org, =?utf-8?q?S=C3=B8ren_Andersen?= Subject: [PATCH v2 6/8] power: reset: add PSCR NVMEM Driver for Recording Power State Change Reasons Date: Wed, 24 Jan 2024 13:22:02 +0100 Message-Id: <20240124122204.730370-7-o.rempel@pengutronix.de> X-Mailer: git-send-email 2.39.2 In-Reply-To: <20240124122204.730370-1-o.rempel@pengutronix.de> References: <20240124122204.730370-1-o.rempel@pengutronix.de> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 X-SA-Exim-Connect-IP: 2a0a:edc0:0:c01:1d::a2 X-SA-Exim-Mail-From: ore@pengutronix.de X-SA-Exim-Scanned: No (on metis.whiteo.stw.pengutronix.de); SAEximRunCond expanded to false X-PTX-Original-Recipient: linux-kernel@vger.kernel.org X-getmail-retrieved-from-mailbox: INBOX X-GMAIL-THRID: 1788974545024945141 X-GMAIL-MSGID: 1788974545024945141 This driver utilizes the Power State Change Reasons Recording (PSCRR) framework to store specific power state change information, such as shutdown or reboot reasons, into a designated non-volatile memory (NVMEM) cell. Signed-off-by: Oleksij Rempel --- drivers/power/reset/Kconfig | 11 +++ drivers/power/reset/Makefile | 1 + drivers/power/reset/pscrr-nvmem.c | 121 ++++++++++++++++++++++++++++++ 3 files changed, 133 insertions(+) create mode 100644 drivers/power/reset/pscrr-nvmem.c diff --git a/drivers/power/reset/Kconfig b/drivers/power/reset/Kconfig index c6ce7e647048..8e50e495ef98 100644 --- a/drivers/power/reset/Kconfig +++ b/drivers/power/reset/Kconfig @@ -324,3 +324,14 @@ menuconfig PSCRR timeouts. If unsure, say N. + +if PSCRR + +config PSCRR_NVMEM + tristate "Generic NVMEM-based Power State Change Reason Recorder" + depends on OF + help + Enabling this option adds support for recording power state change + reasons in a NVMEM cell. + +endif diff --git a/drivers/power/reset/Makefile b/drivers/power/reset/Makefile index e618c34a30f9..3860dbbacb23 100644 --- a/drivers/power/reset/Makefile +++ b/drivers/power/reset/Makefile @@ -32,6 +32,7 @@ obj-$(CONFIG_POWER_RESET_SYSCON) += syscon-reboot.o obj-$(CONFIG_POWER_RESET_SYSCON_POWEROFF) += syscon-poweroff.o obj-$(CONFIG_POWER_RESET_RMOBILE) += rmobile-reset.o obj-$(CONFIG_PSCRR) += pscrr.o +obj-$(CONFIG_PSCRR_NVMEM) += pscrr-nvmem.o obj-$(CONFIG_REBOOT_MODE) += reboot-mode.o obj-$(CONFIG_SYSCON_REBOOT_MODE) += syscon-reboot-mode.o obj-$(CONFIG_POWER_RESET_SC27XX) += sc27xx-poweroff.o diff --git a/drivers/power/reset/pscrr-nvmem.c b/drivers/power/reset/pscrr-nvmem.c new file mode 100644 index 000000000000..fe9053b78b79 --- /dev/null +++ b/drivers/power/reset/pscrr-nvmem.c @@ -0,0 +1,121 @@ +// SPDX-License-Identifier: GPL-2.0 +// Copyright (c) Vaisala Oyj. All rights reserved. +// Copyright (c) 2024 Pengutronix, Oleksij Rempel +/* + * Based on drivers/power/reset/nvmem-reboot-mode.c + * Copyright (c) Vaisala Oyj. All rights reserved. + */ + +#include +#include +#include +#include +#include +#include +#include + +struct pscrr_nvmem { + struct pscrr_device pscrr_dev; + struct nvmem_cell *cell; + size_t max_magic_bytes; +}; + +static int pscrr_nvmem_write(struct pscrr_device *pscrr_dev, u32 magic) +{ + struct pscrr_nvmem *priv = container_of(pscrr_dev, struct pscrr_nvmem, + pscrr_dev); + size_t size = min(priv->max_magic_bytes, sizeof(magic)); + int ret; + + ret = nvmem_cell_write(priv->cell, &magic, size); + if (ret < 0) { + dev_err(pscrr_dev->dev, "update reason bits failed: %pe\n", + ERR_PTR(ret)); + return ret; + } + + return 0; +} + +static int pscrr_nvmem_read(struct pscrr_device *pscrr_dev, u32 *magic) +{ + struct pscrr_nvmem *priv = container_of(pscrr_dev, struct pscrr_nvmem, + pscrr_dev); + size_t len; + void *buf; + + buf = nvmem_cell_read(priv->cell, &len); + if (IS_ERR(buf)) + return PTR_ERR(buf); + + *magic = 0; + memcpy(magic, buf, min(len, sizeof(*magic))); + kfree(buf); + + return 0; +} + +static int pscrr_nvmem_probe(struct platform_device *pdev) +{ + size_t bytes, bits, magic_bits; + struct pscrr_nvmem *priv; + const char *pscr = "pscr"; + int ret; + + priv = devm_kzalloc(&pdev->dev, sizeof(*priv), GFP_KERNEL); + if (!priv) + return -ENOMEM; + + priv->pscrr_dev.dev = &pdev->dev; + priv->pscrr_dev.write = pscrr_nvmem_write; + priv->pscrr_dev.read = pscrr_nvmem_read; + + priv->cell = devm_nvmem_cell_get(&pdev->dev, pscr); + if (IS_ERR(priv->cell)) + return dev_err_probe(&pdev->dev, PTR_ERR(priv->cell), + "failed to get the nvmem %s cell\n", pscr); + + ret = nvmem_cell_get_size(priv->cell, &bytes, &bits); + if (ret < 0) + return dev_err_probe(&pdev->dev, ret, "failed to get the nvmem %s size\n", + pscr); + + if (!bytes || bytes > sizeof(u32) || bits > 32) + return dev_err_probe(&pdev->dev, -EINVAL, "invalid nvmem %s size. bytes: %zu, bits: %zu\n", + pscr, bytes, bits); + + ret = devm_pscrr_register(&pdev->dev, &priv->pscrr_dev); + if (ret) + return dev_err_probe(&pdev->dev, ret, "failed to register pscr driver\n"); + + magic_bits = fls(priv->pscrr_dev.max_magic_val); + priv->max_magic_bytes = DIV_ROUND_UP(magic_bits, 8); + + if (!bits) + bits = bytes * 8; + + if (magic_bits > bits) + return dev_err_probe(&pdev->dev, -EINVAL, "provided magic can't fit into nvmem %s. bytes: %zu, bits: %zu, magic_bits: %zu\n", + pscr, bytes, bits, magic_bits); + + return handle_last_pscr(&priv->pscrr_dev); +} + +static const struct of_device_id pscrr_nvmem_of_match[] = { + { .compatible = "pscrr-nvmem" }, + {} +}; +MODULE_DEVICE_TABLE(of, pscrr_nvmem_of_match); + +static struct platform_driver pscrr_nvmem_driver = { + .probe = pscrr_nvmem_probe, + .driver = { + .name = "pscrr-nvmem", + .of_match_table = pscrr_nvmem_of_match, + }, +}; +module_platform_driver(pscrr_nvmem_driver); + +MODULE_AUTHOR("Oleksij Rempel "); +MODULE_DESCRIPTION("NVMEM Driver for Power State Change Reason Recording"); +MODULE_LICENSE("GPL"); From patchwork Wed Jan 24 12:22:03 2024 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Oleksij Rempel X-Patchwork-Id: 191552 Return-Path: Delivered-To: ouuuleilei@gmail.com Received: by 2002:a05:7300:2553:b0:103:945f:af90 with SMTP id p19csp950459dyi; Wed, 24 Jan 2024 04:24:22 -0800 (PST) X-Google-Smtp-Source: AGHT+IHTR+xAwJ1B/lHZ2nvlARYlctC913UTm9RIvr8sGSIgjKMd3xd9vqWnMr0XUw2XRjpAHVM2 X-Received: by 2002:a05:620a:2094:b0:781:c52a:7136 with SMTP id e20-20020a05620a209400b00781c52a7136mr8853400qka.34.1706099061860; Wed, 24 Jan 2024 04:24:21 -0800 (PST) ARC-Seal: i=2; a=rsa-sha256; t=1706099061; cv=pass; d=google.com; s=arc-20160816; b=cmFZkK/OE7vfiqoq3+cD4LljnPVTzK/sbyGsHZljyIWmyoTBReD0RzNTA3I2flHLHI qcrlp2XkG+tmidRZ+DLJAi5LOiRwRSHABeojtgMwQcHdy25GQk+wspzp/BaFrP8++JSr zxNFREH2i4PtCpkaVgXcfqI/BetOJXBwDsZJD+i8KdyrwsJGDfjO1XcSCXYh8fEWFX3N B9vVH4Kzl7+ZcoWPxMM2dddEV8dXB8OpTX/tol8DGL2mtoido86CFwn6JFqBG8nwpd4U YCGREdpm7vbTe4I2YwO4gZEgCTNqqJeGJ2K+V7hHWVcu7+x9uLriRYIKa9kR+apyvvPR Zcbw== ARC-Message-Signature: i=2; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=content-transfer-encoding:mime-version:list-unsubscribe :list-subscribe:list-id:precedence:references:in-reply-to:message-id :date:subject:cc:to:from; bh=+zDQv++RLCalS6ktCQpPxsGWt6H9QW/h/MsAabbtMHA=; fh=0BN2nRYNwwsdS1La2xjSUQ73DGvrm/moKRrAYVYJiBo=; b=tHV415pErda8z2vIYnDISkY17zAC4Dv3EL4974PVirWDPpN+6ZUpBJzL12PM7MphJ2 pXNilSyfr/SGuuOA/Kgs9KG2Rc8JjqW50VDATvvKAFAuBK81a6trLZnWv071k9uhsjeY ruI3m6I0IskjlimvCf9IEbBz83Ix160NLjaP+zbQzVqPfpchlHWntpmV618oSP4sm5Lr lGlP66OrApLU64sinljuW7zmsfZHx+HiIjc7Ke3JaYF4hixEM8rc78Z6JhvYo/wnJtrD aHzXKwYFxvP1QAs+vbAG6+WWISdQfMaI/ZtldjMEYXL7MzEKCywa9/u6uyPX4RWHofVr 6eAw== ARC-Authentication-Results: i=2; mx.google.com; arc=pass (i=1 spf=pass spfdomain=pengutronix.de); spf=pass (google.com: domain of linux-kernel+bounces-36967-ouuuleilei=gmail.com@vger.kernel.org designates 147.75.199.223 as permitted sender) smtp.mailfrom="linux-kernel+bounces-36967-ouuuleilei=gmail.com@vger.kernel.org" Received: from ny.mirrors.kernel.org (ny.mirrors.kernel.org. [147.75.199.223]) by mx.google.com with ESMTPS id ou42-20020a05620a622a00b00783a190785csi5697633qkn.235.2024.01.24.04.24.21 for (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 24 Jan 2024 04:24:21 -0800 (PST) Received-SPF: pass (google.com: domain of linux-kernel+bounces-36967-ouuuleilei=gmail.com@vger.kernel.org designates 147.75.199.223 as permitted sender) client-ip=147.75.199.223; Authentication-Results: mx.google.com; arc=pass (i=1 spf=pass spfdomain=pengutronix.de); spf=pass (google.com: domain of linux-kernel+bounces-36967-ouuuleilei=gmail.com@vger.kernel.org designates 147.75.199.223 as permitted sender) smtp.mailfrom="linux-kernel+bounces-36967-ouuuleilei=gmail.com@vger.kernel.org" Received: from smtp.subspace.kernel.org (wormhole.subspace.kernel.org [52.25.139.140]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by ny.mirrors.kernel.org (Postfix) with ESMTPS id A390B1C22074 for ; Wed, 24 Jan 2024 12:24:21 +0000 (UTC) Received: from localhost.localdomain (localhost.localdomain [127.0.0.1]) by smtp.subspace.kernel.org (Postfix) with ESMTP id 8085E64CF6; Wed, 24 Jan 2024 12:22:32 +0000 (UTC) Received: from metis.whiteo.stw.pengutronix.de (metis.whiteo.stw.pengutronix.de [185.203.201.7]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 71C5563115 for ; Wed, 24 Jan 2024 12:22:26 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=185.203.201.7 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1706098947; cv=none; b=mPa4qi0OZ4CP+9x7k/roe38uYFYYp/LJ2+GA+iIHCFMc4v6jMlWA7PDP3Pxbhm/5GxD2z+MsNyuQ0l2ZriJpraYotFscaV7uGKPZXlU1rFlBgYOYkDS7znZ9nPbHmAFFt85UcWpQpQd3dI1zLa6lzteGaseLz/3ps6LIERjiaok= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1706098947; c=relaxed/simple; bh=aGoYIr6WP6qwdiccu6/EeWFB5o3ysjwmHOnTwOOjDkQ=; h=From:To:Cc:Subject:Date:Message-Id:In-Reply-To:References: MIME-Version; b=nuj45cf7S8gTkReo0J6H0v2X90+t1WEt230ZfBBFe62t0eFTWjGFXQuJIJKI8n8BZ14nbvve6jlD2eviJlXbxx3rkCCDBrpwCHXu9oAmQ7asVVrb5lM+lVDFRECuG9inwIOe8yOjVx/P+4pLdRbrUH60KxaPj6clb8bGME6f3IA= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=none (p=none dis=none) header.from=pengutronix.de; spf=pass smtp.mailfrom=pengutronix.de; arc=none smtp.client-ip=185.203.201.7 Authentication-Results: smtp.subspace.kernel.org; dmarc=none (p=none dis=none) header.from=pengutronix.de Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=pengutronix.de Received: from drehscheibe.grey.stw.pengutronix.de ([2a0a:edc0:0:c01:1d::a2]) by metis.whiteo.stw.pengutronix.de with esmtps (TLS1.3:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.92) (envelope-from ) id 1rScGd-0007oB-1C; Wed, 24 Jan 2024 13:22:07 +0100 Received: from [2a0a:edc0:0:1101:1d::ac] (helo=dude04.red.stw.pengutronix.de) by drehscheibe.grey.stw.pengutronix.de with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 (Exim 4.94.2) (envelope-from ) id 1rScGc-0023Zk-2z; Wed, 24 Jan 2024 13:22:06 +0100 Received: from ore by dude04.red.stw.pengutronix.de with local (Exim 4.96) (envelope-from ) id 1rScGc-00341u-00; Wed, 24 Jan 2024 13:22:06 +0100 From: Oleksij Rempel To: Sebastian Reichel , Rob Herring , Krzysztof Kozlowski , Conor Dooley , Srinivas Kandagatla Cc: Oleksij Rempel , Mark Brown , kernel@pengutronix.de, linux-kernel@vger.kernel.org, Liam Girdwood , "Rafael J. Wysocki" , Daniel Lezcano , Zhang Rui , Lukasz Luba , linux-pm@vger.kernel.org, devicetree@vger.kernel.org, =?utf-8?q?S=C3=B8ren_Andersen?= Subject: [PATCH v2 7/8] regulator: set Power State Change Reason before hw_protection_shutdown() Date: Wed, 24 Jan 2024 13:22:03 +0100 Message-Id: <20240124122204.730370-8-o.rempel@pengutronix.de> X-Mailer: git-send-email 2.39.2 In-Reply-To: <20240124122204.730370-1-o.rempel@pengutronix.de> References: <20240124122204.730370-1-o.rempel@pengutronix.de> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 X-SA-Exim-Connect-IP: 2a0a:edc0:0:c01:1d::a2 X-SA-Exim-Mail-From: ore@pengutronix.de X-SA-Exim-Scanned: No (on metis.whiteo.stw.pengutronix.de); SAEximRunCond expanded to false X-PTX-Original-Recipient: linux-kernel@vger.kernel.org X-getmail-retrieved-from-mailbox: INBOX X-GMAIL-THRID: 1788974530219892080 X-GMAIL-MSGID: 1788974530219892080 Store the state change reason to some black box, for later investigation. Signed-off-by: Oleksij Rempel Reviewed-by: Mark Brown --- drivers/regulator/core.c | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/drivers/regulator/core.c b/drivers/regulator/core.c index a968dabb48f5..a811a5ff2273 100644 --- a/drivers/regulator/core.c +++ b/drivers/regulator/core.c @@ -19,6 +19,7 @@ #include #include #include +#include #include #include #include @@ -5095,6 +5096,7 @@ EXPORT_SYMBOL_GPL(regulator_bulk_free); static void regulator_handle_critical(struct regulator_dev *rdev, unsigned long event) { + enum pscr pscr; const char *reason = NULL; if (!rdev->constraints->system_critical) @@ -5103,17 +5105,21 @@ static void regulator_handle_critical(struct regulator_dev *rdev, switch (event) { case REGULATOR_EVENT_UNDER_VOLTAGE: reason = "System critical regulator: voltage drop detected"; + pscr = PSCR_UNDER_VOLTAGE; break; case REGULATOR_EVENT_OVER_CURRENT: reason = "System critical regulator: over-current detected"; + pscr = PSCR_OVER_CURRENT; break; case REGULATOR_EVENT_FAIL: reason = "System critical regulator: unknown error"; + pscr = PSCR_REGULATOR_FAILURE; } if (!reason) return; + set_power_state_change_reason(pscr); hw_protection_shutdown(reason, rdev->constraints->uv_less_critical_window_ms); } From patchwork Wed Jan 24 12:22:04 2024 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Oleksij Rempel X-Patchwork-Id: 191569 Return-Path: Delivered-To: ouuuleilei@gmail.com Received: by 2002:a05:7300:2553:b0:103:945f:af90 with SMTP id p19csp965882dyi; Wed, 24 Jan 2024 04:53:59 -0800 (PST) X-Google-Smtp-Source: AGHT+IHNvAseUlB7IoAWIXJ4oyNxtyFXgEXWWJHOcXJSypf5vAZ4kthESCNvk95xN5SYUqk5DZ5v X-Received: by 2002:a17:903:2287:b0:1d7:14e7:6851 with SMTP id b7-20020a170903228700b001d714e76851mr643262plh.94.1706100839144; Wed, 24 Jan 2024 04:53:59 -0800 (PST) ARC-Seal: i=2; a=rsa-sha256; t=1706100839; cv=pass; d=google.com; s=arc-20160816; b=JiaV8Vb+LILdfsa1m2fT86M8X9lN0xJCyUMdGfYyJ417YbWKr5SQuR7af23pJ34C5I JzSAIzl3NAv15yC7Aw/vdk0hu9+1G7S6y8dxThC9Kra0aUGMauiCqkC4iQzM7/JjGjr1 Ys5XxL4O07KEH7VioqC+SA1uG4pMI3rnz3BVM42KKtQW5DEw9ZPZaCsnl2YNJJUqmydj Sy67Kev8HTr+C2URaW354WFGopXSEDK6tyFFdqqD7trSGhAQpBhCEyHGXs/2HeIQy5Xg 9ufJzFGQLjGpTgxclpuTvZG5K62JgiU4aiOlI1/OUKKeST8m4TpTYAS1Z6wLwhnCZawD YcFQ== ARC-Message-Signature: i=2; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=content-transfer-encoding:mime-version:list-unsubscribe :list-subscribe:list-id:precedence:references:in-reply-to:message-id :date:subject:cc:to:from; bh=I8r/edMx+iyEZ6fKQoBaay9p1ypCo1S2jGAadaPff+M=; fh=cTOyeHIiotxFveWD397Up69SLR8Dqpy9YboYIfW0A00=; b=mrJx50+aYaYLG+webOsnm4SAjyYyIQy6DvBcBbNHz+IQ0GO8VtiebiBIgiJLGA8dxc peb6wkOOwt6Udw4z/uBR9W/xVXOcTEQOQHV2aOYhm6siPCoZ93/zHFOjCgiU21T0xytD bk7NS7DlBE1wv8/KleRADL/XEJy0iwN/6xMSOwJaRnnHE/kk4Q4N95r6jYUhP2q/AtwF 0C6Qk4aW/X5/YHYtEWuWIOPtVe6cd7lroMZ7zc6gDarazJDFpn3zAGFffObp9BvVRj1B f4qB1rPlVqEnBmU6betQLtGKMw0mJ4UrN8ru/AOhEYpBoNySbzf5ox5Dwd1ekYQIHmjl tJ0g== ARC-Authentication-Results: i=2; mx.google.com; arc=pass (i=1 spf=pass spfdomain=pengutronix.de); spf=pass (google.com: domain of linux-kernel+bounces-36962-ouuuleilei=gmail.com@vger.kernel.org designates 2604:1380:40f1:3f00::1 as permitted sender) smtp.mailfrom="linux-kernel+bounces-36962-ouuuleilei=gmail.com@vger.kernel.org" Received: from sy.mirrors.kernel.org (sy.mirrors.kernel.org. [2604:1380:40f1:3f00::1]) by mx.google.com with ESMTPS id j1-20020a17090276c100b001d6fac9e759si11420274plt.116.2024.01.24.04.53.58 for (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 24 Jan 2024 04:53:59 -0800 (PST) Received-SPF: pass (google.com: domain of linux-kernel+bounces-36962-ouuuleilei=gmail.com@vger.kernel.org designates 2604:1380:40f1:3f00::1 as permitted sender) client-ip=2604:1380:40f1:3f00::1; Authentication-Results: mx.google.com; arc=pass (i=1 spf=pass spfdomain=pengutronix.de); spf=pass (google.com: domain of linux-kernel+bounces-36962-ouuuleilei=gmail.com@vger.kernel.org designates 2604:1380:40f1:3f00::1 as permitted sender) smtp.mailfrom="linux-kernel+bounces-36962-ouuuleilei=gmail.com@vger.kernel.org" Received: from smtp.subspace.kernel.org (wormhole.subspace.kernel.org [52.25.139.140]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by sy.mirrors.kernel.org (Postfix) with ESMTPS id 004C4B2B6B1 for ; Wed, 24 Jan 2024 12:23:20 +0000 (UTC) Received: from localhost.localdomain (localhost.localdomain [127.0.0.1]) by smtp.subspace.kernel.org (Postfix) with ESMTP id B476764CDE; Wed, 24 Jan 2024 12:22:29 +0000 (UTC) Received: from metis.whiteo.stw.pengutronix.de (metis.whiteo.stw.pengutronix.de [185.203.201.7]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id F04DC6310E for ; Wed, 24 Jan 2024 12:22:25 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=185.203.201.7 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1706098947; cv=none; b=eQ9XMdL6PCby9xLFmm0y9+GfV8xYsjlkfWBELxS0TAHzi5dfm0dRfSeELXjPPy5MbuWUIawFKOpAptpgQlViGP6QW/Erq2eC5+I5bbos+PpSKoJIGH2BtPjwY2xmVgaTeE4qXS8utdDDYHcJ9FbKQ2YhXG863J0GhCPbp5NcHvE= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1706098947; c=relaxed/simple; bh=HDAeY4bWfoe9Y+7OHDYHhF+4G8dpj+H9p3pWeswLx5k=; h=From:To:Cc:Subject:Date:Message-Id:In-Reply-To:References: MIME-Version; b=ImzcrxLrU4IBo5LPlndz3y7d+IUFI9MZ5hbe6/JR88Q1JrxpIKfCxTt9jXSlDpybh+3OFRnOwzWVYJcZMSnU4ZrU8td73T6Y+8tGDmG68XxhbDAeLzrOXPsiWpwFrpYQFXxlRGildlvgFsZIo+YtOkcm3su+m08bYi6TlHPPoyw= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=none (p=none dis=none) header.from=pengutronix.de; spf=pass smtp.mailfrom=pengutronix.de; arc=none smtp.client-ip=185.203.201.7 Authentication-Results: smtp.subspace.kernel.org; dmarc=none (p=none dis=none) header.from=pengutronix.de Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=pengutronix.de Received: from drehscheibe.grey.stw.pengutronix.de ([2a0a:edc0:0:c01:1d::a2]) by metis.whiteo.stw.pengutronix.de with esmtps (TLS1.3:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.92) (envelope-from ) id 1rScGd-0007oC-1C; Wed, 24 Jan 2024 13:22:07 +0100 Received: from [2a0a:edc0:0:1101:1d::ac] (helo=dude04.red.stw.pengutronix.de) by drehscheibe.grey.stw.pengutronix.de with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 (Exim 4.94.2) (envelope-from ) id 1rScGc-0023Zn-46; Wed, 24 Jan 2024 13:22:06 +0100 Received: from ore by dude04.red.stw.pengutronix.de with local (Exim 4.96) (envelope-from ) id 1rScGc-003424-03; Wed, 24 Jan 2024 13:22:06 +0100 From: Oleksij Rempel To: Sebastian Reichel , Rob Herring , Krzysztof Kozlowski , Conor Dooley , Srinivas Kandagatla Cc: Oleksij Rempel , kernel@pengutronix.de, linux-kernel@vger.kernel.org, Liam Girdwood , Mark Brown , "Rafael J. Wysocki" , Daniel Lezcano , Zhang Rui , Lukasz Luba , linux-pm@vger.kernel.org, devicetree@vger.kernel.org, =?utf-8?q?S=C3=B8ren_Andersen?= Subject: [PATCH v2 8/8] thermal: core: Record PSCR before hw_protection_shutdown() Date: Wed, 24 Jan 2024 13:22:04 +0100 Message-Id: <20240124122204.730370-9-o.rempel@pengutronix.de> X-Mailer: git-send-email 2.39.2 In-Reply-To: <20240124122204.730370-1-o.rempel@pengutronix.de> References: <20240124122204.730370-1-o.rempel@pengutronix.de> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 X-SA-Exim-Connect-IP: 2a0a:edc0:0:c01:1d::a2 X-SA-Exim-Mail-From: ore@pengutronix.de X-SA-Exim-Scanned: No (on metis.whiteo.stw.pengutronix.de); SAEximRunCond expanded to false X-PTX-Original-Recipient: linux-kernel@vger.kernel.org X-getmail-retrieved-from-mailbox: INBOX X-GMAIL-THRID: 1788976393571035478 X-GMAIL-MSGID: 1788976393571035478 Enhance the thermal core to record the Power State Change Reason (PSCR) prior to invoking hw_protection_shutdown(). This change integrates the PSCR framework with the thermal subsystem, ensuring that reasons for power state changes, such as overtemperature events, are stored in a dedicated non-volatile memory (NVMEM) cell. This 'black box' recording is crucial for post-mortem analysis, enabling a deeper understanding of system failures and abrupt shutdowns, especially in scenarios where PMICs or watchdog timers are incapable of logging such events. The recorded data can be utilized during system recovery routines in the bootloader or early kernel stages of subsequent boots, significantly enhancing system diagnostics, reliability, and debugging capabilities. Signed-off-by: Oleksij Rempel --- drivers/thermal/thermal_core.c | 3 +++ 1 file changed, 3 insertions(+) diff --git a/drivers/thermal/thermal_core.c b/drivers/thermal/thermal_core.c index dfaa6341694a..0511d82351c5 100644 --- a/drivers/thermal/thermal_core.c +++ b/drivers/thermal/thermal_core.c @@ -16,6 +16,7 @@ #include #include #include +#include #include #include #include @@ -329,6 +330,8 @@ static void thermal_zone_device_halt(struct thermal_zone_device *tz, bool shutdo dev_emerg(&tz->device, "%s: critical temperature reached\n", tz->type); + set_power_state_change_reason(PSCR_OVERTEMPERATURE); + if (shutdown) hw_protection_shutdown(msg, poweroff_delay_ms); else