xref: /linux/Documentation/devicetree/bindings/gpio/nvidia,tegra186-gpio.yaml (revision ab93e0dd72c37d378dd936f031ffb83ff2bd87ce)
17501815fSThierry Reding# SPDX-License-Identifier: (GPL-2.0-only OR BSD-2-Clause)
27501815fSThierry Reding%YAML 1.2
37501815fSThierry Reding---
47501815fSThierry Reding$id: http://devicetree.org/schemas/gpio/nvidia,tegra186-gpio.yaml#
57501815fSThierry Reding$schema: http://devicetree.org/meta-schemas/core.yaml#
67501815fSThierry Reding
77501815fSThierry Redingtitle: NVIDIA Tegra GPIO Controller (Tegra186 and later)
87501815fSThierry Reding
97501815fSThierry Redingmaintainers:
107501815fSThierry Reding  - Thierry Reding <thierry.reding@gmail.com>
117501815fSThierry Reding  - Jon Hunter <jonathanh@nvidia.com>
127501815fSThierry Reding
137501815fSThierry Redingdescription: |
147501815fSThierry Reding  Tegra186 contains two GPIO controllers; a main controller and an "AON"
157501815fSThierry Reding  controller. This binding document applies to both controllers. The register
167501815fSThierry Reding  layouts for the controllers share many similarities, but also some
177501815fSThierry Reding  significant differences. Hence, this document describes closely related but
187501815fSThierry Reding  different bindings and compatible values.
197501815fSThierry Reding
207501815fSThierry Reding  The Tegra186 GPIO controller allows software to set the IO direction of,
217501815fSThierry Reding  and read/write the value of, numerous GPIO signals. Routing of GPIO signals
227501815fSThierry Reding  to package balls is under the control of a separate pin controller hardware
237501815fSThierry Reding  block. Two major sets of registers exist:
247501815fSThierry Reding
257501815fSThierry Reding    a) Security registers, which allow configuration of allowed access to the
267501815fSThierry Reding       GPIO register set. These registers exist in a single contiguous block
277501815fSThierry Reding       of physical address space. The size of this block, and the security
287501815fSThierry Reding       features available, varies between the different GPIO controllers.
297501815fSThierry Reding
307501815fSThierry Reding       Access to this set of registers is not necessary in all circumstances.
317501815fSThierry Reding       Code that wishes to configure access to the GPIO registers needs access
327501815fSThierry Reding       to these registers to do so. Code which simply wishes to read or write
337501815fSThierry Reding       GPIO data does not need access to these registers.
347501815fSThierry Reding
357501815fSThierry Reding    b) GPIO registers, which allow manipulation of the GPIO signals. In some
367501815fSThierry Reding       GPIO controllers, these registers are exposed via multiple "physical
377501815fSThierry Reding       aliases" in address space, each of which access the same underlying
387501815fSThierry Reding       state. See the hardware documentation for rationale. Any particular
397501815fSThierry Reding       GPIO client is expected to access just one of these physical aliases.
407501815fSThierry Reding
417501815fSThierry Reding    Tegra HW documentation describes a unified naming convention for all GPIOs
427501815fSThierry Reding    implemented by the SoC. Each GPIO is assigned to a port, and a port may
437501815fSThierry Reding    control a number of GPIOs. Thus, each GPIO is named according to an
447501815fSThierry Reding    alphabetical port name and an integer GPIO name within the port. For
457501815fSThierry Reding    example, GPIO_PA0, GPIO_PN6, or GPIO_PCC3.
467501815fSThierry Reding
477501815fSThierry Reding    The number of ports implemented by each GPIO controller varies. The number
487501815fSThierry Reding    of implemented GPIOs within each port varies. GPIO registers within a
497501815fSThierry Reding    controller are grouped and laid out according to the port they affect.
507501815fSThierry Reding
517501815fSThierry Reding    The mapping from port name to the GPIO controller that implements that
527501815fSThierry Reding    port, and the mapping from port name to register offset within a
537501815fSThierry Reding    controller, are both extremely non-linear. The header file
547501815fSThierry Reding    <dt-bindings/gpio/tegra186-gpio.h> describes the port-level mapping. In
557501815fSThierry Reding    that file, the naming convention for ports matches the HW documentation.
567501815fSThierry Reding    The values chosen for the names are alphabetically sorted within a
577501815fSThierry Reding    particular controller. Drivers need to map between the DT GPIO IDs and HW
587501815fSThierry Reding    register offsets using a lookup table.
597501815fSThierry Reding
607501815fSThierry Reding    Each GPIO controller can generate a number of interrupt signals. Each
617501815fSThierry Reding    signal represents the aggregate status for all GPIOs within a set of
627501815fSThierry Reding    ports. Thus, the number of interrupt signals generated by a controller
637501815fSThierry Reding    varies as a rough function of the number of ports it implements. Note
647501815fSThierry Reding    that the HW documentation refers to both the overall controller HW
657501815fSThierry Reding    module and the sets-of-ports as "controllers".
667501815fSThierry Reding
677501815fSThierry Reding    Each GPIO controller in fact generates multiple interrupts signals for
687501815fSThierry Reding    each set of ports. Each GPIO may be configured to feed into a specific
697501815fSThierry Reding    one of the interrupt signals generated by a set-of-ports. The intent is
707501815fSThierry Reding    for each generated signal to be routed to a different CPU, thus allowing
717501815fSThierry Reding    different CPUs to each handle subsets of the interrupts within a port.
727501815fSThierry Reding    The status of each of these per-port-set signals is reported via a
737501815fSThierry Reding    separate register. Thus, a driver needs to know which status register to
747501815fSThierry Reding    observe. This binding currently defines no configuration mechanism for
757501815fSThierry Reding    this. By default, drivers should use register
767501815fSThierry Reding    GPIO_${port}_INTERRUPT_STATUS_G1_0. Future revisions to the binding could
777501815fSThierry Reding    define a property to configure this.
787501815fSThierry Reding
797501815fSThierry Redingproperties:
807501815fSThierry Reding  compatible:
817501815fSThierry Reding    enum:
827501815fSThierry Reding      - nvidia,tegra186-gpio
837501815fSThierry Reding      - nvidia,tegra186-gpio-aon
847501815fSThierry Reding      - nvidia,tegra194-gpio
857501815fSThierry Reding      - nvidia,tegra194-gpio-aon
86a8b10f3dSPrathamesh Shete      - nvidia,tegra234-gpio
87a8b10f3dSPrathamesh Shete      - nvidia,tegra234-gpio-aon
887501815fSThierry Reding
897501815fSThierry Reding  reg-names:
907501815fSThierry Reding    items:
917501815fSThierry Reding      - const: security
927501815fSThierry Reding      - const: gpio
937501815fSThierry Reding    minItems: 1
947501815fSThierry Reding
957501815fSThierry Reding  reg:
967501815fSThierry Reding    items:
977501815fSThierry Reding      - description: Security configuration registers.
987501815fSThierry Reding      - description: |
997501815fSThierry Reding          GPIO control registers. This may cover either:
1007501815fSThierry Reding
1017501815fSThierry Reding            a) The single physical alias that this OS should use.
1027501815fSThierry Reding            b) All physical aliases that exist in the controller. This is
1037501815fSThierry Reding               appropriate when the OS is responsible for managing assignment
1047501815fSThierry Reding               of the physical aliases.
1057501815fSThierry Reding    minItems: 1
1067501815fSThierry Reding
1077501815fSThierry Reding  interrupts:
1087501815fSThierry Reding    description: The interrupt outputs from the HW block, one per set of
1097501815fSThierry Reding      ports, in the order the HW manual describes them. The number of entries
1107501815fSThierry Reding      required varies depending on compatible value.
1117501815fSThierry Reding
1127501815fSThierry Reding  gpio-controller: true
1137501815fSThierry Reding
114*1275c70cSAaron Kling  gpio-ranges:
115*1275c70cSAaron Kling    maxItems: 1
116*1275c70cSAaron Kling
1177501815fSThierry Reding  "#gpio-cells":
1187501815fSThierry Reding    description: |
1197501815fSThierry Reding      Indicates how many cells are used in a consumer's GPIO specifier. In the
1207501815fSThierry Reding      specifier:
1217501815fSThierry Reding
1227501815fSThierry Reding        - The first cell is the pin number.
1237501815fSThierry Reding          See <dt-bindings/gpio/tegra186-gpio.h>.
1247501815fSThierry Reding        - The second cell contains flags:
1257501815fSThierry Reding          - Bit 0 specifies polarity
1267501815fSThierry Reding            - 0: Active-high (normal).
1277501815fSThierry Reding            - 1: Active-low (inverted).
1287501815fSThierry Reding    const: 2
1297501815fSThierry Reding
1307501815fSThierry Reding  interrupt-controller: true
1317501815fSThierry Reding
1327501815fSThierry Reding  "#interrupt-cells":
1337501815fSThierry Reding    description: |
1347501815fSThierry Reding      Indicates how many cells are used in a consumer's interrupt specifier.
1357501815fSThierry Reding      In the specifier:
1367501815fSThierry Reding
1377501815fSThierry Reding        - The first cell is the GPIO number.
1387501815fSThierry Reding          See <dt-bindings/gpio/tegra186-gpio.h>.
1397501815fSThierry Reding        - The second cell is contains flags:
1407501815fSThierry Reding          - Bits [3:0] indicate trigger type and level:
1417501815fSThierry Reding            - 1: Low-to-high edge triggered.
1427501815fSThierry Reding            - 2: High-to-low edge triggered.
1437501815fSThierry Reding            - 4: Active high level-sensitive.
1447501815fSThierry Reding            - 8: Active low level-sensitive.
1457501815fSThierry Reding
1467501815fSThierry Reding            Valid combinations are 1, 2, 3, 4, 8.
1477501815fSThierry Reding    const: 2
1487501815fSThierry Reding
1497501815fSThierry RedingallOf:
1507501815fSThierry Reding  - if:
1517501815fSThierry Reding      properties:
1527501815fSThierry Reding        compatible:
1537501815fSThierry Reding          contains:
1547501815fSThierry Reding            enum:
1557501815fSThierry Reding              - nvidia,tegra186-gpio
1567501815fSThierry Reding              - nvidia,tegra194-gpio
157a8b10f3dSPrathamesh Shete              - nvidia,tegra234-gpio
1587501815fSThierry Reding    then:
1597501815fSThierry Reding      properties:
1607501815fSThierry Reding        interrupts:
1617501815fSThierry Reding          minItems: 6
1627501815fSThierry Reding          maxItems: 48
1637501815fSThierry Reding
1647501815fSThierry Reding  - if:
1657501815fSThierry Reding      properties:
1667501815fSThierry Reding        compatible:
1677501815fSThierry Reding          contains:
1687501815fSThierry Reding            enum:
1697501815fSThierry Reding              - nvidia,tegra186-gpio-aon
1707501815fSThierry Reding              - nvidia,tegra194-gpio-aon
171a8b10f3dSPrathamesh Shete              - nvidia,tegra234-gpio-aon
1727501815fSThierry Reding    then:
1737501815fSThierry Reding      properties:
1747501815fSThierry Reding        interrupts:
1757501815fSThierry Reding          minItems: 1
1767501815fSThierry Reding          maxItems: 4
1777501815fSThierry Reding
1787501815fSThierry Redingrequired:
1797501815fSThierry Reding  - compatible
1807501815fSThierry Reding  - reg
1817501815fSThierry Reding  - reg-names
1827501815fSThierry Reding  - interrupts
1837501815fSThierry Reding
1847501815fSThierry RedingadditionalProperties: false
1857501815fSThierry Reding
1867501815fSThierry Redingexamples:
1877501815fSThierry Reding  - |
1887501815fSThierry Reding    #include <dt-bindings/interrupt-controller/irq.h>
1897501815fSThierry Reding
1907501815fSThierry Reding    gpio@2200000 {
1917501815fSThierry Reding        compatible = "nvidia,tegra186-gpio";
1927501815fSThierry Reding        reg-names = "security", "gpio";
1937501815fSThierry Reding        reg = <0x2200000 0x10000>,
1947501815fSThierry Reding              <0x2210000 0x10000>;
1957501815fSThierry Reding        interrupts = <0  47 IRQ_TYPE_LEVEL_HIGH>,
1967501815fSThierry Reding                     <0  50 IRQ_TYPE_LEVEL_HIGH>,
1977501815fSThierry Reding                     <0  53 IRQ_TYPE_LEVEL_HIGH>,
1987501815fSThierry Reding                     <0  56 IRQ_TYPE_LEVEL_HIGH>,
1997501815fSThierry Reding                     <0  59 IRQ_TYPE_LEVEL_HIGH>,
2007501815fSThierry Reding                     <0 180 IRQ_TYPE_LEVEL_HIGH>;
2017501815fSThierry Reding        gpio-controller;
2027501815fSThierry Reding        #gpio-cells = <2>;
2037501815fSThierry Reding        interrupt-controller;
2047501815fSThierry Reding        #interrupt-cells = <2>;
2057501815fSThierry Reding    };
2067501815fSThierry Reding
2077501815fSThierry Reding    gpio@c2f0000 {
2087501815fSThierry Reding        compatible = "nvidia,tegra186-gpio-aon";
2097501815fSThierry Reding        reg-names = "security", "gpio";
2107501815fSThierry Reding        reg = <0xc2f0000 0x1000>,
2117501815fSThierry Reding              <0xc2f1000 0x1000>;
2127501815fSThierry Reding        interrupts = <0 60 IRQ_TYPE_LEVEL_HIGH>;
2137501815fSThierry Reding        gpio-controller;
2147501815fSThierry Reding        #gpio-cells = <2>;
2157501815fSThierry Reding        interrupt-controller;
2167501815fSThierry Reding        #interrupt-cells = <2>;
2177501815fSThierry Reding    };
218