xref: /freebsd/sys/contrib/device-tree/Bindings/serial/nvidia,tegra20-hsuart.yaml (revision aa1a8ff2d6dbc51ef058f46f3db5a8bb77967145)
1# SPDX-License-Identifier: (GPL-2.0-only OR BSD-2-Clause)
2%YAML 1.2
3---
4$id: http://devicetree.org/schemas/serial/nvidia,tegra20-hsuart.yaml#
5$schema: http://devicetree.org/meta-schemas/core.yaml#
6
7title: NVIDIA Tegra20/Tegra30 high speed (DMA based) UART controller driver
8
9maintainers:
10  - Thierry Reding <thierry.reding@gmail.com>
11  - Jon Hunter <jonathanh@nvidia.com>
12
13properties:
14  compatible:
15    oneOf:
16      - enum:
17          - nvidia,tegra20-hsuart
18          - nvidia,tegra30-hsuart
19          - nvidia,tegra186-hsuart
20          - nvidia,tegra194-hsuart
21      - items:
22          - const: nvidia,tegra124-hsuart
23          - const: nvidia,tegra30-hsuart
24
25  reg:
26    maxItems: 1
27
28  interrupts:
29    maxItems: 1
30
31  clocks:
32    items:
33      - description: module clock
34
35  resets:
36    items:
37      - description: module reset
38
39  reset-names:
40    items:
41      - const: serial
42
43  dmas:
44    items:
45      - description: DMA channel used for reception
46      - description: DMA channel used for transmission
47
48  dma-names:
49    items:
50      - const: rx
51      - const: tx
52
53  nvidia,enable-modem-interrupt:
54    $ref: /schemas/types.yaml#/definitions/flag
55    description: Enable modem interrupts. Should be enable only if all 8 lines of UART controller
56      are pinmuxed.
57
58  nvidia,adjust-baud-rates:
59    $ref: /schemas/types.yaml#/definitions/uint32-matrix
60    description: |
61      List of entries providing percentage of baud rate adjustment within a range. Each entry
62      contains a set of 3 values: range low/high and adjusted rate. When the baud rate set on the
63      controller falls within the range mentioned in this field, the baud rate will be adjusted by
64      percentage mentioned here.
65
66      Example: <9600 115200 200>
67
68      Increase baud rate by 2% when set baud rate falls within range 9600 to 115200.
69
70      Standard UART devices are expected to have tolerance for baud rate error by -4 to +4 %. All
71      Tegra devices till Tegra210 had this support. However, Tegra186 chip has a known hardware
72      issue. UART RX baud rate tolerance level is 0% to +4% in 1-stop config. Otherwise, the
73      received data will have corruption/invalid framing errors. Parker errata suggests adjusting
74      baud rate to be higher than the deviations observed in TX.
75
76      TX deviation of connected device can be captured over scope (or noted from its spec) for
77      valid range and Tegra baud rate has to be set above actual TX baud rate observed. To do this
78      we use nvidia,adjust-baud-rates.
79
80      As an example, consider there is deviation observed in TX for baud rates as listed below. 0
81      to 9600 has 1% deviation 9600 to 115200 2% deviation. This slight deviation is expcted and
82      Tegra UART is expected to handle it. Due to the issue stated above, baud rate on Tegra UART
83      should be set equal to or above deviation observed for avoiding frame errors. Property
84      should be set like this:
85
86        nvidia,adjust-baud-rates = <0 9600 100>,
87                                   <9600 115200 200>;
88    items:
89      items:
90        - description: range lower bound
91        - description: range upper bound
92        - description: adjustment (in permyriad, i.e. 0.01%)
93
94allOf:
95  - $ref: serial.yaml
96
97unevaluatedProperties: false
98
99required:
100  - compatible
101  - reg
102  - interrupts
103  - clocks
104  - resets
105  - reset-names
106  - dmas
107  - dma-names
108
109examples:
110  - |
111    #include <dt-bindings/clock/tegra30-car.h>
112    #include <dt-bindings/interrupt-controller/arm-gic.h>
113
114    serial@70006000 {
115        compatible = "nvidia,tegra30-hsuart";
116        reg = <0x70006000 0x40>;
117        interrupts = <GIC_SPI 36 IRQ_TYPE_LEVEL_HIGH>;
118        nvidia,enable-modem-interrupt;
119        clocks = <&tegra_car TEGRA30_CLK_UARTA>;
120        resets = <&tegra_car 6>;
121        reset-names = "serial";
122        dmas = <&apbdma 8>, <&apbdma 8>;
123        dma-names = "rx", "tx";
124        nvidia,adjust-baud-rates = <1000000 4000000 136>; /* 1.36% shift */
125    };
126