Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Benq EX3210U either non responsive or invalid feature flag in DDC reply packet. #476

Open
evertvorster opened this issue Dec 10, 2024 · 8 comments
Labels
laptops monitor specific problems with particular monitors nvidia proprietary proprietary Nvidia driver

Comments

@evertvorster
Copy link

Hi there!

I've been seeing an issue with my external monitor. It's a fairly new and expensive Benq EX3210U monitor, alledgedly capable of 4K@144Hz in HDR. The best I have seen is 4K@120fps in HDR and SDR, but that might be a different discussion.

This monitor is connected via a HDMI 2.1 cable to the HDMI port of my Asus ROG Strix Scar laptop. It is an Advanced Optimus MUX type laptop, and apparently the HDMI port is directly wired to the nVidia RTX 4090 that is the laptops dGPU.

The operating system is Arch Linux, fully up to date.
The issue that I am seeing I have reported to the KDE bug tracker.
https://bugs.kde.org/show_bug.cgi?id=496631

The reason that I am here, is that there seems to be some inconsistency in the way that ddcutil is detecting this display.

If the monitor is powered down, unplugged from power and the HDMI port, and then plugged in sudo ddcutil detect --verbose --ddc --sleep-multiplier 20 returns:

[evert@Evert ~]$ sudo ddcutil detect --verbose --ddc --sleep-multiplier 20
Invalid display
   I2C bus:  /dev/i2c-3
      DRM connector:                         card1-eDP-1
      /sys/class/drm/card1-eDP-1/dpms        On
      /sys/class/drm/card1-eDP-1/enabled     enabled
      /sys/class/drm/card1-eDP-1/status      connected
      /sys/class/drm/card1-eDP-1/connector_id93
      Driver:                                amdgpu
      EDID exists:                           true 
      I2C address 0x37 (DDC)  responsive:    false
      Is LVDS or EDP display:                false
      Is laptop display by EDID:             false
      Is laptop display:                     false
      /sys/bus/i2c/devices/i2c-3/name        AMDGPU DM i2c hw bus 0
      PCI device path:                       /sys/devices/pci0000:00/0000:00:08.1/0000:09:00.0/i2c-3
   EDID synopsis:
      Mfg id:               BOE - BOE
      Model:                NE173QHM-NZ2
      Product code:         2921  (0x0b69)
      Serial number:        
      Binary serial number: 0 (0x00000000)
      Manufacture year:     2022,  Week: 24
      EDID version:         1.4
      Extra descriptor:        BOE CQ
      Video input definition:    0xa5 - Digital Input (DisplayPort), Bit depth: 8
      Supported features:
         Digital display type: RGB 4:4:4
         Standard sRGB color space: False
      White x,y:        0.313, 0.329
      Red   x,y:        0.680, 0.320
      Green x,y:        0.265, 0.690
      Blue  x,y:        0.150, 0.060
      Extension blocks: 1
   EDID source: SYSFS
   EDID hex dump:
              +0          +4          +8          +c            0   4   8   c   
      +0000   00 ff ff ff ff ff ff 00 09 e5 69 0b 00 00 00 00   ..........i.....
      +0010   18 20 01 04 a5 26 15 78 03 0f 95 ae 52 43 b0 26   . ...&.x....RC.&
      +0020   0f 50 54 00 00 00 01 01 01 01 01 01 01 01 01 01   .PT.............
      +0030   01 01 01 01 01 01 e2 67 00 b0 a0 a0 b4 50 30 20   .......g.....P0 
      +0040   36 00 7d d6 10 00 00 1a 00 00 00 fd 0c 3c f0 86   6.}..........<..
      +0050   86 6a 01 0a 20 20 20 20 20 20 00 00 00 fc 00 4e   .j..      .....N
      +0060   45 31 37 33 51 48 4d 2d 4e 5a 32 0a 00 00 00 fe   E173QHM-NZ2.....
      +0070   00 42 4f 45 20 43 51 0a 20 20 20 20 20 20 01 62   .BOE CQ.      .b
   This monitor does not support DDC/CI. (I2C slave address x37 is unresponsive.)
   If the monitor's on screen display has a DDC/CI setting, check it is enabled.
   Monitor Model Id:  BOE-NE173QHM_NZ2-2921
   Feature definition file BOE-NE173QHM_NZ2-2921.mccs not found.

Display 1
   I2C bus:  /dev/i2c-17
      DRM connector:                         card0-HDMI-A-1
      /sys/class/drm/card0-HDMI-A-1/dpms     On
      /sys/class/drm/card0-HDMI-A-1/enabled  disabled
      /sys/class/drm/card0-HDMI-A-1/status   connected
      /sys/class/drm/card0-HDMI-A-1/connector_id109
      Driver:                                nvidia
      EDID exists:                           true 
      I2C address 0x37 (DDC)  responsive:    true 
      Is LVDS or EDP display:                false
      Is laptop display by EDID:             false
      Is laptop display:                     false
      /sys/bus/i2c/devices/i2c-17/name       NVIDIA i2c adapter 5 at 1:00.0
      PCI device path:                       /sys/devices/pci0000:00/0000:00:01.1/0000:01:00.0/i2c-17
   EDID synopsis:
      Mfg id:               BNQ - UNK
      Model:                BenQ EX3210U
      Product code:         32678  (0x7fa6)
      Serial number:        ETW5N05026SL0
      Binary serial number: 16843009 (0x01010101)
      Manufacture year:     2022,  Week: 21
      EDID version:         1.3
      Extra descriptor:        
      Video input definition:    0x80 - Digital Input
      Supported features:
         DPMS active-off
         Digital display type: RGB 4:4:4 + YCrCb 4:4:4
         Standard sRGB color space: False
      White x,y:        0.313, 0.329
      Red   x,y:        0.688, 0.308
      Green x,y:        0.181, 0.735
      Blue  x,y:        0.149, 0.057
      Extension blocks: 1
   EDID source: I2C
   EDID hex dump:
              +0          +4          +8          +c            0   4   8   c   
      +0000   00 ff ff ff ff ff ff 00 09 d1 a6 7f 01 01 01 01   ................
      +0010   15 20 01 03 80 47 28 78 2a 75 65 b0 4e 2e bc 26   . ...G(x*ue.N..&
      +0020   0e 50 54 a5 6b 80 d1 c0 81 c0 81 00 81 80 a9 c0   .PT.k...........
      +0030   b3 00 81 bc 61 7c 4d d0 00 a0 f0 70 3e 80 30 20   ....a|M....p>.0 
      +0040   35 00 c4 8f 21 00 00 1a 00 00 00 ff 00 45 54 57   5...!........ETW
      +0050   35 4e 30 35 30 32 36 53 4c 30 00 00 00 fd 00 30   5N05026SL0.....0
      +0060   78 1e ff 77 00 0a 20 20 20 20 20 20 00 00 00 fc   x..w..      ....
      +0070   00 42 65 6e 51 20 45 58 33 32 31 30 55 0a 01 11   .BenQ EX3210U...
   VCP version:         2.1
   Controller mfg:      Novatek
   Firmware version:    0.3
   Monitor uses invalid feature flag in DDC reply packet to indicate unsupported feature.
   Current dynamic sleep adjustment multiplier:  1.60
   Monitor Model Id:  BNQ-BenQ_EX3210U-32678
   Feature definition file BNQ-BenQ_EX3210U-32678.mccs not found.

If, however, this computer is restarted with the monitor connected, it returns this:

[evert@Evert ~]$ sudo ddcutil detect --verbose --ddc --sleep-multiplier 20
Invalid display
   I2C bus:  /dev/i2c-3
      DRM connector:                         card1-eDP-1
      /sys/class/drm/card1-eDP-1/dpms        On
      /sys/class/drm/card1-eDP-1/enabled     enabled
      /sys/class/drm/card1-eDP-1/status      connected
      /sys/class/drm/card1-eDP-1/connector_id93
      Driver:                                amdgpu
      EDID exists:                           true 
      I2C address 0x37 (DDC)  responsive:    false
      Is LVDS or EDP display:                false
      Is laptop display by EDID:             false
      Is laptop display:                     false
      /sys/bus/i2c/devices/i2c-3/name        AMDGPU DM i2c hw bus 0
      PCI device path:                       /sys/devices/pci0000:00/0000:00:08.1/0000:09:00.0/i2c-3
   EDID synopsis:
      Mfg id:               BOE - BOE
      Model:                NE173QHM-NZ2
      Product code:         2921  (0x0b69)
      Serial number:        
      Binary serial number: 0 (0x00000000)
      Manufacture year:     2022,  Week: 24
      EDID version:         1.4
      Extra descriptor:        BOE CQ
      Video input definition:    0xa5 - Digital Input (DisplayPort), Bit depth: 8
      Supported features:
         Digital display type: RGB 4:4:4
         Standard sRGB color space: False
      White x,y:        0.313, 0.329
      Red   x,y:        0.680, 0.320
      Green x,y:        0.265, 0.690
      Blue  x,y:        0.150, 0.060
      Extension blocks: 1
   EDID source: SYSFS
   EDID hex dump:
              +0          +4          +8          +c            0   4   8   c   
      +0000   00 ff ff ff ff ff ff 00 09 e5 69 0b 00 00 00 00   ..........i.....
      +0010   18 20 01 04 a5 26 15 78 03 0f 95 ae 52 43 b0 26   . ...&.x....RC.&
      +0020   0f 50 54 00 00 00 01 01 01 01 01 01 01 01 01 01   .PT.............
      +0030   01 01 01 01 01 01 e2 67 00 b0 a0 a0 b4 50 30 20   .......g.....P0 
      +0040   36 00 7d d6 10 00 00 1a 00 00 00 fd 0c 3c f0 86   6.}..........<..
      +0050   86 6a 01 0a 20 20 20 20 20 20 00 00 00 fc 00 4e   .j..      .....N
      +0060   45 31 37 33 51 48 4d 2d 4e 5a 32 0a 00 00 00 fe   E173QHM-NZ2.....
      +0070   00 42 4f 45 20 43 51 0a 20 20 20 20 20 20 01 62   .BOE CQ.      .b
   This monitor does not support DDC/CI. (I2C slave address x37 is unresponsive.)
   If the monitor's on screen display has a DDC/CI setting, check it is enabled.
   Monitor Model Id:  BOE-NE173QHM_NZ2-2921
   Feature definition file BOE-NE173QHM_NZ2-2921.mccs not found.

Invalid display
   I2C bus:  /dev/i2c-7
      DRM connector:                         card1-eDP-1
      /sys/class/drm/card1-eDP-1/dpms        On
      /sys/class/drm/card1-eDP-1/enabled     enabled
      /sys/class/drm/card1-eDP-1/status      connected
      /sys/class/drm/card1-eDP-1/connector_id93
      Driver:                                amdgpu
      EDID exists:                           true 
      I2C address 0x37 (DDC)  responsive:    false
      Is LVDS or EDP display:                false
      Is laptop display by EDID:             false
      Is laptop display:                     false
      /sys/bus/i2c/devices/i2c-7/name        AMDGPU DM aux hw bus 0
      PCI device path:                       /sys/devices/pci0000:00/0000:00:08.1/0000:09:00.0/drm/card1/card1-eDP-1/i2c-7
   EDID synopsis:
      Mfg id:               BOE - BOE
      Model:                NE173QHM-NZ2
      Product code:         2921  (0x0b69)
      Serial number:        
      Binary serial number: 0 (0x00000000)
      Manufacture year:     2022,  Week: 24
      EDID version:         1.4
      Extra descriptor:        BOE CQ
      Video input definition:    0xa5 - Digital Input (DisplayPort), Bit depth: 8
      Supported features:
         Digital display type: RGB 4:4:4
         Standard sRGB color space: False
      White x,y:        0.313, 0.329
      Red   x,y:        0.680, 0.320
      Green x,y:        0.265, 0.690
      Blue  x,y:        0.150, 0.060
      Extension blocks: 1
   EDID source: I2C
   EDID hex dump:
              +0          +4          +8          +c            0   4   8   c   
      +0000   00 ff ff ff ff ff ff 00 09 e5 69 0b 00 00 00 00   ..........i.....
      +0010   18 20 01 04 a5 26 15 78 03 0f 95 ae 52 43 b0 26   . ...&.x....RC.&
      +0020   0f 50 54 00 00 00 01 01 01 01 01 01 01 01 01 01   .PT.............
      +0030   01 01 01 01 01 01 e2 67 00 b0 a0 a0 b4 50 30 20   .......g.....P0 
      +0040   36 00 7d d6 10 00 00 1a 00 00 00 fd 0c 3c f0 86   6.}..........<..
      +0050   86 6a 01 0a 20 20 20 20 20 20 00 00 00 fc 00 4e   .j..      .....N
      +0060   45 31 37 33 51 48 4d 2d 4e 5a 32 0a 00 00 00 fe   E173QHM-NZ2.....
      +0070   00 42 4f 45 20 43 51 0a 20 20 20 20 20 20 01 62   .BOE CQ.      .b
   This monitor does not support DDC/CI. (I2C slave address x37 is unresponsive.)
   If the monitor's on screen display has a DDC/CI setting, check it is enabled.
   Monitor Model Id:  BOE-NE173QHM_NZ2-2921
   Feature definition file BOE-NE173QHM_NZ2-2921.mccs not found.

Invalid display
   I2C bus:  /dev/i2c-17
      DRM connector:                         card0-HDMI-A-1
      /sys/class/drm/card0-HDMI-A-1/dpms     On
      /sys/class/drm/card0-HDMI-A-1/enabled  disabled
      /sys/class/drm/card0-HDMI-A-1/status   connected
      /sys/class/drm/card0-HDMI-A-1/connector_id109
      Driver:                                nvidia
      EDID exists:                           true 
      I2C address 0x37 (DDC)  responsive:    false
      Is LVDS or EDP display:                false
      Is laptop display by EDID:             false
      Is laptop display:                     false
      /sys/bus/i2c/devices/i2c-17/name       NVIDIA i2c adapter 5 at 1:00.0
      PCI device path:                       /sys/devices/pci0000:00/0000:00:01.1/0000:01:00.0/i2c-17
   EDID synopsis:
      Mfg id:               BNQ - UNK
      Model:                BenQ EX3210U
      Product code:         32678  (0x7fa6)
      Serial number:        ETW5N05026SL0
      Binary serial number: 16843009 (0x01010101)
      Manufacture year:     2022,  Week: 21
      EDID version:         1.3
      Extra descriptor:        
      Video input definition:    0x80 - Digital Input
      Supported features:
         DPMS active-off
         Digital display type: RGB 4:4:4 + YCrCb 4:4:4
         Standard sRGB color space: False
      White x,y:        0.313, 0.329
      Red   x,y:        0.688, 0.308
      Green x,y:        0.181, 0.735
      Blue  x,y:        0.149, 0.057
      Extension blocks: 1
   EDID source: I2C
   EDID hex dump:
              +0          +4          +8          +c            0   4   8   c   
      +0000   00 ff ff ff ff ff ff 00 09 d1 a6 7f 01 01 01 01   ................
      +0010   15 20 01 03 80 47 28 78 2a 75 65 b0 4e 2e bc 26   . ...G(x*ue.N..&
      +0020   0e 50 54 a5 6b 80 d1 c0 81 c0 81 00 81 80 a9 c0   .PT.k...........
      +0030   b3 00 81 bc 61 7c 4d d0 00 a0 f0 70 3e 80 30 20   ....a|M....p>.0 
      +0040   35 00 c4 8f 21 00 00 1a 00 00 00 ff 00 45 54 57   5...!........ETW
      +0050   35 4e 30 35 30 32 36 53 4c 30 00 00 00 fd 00 30   5N05026SL0.....0
      +0060   78 1e ff 77 00 0a 20 20 20 20 20 20 00 00 00 fc   x..w..      ....
      +0070   00 42 65 6e 51 20 45 58 33 32 31 30 55 0a 01 11   .BenQ EX3210U...
   This monitor does not support DDC/CI. (I2C slave address x37 is unresponsive.)
   If the monitor's on screen display has a DDC/CI setting, check it is enabled.
   Monitor Model Id:  BNQ-BenQ_EX3210U-32678
   Feature definition file BNQ-BenQ_EX3210U-32678.mccs not found.

This may or may not be related to my original issue of KDE not outputting to this monitor if it wakes up with a defined frame rate higher than 30fps, but it is something that is a little interesting to me.

For completeness, I am also attaching the output of sudo ddcutil interrogate when the monitor is freshly woken up and actually responds to ddcutil. It seems to hang on my system, so it might be incomplete.

2024-12-10_DDCUtil_interrogate_Fresh_Powerup.txt

Any help in figuring out what is going on and which direction to look would be awesome. I have been in contact with BenQ to see if I can get a firmware update for this monitor, but so far we have been unable to update this monitor.

@rockowitz
Copy link
Owner

There are impressively many things going on in your very thorough report. Let me make an initial cut at addressing them.

First, to rule out ddcutil's involvement in the original issue of KDE not outputting to the monitor if it wakes up with a frame rate higher than 30fps, I assume you've set environment variable POWERDEVIL_NO_DDCUTIL=1 to completely disable powerdevil's use of libddcutil. More granualarly, you can disable libddcutil's display change detection by setting option: --disable-watch-displays in configuration file $HOME/.config/ddcutil/ddcutilrc, or tell both command line ddcutil and shared library libddcutil to ignore the Benq display using option --ignore-mmid BNQ-BenQ_EX3210U-32678. (The option was previously ambiguously named --ignore-ddc.

In the detect output for the second case where the computer is restarted with the monitor connected, the telling line in the output is "I2C address 0x37 (DDC) responsive: false". In that situation, issue command **i2cdetect -y 17", which shows which slave addresses are active on the I2C bus. Slave address x50 (EDID) should be reported. If slave address x37 (DDC) is not, the problem is entirely in the province of the driver and monitor, ddcutil has no involvement.

The laptop display appearing at two different I2C addresses has been seen before in the context of docking stations. (See
freedesktop.org i915 issue 3605 - Same MST display appears as 2 /dev/i2c devices) . If slave address x37 is active for one i2c bus but inactive for the other, the one with x37 inactive is reported as "Phantom". In this case, neither i2c-3 nor i2c-7 has x37 active, so there's no "phantom" display, but its an anomaly with no impact.

The messages regarding slave address x37 not being responsive for the laptop display should more clearly and simply state that laptop displays do not support DDC/CI, which is what is usually stated. It turns out that determining what is a laptop display can be ambiguous. (See freedesktop.org issue #10389, DRM connector for external monitor has name card1-eDP-1). I'll rework the test. In any case, it's simply a matter of a better informational message.

Regading interrogate hanging, running it with valgrind (valgrind ddcutil interrogate) or with asan should give more information on what is happening. (To use asan, you need to have asan installed and use configure option --enable-asan before building ddcutil.)

I look forward to learning what you find.

@evertvorster
Copy link
Author

Thanks, I have been looking at this for a while.
I included all the information for completeness, but I do not expect you to troubleshoot my KDE woes. There is plenty wrong there, and I plan to tackle that once I don't see any errors coming from ddcutil and this monitor.

I have, indeed got POWERDEVIL_NO_DDCUTIL=1 in /etc/environment. Of course, I don't really like that, because I would like ddcutil to properly detect and manage this display. Which is the reason we are poking at it now, I guess.

In the detect output for the second case where the computer is restarted with the monitor connected, the telling line in the output is "I2C address 0x37 (DDC) responsive: false". In that situation, issue command **i2cdetect -y 17", which shows which slave addresses are active on the I2C bus. Slave address x50 (EDID) should be reported. If slave address x37 (DDC) is not, the problem is entirely in the province of the driver and monitor, ddcutil has no involvement.

So, I have started up the computer with the monitor powered up, and indeed it is showing the laptop's panel on /dev/i2c-3 and /dev/i2c-7
I do have a docking station, but it is not connected at this time. Whether connected to the docking station, or to the HDMI port of the laptop, I see similar issues.

The Benq shows up on /dev/i2c-17, and claims to be unresponsive.

[evert@Evert ~]$ i2cdetect -y 17
     0  1  2  3  4  5  6  7  8  9  a  b  c  d  e  f
00:                         -- -- -- -- -- -- -- -- 
10: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 
20: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 
30: -- -- -- -- -- -- -- -- -- -- 3a -- -- -- 3e -- 
40: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 
50: 50 -- -- -- 54 -- -- -- 58 -- -- -- -- -- -- -- 
60: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 
70: -- -- -- -- -- -- -- --                         

I don't know what the above means, hopefully you can shed some light on that?

Valgrind is completely not happy:

[evert@Evert ~]$ valgrind ddcutil interrogate
==4070== Memcheck, a memory error detector
==4070== Copyright (C) 2002-2024, and GNU GPL'd, by Julian Seward et al.
==4070== Using Valgrind-3.24.0 and LibVEX; rerun with -h for copyright info
==4070== Command: ddcutil interrogate
==4070== 
vex amd64->IR: unhandled instruction bytes: 0x62 0xF3 0xF5 0x28 0x38 0xF0 0x1 0xC4 0xE1 0xF9
vex amd64->IR:   REX=0 REX.W=0 REX.R=0 REX.X=0 REX.B=0
vex amd64->IR:   VEX=0 VEX.L=0 VEX.nVVVV=0x0 ESC=NONE
vex amd64->IR:   PFX.66=0 PFX.F2=0 PFX.F3=0
==4070== valgrind: Unrecognised instruction at address 0x194d71.
==4070==    at 0x194D71: parse_command (in /usr/bin/ddcutil)
==4070==    by 0x148254: main (in /usr/bin/ddcutil)
==4070== Your program just tried to execute an instruction that Valgrind
==4070== did not recognise.  There are two possible reasons for this.
==4070== 1. Your program has a bug and erroneously jumped to a non-code
==4070==    location.  If you are running Memcheck and you just saw a
==4070==    warning about a bad jump, it's probably your program's fault.
==4070== 2. The instruction is legitimate but Valgrind doesn't handle it,
==4070==    i.e. it's Valgrind's fault.  If you think this is the case or
==4070==    you are not sure, please let us know and we'll try to fix it.
==4070== Either way, Valgrind will now raise a SIGILL signal which will
==4070== probably kill your program.
==4070== 
==4070== Process terminating with default action of signal 4 (SIGILL): dumping core
==4070==  Illegal opcode at address 0x194D71
==4070==    at 0x194D71: parse_command (in /usr/bin/ddcutil)
==4070==    by 0x148254: main (in /usr/bin/ddcutil)
==4070== 
==4070== HEAP SUMMARY:
==4070==     in use at exit: 39,395 bytes in 411 blocks
==4070==   total heap usage: 455 allocs, 44 frees, 54,675 bytes allocated
==4070== 
==4070== LEAK SUMMARY:
==4070==    definitely lost: 0 bytes in 0 blocks
==4070==    indirectly lost: 0 bytes in 0 blocks
==4070==      possibly lost: 0 bytes in 0 blocks
==4070==    still reachable: 39,395 bytes in 411 blocks
==4070==         suppressed: 0 bytes in 0 blocks
==4070== Rerun with --leak-check=full to see details of leaked memory
==4070== 
==4070== For lists of detected and suppressed errors, rerun with: -s
==4070== ERROR SUMMARY: 0 errors from 0 contexts (suppressed: 0 from 0)
Illegal instruction (core dumped)
[evert@Evert ~]$ 

In Arch, I don't see a package with "asan" in the name. Could you please provide a link to the source of that package so I can hunt it down?

@evertvorster
Copy link
Author

I did manage to get a full interrogation. I guess I was just not patient enough last time.

2024-12-12_DDCUtil_interrogate_fresh_powerup_complete.txt

For completeness, I have also run a ddcutil interrogate after a warm boot:
2024-12-12_DDCUtil_Warm_boot_interrogate.txt

So, after a warm boot with the monitor on, this monitor now claims to not support DDC. Also, the remote for it does not work. In the past I have noticed some very weird issues, where it would flicker heavily at high refresh rates. Even turning off and unplugging everything and starting up again this flickering continued until I started playing a bit of No Mans Sky, when it stopped. This leads me to believe that there is something not working properly and giving the monitor signals which completely confuses it.

One other thing that I notice with this monitor is that it is very slow to display an image once it is plugged in and has a valid HDMI signal sent to it.

@evertvorster
Copy link
Author

I'm starting to suspect a driver issue. If there is some way to completely rule out ddcutil, then I can follow the rabbit hole a bit deeper and go pester the folks at nVidia.

@rockowitz
Copy link
Owner

rockowitz commented Dec 12, 2024

Re the docking station, I was just pointing to that as another situation in which the monitor appears on multiple /dev/i2c devices. I have a hunch that, and it's only that, having 2 gpus in the system uses some of the same logic as docking stations.

i2cdetect is s a basic system utility independent of ddcutil. It comes from package i2c-tools. Command i2cdetect -y 17 scans /dev/i2c-17 to see which slave addresses are responsive. In this case it's slave addresses x3A, x3E, x50, x54, and x58. Slave address x50 is used to read the EDID; since it's responsive we know that there's a monitor connected. Slave address x37 is used for DDC/CI communication; since it's not responsive DDC/CI communication with the monitor is impossible. There's nothing ddcutil can do about it. It's a driver/monitor issue.

Re valgrind, I've never seen output like that. but since the problem was imply that ddcutil interrogate was not allowed to run to completion, there's no reason to explore that more. Re asan, FWIW on the Fedora system where I'm current;y running the package name is "libasan". I would be very surprised if asan does not exist on Arch.

@rockowitz rockowitz added monitor specific problems with particular monitors laptops nvidia proprietary proprietary Nvidia driver labels Dec 12, 2024
@evertvorster
Copy link
Author

Hi there!

Thank you so much for coming back to me on this issue.

In response to the DDC/CI support disappearing when the monitor is connected and powered upon boot, I have filed this on the nVidia forums.
https://forums.developer.nvidia.com/t/external-monitor-inconsistent-ddc-ci-detection/316597

On Arch libasan is part of gcc-libs, and installed on any Arch system that has GCC installed.

We can almost wrap this up, but one curiosity remains from my side.

When you look at the ddcutil interrogate output that was obtained with the monitor was adressable, there are a lot of VCP codes that are listed as unsupported VCP codes. Does this mean that the code is not implemented on this monitor, or that it is implemented on this monitor and ddcutil just does now know what to do with it?

In fact, when you scan through
2024-12-12_DDCUtil_interrogate_fresh_powerup_complete.txt
is there anything that stands out to you about this monitor?
Worded another way, in your opinion, is this more likely a monitor bug, or a driver bug?

@rockowitz
Copy link
Owner

VCP feature codes are 1 byte values, from 0 to 255. The Monitor Control Command Set spec specifies a subset of these. For example feature x10 is brightness. No monitor implements all the features in the spec. Features xE0..xFF are reserved for manufacturer use. It is also possible that a monitor uses an undefined feature in some way.

The features that given monitor supports are returned as a string and interpreted by command ddcutil capabilities.
But this string is not always correct; there can be unlisted feature codes that are in fact in use, and it is possible that some feature codes used by the monitor are in fact not listed in the capabilities string. So interrogate attempts to read every possible feature code from x01..xFF (except for those known to write-only). For most cases, the monitor will return a response packet with the unsupported feature flag set, which is reported as Unsupported Feature Code. For some codes (of type table) the response packet does not have an unsupported feature flags. In those cases, interrogate simply retries trying to read the feature several times until it gives up. That's what produces the "Maximum retries exceeded" messages.

There are a few things of interest. The monitor uses features xE6, XF4, xFD, xFe, xFF in the manufacturer reserved range. ddcutil does not know how to interpret these. There are several features codes that are responsive even though they are defined in the capabilities string. For many features that represet discrete options rather than continuous values, the capabilities defines the recognized values. For example feature x60 (Input Source) has defined values of x0F (Displayport-1), x11 (HDMI-1) and x12(HDMI-2). In some cases, such as feature xDC (Display Mode), the monitor reports using several values that are not defined in the MCCS spec. So the bottom line is that there's nothing particularly unusual about the monitor in this regard.

For details on the relevant specs, see page Reference Documents on www.ddcutil.com.

@evertvorster
Copy link
Author

Thanks again for the prompt and very detailed response.

I'll see if I can pester the manufacturer of the monitor to give me some documentation on what those codes mean, and I'll post it here if you can find some use for it.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
laptops monitor specific problems with particular monitors nvidia proprietary proprietary Nvidia driver
Projects
None yet
Development

No branches or pull requests

2 participants