From mboxrd@z Thu Jan 1 00:00:00 1970 From: Mark Hounschell Subject: drm_kms_helper problems Date: Sun, 21 Oct 2012 10:43:08 -0400 Message-ID: <508409FC.6080805@cfl.rr.com> Reply-To: dmarkh@cfl.rr.com Mime-Version: 1.0 Content-Type: text/plain; charset=UTF-8; format=flowed Content-Transfer-Encoding: QUOTED-PRINTABLE Return-path: Sender: linux-kernel-owner@vger.kernel.org To: linux-kernel@vger.kernel.org Cc: Intel Graphics Development , "markh@compro.net >> Mark Hounschell" List-Id: intel-gfx@lists.freedesktop.org I have a TV that appears to not provide proper EDID info to the HDMI or= DVI=20 ports of my Intel DH77DF motherboard. I received some pointers from thi= s=20 list that pointed me in the direction of creating my own EDID file and = I=20 now have a binary blob that matches what the service manual says is the= =20 proper EDID info. But I am unable to get the drm_kms_helper module to load and use this f= ile.=20 My relevant kernel config options are. CONFIG_DRM_KMS_HELPER=3Dm CONFIG_DRM_LOAD_EDID_FIRMWARE=3Dy my relevant kernel command line contains: video=3Dcard0-HDMI-A-1:e=20 drm_kms_helper.edid_firmware=3Dcard0-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_hd= mi1.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=20 card0-HDMI-A-3 card0-VGA-1 controlD64 version And I don't really understand why I have 3 entries for the one hdmi por= t?=20 Nor do I really understand _exactly_ how to define the connector in my=20 kernel command line or which of the 3 connectors from /sys I should be=20 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 i= n=20 kernel/params.c that shows me every call made to it and it's params. It= is=20 entered many times and I see a sequence to in the log file. As an examp= le,=20 the last one to call with params before drm_kms_helper is "late" and he= re=20 are my debug prints for it: [ 0.840206] parse_args: Entered for late [ 0.840207] parse_args: doing =3D late [ 0.840208] parse_args: args =3D=20 root=3D/dev/disk/by-id/ata-INTEL_SSDSC2CW060A3_CVCV205106EB060AGN-part4= =20 video=3D1024x768=20 resume=3D/dev/disk/by-id/ata-INTEL_SSDSC2CW060A3_CVCV205106EB060AGN-par= t3=20 splash=3Dsilent quiet vga=3D0x37e irqpoll video=3Dcard0-HDMI-A-1:e=20 drm_kms_helper.edid_firmware=3Dcard0-HDMI-A-1:edid/lg42lb9df_hdmi1.edid [ 0.840209] parse_args: params =3D [ 0.840210] parse_args: num =3D 174 [ 0.840210] parse_args: min_level =3D 7 [ 0.840211] parse_args: max_level =3D 7 Now when it gets to drm_kms_helper this is what I get and this is certa= inly=20 screwed up, I just don't know why. [ 1.879648] parse_args: Entered for drm_kms_helper [ 1.879648] parse_args: doing =3D drm_kms_helper [ 1.879649] parse_args: args =3D edid \xffffff86\xffffffe2\xfffffff8h\xffffff89\xffffff86\xffffffc0\xffffff80= \xffffffff\xffffffff=D4=92\xffffffe2\xfffffff8T\xffffff86\xffffffe2\xff= fffff88\xffffff89\xffffff86\xffffffc0\xffffffa4\xffffffff\xffffffffd\xf= fffff86\xffffffe2\xfffffff8 [ 1.879650] parse_args: num =3D 2 [ 1.879651] parse_args: min_level =3D -32768 [ 1.879651] parse_args: max_level =3D 32767 [ 1.879653] \xffffff86\xffffffe2\xfffffff8h\xffffff89\xffffff86\xffffffc0\xffffff80= \xffffffff\xffffffff=D4=92\xffffffe2\xfffffff8T\xffffff86\xffffffe2\xff= fffff88\xffffff89\xffffff86\xffffffc0\xffffffa4\xffffffff\xffffffffd\xf= fffff86\xffffffe2\xfffffff8,=20 num=3D2, min_level=3D-32768, max_level=3D32767 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 =3D %s\n", doing); + printk("parse_args: args =3D %s\n", args); + printk("parse_args: params =3D %s\n", params); + printk("parse_args: num =3D %d\n", num); + printk("parse_args: min_level =3D %d\n",min_level); + printk("parse_args: max_level =3D %d\n", max_level); + } while (*args) { This is using a vanilla 3.6.2 kernel. Any help would be appreciated. Regards Mark