2013/6/7 <alexdeucher@xxxxxxxxx>: > From: Alex Deucher <alexander.deucher@xxxxxxx> > > - remove adding 2 to checksum, this breaks certain monitors > - properly emit the AVI infoframe version, not emitting > the version breaks some monitors. > > This should fix blank screen when HDMI audio is enabled on > certain monitors. Err, nack. I believe this it actually going to *break* some monitors compatibility. For some unknown reason AMD hardware uses 0x81 and 0x01 for type and version of infoframe. See this comment (written/published by you): /* The following packets and infoframes are required for HDMI: * Packets: * 0x00 - Null packet * 0x01 - Audio clock regen * 0x02 - Audio sample * 0x03 - General Control * Infoframes: * 0x81 0x01 - AVI * 0x83 0x03 - audio */ As you can see, AMD hardware uses 0x81 and 0x01. I've no idea why, according to the HDMI standard it should be 0x82 and 0x02. All other vendors seems to also use 0x82 and 0x02. In function hdmi_avi_infoframe_init type it set to 0x82 and 0x02. This type and version it's written anywhere, but they are used to calculate checksum. Checksum it what we store is frame[0x0]. We calculate checksum as 0x100 - sum (see hdmi_infoframe_checksum). Now... with common drm code we use 0x82 and 0x02 instead of 0x81 and 0x01. It means our "sum" is too big by 0x02. It means we have to use 0x100 - sum + 0x02 as checksum for AMD hardware. This whole hack was introduced in 92db7f6c860b8190571a9dc1fcbc16d003422fe8: drm/radeon/kms: workaround invalid AVI infoframe checksum issue and I'm pretty sure it was verified to fix somebody's HDMI mode. It also seems to be compatible with AMD specs (at least the part of it we can see in the quoted comment). For proof of fglrx doing the same, please see my e-mail where I provided dumps from registers when using fglrx: http://lists.freedesktop.org/archives/dri-devel/2011-December/017717.html (it was tested on 5 different cards!). When working on that patch I was talking & debugging with few people on IRC. That mean I don't have logs anymore, but I'm sure I was testing exactly that single value and it was immediately fixing selected displays. I mean testing by writing something like: avivotool regset 0x10884 0x00a85e4f vs. avivotool regset 0x10884 0x00a85e4d -- Rafał _______________________________________________ dri-devel mailing list dri-devel@xxxxxxxxxxxxxxxxxxxxx http://lists.freedesktop.org/mailman/listinfo/dri-devel