From: Lee Jones <lee@kernel.org>
To: Benjamin Bara <bbara93@gmail.com>
Cc: Wolfram Sang <wsa@kernel.org>,
rafael.j.wysocki@intel.com, dmitry.osipenko@collabora.com,
peterz@infradead.org, jonathanh@nvidia.com,
richard.leitner@linux.dev, treding@nvidia.com,
linux-kernel@vger.kernel.org, linux-i2c@vger.kernel.org,
linux-tegra@vger.kernel.org,
Benjamin Bara <benjamin.bara@skidata.com>
Subject: Re: [PATCH v5 6/6] mfd: tps6586x: register restart handler
Date: Thu, 20 Apr 2023 15:04:06 +0100 [thread overview]
Message-ID: <20230420140406.GH996918@google.com> (raw)
In-Reply-To: <20230327-tegra-pmic-reboot-v5-6-ab090e03284d@skidata.com>
On Tue, 18 Apr 2023, Benjamin Bara wrote:
> From: Benjamin Bara <benjamin.bara@skidata.com>
>
> There are a couple of boards which use a tps6586x as
> "ti,system-power-controller", e.g. the tegra20-tamonten.dtsi.
> For these, the only registered restart handler is the warm reboot via
> tegra's PMC. As the bootloader of the tegra20 requires the VDE, it must
> be ensured that VDE is enabled (which is the case after a cold reboot).
> For the "normal reboot", this is basically the case since 8f0c714ad9be.
> However, this workaround is not executed in case of an emergency restart.
> In case of an emergency restart, the system now simply hangs in the
> bootloader, as VDE is not enabled (because it is not used).
>
> The TPS658629-Q1 (unfortunately the only TPS6586x with public data sheet)
> provides a SOFT RST bit in the SUPPLYENE reg to request a (cold) reboot,
> which takes at least 10ms (as the data sheet states).
> This avoids the hang-up.
>
> Tested on a TPS658640.
>
> Signed-off-by: Benjamin Bara <benjamin.bara@skidata.com>
> ---
> drivers/mfd/tps6586x.c | 26 ++++++++++++++++++++++++++
> 1 file changed, 26 insertions(+)
>
> diff --git a/drivers/mfd/tps6586x.c b/drivers/mfd/tps6586x.c
> index 226e856e34e0..f7665b368071 100644
> --- a/drivers/mfd/tps6586x.c
> +++ b/drivers/mfd/tps6586x.c
> @@ -30,6 +30,7 @@
> #include <linux/mfd/tps6586x.h>
>
> #define TPS6586X_SUPPLYENE 0x14
> +#define SOFT_RST_BIT BIT(0)
> #define EXITSLREQ_BIT BIT(1)
> #define SLEEP_MODE_BIT BIT(3)
>
> @@ -475,6 +476,24 @@ static int tps6586x_power_off_handler(struct sys_off_data *data)
> return notifier_from_errno(-ETIME);
> }
>
> +static int tps6586x_restart_handler(struct sys_off_data *data)
> +{
> + int ret;
> +
> + /* tps6586x only provides a hard/cold reboot, skip others. */
TPS6586x
> + if (data->mode != REBOOT_UNDEFINED && data->mode != REBOOT_COLD &&
> + data->mode != REBOOT_HARD)
> + return NOTIFY_DONE;
> +
> + /* bring pmic into HARD REBOOT state. this takes at least 10ms. */
Same as the other patch.
> + ret = tps6586x_set_bits(data->dev, TPS6586X_SUPPLYENE, SOFT_RST_BIT);
> + if (ret)
> + return notifier_from_errno(ret);
> +
> + mdelay(20);
Why 20 here and 50 in the other patch?
> + return notifier_from_errno(-ETIME);
> +}
> +
> static void tps6586x_print_version(struct i2c_client *client, int version)
> {
> const char *name;
> @@ -575,6 +594,13 @@ static int tps6586x_i2c_probe(struct i2c_client *client)
> dev_err(&client->dev, "register power off handler failed: %d\n", ret);
> goto err_add_devs;
> }
> +
> + ret = devm_register_restart_handler(&client->dev, &tps6586x_restart_handler,
> + NULL);
> + if (ret) {
> + dev_err(&client->dev, "register restart handler failed: %d\n", ret);
> + goto err_add_devs;
> + }
> }
>
> return 0;
>
> --
> 2.34.1
>
--
Lee Jones [李琼斯]
next prev parent reply other threads:[~2023-04-20 14:04 UTC|newest]
Thread overview: 13+ messages / expand[flat|nested] mbox.gz Atom feed top
2023-04-18 11:09 [PATCH v5 0/6] mfd: tps6586x: register restart handler Benjamin Bara
2023-04-18 11:10 ` [PATCH v5 1/6] kernel/reboot: emergency_restart: set correct system_state Benjamin Bara
2023-04-18 11:10 ` [PATCH v5 2/6] i2c: core: run atomic i2c xfer when !preemptible Benjamin Bara
2023-04-18 11:10 ` [PATCH v5 3/6] kernel/reboot: add device to sys_off_handler Benjamin Bara
2023-04-18 11:10 ` [PATCH v5 4/6] kernel/reboot: sys_off_notify: always return NOTIFY_DONE Benjamin Bara
2023-04-18 11:10 ` [PATCH v5 5/6] mfd: tps6586x: use devm-based power off handler Benjamin Bara
2023-04-20 14:02 ` Lee Jones
2023-04-18 11:10 ` [PATCH v5 6/6] mfd: tps6586x: register restart handler Benjamin Bara
2023-04-20 14:04 ` Lee Jones [this message]
2023-04-20 14:32 ` Benjamin Bara
2023-04-21 7:25 ` Lee Jones
2023-04-21 7:32 ` Benjamin Bara
2023-04-21 7:42 ` Lee Jones
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20230420140406.GH996918@google.com \
--to=lee@kernel.org \
--cc=bbara93@gmail.com \
--cc=benjamin.bara@skidata.com \
--cc=dmitry.osipenko@collabora.com \
--cc=jonathanh@nvidia.com \
--cc=linux-i2c@vger.kernel.org \
--cc=linux-kernel@vger.kernel.org \
--cc=linux-tegra@vger.kernel.org \
--cc=peterz@infradead.org \
--cc=rafael.j.wysocki@intel.com \
--cc=richard.leitner@linux.dev \
--cc=treding@nvidia.com \
--cc=wsa@kernel.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.