Have you ever updated the kernel? What do you see from “uname -r
”? What do you see from “head -n 1 /etc/nv_tegra_release
” (incidentally, the L4T release is what actually gets flashed to a Jetson, and is merely Ubuntu with a new name when NVIDIA driver content is added)?
It is worth noting that the AER error pointer is NULL, and so if we look only at the PCIe socket and logic (including signal quality), then PCIe appears to be working as expected. This is not a PCIe issue. Read on for something which PCIe may reveal, but does not control.
The serial module itself seems to have loaded without error, but the libkmod
error makes me wonder if something else is wrong with modules that don’t match that kernel. It seems the “serial” driver is loaded, and then the libkmod
error shows up. This error does not necessarily cause a failure, but it does mean that if one module depends on another module, then it is possible that the dependency never loaded. If this is the case, then most likely it is from a kernel configuration error (an error in the sense that modules may be compiled to a different spec than the kernel loading them).
Related is this (maybe not important):
pcilib: sysfs_read_vpd: read failed: Input/output error
…but this might not be a problem if it is a mission optional feature rather than some failure (e.g., maybe the driver works with optional EEPROMs, and none is present). It is likely (but not guaranteed) that this can be ignored.
You might want to add the output from “lsmod
”. Did you install the driver? If so, how did you compile it? I’m only looking at the PCI side, and not at the serial driver. Anything related to customizing the kernel such that old modules might not load, or similar, is of interest. Some modules may trigger loading other modules in a chain, and I don’t know if the chain has issues.
Incidentally, is the “serial” driver itself something new? The 16550A is everywhere and well supported. The UARTs in the Jetson itself can emulate any of 16450, 16550, or 16550A, and only the 16550A is recommended. I’m assuming this is the serial driver present in the kernel and not one you’ve developed.
There is some trivia you should know about the built-in UARTs of the TX2 (and every Jetson so far as I know; this might not matter at all, but if working on UARTs, then you should know this): The Jetson UART, historically, is available during boot stages. This was originally the U-Boot bootloader, and more recent L4T releases (see the above question for “head -n 1 /etc/nv_tegra_release
”; R32.x is the newest for a TX2) began removing the actual U-Boot code and placing its equivalent in the NVIDIA boot software, more or less replacing U-Boot in pieces (but still “compatible” with U-Boot). There has always been a serial console log available during these boot stages via the integrated UART. The driver used in the stock U-Boot is all that has ever been used in those boot stages, and this driver treats the embedded UART as a 16550A. This driver is completely standard during boot stages.
Once boot is completed, and the Linux kernel loads, the 16550A emulation continues on the serial console (the device tree can change between 16450, 16550, and 16550A behavior, but is always 16550A for the NVIDIA content). However, once in Linux, there is now a DMA version of the driver which can be run (non-NVIDIA UARTs cannot use this DMA driver). In “/dev
” you will find some “/dev/ttyS#
” UARTs, and some “/dev/ttyTHS#
” UART interfaces. Those which name as a ttyS#
use legacy 16550A without DMA; those which use the ttyTHS#
naming are the “Tegra High Speed” serial UART drivers, running on the same UART, simultaneously, but using DMA. It is not recommended to switch back and forth between them.
The reason this came about is to avoid putting the DMA version in the bootloader and to use the stock U-Boot. Then, as logging transitions from boot stage to kernel, remaining with this driver implies there is a continuity of services for serial console logging during the transition from boot to kernel without resetting the UART.
I mention all of this because I don’t know which drivers you are using, and I’m hoping that your driver is for a 16550A and not a 16550. It’s also useful to confirm the “serial” driver is not NVIDIA’s UART driver (I doubt it is, but if kernels are being reconfigured, who knows?). I don’t know if a 16550 would behave badly if one of the drivers interacts somehow with a 16550A driver. This is rather unlikely, but I thought you should keep it in mind (I still don’t know if you added the “serial” driver, or if it is part of the stock NVIDIA kernel, nor do I know if you had to rebuild the kernel with a new configuration).
Mainly, the question is why this occurs, as this might be an issue for your driver to do its job:
lspci: Unable to load libkmod resources: error -12