Nouveau support for Jetson Nano kernel

Does Nano’s kernel support Nouveau?

I’ve tried to build provided v4.9 kernel with Nouveau module enabled, but couldn’t load the module after boot (no /dev/dri/card0 exists).

Also tried to build custom Arch Linux described here:


But found that there is no Device Tree file for Nano and so device did not boot.

No, we don’t support Nouveau module on tegra.

What is your purpose to use Nouveau driver?

Nouveau driver has one important feature (that is missing in nvidia driver): DisplayPort MST

https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git/tree/drivers/gpu/drm/nouveau/nouveau_dp.c?h=v4.19.52#n36

Sorry, tegra has its own display drivers which are not fully compatible with upstream kernel.

I believe there are patches to make the nouveau driver work with nano.

Id be interested in testing them as well.

The latest Mesa 19.1 drivers might support nano but I’m not sure.

Note that typically running the NVIDIA driver requires blacklisting Nouveau (at least on a desktop PC). If you run Nouveau you might not be able to run CUDA or other GPU-accelerated apps.

Are you sure that the hardware in the Nano will support multi-stream, even if you had the Noveau driver?

The Tegra built-in GPUs are not the same as the desktop GPUs. They don’t just use shared RAM with the CPU, but they also have other changes for the embedded form factor.

I suppose it might be worth it if you were more concerned about auditing your system’s source than performance, but it seems kind of a waste of the harware. Nouveau is better than it was but it’s still not very good, even on x86.

Nano equipped with the same GPU as Tegra X1 so the following links look quite promising:
https://www.phoronix.com/scan.php?page=news_item&px=Nouveau-Initial-Signed-PMU-20B
https://www.phoronix.com/scan.php?page=news_item&px=GM20B-Clock-Driver

As I understood there are two ways to make things work:

  • adopt upstream kernel (with recent Nouveau module) to work with Nano
  • adopt Nouveau kernel module to the existing kernel.

I’m interested particularly in 3D and video decoding functionality that this driver can provide.

An understatement.

He’s not kidding. It’s really bad even on fast hardware.

As everyone else has said: The Noveau driver has really bad performance, bad compatibility, bad stability, and almost no ability to support the special hardware of the Tegra systems.

The 3D support you get with the built-in Tegra driver and OpenGL 4.3 on the Jetson Nano is miles better than the Noveau variant. OpenGL is an open API.

The video encoding and decoding support you get with the built-in Tegra driver (using the V4L2 codec API, examples are in the examples folder) is miles better than Noveau, and it’s very unlikely that Noveau would even support the Tegra video accelerators, as those look different than the desktop variants. V4L2 is an open API.

You’re already 100% dependent on NVIDIA because they made the hardware you’re running on. Trying to remove a small vendor dependency by using Noveau instead of Tegra drivers is a little bit like trying to save on gas mileage by turning off your car headlights at night. Not only doesn’t it do much, it’s actually a really bad idea.

I recommend using the Linux4Tegra installation provided by NVIDIA, and the Tegra drivers that come with it, and enjoy the system as it is! Develop applications on top of the open OpenGL and Video4Linux APIs, and if you somehow decide you don’t want to depend on NVIDIA anymore, you can port it to other hardware because those are open APIs.

If you want accelerated video playback gstreamer is your best bet on nano:

It supports h264 and h265 at 4k as well as 10 and 12 bit decode. There are examples in there to playback anything and if you’re not afraid of a little c (it’s very well explained), there are the gstreamer tutorials you can follow to create your own video playback apps and you can use the accelerated gstreamer components Nvidia provides in lieu of the software ones.

Regarding Nvidia vs Nouveau drivers performance, it’s obvious that official drivers are closer to metal, and work lot better. And I’d be quite happy to use them, but I stumbled on a missing feature that implemented only in Nouveau drivers - streaming video to multiple (daisy-chained) displays over a single DisplayPort cable.
I understand that performance could be much worse, but if I can’t this DisplayPort feature work on this board, I’ll have to look for another hardware platform.

What makes you believe that the Tegra hardware module would support this with the Noveau driver, if it’s not supported with the NVIDIA drivers?
Have you seen any specification that says the Jetson Nano supports multi-display streaming?

This feature (DisplayPort MST) is part of DisplayPort 1.2 and eDP 1.4 standard:
https://en.wikipedia.org/wiki/DisplayPort#Multi-Stream_Transport_(MST)
And datasheet (https://developer.nvidia.com/embedded/dlc/jetson-nano-datasheet) states that Nano supports DP 1.2 as well as eDP 1.4.

There is no special with this technology. The driver just needs to encode packages in a different way so that receiving part (monitor) would consume them properly, like

(...-[PacketForMonitor_1]-[PacketForMonitor_2]-[PacketForMonitor_1]-...)

More info here https://glenwing.github.io/docs/DP-1.2.pdf under “2.5 Topology Management Layer” section.

I can assure you that the driver doesn’t actually touch the packets.
To support this, the driver needs to tell the device to encode packets like that.
Assuming that the device knows how to do that, I agree that it would be great for the driver to be able to do that.
But, I wouldn’t hold my breath on Noveau being able to do this with Tegra devices in a way that you can really rely on it.
(If you have a plan for tens of thousands of units or more, I bet NVIDIA could engage with you about the timeline to add MST support to the driver, assuming the hardware is indeed fully compliant.)

Wouldn’t being able to use VDPAU for accelerated video playback be a fair reason to use the Nouveau. drivers.

Gstreamer seems to be a less common backend for accelerated video play back in applications.

If someone wanted to use their nano for streaming media consumption or just media in general wouldn’t they find better support in the Nouveau drivers.

Also I don’t see why you guys are so quick to discourage the idea. The way I see it is, the more things a device is capable of the better.

I’ve been trying to boot linux-next 5.2 on the nano for the last couple days without luck unfortunately.

I believe Nouveau should work with this kernel and Mesa 19.0.

If anyone has any tips on booting the upstream kernel on the nano I would appreciate it.

You’re right that gstreamer is a much less used backend. I’m not sure why Nvidia didn’t just accelerate libavcodec. Then the ffmpeg frontend, gstreamer, everything would work. It does seem to make little sense. It has videocore support if you build it in.

Kodi would work, vlc would work, browser plugins using libavcodec to do decoding would work. hardware capture in retroarch might work. IDGI either. Licensing reasons perhaps?

I suppose the discouraging comes from the fact that the difficulty level of what you want to do is very high and odds of adequate sucess low.

My advice would be to petition Nvidia to add the capability to their driver. They’re pretty responsive around here and what you ask for is a useful feature.