Skip to contentSkip to conversation

of: Add NVIDIA Tegra XUSB pad controller binding

PATCH New Thierry Reding 3 participants 8 messages Jun 19, 2014 – Jul 11, 2014

Subsystems (3)
lore
Share & tools
lore
#0 lore raw

PATCH v5 1/4 of: Add NVIDIA Tegra XUSB pad controller binding

From: Thierry Reding <[email protected]>

This patch adds the device tree binding documentation for the XUSB pad controller found on NVIDIA Tegra SoCs. It exposes both pinmuxing and PHY capabilities.

---
Changes in v4:
- drop unneeded #address-cells = <0> and #size-cells = <0>

Changes in v2:
- move header file to this patch and refer to it in the binding
- update example to match the latest binding

 .../pinctrl/nvidia,tegra124-xusb-padctl.txt        | 127 +++++++++++++++++++++
 include/dt-bindings/pinctrl/pinctrl-tegra-xusb.h   |   7 ++
 2 files changed, 134 insertions(+)
 create mode 100644 Documentation/devicetree/bindings/pinctrl/nvidia,tegra124-xusb-padctl.txt
 create mode 100644 include/dt-bindings/pinctrl/pinctrl-tegra-xusb.h
Documentation/devicetree/bindings/pinctrl/nvidia,tegra124-xusb-padctl.txt new file +127 -0
new file mode 100644
index 000000000000..2f9c0bd66457
@@ -0,0 +1,127 @@
+Device tree binding for NVIDIA Tegra XUSB pad controller
+========================================================
+
+The Tegra XUSB pad controller manages a set of lanes, each of which can be
+assigned to one out of a set of different pads. Some of these pads have an
+associated PHY that must be powered up before the pad can be used.
+
+This document defines the device-specific binding for the XUSB pad controller.
+
+Refer to pinctrl-bindings.txt in this directory for generic information about
+pin controller device tree bindings and ../phy/phy-bindings.txt for details on
+how to describe and reference PHYs in device trees.
+
+Required properties:
+--------------------
+- compatible: should be "nvidia,tegra124-xusb-padctl"
+- reg: Physical base address and length of the controller's registers.
+- resets: Must contain an entry for each entry in reset-names.
+  See ../reset/reset.txt for details.
+- reset-names: Must include the following entries:
+  - padctl
+- #phy-cells: Should be 1. The specifier is the index of the PHY to reference.
+  See <dt-bindings/pinctrl/pinctrl-tegra-xusb.h> for the list of valid values.
+
+Lane muxing:
+------------
+
+Child nodes contain the pinmux configurations following the conventions from
+the pinctrl-bindings.txt document. Typically a single, static configuration is
+given and applied at boot time.
+
+Each subnode describes groups of lanes along with parameters and pads that
+they should be assigned to. The name of these subnodes is not important. All
+subnodes should be parsed solely based on their content.
+
+Each subnode only applies the parameters that are explicitly listed. In other
+words, if a subnode that lists a function but no pin configuration parameters
+implies no information about any pin configuration parameters. Similarly, a
+subnode that describes only an IDDQ parameter implies no information about
+what function the pins are assigned to. For this reason even seemingly boolean
+values are actually tristates in this binding: unspecified, off or on.
+Unspecified is represented as an absent property, and off/on are represented
+as integer values 0 and 1.
+
+Required properties:
+- nvidia,lanes: An array of strings. Each string is the name of a lane.
+
+Optional properties:
+- nvidia,function: A string that is the name of the function (pad) that the
+  pin or group should be assigned to. Valid values for function names are
+  listed below.
+- nvidia,iddq: Enables IDDQ mode of the lane. (0: no, 1: yes)
+
+Note that not all of these properties are valid for all lanes. Lanes can be
+divided into three groups:
+
+  - otg-0, otg-1, otg-2:
+
+    Valid functions for this group are: "snps", "xusb", "uart", "rsvd".
+
+    The nvidia,iddq property does not apply to this group.
+
+  - ulpi-0, hsic-0, hsic-1:
+
+    Valid functions for this group are: "snps", "xusb".
+
+    The nvidia,iddq property does not apply to this group.
+
+  - pcie-0, pcie-1, pcie-2, pcie-3, pcie-4, sata-0:
+
+    Valid functions for this group are: "pcie", "usb3", "sata", "rsvd".
+
+
+Example:
+========
+
+SoC file extract:
+-----------------
+
+	padctl at 0,7009f000 {
+		compatible = "nvidia,tegra124-xusb-padctl";
+		reg = <0x0 0x7009f000 0x0 0x1000>;
+		resets = <&tegra_car 142>;
+		reset-names = "padctl";
+
+		#phy-cells = <1>;
+	};
+
+Board file extract:
+-------------------
+
+	pcie-controller at 0,01003000 {
+		...
+
+		phys = <&padctl 0>;
+		phy-names = "pcie";
+
+		...
+	};
+
+	...
+
+	padctl: padctl at 0,7009f000 {
+		pinctrl-0 = <&padctl_default>;
+		pinctrl-names = "default";
+
+		padctl_default: pinmux {
+			usb3 {
+				nvidia,lanes = "pcie-0", "pcie-1";
+				nvidia,function = "usb3";
+				nvidia,iddq = <0>;
+			};
+
+			pcie {
+				nvidia,lanes = "pcie-2", "pcie-3",
+					       "pcie-4";
+				nvidia,function = "pcie";
+				nvidia,iddq = <0>;
+			};
+
+			sata {
+				nvidia,lanes = "sata-0";
+				nvidia,function = "sata";
+				nvidia,iddq = <0>;
+			};
+		};
+	};
include/dt-bindings/pinctrl/pinctrl-tegra-xusb.h new file +7 -0
new file mode 100644
index 000000000000..914d56da9324
@@ -0,0 +1,7 @@
+#ifndef _DT_BINDINGS_PINCTRL_TEGRA_XUSB_H
+#define _DT_BINDINGS_PINCTRL_TEGRA_XUSB_H 1
+
+#define TEGRA_XUSB_PADCTL_PCIE 0
+#define TEGRA_XUSB_PADCTL_SATA 1
+
+#endif /* _DT_BINDINGS_PINCTRL_TEGRA_XUSB_H */
Signature · 1 line
1.9.2
#1 lore raw

PATCH v5 1/4 of: Add NVIDIA Tegra XUSB pad controller binding

Quoted 16 lines · Thierry Reding

From: Thierry Reding <[email protected]>

This patch adds the device tree binding documentation for the XUSB pad controller found on NVIDIA Tegra SoCs. It exposes both pinmuxing and PHY capabilities.

---
Changes in v4:
- drop unneeded #address-cells = <0> and #size-cells = <0>

Changes in v2:
- move header file to this patch and refer to it in the binding
- update example to match the latest binding

Quoted 5 lines
 .../pinctrl/nvidia,tegra124-xusb-padctl.txt        | 127 +++++++++++++++++++++
 include/dt-bindings/pinctrl/pinctrl-tegra-xusb.h   |   7 ++
 2 files changed, 134 insertions(+)
 create mode 100644 Documentation/devicetree/bindings/pinctrl/nvidia,tegra124-xusb-padctl.txt
 create mode 100644 include/dt-bindings/pinctrl/pinctrl-tegra-xusb.h

Patches 1 and 2 applied to the for-3.17/xusb-padctl branch with Linus' Acked-by.

Thierry
-------------- next part --------------
A non-text attachment was scrubbed...
Name: not available
Type: application/pgp-signature
Size: 819 bytes
Desc: not available
URL: <http://lists.infradead.org/pipermail/linux-arm-kernel/attachments/20140711/6cf2c4fd/attachment.sig>

#2 lore raw

PATCH v5 2/4 pinctrl: Add NVIDIA Tegra XUSB pad controller support

In reply to Thierry Reding

From: Thierry Reding <[email protected]>

The XUSB pad controller found on NVIDIA Tegra SoCs provides several pads that lanes can be assigned to in order to support a variety of interface
options: USB 2.0, USB 3.0, PCIe and SATA.

In addition to the pin controller used to assign lanes to pads two PHYs are exposed to allow the bricks for PCIe and SATA to be powered up and down by PCIe and SATA drivers.

---
Changes in v5:
- lane->iddq is a bit position, so needs to go through BIT() when used to modify a register field
- invert IDDQ logic for pinconf_group_get() as well
- add debugfs support for IDDQ property

Changes in v4:
- invert IDDQ logic, since the register bits are IDDQ disables

Changes in v3:
- use separate variables for configuration value and register value to avoid overwriting the former when accessing registers

Changes in v2:
- remove unused tegra124_groups array
- move header file to binding patch
- default to y for ARCH_TEGRA

 drivers/pinctrl/Kconfig              |   6 +
 drivers/pinctrl/Makefile             |   1 +
 drivers/pinctrl/pinctrl-tegra-xusb.c | 973 +++++++++++++++++++++++++++++++++++
 3 files changed, 980 insertions(+)
 create mode 100644 drivers/pinctrl/pinctrl-tegra-xusb.c
drivers/pinctrl/Kconfig +6 -0
index 0042ccb46b9a..0fa42be8df00 100644
@@ -328,6 +328,12 @@ config PINCTRL_TEGRA124
 	bool
 	select PINCTRL_TEGRA
 
+config PINCTRL_TEGRA_XUSB
+	def_bool y if ARCH_TEGRA
+	select GENERIC_PHY
+	select PINCONF
+	select PINMUX
+
 config PINCTRL_TZ1090
 	bool "Toumaz Xenif TZ1090 pin control driver"
 	depends on SOC_TZ1090
drivers/pinctrl/Makefile +1 -0
index c4b5d405b8f5..df8878839b44 100644
@@ -55,6 +55,7 @@ obj-$(CONFIG_PINCTRL_TEGRA20)	+= pinctrl-tegra20.o
 obj-$(CONFIG_PINCTRL_TEGRA30)	+= pinctrl-tegra30.o
 obj-$(CONFIG_PINCTRL_TEGRA114)	+= pinctrl-tegra114.o
 obj-$(CONFIG_PINCTRL_TEGRA124)	+= pinctrl-tegra124.o
+obj-$(CONFIG_PINCTRL_TEGRA_XUSB)	+= pinctrl-tegra-xusb.o
 obj-$(CONFIG_PINCTRL_TZ1090)	+= pinctrl-tz1090.o
 obj-$(CONFIG_PINCTRL_TZ1090_PDC)	+= pinctrl-tz1090-pdc.o
 obj-$(CONFIG_PINCTRL_U300)	+= pinctrl-u300.o
drivers/pinctrl/pinctrl-tegra-xusb.c new file +973 -0

973 lines not on this page · raw message

Signature · 1 line
1.9.2
#3 lore raw

PATCH v5 2/4 pinctrl: Add NVIDIA Tegra XUSB pad controller support

Quoted 9 lines · Thierry Reding

From: Thierry Reding <[email protected]>

The XUSB pad controller found on NVIDIA Tegra SoCs provides several pads that lanes can be assigned to in order to support a variety of interface
options: USB 2.0, USB 3.0, PCIe and SATA.

In addition to the pin controller used to assign lanes to pads two PHYs are exposed to allow the bricks for PCIe and SATA to be powered up and down by PCIe and SATA drivers.

Linus, does the driver look OK? I'm hoping for an ack from you so that I can take this series through the Tegra tree to resolve some dependencies; we have various other drivers that depend on this series.

Thanks!

#4 lore raw

PATCH v5 2/4 pinctrl: Add NVIDIA Tegra XUSB pad controller support

Quoted 7 lines · Stephen Warren
Quoted 6 lines · Thierry Reding

From: Thierry Reding <[email protected]>

The XUSB pad controller found on NVIDIA Tegra SoCs provides several pads that lanes can be assigned to in order to support a variety of interface
options: USB 2.0, USB 3.0, PCIe and SATA.

Quoted 7 lines
Quoted 3 lines

In addition to the pin controller used to assign lanes to pads two PHYs are exposed to allow the bricks for PCIe and SATA to be powered up and down by PCIe and SATA drivers.

Linus, does the driver look OK? I'm hoping for an ack from you so that I can take this series through the Tegra tree to resolve some dependencies; we have various other drivers that depend on this series.

Sure thing, if it looks OK to you, by all means apply it yo your tree.

(Also goes for the DT bindings FWIW)

Yours,
Linus Walleij

#5 lore raw

PATCH v5 3/4 ARM: tegra: tegra124: Add XUSB pad controller

In reply to Thierry Reding

From: Thierry Reding <[email protected]>

The device tree node in the SoC file contains only the resources (such as registers, resets, ...) but none of the lane assignment information since that's board specific and belongs in the board file.

---
Changes in v2:
- include dt-bindings/pinctrl/pinctrl-tegra-xusb.h so that board files don't have to include it explicitly
- remove unneeded #address-cells/#size-cells = <0>
- add padctl label for XUSB pad controller node

 arch/arm/boot/dts/tegra124.dtsi | 10 ++++++++++
 1 file changed, 10 insertions(+)
arch/arm/boot/dts/tegra124.dtsi +10 -0
index 6e6bc4e8185c..b7cb944b2faa 100644
@@ -1,6 +1,7 @@
 #include <dt-bindings/clock/tegra124-car.h>
 #include <dt-bindings/gpio/tegra-gpio.h>
 #include <dt-bindings/pinctrl/pinctrl-tegra.h>
+#include <dt-bindings/pinctrl/pinctrl-tegra-xusb.h>
 #include <dt-bindings/interrupt-controller/arm-gic.h>
 
 #include "skeleton.dtsi"
@@ -449,6 +450,15 @@
 		clock-names = "pclk", "clk32k_in";
 	};
 
+	padctl: padctl at 0,7009f000 {
+		compatible = "nvidia,tegra124-xusb-padctl";
+		reg = <0x0 0x7009f000 0x0 0x1000>;
+		resets = <&tegra_car 142>;
+		reset-names = "padctl";
+
+		#phy-cells = <1>;
+	};
+
 	sdhci at 0,700b0000 {
 		compatible = "nvidia,tegra124-sdhci";
 		reg = <0x0 0x700b0000 0x0 0x200>;
Signature · 1 line
1.9.2
#6 lore raw

PATCH v5 3/4 ARM: tegra: tegra124: Add XUSB pad controller

Quoted 15 lines · Thierry Reding

From: Thierry Reding <[email protected]>

The device tree node in the SoC file contains only the resources (such as registers, resets, ...) but none of the lane assignment information since that's board specific and belongs in the board file.

---
Changes in v2:
- include dt-bindings/pinctrl/pinctrl-tegra-xusb.h so that board files don't have to include it explicitly
- remove unneeded #address-cells/#size-cells = <0>
- add padctl label for XUSB pad controller node

Quoted 2 lines
 arch/arm/boot/dts/tegra124.dtsi | 10 ++++++++++
 1 file changed, 10 insertions(+)

Patches 3 and 4 applied to the for-3.17/dt branch and rebased the branch on for-3.17/xusb-padctl because of the dependency on the dt-bindings header.

Thierry
-------------- next part --------------
A non-text attachment was scrubbed...
Name: not available
Type: application/pgp-signature
Size: 819 bytes
Desc: not available
URL: <http://lists.infradead.org/pipermail/linux-arm-kernel/attachments/20140711/de856bec/attachment.sig>

#7 lore raw

PATCH v5 4/4 ARM: tegra: jetson-tk1: Add XUSB pad controller

In reply to Thierry Reding

From: Thierry Reding <[email protected]>

Assign lanes to the XUSB pads as used on the Jetson TK1.

---
 arch/arm/boot/dts/tegra124-jetson-tk1.dts | 26 ++++++++++++++++++++++++++
 1 file changed, 26 insertions(+)
arch/arm/boot/dts/tegra124-jetson-tk1.dts +26 -0
index e31fb61a81d3..38d30877057c 100644
@@ -1619,6 +1619,32 @@
 		nvidia,sys-clock-req-active-high;
 	};
 
+	padctl at 0,7009f000 {
+		pinctrl-0 = <&padctl_default>;
+		pinctrl-names = "default";
+
+		padctl_default: pinmux {
+			usb3 {
+				nvidia,lanes = "pcie-0", "pcie-1";
+				nvidia,function = "usb3";
+				nvidia,iddq = <0>;
+			};
+
+			pcie {
+				nvidia,lanes = "pcie-2", "pcie-3",
+					       "pcie-4";
+				nvidia,function = "pcie";
+				nvidia,iddq = <0>;
+			};
+
+			sata {
+				nvidia,lanes = "sata-0";
+				nvidia,function = "sata";
+				nvidia,iddq = <0>;
+			};
+		};
+	};
+
 	/* SD card */
 	sdhci at 0,700b0400 {
 		status = "okay";
Signature · 1 line
1.9.2