On Mon, Aug 12, 2019 at 04:58:20PM +0530, Krishna Yarlagadda wrote: > Tegra186 chip has a hardware issue resulting in frame errors when > tolerance level for baud rate is negative. Provided entries to adjust > baud rate to be within acceptable range and work with devices that > can send negative baud rate. Also report error when baud rate set is > out of tolerance range of controller updated in device tree. > > Signed-off-by: Krishna Yarlagadda > --- > .../bindings/serial/nvidia,tegra20-hsuart.txt | 32 ++++++++++++++++++++++ > 1 file changed, 32 insertions(+) > > diff --git a/Documentation/devicetree/bindings/serial/nvidia,tegra20-hsuart.txt b/Documentation/devicetree/bindings/serial/nvidia,tegra20-hsuart.txt > index 187ec78..1ce3fd4 100644 > --- a/Documentation/devicetree/bindings/serial/nvidia,tegra20-hsuart.txt > +++ b/Documentation/devicetree/bindings/serial/nvidia,tegra20-hsuart.txt > @@ -20,6 +20,37 @@ Required properties: > 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. > + > + 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. The above sounds like the tolerance deviation is a characteristic of the Tegra186 chip. If the board design does not influence the deviation, why can't we encode this in the driver? Why do we need a description of this in device tree? Thierry > + > + 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: > > @@ -34,4 +65,5 @@ serial@70006000 { > reset-names = "serial"; > dmas = <&apbdma 8>, <&apbdma 8>; > dma-names = "rx", "tx"; > + nvidia,adjust-baud-rates = <1000000 4000000 136>; /* 1.36% shift */ > }; > -- > 2.7.4 >