Re: [PATCH 2/2] ARM: DT: tegra: pinctrl suspend resume hook

3 messages, 3 authors, 2013-05-02 · open the first message on its own page

Re: [PATCH 2/2] ARM: DT: tegra: pinctrl suspend resume hook

From: Thierry Reding <hidden>
Date: 2013-04-26 19:49:17

On Tue, Apr 23, 2013 at 11:39:02PM +0530, Bibek Basu wrote:
Make pinmux as the first node of tegra DT
so as to achieve pinctrl as last device to suspend and
first device to resume.
I don't think this is a good idea. For one it encodes Linux specific
implementation details within the device tree. Furthermore I seem to
remember that the device tree makes no guarantees that the order of
nodes in the blob is the same as the order in the DTS.

That said I don't have a good alternative. Perhaps one solution would be
to use suspend_late() and resume_early() for the pinmux driver since
they will be called after and before the suspend() and resume()
callbacks of all other devices, respectively. Other than that I wasn't
able to find anything about forcing a particular order during suspend
and resume.

Cc'ing Rafael and the linux-pm mailing list, maybe somebody among them
knows a proper solution.

Thierry
quoted hunk
Signed-off-by: Bibek Basu <redacted>
---
 arch/arm/boot/dts/tegra114.dtsi | 12 ++++++------
 arch/arm/boot/dts/tegra20.dtsi  | 16 ++++++++--------
 arch/arm/boot/dts/tegra30.dtsi  | 13 +++++++------
 3 files changed, 21 insertions(+), 20 deletions(-)
diff --git a/arch/arm/boot/dts/tegra114.dtsi b/arch/arm/boot/dts/tegra114.dtsi
index a58a761..36596ae 100644
--- a/arch/arm/boot/dts/tegra114.dtsi
+++ b/arch/arm/boot/dts/tegra114.dtsi
@@ -11,6 +11,12 @@
 		serial3 = &uartd;
 	};
 
+	pinmux: pinmux {
+		compatible = "nvidia,tegra114-pinmux";
+		reg = <0x70000868 0x148		/* Pad control registers */
+		       0x70003000 0x40c>;	/* Mux registers */
+	};
+
 	host1x {
 		compatible = "nvidia,tegra114-host1x", "simple-bus";
 		reg = <0x50000000 0x00028000>;
@@ -165,12 +171,6 @@
 		interrupt-controller;
 	};
 
-	pinmux: pinmux {
-		compatible = "nvidia,tegra114-pinmux";
-		reg = <0x70000868 0x148		/* Pad control registers */
-		       0x70003000 0x40c>;	/* Mux registers */
-	};
-
 	/*
 	 * There are two serial driver i.e. 8250 based simple serial
 	 * driver and APB DMA based serial driver for higher baudrate
diff --git a/arch/arm/boot/dts/tegra20.dtsi b/arch/arm/boot/dts/tegra20.dtsi
index a5a9615..6d8a663 100644
--- a/arch/arm/boot/dts/tegra20.dtsi
+++ b/arch/arm/boot/dts/tegra20.dtsi
@@ -12,6 +12,14 @@
 		serial4 = &uarte;
 	};
 
+	pinmux: pinmux {
+		compatible = "nvidia,tegra20-pinmux";
+		reg = <0x70000014 0x10   /* Tri-state registers */
+		       0x70000080 0x20   /* Mux registers */
+		       0x700000a0 0x14   /* Pull-up/down registers */
+		       0x70000868 0xa8>; /* Pad control registers */
+	};
+
 	host1x {
 		compatible = "nvidia,tegra20-host1x", "simple-bus";
 		reg = <0x50000000 0x00024000>;
@@ -196,14 +204,6 @@
 		interrupt-controller;
 	};
 
-	pinmux: pinmux {
-		compatible = "nvidia,tegra20-pinmux";
-		reg = <0x70000014 0x10   /* Tri-state registers */
-		       0x70000080 0x20   /* Mux registers */
-		       0x700000a0 0x14   /* Pull-up/down registers */
-		       0x70000868 0xa8>; /* Pad control registers */
-	};
-
 	das {
 		compatible = "nvidia,tegra20-das";
 		reg = <0x70000c00 0x80>;
diff --git a/arch/arm/boot/dts/tegra30.dtsi b/arch/arm/boot/dts/tegra30.dtsi
index 9f33086..b4b79f0 100644
--- a/arch/arm/boot/dts/tegra30.dtsi
+++ b/arch/arm/boot/dts/tegra30.dtsi
@@ -12,6 +12,13 @@
 		serial4 = &uarte;
 	};
 
+	pinmux: pinmux {
+		compatible = "nvidia,tegra30-pinmux";
+		reg = <0x70000868 0xd4    /* Pad control registers */
+		       0x70003000 0x3e4>; /* Mux registers */
+	};
+
+
 	host1x {
 		compatible = "nvidia,tegra30-host1x", "simple-bus";
 		reg = <0x50000000 0x00024000>;
@@ -216,12 +223,6 @@
 		interrupt-controller;
 	};
 
-	pinmux: pinmux {
-		compatible = "nvidia,tegra30-pinmux";
-		reg = <0x70000868 0xd4    /* Pad control registers */
-		       0x70003000 0x3e4>; /* Mux registers */
-	};
-
 	/*
 	 * There are two serial driver i.e. 8250 based simple serial
 	 * driver and APB DMA based serial driver for higher baudrate
-- 
1.8.1.5

--
To unsubscribe from this list: send the line "unsubscribe linux-tegra" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html

RE: [PATCH 2/2] ARM: DT: tegra: pinctrl suspend resume hook

From: Bibek Basu <hidden>
Date: 2013-04-28 13:42:38

-----Original Message-----
From: Thierry Reding [mailto:thierry.reding-RM9K5IK7kjKj5M59NBduVrNAH6kLmebB@public.gmane.org]
Sent: Saturday, April 27, 2013 1:19 AM
To: Bibek Basu
Cc: Rafael J. Wysocki; linus.walleij-QSEj5FYQhm4dnm+yROfE0A@public.gmane.org; swarren-3lzwWm7+Weoh9ZMKESR00Q@public.gmane.org;
linux-tegra-u79uwXL29TY76Z2rM5mHXA@public.gmane.org; linux-kernel-u79uwXL29TY76Z2rM5mHXA@public.gmane.org; linux-
pm-u79uwXL29TY76Z2rM5mHXA@public.gmane.org
Subject: Re: [PATCH 2/2] ARM: DT: tegra: pinctrl suspend resume hook

* PGP Signed by an unknown key

On Tue, Apr 23, 2013 at 11:39:02PM +0530, Bibek Basu wrote:
quoted
Make pinmux as the first node of tegra DT so as to achieve pinctrl as
last device to suspend and first device to resume.
I don't think this is a good idea. For one it encodes Linux specific
implementation details within the device tree. Furthermore I seem to
remember that the device tree makes no guarantees that the order of nodes
in the blob is the same as the order in the DTS.

That said I don't have a good alternative. Perhaps one solution would be to
use suspend_late() and resume_early() for the pinmux driver since they will
be called after and before the suspend() and resume() callbacks of all other
devices, respectively. Other than that I wasn't able to find anything about
forcing a particular order during suspend and resume.

Cc'ing Rafael and the linux-pm mailing list, maybe somebody among them
knows a proper solution.
Stephen actually suggested me earlier to add dummy pinmux state on all dependent devices node. And that will make sure that dependency of driver prevails.
I tried that but I was not getting the desired result.
Can anyone tell me correct syntax for adding dummy state?

Regards
Bibek
Thierry
quoted
Signed-off-by: Bibek Basu <redacted>
---
 arch/arm/boot/dts/tegra114.dtsi | 12 ++++++------
arch/arm/boot/dts/tegra20.dtsi  | 16 ++++++++--------
arch/arm/boot/dts/tegra30.dtsi  | 13 +++++++------
 3 files changed, 21 insertions(+), 20 deletions(-)
diff --git a/arch/arm/boot/dts/tegra114.dtsi
b/arch/arm/boot/dts/tegra114.dtsi index a58a761..36596ae 100644
--- a/arch/arm/boot/dts/tegra114.dtsi
+++ b/arch/arm/boot/dts/tegra114.dtsi
@@ -11,6 +11,12 @@
 		serial3 = &uartd;
 	};

+	pinmux: pinmux {
+		compatible = "nvidia,tegra114-pinmux";
+		reg = <0x70000868 0x148		/* Pad control
registers */
quoted
+		       0x70003000 0x40c>;	/* Mux registers */
+	};
+
 	host1x {
 		compatible = "nvidia,tegra114-host1x", "simple-bus";
 		reg = <0x50000000 0x00028000>;
@@ -165,12 +171,6 @@
 		interrupt-controller;
 	};

-	pinmux: pinmux {
-		compatible = "nvidia,tegra114-pinmux";
-		reg = <0x70000868 0x148		/* Pad control
registers */
quoted
-		       0x70003000 0x40c>;	/* Mux registers */
-	};
-
 	/*
 	 * There are two serial driver i.e. 8250 based simple serial
 	 * driver and APB DMA based serial driver for higher baudrate diff
--git a/arch/arm/boot/dts/tegra20.dtsi
b/arch/arm/boot/dts/tegra20.dtsi index a5a9615..6d8a663 100644
--- a/arch/arm/boot/dts/tegra20.dtsi
+++ b/arch/arm/boot/dts/tegra20.dtsi
@@ -12,6 +12,14 @@
 		serial4 = &uarte;
 	};

+	pinmux: pinmux {
+		compatible = "nvidia,tegra20-pinmux";
+		reg = <0x70000014 0x10   /* Tri-state registers */
+		       0x70000080 0x20   /* Mux registers */
+		       0x700000a0 0x14   /* Pull-up/down registers */
+		       0x70000868 0xa8>; /* Pad control registers */
+	};
+
 	host1x {
 		compatible = "nvidia,tegra20-host1x", "simple-bus";
 		reg = <0x50000000 0x00024000>;
@@ -196,14 +204,6 @@
 		interrupt-controller;
 	};

-	pinmux: pinmux {
-		compatible = "nvidia,tegra20-pinmux";
-		reg = <0x70000014 0x10   /* Tri-state registers */
-		       0x70000080 0x20   /* Mux registers */
-		       0x700000a0 0x14   /* Pull-up/down registers */
-		       0x70000868 0xa8>; /* Pad control registers */
-	};
-
 	das {
 		compatible = "nvidia,tegra20-das";
 		reg = <0x70000c00 0x80>;
diff --git a/arch/arm/boot/dts/tegra30.dtsi
b/arch/arm/boot/dts/tegra30.dtsi index 9f33086..b4b79f0 100644
--- a/arch/arm/boot/dts/tegra30.dtsi
+++ b/arch/arm/boot/dts/tegra30.dtsi
@@ -12,6 +12,13 @@
 		serial4 = &uarte;
 	};

+	pinmux: pinmux {
+		compatible = "nvidia,tegra30-pinmux";
+		reg = <0x70000868 0xd4    /* Pad control registers */
+		       0x70003000 0x3e4>; /* Mux registers */
+	};
+
+
 	host1x {
 		compatible = "nvidia,tegra30-host1x", "simple-bus";
 		reg = <0x50000000 0x00024000>;
@@ -216,12 +223,6 @@
 		interrupt-controller;
 	};

-	pinmux: pinmux {
-		compatible = "nvidia,tegra30-pinmux";
-		reg = <0x70000868 0xd4    /* Pad control registers */
-		       0x70003000 0x3e4>; /* Mux registers */
-	};
-
 	/*
 	 * There are two serial driver i.e. 8250 based simple serial
 	 * driver and APB DMA based serial driver for higher baudrate
--
1.8.1.5

--
To unsubscribe from this list: send the line "unsubscribe linux-tegra"
in the body of a message to majordomo-u79uwXL29TY76Z2rM5mHXA@public.gmane.org More
majordomo
quoted
info at  http://vger.kernel.org/majordomo-info.html
* Unknown Key
* 0x7F3EB3A1

Re: [PATCH 2/2] ARM: DT: tegra: pinctrl suspend resume hook

From: Stephen Warren <hidden>
Date: 2013-05-02 18:33:36

On 04/28/2013 07:42 AM, Bibek Basu wrote:
quoted
-----Original Message-----
From: Thierry Reding [mailto:thierry.reding-RM9K5IK7kjKj5M59NBduVrNAH6kLmebB@public.gmane.org]
Sent: Saturday, April 27, 2013 1:19 AM
To: Bibek Basu
Cc: Rafael J. Wysocki; linus.walleij-QSEj5FYQhm4dnm+yROfE0A@public.gmane.org; swarren-3lzwWm7+Weoh9ZMKESR00Q@public.gmane.org;
linux-tegra-u79uwXL29TY76Z2rM5mHXA@public.gmane.org; linux-kernel-u79uwXL29TY76Z2rM5mHXA@public.gmane.org; linux-
pm-u79uwXL29TY76Z2rM5mHXA@public.gmane.org
Subject: Re: [PATCH 2/2] ARM: DT: tegra: pinctrl suspend resume hook

* PGP Signed by an unknown key

On Tue, Apr 23, 2013 at 11:39:02PM +0530, Bibek Basu wrote:
quoted
Make pinmux as the first node of tegra DT so as to achieve pinctrl as
last device to suspend and first device to resume.
I don't think this is a good idea. For one it encodes Linux specific
implementation details within the device tree. Furthermore I seem to
remember that the device tree makes no guarantees that the order of nodes
in the blob is the same as the order in the DTS.

That said I don't have a good alternative. Perhaps one solution would be to
use suspend_late() and resume_early() for the pinmux driver since they will
be called after and before the suspend() and resume() callbacks of all other
devices, respectively. Other than that I wasn't able to find anything about
forcing a particular order during suspend and resume.

Cc'ing Rafael and the linux-pm mailing list, maybe somebody among them
knows a proper solution.
Stephen actually suggested me earlier to add dummy pinmux state on all dependent devices node. And that will make sure that dependency of driver prevails.
I tried that but I was not getting the desired result.
Can anyone tell me correct syntax for adding dummy state?
I agree with Thierry that this patch is not the correct approach.

A dummy pinctrl state would look something like the following in each
affected device node:

                pinctrl-names = "default";
                pinctrl-0 = <>;
Keyboard shortcuts
hback out one level
jnext message in thread
kprevious message in thread
ldrill in
Escclose help / fold thread tree
?toggle this help