This series adds support for loading and running on top of NVIDIA's
GSP-RM firmware, instead of directly programming large portions of the
hardware ourselves.
The implementation is a little crude in places, but the goal of this
series is to get (more-or-less) GSP-RM support on par with what we
already support on HW. Next steps would be to look at what features
GSP-RM enables us to more fully support, and clean up the GSP-RM
integration once it's known what those will require.
Things should be somewhat faster when running on GSP-RM, as it's able
to control GPU clocks, which wasn't possible for us previously.
SVM support is not available when running on top of GSP-RM at this
point, due to GPU fault buffers not being implemented yet. This won't
effect any real use-case, as SVM is experimental at best in nouveau
anyway.
Aside from that, things should more or less work as normal.
GSP-RM support is disabled by default for now (except on Ada, where
it's the only option) and can be enabled with nouveau.config=NvGspRm=1.
There'll likely be some nit-picky bugs to sort through, but I don't
anticipate any huge disasters. I've smoke-tested this on a selection
of GPUs right back to nv50, testing both HW and GSP paths depending
on the GPU, and more thoroughly tested on Turing/Ampere/Ada, both
discrete and laptop GPUs.
Firmware from NVIDIA is required to enable this support.