Re: Tegra 2: Spurious interrupts from UARTA (@70006000)

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 




On 06/13/2018 11:28 PM, Peter Geis wrote:
> Good Evening David,
> 
> Just to make sure, you have explicitly defined the functions for UARTA
> and all spare functions right?
> According to the TRM, if you don't have the functions explicitly
> defined, and a function is assigned to both the primary and alternate
> pingroups, or two functions assigned to the same pingroup, you can get
> unpredictable behavior.

Hi Peter,

you are right, thats a good point. Actually, the Tegra2 CPU even has a
silicon bug related to this, see
https://patchwork.kernel.org/patch/3582721/ . That's why the 8250 driver
(if recognizing a TEGRA port on a TEGRA2 CPU) disables the MSR
interrupts, which can be triggered by any unconnected or wrongly muxed
lines that are not RX and TX. Even when the functions are muxed to
something else (!), and the IIR flag *would* be missing in that case,
according to the above post.
I made sure the MSR really is disabled by tracing all register accesses
and dumping the registers at specific times.

We also have 8 UART lines (DTR, CTS, RTS, DSR, DCD, RXD, TXD and RI)
externally connected to a SN65C3243 (a dedicated RS232 line
driver/receiver), which should take care of pulling the lines correctly.
The schematic is exactly like the corresponding Toradex dev-board.
So hardware-signals should be fine and pulled correctly. Makes sense, as
all works fine using the old 3.1.x kernel by toradex/nvidia.

As for the pin-muxing:
We build upon the standard tegra20-colibri-512.dsti device tree, which
sets the sdio1 group to Config 3, thus UART1. sdio1 correspond to six of
the lines connected externally. The other two are DSR (connected to gpio
C1, LCD_PWR1, group LPW1) and DCD (connected to gpio C6, LDC_PWR2, group
LPW2). Those pins can both not be muxed to any UART1 function.
LPW1 gets effectively tristated by our device tree overlay.
Interestingly, LPW2 seems to be set to "displayb". A display signal on
there might interfere with the core, though unlikely as we don't use the
display interface. I will check that signal tomorrow and then also
tristate it.

As for any other pingroups that could be muxed to UART1:
* GPU (GPIO_PU0 .. PU6) are used for the GMI interface.
* IRRX, IRTX (UART2_RTS_N, UART2_CTS_N) are used for GMI.
* SDB (SDIO3) is muxed for PWM
* SDD (SDIO3) is muxed for PWM
* UAA (ULPI_DATA0..DATA3) is muxed for ULPI
* UAB (ULPI_DATA4..DATA7) is muxed for ULPI
* UAD (UART2_RXD, UART2_TXD) is muxed for IRDA (i.e. UART2)


So besides LPW2, nothing to go on. Thats at least one thing to go on :-)


Sorry for the verbosity, but I double-checked everything and wanted to
make sure I got it all correct.

David
--
To unsubscribe from this list: send the line "unsubscribe linux-tegra" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at  http://vger.kernel.org/majordomo-info.html



[Index of Archives]     [ARM Kernel]     [Linux ARM]     [Linux ARM MSM]     [Linux USB Devel]     [Video for Linux]     [Linux Audio Users]     [Yosemite News]     [Linux Kernel]     [Linux SCSI]

  Powered by Linux