Re: Intel graphics drm issue?

From: Mark Hounschell
Date: Sun Oct 14 2012 - 13:03:01 EST


On 10/14/2012 07:03 AM, Bruno PrÃmont wrote:
On Sun, 14 October 2012 Mark Hounschell <dmarkh@xxxxxxxxxx> wrote:
On 10/14/2012 04:41 AM, Bruno PrÃmont wrote:
Your best solution is probably to write an EDID blob (or reuse one you find
somewhere) that provides at least one mode matching your TV's native mode
(probably full-HD).

Google suggested the following document:
http://www.jordansmanuals.com/ServiceManuals%5CLG%5CTV%5CLCD%5C42LB9DF%5C42LB9DF%20Service%20Manual.pdf
which on page 13/14 shows the full EDID blob for the various HDMI outputs of the
TV. You may want to read that document, convert the EDID blobs to 512 bytes binary
files and hell DRM core to use the right one via module/kernel cmdline option:

drm_kms_helper.edid_firmware=edid/lg42lb9df.edid
or
modprobe drm-kms-helper edid_firmware=edid/lg42lb9df.edid

where
/lib/firmware/edid/lg42lb9df.edid
is the 512-bytes EDID blob created according to data from above manual.
(note, that will only work for intel, radeon and nouveau drivers but will
not work for closed drivers of AMD/nVidia)


This certainly looks doable. That firmware file, should it contain all 4
tables or just the one for the port I'm connected to? Will it matter what
order they were in?

It should contain just the table for the port you're connected to.
For the HDMI ports the tables are 1024 bytes (e.g. two 512 bytes blocks,
not just one as I incorrectly wrote above). For the VGA port it's just one
512 bytes block.

Oh, and check the exact documentation of edid_firmware parameter as you can
adjust its value to tell kernel to which connector exactly it applies
(otherwise it will overwrite the EDID on other ports with working displays!).


Hi Bruno,

I've taken the EDID data from that service manual. I've looked at the EDID-Howto for how to specify the connector but all I see is:

"An EDID data set will only be used for a particular connector,
if its name and a colon are prepended to the EDID name."

Where can I find the connector names?

And could I ask if this simple pgm might work to build the file I need?

int32_t main(int argc, char **argv)
{
FILE *fd;
const char *path = "/lib/firmware/edid/lg42lb9df.edid";
const char *mode = "w+";
uint8_t firmware[1024] = {

0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x1E, 0x6D, 0x01, 0x00, 0x01, 0x01, 0x01, 0x01,
0x0E, 0x10, 0x01, 0x03, 0x80, 0x73, 0x41, 0x96, 0x0A, 0xCF, 0x74, 0xA3, 0x57, 0x4C, 0xB0, 0x23,
0x09, 0x48, 0x4C, 0xAF, 0xCF, 0x00, 0x31, 0x40, 0x45, 0x40, 0x61, 0x40, 0x81, 0x80, 0xA9, 0x40,
0xD1, 0xC0, 0x01, 0x01, 0x01, 0x01, 0x02, 0x3A, 0x80, 0x18, 0x71, 0x38, 0x2D, 0x40, 0x58, 0x2C,
0x45, 0x00, 0xC4, 0x8E, 0x21, 0x00, 0x00, 0x1E, 0x66, 0x21, 0x50, 0xB0, 0x51, 0x00, 0x1B, 0x30,
0x40, 0x70, 0x36, 0x00, 0xC4, 0x8E, 0x21, 0x00, 0x00, 0x1E, 0x00, 0x00, 0x00, 0xFD, 0x00, 0x38,
0x4B, 0x1F, 0x44, 0x0F, 0x00, 0x0A, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x00, 0x00, 0x00, 0xFC,
0x00, 0x4C, 0x47, 0x20, 0x54, 0x56, 0x0A, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x01, 0x15,

0x02, 0x03, 0x1B, 0xF1, 0x4C, 0x20, 0x22, 0x10, 0x1F, 0x01, 0x02, 0x03, 0x04, 0x05, 0x12, 0x93,
0x14, 0x23, 0x15, 0x07, 0x50, 0x65, 0x03, 0x0C, 0x00, 0x10, 0x00, 0x01, 0x1D, 0x00, 0x72, 0x51,
0xD0, 0x1E, 0x20, 0x6E, 0x28, 0x55, 0x00, 0xC4, 0x8E, 0x21, 0x00, 0x00, 0x1E, 0x01, 0x1D, 0x80,
0x18, 0x71, 0x1C, 0x16, 0x20, 0x58, 0x2C, 0x25, 0x00, 0xC4, 0x8E, 0x21, 0x00, 0x00, 0x9E, 0x8C,
0x0A, 0xD0, 0x90, 0x20, 0x40, 0x31, 0x20, 0x0C, 0x40, 0x55, 0x00, 0x4C, 0x6C, 0x42, 0x00, 0x00,
0x18, 0x01, 0x1D, 0x00, 0xBC, 0x52, 0xD0, 0x1E, 0x20, 0xB8, 0x28, 0x55, 0x40, 0x4C, 0x6C, 0x42,
0x00, 0x00, 0x1E, 0x01, 0x1D, 0x80, 0xD0, 0x72, 0x1C, 0x16, 0x20, 0x10, 0x2C, 0x25, 0x80, 0x4C,
0x6C, 0x42, 0x00, 0x00, 0x9E, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xED
};

fd = fopen(path, mode);
if (fd == NULL) {
perror("/lib/firmware/edid/lg42lb9df.edid failed: ");
return 1;
}

fwrite(&firmware, 1024, 1, fd);

fclose(fd);

printf("Wrote 1024 bytes of edid data to %s\n", path);

return 0;
}

Thanks very much
Mark

--
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at http://vger.kernel.org/majordomo-info.html
Please read the FAQ at http://www.tux.org/lkml/