[PATCH] drm/i915: check pin validity of VBT configuration

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



In this patch, add validity checking of pin configuration from VBT;
If invalid, print log, ignore the configuration.

Without this patch, in case of invalid pin configured by VBT, panic is hit:
[   45.778820] WARN_ON(!intel_gmbus_is_valid_pin(dev_priv, pin))
[   45.778820] ------------[ cut here ]------------
[   45.778820] WARNING: CPU: 0 PID: 14 at
drivers/gpu/drm/i915/intel_i2c.c:754 intel_gmbus_get_adapter+0x43/0x50
[   45.848470] BUG: unable to handle kernel NULL pointer dereference
at 0000000000000010
[   45.848470] IP: i2c_transfer+0x15/0xc0
[   45.848470]  drm_do_probe_ddc_edid+0xe4/0x160
[   45.848470]  drm_get_edid+0x351/0x3d0
[   45.848470]  ? drm_get_edid+0x5/0x3d0
[   45.848470]  ? intel_gmbus_get_adapter+0x45/0x50
[   45.848470]  intel_hdmi_set_edid+0x4a/0x1a0

Signed-off-by: Li, Fei <fei.li@xxxxxxxxx>
---
 drivers/gpu/drm/i915/intel_bios.c | 6 ++++++
 1 file changed, 6 insertions(+)

diff --git a/drivers/gpu/drm/i915/intel_bios.c b/drivers/gpu/drm/i915/intel_bios.c
index 2afcc52..f9ce156 100644
--- a/drivers/gpu/drm/i915/intel_bios.c
+++ b/drivers/gpu/drm/i915/intel_bios.c
@@ -1199,6 +1199,12 @@ static void parse_ddi_port(struct drm_i915_private *dev_priv, enum port port,
 			info->alternate_ddc_pin = 0;
 		}
 
+                if (!intel_gmbus_is_valid_pin(dev_priv, info->alternate_ddc_pin)) {
+                        DRM_ERROR("pin %d is invalid for port %c, ignore it\n",
+                            info->alternate_ddc_pin, port_name(port));
+                        info->alternate_ddc_pin = 0;
+                }
+
 		sanitize_ddc_pin(dev_priv, port);
 	}
 
-- 
1.9.1


Thanks a lot!

Best Regards,
Fei
_______________________________________________
Intel-gfx mailing list
Intel-gfx@xxxxxxxxxxxxxxxxxxxxx
https://lists.freedesktop.org/mailman/listinfo/intel-gfx




[Index of Archives]     [Linux USB Devel]     [Linux Audio Users]     [Yosemite News]     [Linux Kernel]     [Linux SCSI]
  Powered by Linux