[Intel-gfx] drm_kms_helper problems

Mark Hounschell dmarkh at cfl.rr.com
Sun Oct 21 16:43:08 CEST 2012


I have a TV that appears to not provide proper EDID info to the HDMI or DVI 
ports of my Intel DH77DF motherboard. I received some pointers from this 
list that pointed me in the direction of creating my own EDID file and I 
now have a binary blob that matches what the service manual says is the 
proper EDID info.

But I am unable to get the drm_kms_helper module to load and use this file. 
My relevant kernel config options are.

CONFIG_DRM_KMS_HELPER=m
CONFIG_DRM_LOAD_EDID_FIRMWARE=y

my relevant kernel command line contains:

video=card0-HDMI-A-1:e 
drm_kms_helper.edid_firmware=card0-HDMI-A-1:edid/lg42lb9df_hdmi1.edid

The edid file:
# ls -al /lib/firmware/edid/lg42lb9df_hdmi1.edid
-rw-r--r-- 1 root root 256 Oct 16 05:46 /lib/firmware/edid/lg42lb9df_hdmi1.edid

connector info from /sys/class/drm/

card0  card0-DP-1  card0-DP-2  card0-DP-3  card0-HDMI-A-1  card0-HDMI-A-2 
card0-HDMI-A-3  card0-VGA-1  controlD64  version

And I don't really understand why I have 3 entries for the one hdmi port? 
Nor do I really understand _exactly_ how to define the connector in my 
kernel command line or which of the 3 connectors from /sys I should be 
using. I've tried different variants. Ie. card0-HDMI-A-1and HDMI-A-1.

The results in the kernel log file remain:

[    1.879654] drm_kms_helper: Unknown parameter `edid'

I assume I am doing something wrong but I have put some debug printks in 
kernel/params.c that shows me every call made to it and it's params. It is 
entered many times and I see a sequence to in the log file. As an example, 
the last one to call with params before drm_kms_helper is "late" and here 
are my debug prints for it:

[    0.840206] parse_args: Entered for late
[    0.840207] parse_args: doing = late
[    0.840208] parse_args: args  = 
root=/dev/disk/by-id/ata-INTEL_SSDSC2CW060A3_CVCV205106EB060AGN-part4 
video=1024x768 
resume=/dev/disk/by-id/ata-INTEL_SSDSC2CW060A3_CVCV205106EB060AGN-part3 
splash=silent quiet vga=0x37e irqpoll video=card0-HDMI-A-1:e 
drm_kms_helper.edid_firmware=card0-HDMI-A-1:edid/lg42lb9df_hdmi1.edid
[    0.840209] parse_args: params =
[    0.840210] parse_args: num = 174
[    0.840210] parse_args: min_level = 7
[    0.840211] parse_args: max_level = 7

Now when it gets to drm_kms_helper this is what I get and this is certainly 
screwed up, I just don't know why.

[    1.879648] parse_args: Entered for drm_kms_helper
[    1.879648] parse_args: doing = drm_kms_helper
[    1.879649] parse_args: args  = edid
\xffffff86\xffffffe2\xfffffff8h\xffffff89\xffffff86\xffffffc0\xffffff80\xffffffff\xffffffffԒ\xffffffe2\xfffffff8T\xffffff86\xffffffe2\xfffffff88\xffffff89\xffffff86\xffffffc0\xffffffa4\xffffffff\xffffffffd\xffffff86\xffffffe2\xfffffff8
[    1.879650] parse_args: num = 2
[    1.879651] parse_args: min_level = -32768
[    1.879651] parse_args: max_level = 32767
[    1.879653]
\xffffff86\xffffffe2\xfffffff8h\xffffff89\xffffff86\xffffffc0\xffffff80\xffffffff\xffffffffԒ\xffffffe2\xfffffff8T\xffffff86\xffffffe2\xfffffff88\xffffff89\xffffff86\xffffffc0\xffffffa4\xffffffff\xffffffffd\xffffff86\xffffffe2\xfffffff8, 
num=2, min_level=-32768, max_level=32767

Then finally:

[    1.879654] drm_kms_helper: Unknown parameter `edid'

The additional printks I inserted into kernel/params.c:

         if (*args)
                 pr_debug("doing %s, parsing ARGS: '%s'\n", doing, args);

+      if (*args) {
+              printk("\nparse_args: Entered for %s\n", doing);
+              printk("parse_args: doing = %s\n", doing);
+              printk("parse_args: args  = %s\n", args);
+              printk("parse_args: params = %s\n", params);
+              printk("parse_args: num = %d\n", num);
+              printk("parse_args: min_level = %d\n",min_level);
+              printk("parse_args: max_level = %d\n", max_level);
+       }

         while (*args) {

This is using a vanilla 3.6.2 kernel. Any help would be appreciated.

Regards
Mark




More information about the Intel-gfx mailing list