diff -ur x/linux-3.12-rc1/drivers/gpu/drm/i915/i915_drv.c linux-3.12-rc1/drivers/gpu/drm/i915/i915_drv.c --- x/linux-3.12-rc1/drivers/gpu/drm/i915/i915_drv.c 2013-09-16 23:17:51.000000000 +0300 +++ linux-3.12-rc1/drivers/gpu/drm/i915/i915_drv.c 2013-09-17 19:17:02.787833512 +0300 @@ -136,6 +136,10 @@ module_param_named(enable_ips, i915_enable_ips, int, 0600); MODULE_PARM_DESC(enable_ips, "Enable IPS (default: true)"); +bool i915_ignore_edp_bpp __read_mostly; +module_param_named(i915_ignore_edp_bpp, i915_ignore_edp_bpp, bool, 0600); +MODULE_PARM_DESC(i915_ignore_edp_bpp, "Ignore BDB edp BPP value (default: false)"); + bool i915_fastboot __read_mostly = 0; module_param_named(fastboot, i915_fastboot, bool, 0600); MODULE_PARM_DESC(fastboot, "Try to skip unnecessary mode sets at boot time " diff -ur x/linux-3.12-rc1/drivers/gpu/drm/i915/i915_drv.h linux-3.12-rc1/drivers/gpu/drm/i915/i915_drv.h --- x/linux-3.12-rc1/drivers/gpu/drm/i915/i915_drv.h 2013-09-16 23:17:51.000000000 +0300 +++ linux-3.12-rc1/drivers/gpu/drm/i915/i915_drv.h 2013-09-17 16:50:41.971598369 +0300 @@ -651,6 +651,7 @@ #define QUIRK_LVDS_SSC_DISABLE (1<<1) #define QUIRK_INVERT_BRIGHTNESS (1<<2) #define QUIRK_NO_PCH_PWM_ENABLE (1<<3) +#define QUIRK_IGNORE_EDP_BPP (1<<4) struct intel_fbdev; struct intel_fbc_work; @@ -1713,6 +1714,7 @@ extern unsigned int i915_preliminary_hw_support __read_mostly; extern int i915_disable_power_well __read_mostly; extern int i915_enable_ips __read_mostly; +extern bool i915_ignore_edp_bpp __read_mostly; extern bool i915_fastboot __read_mostly; extern int i915_enable_pc8 __read_mostly; extern int i915_pc8_timeout __read_mostly; diff -ur x/linux-3.12-rc1/drivers/gpu/drm/i915/intel_display.c linux-3.12-rc1/drivers/gpu/drm/i915/intel_display.c --- x/linux-3.12-rc1/drivers/gpu/drm/i915/intel_display.c 2013-09-16 23:17:51.000000000 +0300 +++ linux-3.12-rc1/drivers/gpu/drm/i915/intel_display.c 2013-09-17 16:50:30.463598061 +0300 @@ -9932,6 +9932,17 @@ DRM_INFO("applying no-PCH_PWM_ENABLE quirk\n"); } +/* + * Some machines (e.g. Asus TX300) incorrectly return 18bpp in UEFI mode + * from vbe edp data + */ +static void quirk_no_edp_bpp_enable(struct drm_device *dev) +{ + struct drm_i915_private *dev_priv = dev->dev_private; + dev_priv->quirks |= QUIRK_IGNORE_EDP_BPP; + DRM_INFO("applying IGNORE_EDP_BPP quirk\n"); +} + struct intel_quirk { int device; int subsystem_vendor; @@ -10006,6 +10017,11 @@ { 0x0116, 0x1028, 0x052e, quirk_no_pcm_pwm_enable }, /* Dell XPS13 HD and XPS13 FHD Ivy Bridge */ { 0x0166, 0x1028, 0x058b, quirk_no_pcm_pwm_enable }, + + /* at least Asus TX300 (0x1042 0x15b7), + UX32VD (0x1042 0x1507), Dell XPS13 and Toshiba Kirabook, + see https://bugzilla.kernel.org/show_bug.cgi?id=59841 */ + { 0x0166, PCI_ANY_ID, PCI_ANY_ID, quirk_no_edp_bpp_enable }, }; static void intel_init_quirks(struct drm_device *dev) diff -ur x/linux-3.12-rc1/drivers/gpu/drm/i915/intel_dp.c linux-3.12-rc1/drivers/gpu/drm/i915/intel_dp.c --- x/linux-3.12-rc1/drivers/gpu/drm/i915/intel_dp.c 2013-09-16 23:17:51.000000000 +0300 +++ linux-3.12-rc1/drivers/gpu/drm/i915/intel_dp.c 2013-09-17 16:50:41.975598369 +0300 @@ -731,7 +731,9 @@ /* Walk through all bpp values. Luckily they're all nicely spaced with 2 * bpc in between. */ bpp = pipe_config->pipe_bpp; - if (is_edp(intel_dp) && dev_priv->vbt.edp_bpp) { + if (is_edp(intel_dp) && dev_priv->vbt.edp_bpp + && !i915_ignore_edp_bpp + && !(dev_priv->quirks & QUIRK_IGNORE_EDP_BPP)) { DRM_DEBUG_KMS("clamping bpp for eDP panel to BIOS-provided %i\n", dev_priv->vbt.edp_bpp); bpp = min_t(int, bpp, dev_priv->vbt.edp_bpp);