I have a project that I ported from Raspberry pi 4 where I could set connector, crtc, plane properties from userspace. I have managed to compile and get it running on Ubuntu 22.04. In order to even get it working I have to be in multi-user mode to allow access to /dev/dri/card0 or /dev/dri/card1 otherwise Xorg is in control of these devices.
I have nvidia driver 515.65.01 installed and nvidia-drm working.
I can dump the drm properties with https://github.com/ascent12/drm_info but notice for the nvidia drm driver these are the only connector properties exposed to userspace:
├───Connectors
│ ├───Connector 0
│ │ ├───Object ID: 74
│ │ ├───Type: DisplayPort
│ │ ├───Status: disconnected
│ │ ├───Encoders: {0}
│ │ └───Properties
│ │ ├───"EDID" (immutable): blob = 0
│ │ ├───"DPMS": enum {On, Standby, Suspend, Off} = On
│ │ ├───"link-status": enum {Good, Bad} = Good
│ │ ├───"non-desktop" (immutable): range [0, 1] = 0
│ │ ├───"TILE" (immutable): blob = 0
│ │ └───"CRTC_ID" (atomic): object CRTC = 0
Colorspace, Broadcast RGB, max bpc, HDR metadata properties are missing. Additionally no CRTC_ID is assigned. Is this all that the proprietary driver exposes of the DRM layer?
The i915 driver on the other hand exposes these properties to userspace:
───Connectors
│ └───Connector 0
│ ├───Object ID: 95
│ ├───Type: eDP
│ ├───Status: connected
│ ├───Physical size: 380x210 mm
│ ├───Subpixel: unknown
│ ├───Encoders: {0}
│ ├───Modes
│ │ └───1920x1080@60.01 preferred driver nhsync nvsync
│ └───Properties
│ ├───"EDID" (immutable): blob = 103
│ ├───"DPMS": enum {On, Standby, Suspend, Off} = On
│ ├───"link-status": enum {Good, Bad} = Good
│ ├───"non-desktop" (immutable): range [0, 1] = 0
│ ├───"TILE" (immutable): blob = 0
│ ├───"CRTC_ID" (atomic): object CRTC = 51
│ ├───"panel orientation" (immutable): enum {Normal, Upside Down, Left
Side Up, Right Side Up} = Normal
│ ├───"Broadcast RGB": enum {Automatic, Full, Limited 16:235} = Automa
tic
│ ├───"max bpc": range [6, 12] = 12
│ ├───"Colorspace": enum {Default, RGB_Wide_Gamut_Fixed_Point, RGB_Wid
e_Gamut_Floating_Point, opRGB, DCI-P3_RGB_D65, BT2020_RGB, BT601_YCC, BT709_YCC,
XVYCC_601, XVYCC_709, SYCC_601, opYCC_601, BT2020_CYCC, BT2020_YCC} = Default
│ └───"scaling mode": enum {Full, Center, Full aspect} = Full aspect
For my software to work properly I need to have userspace access to these properties. Unfortunately the intel gpu is only attached to the laptop display. The USB-C ports are linked to the Quadro P620. Also the newly released NVIDIA Linux Open GPU Kernel Module does not support my GPU, no gsp.bin firmware for my gpu, which i believe is pre-Turing.
Is the proprietary nvidia-drm limited in exposing DRM properties?