All of lore.kernel.org
 help / color / mirror / Atom feed
From: Jon Hunter <jonathanh@nvidia.com>
To: Thierry Reding <thierry.reding@gmail.com>,
	David Airlie <airlied@linux.ie>,
	Stephen Warren <swarren@wwwdotorg.org>,
	Alexandre Courbot <gnurou@gmail.com>,
	Wolfram Sang <wsa@the-dreams.de>,
	Linus Walleij <linus.walleij@linaro.org>,
	Rob Herring <robh+dt@kernel.org>,
	Mark Rutland <mark.rutland@arm.com>
Cc: dri-devel@lists.freedesktop.org, linux-tegra@vger.kernel.org,
	linux-i2c@vger.kernel.org, linux-gpio@vger.kernel.org,
	devicetree@vger.kernel.org, Jon Hunter <jonathanh@nvidia.com>
Subject: [PATCH 01/12] soc/tegra: pmc: Initialise resets associated with a power partition
Date: Thu, 23 Jun 2016 16:58:54 +0100	[thread overview]
Message-ID: <1466697545-11868-2-git-send-email-jonathanh@nvidia.com> (raw)
In-Reply-To: <1466697545-11868-1-git-send-email-jonathanh@nvidia.com>

When registering the Tegra power partitions with the generic PM domain
framework, the current state of the each partition is checked and used
as the default state for the partition. However, the state of each reset
associated with the partition is not initialised and so it is possible
that the state of the resets are not in the expected state. For example,
if a partition is on, then the resets should be de-asserted and if the
partition is off, the resets should be asserted.

There have been cases where the bootloader has powered on a partition
and only de-asserted some of the resets to some of the devices in the
partition. This can cause accesses to these devices to hang the system
when the kernel boots and attempts to probe these devices.

Ideally, the driver for the device should ensure the reset has been
de-asserted when probing, but the resets cannot be shared between the
PMC driver (that needs to de-assert/assert the reset when turning the
partition on or off) and another driver because we cannot ensure the
reset is in the correct state.

To ensure the resets are in the correct state, when using the generic
PM domain framework, put each reset associated with the partition in
the correct state (based upon the partition's current state) when
obtaining the resets for a partition.

Signed-off-by: Jon Hunter <jonathanh@nvidia.com>
---
 drivers/soc/tegra/pmc.c | 18 ++++++++++++++----
 1 file changed, 14 insertions(+), 4 deletions(-)

diff --git a/drivers/soc/tegra/pmc.c b/drivers/soc/tegra/pmc.c
index d13516981629..8a421a0b1ece 100644
--- a/drivers/soc/tegra/pmc.c
+++ b/drivers/soc/tegra/pmc.c
@@ -738,7 +738,7 @@ err:
 }
 
 static int tegra_powergate_of_get_resets(struct tegra_powergate *pg,
-					 struct device_node *np)
+					 struct device_node *np, bool off)
 {
 	struct reset_control *rst;
 	unsigned int i, count;
@@ -758,6 +758,16 @@ static int tegra_powergate_of_get_resets(struct tegra_powergate *pg,
 			err = PTR_ERR(pg->resets[i]);
 			goto error;
 		}
+
+		if (off)
+			err = reset_control_assert(pg->resets[i]);
+		else
+			err = reset_control_deassert(pg->resets[i]);
+
+		if (err) {
+			reset_control_put(pg->resets[i]);
+			goto error;
+		}
 	}
 
 	pg->num_resets = count;
@@ -798,14 +808,14 @@ static void tegra_powergate_add(struct tegra_pmc *pmc, struct device_node *np)
 	pg->genpd.power_on = tegra_genpd_power_on;
 	pg->pmc = pmc;
 
+	off = !tegra_powergate_is_powered(pg->id);
+
 	if (tegra_powergate_of_get_clks(pg, np))
 		goto set_available;
 
-	if (tegra_powergate_of_get_resets(pg, np))
+	if (tegra_powergate_of_get_resets(pg, np, off))
 		goto remove_clks;
 
-	off = !tegra_powergate_is_powered(pg->id);
-
 	pm_genpd_init(&pg->genpd, NULL, off);
 
 	if (of_genpd_add_provider_simple(np, &pg->genpd))
-- 
2.1.4

  reply	other threads:[~2016-06-23 15:58 UTC|newest]

Thread overview: 26+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2016-06-23 15:58 [PATCH 00/12] Add support for Tegra DPAUX pinctrl Jon Hunter
2016-06-23 15:58 ` Jon Hunter [this message]
2016-06-23 15:58 ` [PATCH 02/12] drm/tegra: Clean-up if probing DPAUX fails Jon Hunter
2016-06-23 15:58 ` [PATCH 04/12] dt-bindings: display: Update Tegra DPAUX documentation Jon Hunter
2016-06-24 19:22   ` Rob Herring
2016-06-23 15:58 ` [PATCH 05/12] drm/tegra: Prepare DPAUX for supporting generic PM domains Jon Hunter
     [not found] ` <1466697545-11868-1-git-send-email-jonathanh-DDmLM1+adcrQT0dZR+AlfA@public.gmane.org>
2016-06-23 15:58   ` [PATCH 03/12] drm/tegra: Add helper functions for setting up DPAUX pads Jon Hunter
2016-06-23 15:58   ` [PATCH 06/12] pinctrl: pinconf: Add generic helper function for freeing mappings Jon Hunter
2016-06-23 15:59   ` [PATCH 09/12] dt-bindings: Add bindings for Tegra DPAUX pinctrl driver Jon Hunter
2016-06-24 19:27     ` Rob Herring
2016-06-23 15:59   ` [PATCH 12/12] arm64: tegra: Add DPAUX pinctrl bindings Jon Hunter
2016-06-23 15:59 ` [PATCH 07/12] dt-bindings: i2c: Add support for 'i2c-bus' subnode Jon Hunter
2016-06-24 19:23   ` Rob Herring
2016-06-27 12:04   ` Peter Rosin
2016-06-28  8:21     ` Jon Hunter
2016-06-28 10:20       ` Peter Rosin
     [not found]   ` <1466697545-11868-8-git-send-email-jonathanh-DDmLM1+adcrQT0dZR+AlfA@public.gmane.org>
2016-06-28 21:32     ` Wolfram Sang
2016-06-29  8:05       ` Jon Hunter
2016-06-23 15:59 ` [PATCH 08/12] i2c: core: " Jon Hunter
     [not found]   ` <1466697545-11868-9-git-send-email-jonathanh-DDmLM1+adcrQT0dZR+AlfA@public.gmane.org>
2016-06-28 21:10     ` Thierry Reding
     [not found]       ` <20160628210952.GA1760-+E7KM1FDEuO2P7RxrfNFTMXXUOn6P5/W@public.gmane.org>
2016-06-28 21:33         ` Wolfram Sang
2016-08-02  6:26   ` Tomeu Vizoso
     [not found]     ` <CAAObsKDGVz0XCxeqt+W31RZ-KEvqPnQaH0dkTUj2zL9oFZrPBw-JsoAwUIsXosN+BqQ9rBEUg@public.gmane.org>
2016-08-02  6:49       ` Jon Hunter
2016-08-04  6:25         ` Tomeu Vizoso
2016-06-23 15:59 ` [PATCH 10/12] drm/tegra: Add pinctrl support for DPAUX Jon Hunter
2016-06-23 15:59 ` [PATCH 11/12] arm64: tegra: Add SOR power-domain node Jon Hunter

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=1466697545-11868-2-git-send-email-jonathanh@nvidia.com \
    --to=jonathanh@nvidia.com \
    --cc=airlied@linux.ie \
    --cc=devicetree@vger.kernel.org \
    --cc=dri-devel@lists.freedesktop.org \
    --cc=gnurou@gmail.com \
    --cc=linus.walleij@linaro.org \
    --cc=linux-gpio@vger.kernel.org \
    --cc=linux-i2c@vger.kernel.org \
    --cc=linux-tegra@vger.kernel.org \
    --cc=mark.rutland@arm.com \
    --cc=robh+dt@kernel.org \
    --cc=swarren@wwwdotorg.org \
    --cc=thierry.reding@gmail.com \
    --cc=wsa@the-dreams.de \
    /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.