74 lines
2.9 KiB
Plaintext
74 lines
2.9 KiB
Plaintext
|
NVIDIA Tegra20/Tegra30 high speed (DMA based) UART controller driver.
|
||
|
|
||
|
Required properties:
|
||
|
- compatible : should be,
|
||
|
"nvidia,tegra20-hsuart" for Tegra20,
|
||
|
"nvidia,tegra30-hsuart" for Tegra30,
|
||
|
"nvidia,tegra186-hsuart" for Tegra186,
|
||
|
"nvidia,tegra194-hsuart" for Tegra194.
|
||
|
|
||
|
- reg: Should contain UART controller registers location and length.
|
||
|
- interrupts: Should contain UART controller interrupts.
|
||
|
- clocks: Must contain one entry, for the module clock.
|
||
|
See ../clocks/clock-bindings.txt for details.
|
||
|
- resets : Must contain an entry for each entry in reset-names.
|
||
|
See ../reset/reset.txt for details.
|
||
|
- reset-names : Must include the following entries:
|
||
|
- serial
|
||
|
- dmas : Must contain an entry for each entry in dma-names.
|
||
|
See ../dma/dma.txt for details.
|
||
|
- dma-names : Must include the following entries:
|
||
|
- rx
|
||
|
- tx
|
||
|
|
||
|
Optional properties:
|
||
|
- nvidia,enable-modem-interrupt: Enable modem interrupts. Should be enable
|
||
|
only if all 8 lines of UART controller are pinmuxed.
|
||
|
- nvidia,adjust-baud-rates: List of entries providing percentage of baud rate
|
||
|
adjustment within a range.
|
||
|
Each entry contains sets of 3 values. Range low/high and adjusted rate.
|
||
|
<range_low range_high adjusted_rate>
|
||
|
When baud rate set on controller falls within the range mentioned in this
|
||
|
field, baud rate will be adjusted by percentage mentioned here.
|
||
|
Ex: <9600 115200 200>
|
||
|
Increase baud rate by 2% when set baud rate falls within range 9600 to 115200
|
||
|
|
||
|
Baud Rate tolerance:
|
||
|
Standard UART devices are expected to have tolerance for baud rate error by
|
||
|
-4 to +4 %. All Tegra devices till Tegra210 had this support. However,
|
||
|
Tegra186 chip has a known hardware issue. UART Rx baud rate tolerance level
|
||
|
is 0% to +4% in 1-stop config. Otherwise, the received data will have
|
||
|
corruption/invalid framing errors. Parker errata suggests adjusting baud
|
||
|
rate to be higher than the deviations observed in Tx.
|
||
|
|
||
|
Tx deviation of connected device can be captured over scope (or noted from
|
||
|
its spec) for valid range and Tegra baud rate has to be set above actual
|
||
|
Tx baud rate observed. To do this we use nvidia,adjust-baud-rates
|
||
|
|
||
|
As an example, consider there is deviation observed in Tx for baud rates as
|
||
|
listed below.
|
||
|
0 to 9600 has 1% deviation
|
||
|
9600 to 115200 2% deviation
|
||
|
This slight deviation is expcted and Tegra UART is expected to handle it. Due
|
||
|
to the issue stated above, baud rate on Tegra UART should be set equal to or
|
||
|
above deviation observed for avoiding frame errors.
|
||
|
Property should be set like this
|
||
|
nvidia,adjust-baud-rates = <0 9600 100>,
|
||
|
<9600 115200 200>;
|
||
|
|
||
|
Example:
|
||
|
|
||
|
serial@70006000 {
|
||
|
compatible = "nvidia,tegra30-hsuart", "nvidia,tegra20-hsuart";
|
||
|
reg = <0x70006000 0x40>;
|
||
|
reg-shift = <2>;
|
||
|
interrupts = <0 36 0x04>;
|
||
|
nvidia,enable-modem-interrupt;
|
||
|
clocks = <&tegra_car 6>;
|
||
|
resets = <&tegra_car 6>;
|
||
|
reset-names = "serial";
|
||
|
dmas = <&apbdma 8>, <&apbdma 8>;
|
||
|
dma-names = "rx", "tx";
|
||
|
nvidia,adjust-baud-rates = <1000000 4000000 136>; /* 1.36% shift */
|
||
|
};
|