Survey: GDDCcontrol issues with NVIDIA drivers (i2c/monitor/display/DDC)

It looks like I’ve managed to nudge NVIDIA and they finally created a bug report in regard to the very long standing issue.

If you’re affected by it, please share your details in this topic:

Distro
Kernel version
Drivers version
Monitor type
Connection type
GPU type

Any enabled hacks in the X.org conf file

sudo ddccontrol -pv output

Example:

Fedora 28
kernel-4.17.12-200
390.77
Acer G7 Series G247HYU
HDMI
ASUS GeForce GTX 1080 8GB ROG STRIX OC Edition Graphic Card STRIX-GTX1080-O8G-GAMING

Option          "RegistryDwords" "PowerMizerEnable=0x1; PerfLevelSrc=0x2222; PowerMizerLevel=0x3; PowerMizerDefault=0x3; PowerMizerDefaultAC=0x3"
Option          "UseNvKmsCompositionPipeline" "Off"
Option          "TripleBuffer" "On"
Option          "metamodes" "nvidia-auto-select +0+0 {ForceCompositionPipeline=On, ForceFullCompositionPipeline=On}"
Option          "Coolbits" "28"
Option          "RegistryDwords"  "RMUseSwI2c=0x01; RMI2cSpeed=100"

ddccontrol version 0.4.2
Copyright 2004-2005 Oleg I. Vdovikin (oleg@cs.msu.su)
Copyright 2004-2006 Nicolas Boichat (nicolas@boichat.ch)
This program comes with ABSOLUTELY NO WARRANTY.
You may redistribute copies of this program under the terms of the GNU General Public License.

ddcpci initing...
Starting /usr/bin/ddcpci 1 1392641745 &...
Probing for available monitors...
Found PCI device (pci:01:00.0-0)
Found PCI device (pci:01:00.0-1)
Found PCI device (pci:01:00.0-2)
Device: pci:01:00.0-0
Error while reading write message answer: Bad message
Reading EDID 0x50 failed.
ddcci_open returned -2
Device: pci:01:00.0-1
Error while reading write message answer: Bad message
Reading EDID 0x50 failed.
ddcci_open returned -2
Device: pci:01:00.0-2
Error while reading write message answer: Bad message
Reading EDID 0x50 failed.

Thank you!

Fedora rawhide
kernel 4.18
396.51
Asus PG278QR
KFA2 1080 exoc
DP

ddccontrol -p
Recherche des moniteurs disponiblesnvidia_open: mmap failed: Operation not permitted
Moniteurs détectés :
Pas de moniteur supportant le DDC/CI disponible.
Vérifiez que les modules du noyau sont chargés (i2c-dev, et votre driver de “framebuffer”), si votre carte graphique en a besoin.

Same issue with displayport no ddc/ci support, no monitors detected.

Tried some i2c-tools handshaking but they fails, all devices driver files report empty addresses,
cant fetch any edid or ddc/ci address.

Also affected.
With NVIDIA Pascal only works DVI in GNU/Linux.
In Windows works both DVI and DP.

Distro: "Arch Linux"
Kernel: "GNU/Linux 4.17.14-zen1-1-zen ZEN SMP PREEMPT x86_64"
Driver: "NVIDIA Kernel Mode Setting Driver for UNIX platforms 396.51"
Monitors:
 - "LG Electronics L194WT" (DVI)
 - "Ancor Communications Inc ROG PG279Q" (DisplayPort)
Connectors: 1 DVI, 1 DP
GPU: "NVIDIA GPU GeForce GTX 1080" (GP104-A)
Related loaded modules: msr, it87, hwmon_vid, videobuf2_vmalloc, videobuf2_memops, videobuf2_v4l2, videobuf2_common, videodev, media, irqbypass, i2c_piix4, i2c_dev, nvidia_drm, drm_kms_helper, syscopyarea, sysfillrect, sysimgblt, fb_sys_fops, drm, agpgart, nvidia_uvm, nvidia_modeset, nvidia.

/* Command: ddcutil detect -v */
ddccontrol version 0.4.5-unreleased
Copyright 2004-2005 Oleg I. Vdovikin (oleg@cs.msu.su)
Copyright 2004-2006 Nicolas Boichat (nicolas@boichat.ch)
This program comes with ABSOLUTELY NO WARRANTY.
You may redistribute copies of this program under the terms of the GNU General Public License.

Detected monitors :
No monitor supporting DDC/CI available.
If your graphics card need it, please check all the required kernel modules are loaded (i2c-dev, and your framebuffer driver).
ddcpci being released...

/* Command: ddcutil -V */
ddcutil 0.9.1
Built without support for AMD Display Library (AMD proprietary driver).
Built with support for USB connected displays.
Built without function failure simulation.
Built with libdrm services.

/* Command: ddcutil detect -v */
Output level:               Verbose
Reporting DDC data errors:  false
Trace groups active:        none
Traced functions:           none
Traced files:               none
Force I2C slave address:    false

Display 1
   I2C bus:             /dev/i2c-2
   Supports DDC:        true
      I2C address 0x30 (EDID block#)  present: false
      I2C address 0x37 (DDC)          present: true 
      I2C address 0x50 (EDID)         present: true 
      /sys/bus/i2c/devices/i2c-2/name: NVIDIA i2c adapter 4 at 1:00.0
   EDID synopsis:
      Mfg id:           GSM
      Model:            
      Serial number:    Unspecified
      Manufacture year: 2007
      EDID version:     1.3
      Product code:     19206
      Extra descriptor: Unspecified
      Video input definition: 0xea - Digital Input
      Supported features:
         DPMS standby
         DPMS suspend
         DPMS active-off
         Digital display type: RGB 4:4:4
         Standard sRGB color space: False
      White x,y:        0.310, 0.330
      Red   x,y:        0.643, 0.325
      Green x,y:        0.295, 0.616
      Blue  x,y:        0.143, 0.081
      Extension blocks: 0
   EDID source: 
   EDID hex dump:
              +0          +4          +8          +c            0   4   8   c   
      +0000   00 ff ff ff ff ff ff 00 1e 6d 06 4b 1a 77 00 00   .........m.K.w..
      +0010   06 11 01 03 ea 29 1a 78 ea 9b b6 a4 53 4b 9d 24   .....).x....SK.$
      +0020   14 4f 54 a7 6f 80 95 00 81 80 81 40 71 4f 01 01   .OT.o......@qO..
      +0030   01 01 01 01 01 01 9a 29 a0 d0 51 84 22 30 50 98   .......)..Q."0P.
      +0040   36 00 98 ff 10 00 00 1c 00 00 00 fd 00 38 4b 1c   6............8K.
      +0050   53 0e 00 0a 20 20 20 20 20 20 00 00 00 fc 00 4c   S...      .....L
      +0060   31 39 34 57 54 0a 20 20 20 20 20 20 00 00 00 fc   194WT.      ....
      +0070   00 0a 20 20 20 20 20 20 20 20 20 20 20 20 00 4c   ..            .L
   VCP version:         2.0
   Controller mfg:      Genesis
   Firmware version:    0.1
   Monitor returns DDC Null Response for unsupported features: false

Please test 390.77 which has a fix for DP_port[display]-DP_port[gpu].

If you still observe issue please provide :

  1. nvidia bug report in repro state
  2. your display model, connector used to connect monitor and gpu - hdmi/dp/dvi, mentioned if min-DP/single_or_dual-link-dvi etc, mentioned if used any dongle/ adaptor.
  3. Make sure you have the latest firmware for monitor and Please test with multiple display monitors
  4. See if war mentioned at may help : http://www.ddcutil.com/nvidia/Option “RegistryDwords” “RMUseSwI2c=0x01; RMI2cSpeed=100” . I think DVI/HDMI bug doesn’t occur with SW I2C.
  5. Make sure you have the latest version of ddccontrol

We have a bug for DVI or HDMI case 200421152 [ddcutil not able to get monitor info through HW i2c on Pascal].

Bump.

Thanks tried that version and it work with 390.77.

There is any ETA for this fix to get to branch 396.xx or for stable branch to get current 396.xx Vulkan support?

Thanks in advance.

Hi birdie,
I think you are using Acer G7 Series G247HYU monitor which has DVI, DP and HDMI ports. Can you please test with latest 390 driver with DP and DVI port and display?

Don’t use regkeys Option “RegistryDwords” “PowerMizerEnable=0x1; PerfLevelSrc=0x2222; PowerMizerLevel=0x3; PowerMizerDefault=0x3; PowerMizerDefaultAC=0x3” regkeys for testing.
Only use regkeys Option “RegistryDwords” “RMUseSwI2c=0x01; RMI2cSpeed=100” for testing.

Later see if these regkeys helps to WAR the issue. Test one regkey at a time, first RMUseSwI2c and if needed RMI2cSpeed.
Make sure to rmmod nvidia_drm nvidia_modeset nvidia before every new X/Graphics start.

I tried my Asus PG278QR displayport with 390.84 drivers.
I can detect edid address 0x50 now, but cant dump data, got XXXX and read data errors.
I will try your options, perhaps may help.
Tanks.

Tested with Ubuntu 16.04.2. “RMUseSwI2c=0x01; RMI2cSpeed=100” are working for HDMI display . Ubuntu 17.10 it’s working too. Only on latest Debian[kernel 4.17.0-1-amd64] it’s failing. User Artum also using same kernel version 4.17.12-ic64 on Centos 6.10. I have tested with Ubuntu 18.04.1 LTS. It’s not failing with kernel 4.15.0-29-generic but its failing with kernel 4.17.1-041701-generic. So I think kernel 4.17 is affected. Tested HDMI display.

Thanks, this is awesome.
Tested and works out of the box (without RMUseSwI2c and RMI2cSpeed) with ddcutil over DP on
Arch Linux
Kernel 4.18.8
Driver 390.77
DELL U2515H
MSI GS65 laptop

Hope to see this fix in the next 396 release.

Is ddccontrol also working on your setup?

Nope, ddccontrol does not detect the monitors.

With ddcutil HDMI only works if i add

options nvidia NVreg_RegistryDwords="RMUseSwI2c=0x01;RMI2cSpeed=100"

to /etc/modprobe.d/nvidia.conf
This way i can control both my DELL U2515H connected to HDMI and DP

DP Daisy Chaining crashes both Windows and Linux. If i can get it working will report about ddc.

Sandip,

one more question: why do people need to have this workaround in the first place? It doesn’t make sense.

This is the software workaround for hdmi display/port. We have a bug open for HDMI-display/Port issue 1353106 , 200421152 to actual fix.

Nice to hear that you’re finally doing something about the bug which was reported five bloody years ago.

Also working (fixed) in 410.57 Linux Driver.

I confirm that.

For those wondering, I couldn’t make ddcontrol to work because it uses an nvidia proprietary interface based on writing to /dev/mem, which is not available by default on most kernels. My workaround was to use ddcutil instead, which works after manually modprobe-ing i2c-dev on Archlinux.

tl;dr:

$ yay -S ddcutil
$ sudo modprobe i2c-dev
$ sudo ddcutil probe  # works

You can auto-enable i2c-dev by adding a new file:

$ echo i2c-dev | sudo tee /etc/modules-load.d/i2c.conf


Nothing works here even with

Option          "RegistryDwords"  "RMUseSwI2c=0x01; RMI2cSpeed=100"
# ddcutil probe
Failure getting EDID for /dev/i2c-4: status code=DDCRC_INVALID_EDID(-3010): unable to parse EDID
Display not found
# ddccontrol -p -v
ddccontrol version 0.4.3
Copyright 2004-2005 Oleg I. Vdovikin (oleg@cs.msu.su)
Copyright 2004-2006 Nicolas Boichat (nicolas@boichat.ch)
This program comes with ABSOLUTELY NO WARRANTY.
You may redistribute copies of this program under the terms of the GNU General Public License.

ddcpci initing...
Starting /usr/bin/ddcpci 1 -1308610785 &...
Probing for available monitors...
nvidia_open: mmap failed: Operation not permitted
Found I2C device (dev:/dev/i2c-7)
ioctl(): Invalid argument
ioctl returned -1
Reading EDID 0x50 failed.
ddcci_open returned -2
Found I2C device (dev:/dev/i2c-6)
ioctl(): Invalid argument
ioctl returned -1
Reading EDID 0x50 failed.
ddcci_open returned -2
Found I2C device (dev:/dev/i2c-5)
ioctl(): Invalid argument
ioctl returned -1
Reading EDID 0x50 failed.
ddcci_open returned -2
Found I2C device (dev:/dev/i2c-4)
ioctl(): Invalid argument
ioctl returned -1
Reading EDID 0x50 failed.
ddcci_open returned -2
Found I2C device (dev:/dev/i2c-3)
ioctl(): Invalid argument
ioctl returned -1
Reading EDID 0x50 failed.
ddcci_open returned -2
Found I2C device (dev:/dev/i2c-2)
ioctl(): Invalid argument
ioctl returned -1
Reading EDID 0x50 failed.
ddcci_open returned -2
Found I2C device (dev:/dev/i2c-1)
ioctl(): Invalid argument
ioctl returned -1
Reading EDID 0x50 failed.
ddcci_open returned -2
Found I2C device (dev:/dev/i2c-0)
ioctl(): Operation not supported
ioctl returned -1
Reading EDID 0x50 failed.
ddcci_open returned -2
Detected monitors :
No monitor supporting DDC/CI available.
If your graphics card need it, please check all the required kernel modules are loaded (i2c-dev, and your framebuffer driver).
ddcpci being released...
==>ddcpci is quitting.

That’s with NVIDIA drivers 410.73 and kernel 4.18.16-300.fc29.x86_64.

Everything works just fine under Windows.

GTX 1060 here with LG 24MP55 display connected via HDMI.

Works for me with: NVIDIA driver 410.73 and Linux kernel 4.18.16-zen1-1-zen.

Please ensure that:

  1. you have i2c-dev module loaded: modprobe i2c-dev
  2. you have permissions to the /dev/i2c-* or run ddcutil or ddccontrol as root (using sudo for example)
  3. the setting RegistryDwords you configured is properly loaded by checking Xorg logs: grep RegistryDwords /var/log/Xorg.0.log