of: Add NVIDIA Tegra XUSB pad controller binding
Subsystems (3)
PATCH v4 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
@@ -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
@@ -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
PATCH v4 2/4 pinctrl: Add NVIDIA Tegra XUSB pad controller support
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 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 | 897 +++++++++++++++++++++++++++++++++++ 3 files changed, 904 insertions(+) create mode 100644 drivers/pinctrl/pinctrl-tegra-xusb.c
drivers/pinctrl/Kconfig +6 -0
@@ -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
@@ -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 +897 -0
897 lines not on this page · raw message
Signature · 1 line
1.9.2
PATCH v4 2/4 pinctrl: Add NVIDIA Tegra XUSB pad controller support
Quoted 17 lines · Thierry Reding
drivers/pinctrl/pinctrl-tegra-xusb.c new file +17
-0+static int tegra_xusb_padctl_pinconf_group_get (struct pinctrl_dev *pinctrl, +unsigned int group, +unsigned long *config) +{ +struct tegra_xusb_padctl *padctl =pinctrl_dev_get_drvdata (pinctrl); +const struct tegra_xusb_padctl_lane *lane; +enum tegra_xusb_padctl_param param; +u32 value; + + param =TEGRA_XUSB_PADCTL_UNPACK_PARAM (*config); + lane = &padctl->soc->lanes[group]; + +switch (param) { +case TEGRA_XUSB_PADCTL_IDDQ : + value =padctl_readl (padctl, lane->offset); + value = (value >> lane->iddq) &0x1 ; + *config =TEGRA_XUSB_PADCTL_PACK (param, value);
drivers/pinctrl/pinctrl-tegra-xusb.c line 343
Quoted 10 lines
drivers/pinctrl/pinctrl-tegra-xusb.c new file +10
-0+break ; + +default : +dev_err (padctl->dev,"invalid configuration parameter: %04x\n" , + param); +return -ENOTSUPP ; + } + +return 0 ; +}
I guess `value' should also be negated here?
PATCH v4 3/4 ARM: tegra: tegra124: Add XUSB pad controller
In reply to Thierry RedingFrom: 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
@@ -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
PATCH v4 4/4 ARM: tegra: jetson-tk1: Add XUSB pad controller
In reply to Thierry RedingFrom: 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
@@ -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
PATCH v4 1/4 of: Add NVIDIA Tegra XUSB pad controller binding
In reply to Thierry RedingQuoted 5 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.
Thanks. I'll wait for a Tested-by from Mikko and an Acked-by from Linus before taking this series.
PATCH v4 1/4 of: Add NVIDIA Tegra XUSB pad controller binding
Quoted 10 lines · Stephen Warren
Quoted 5 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.
Thanks. I'll wait for a Tested-by from Mikko and an Acked-by from Linus before taking this series.
With or without negation added to group_get (see reply to 2/4), the series:
PATCH v4 1/4 of: Add NVIDIA Tegra XUSB pad controller binding
Quoted 8 lines · Mikko Perttunen
Quoted 7 lines · Stephen Warren
Quoted 5 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.
Quoted 7 lines
Quoted 3 lines
Thanks. I'll wait for a Tested-by from Mikko and an Acked-by from Linus before taking this series.
With or without negation added to
group_get(see reply to 2/4), the series:Tested-by Mikko Perttunen <[email protected]>
Thanks. I just sent out another series which addresses the missing negation in group_get() and the missing BIT() around lane->iddq in various places as discussed on IRC.
I've also added debugfs support which helps verifying that group_get() now behaves properly.
Thierry
-------------- next part --------------
A non-text attachment was scrubbed...
Name: not available
Type: application/pgp-signature
Size: 836 bytes
Desc: not available
URL: <http://lists.infradead.org/pipermail/linux-arm-kernel/attachments/20140619/5db9f7ce/attachment.sig>