Regression: DDC I2C Display Freezing for internal displays
Mario Limonciello
superm1 at kernel.org
Sat Jul 19 17:36:11 UTC 2025
On 7/19/25 12:02 PM, Felix Richter wrote:
> On 7/19/25 14:23, Mario Limonciello wrote:
>>
>> On 7/19/25 5:10 AM, Felix Richter wrote:
>>> Thanks for the reply.
>>>
>>> I am aware that i can read and `edid` via sysfs from the drm device.
>>> I did not know about `drm_info` but from a quick look at it I don't
>>> think it provides the information I need.
>>>
>>> The problem is not that I need more information about the attached
>>> display. The problem is that there is not enough information about
>>> the what `i2c` device corresponds to which monitors ddc channel.
>>> Relying on udev hierarchies is not sufficient, because in many cases
>>> the relevant i2c device has no parent drm output device. So when I
>>> have no information about the i2c device I need to get more
>>> information by reading from it. Then I know more and can map the
>>> device to the correct display. I am happy to change the approach if
>>> there is a simpler way for me to get this information.
>>
>> ❯ ls -alh /sys/class/drm/*/ddc
> Nice, I will consider adding that information to the logic for matching
> i2c devices to displays. But I do have to tell you that still is not
> sufficient in every case. It probably works for all direct interfaces
> that are always present on the device. But it fails to match i2c ddc
> channels when monitors are attached via a docking station using USB-C.
> Those monitors will not even show up in the command you provided. This
> again leads me to having to probe the i2c device directly anyway.
Presumably you're meaning with a dock that has an MST hub?
I suppose an optimization that you can do to avoid hitting this issue
you've raised is exclude the matches to eDP panels from /sys/class/drm/.
>
>> I get where you're coming from, but there are cases that are
>> ultimately impossible to prevent when it comes to "long", or
>> "frequent" sequences and responding to interrupts. There are lots of
>> examples like this in the kernel that if you break what a driver is
>> doing with a device from a userspace interface you get to pick up the
>> pieces.
>>
>> I'll give you two examples:
>>
>> 1) You can access R/W PCI config data.
>> /sys/bus/pci/devices/*/config
>>
>> You can break power management state machines, bus mastering, really
>> anything a device driver can do from a userspace application. For
>> example if I had a userspace app that did something like this:
>>
>> dd if=/dev/zero of=/sys/bus/pci/devices/${BDF}/config bs=1 count=4096
>>
>> and it broke how can the kernel do anything about it?
>>
>> 2) There was a case that fwupd was doing something very similar to you
>> with a "probe" but with the DP aux character device. It was trying to
>> detect devices with updates and would fight specifically with link
>> training. The outcome was non-functional devices. The workaround
>> currently employed is that fwupd will wait a few seconds (5 or 10, I
>> forget) and then do the probe to avoid that fight. This doesn't solve
>> things though because there are pulse interrupts that could still come
>> at any time. The DP spec has response requirements for these.
>>
>> We talked about it at the display next hackfest this year and the
>> decision was this information that fwupd was needing should be pushed
>> into the kernel (let fwupd probe a sysfs file that gets cached data
>> the driver fetched).
>>
> I get that you can not protect against every case of malicious use. I am
> not sure that my example qualifies as that extreme though. I am only
> trying to read some data, that is in no way comparable to actively
> changing values.
Reading a lot of data (such as an EDID) can take a "while". If you're
in the middle of the I2C transactions and the driver tries to put it
into PSR I guess that's where things are going wrong.
Maybe what we need in this case is to actively block PSR while userspace
I2C traffic is happening?
This is a better question for Leo if that's feasible (or reasonable).
>>
>>> People have been experiencing similar screen freezing issues randomly
>>> on this drm issue thread: https://gitlab.freedesktop.org/drm/amd/-/
>>> issues/4141#note_3016182> > This example highlights an issue that can
>>> be triggered reliably with a
>>> very similar effect. It may not be the same issue, but they may be
>>> related.
>>
>> Yeah; I'm aware of this thread and agree it's an issue with similar
>> symptoms.
>
> At the very least I hope that my example code for triggering a similar
> issue can help figure out what is going on there ;)
More information about the amd-gfx
mailing list