Re: [2.6.39] drm/i915: blank screen on Lenovo Ideapad U160

From: Dirk Gouders
Date: Thu Jun 16 2011 - 07:49:25 EST


Dirk Gouders <gouders@xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx> writes:

> Jesse Barnes <jbarnes@xxxxxxxxxxxxxxxx> writes:
>
>> On Thu, 16 Jun 2011 00:03:38 +0200
>> Dirk Gouders <gouders@xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx> wrote:
>>
>>> Jesse Barnes <jbarnes@xxxxxxxxxxxxxxxx> writes:
>>>
>>> > Oh is this not an LVDS panel? I'm curious which of the port disables
>>> > is at fault in your config then. If you have an eDP panel, it would
>>> > likely be the PCH_DP_D write. It could be a side effect of the
>>> > PANEL_UNLOCK_REGS write as well though, can you try commenting each of
>>> > those out?
>>>
>>> Yes, you are right. Commenting out a single line helps:
>>>
>>> diff --git a/drivers/gpu/drm/i915/intel_display.c b/drivers/gpu/drm/i915/intel_display.c
>>> index 81a9059..ed95cbf 100644
>>> --- a/drivers/gpu/drm/i915/intel_display.c
>>> +++ b/drivers/gpu/drm/i915/intel_display.c
>>> @@ -1356,7 +1356,7 @@ static void intel_disable_pch_ports(struct drm_i915_private *dev_priv,
>>> u32 reg, val;
>>>
>>> val = I915_READ(PCH_PP_CONTROL);
>>> - I915_WRITE(PCH_PP_CONTROL, val | PANEL_UNLOCK_REGS);
>>> + //I915_WRITE(PCH_PP_CONTROL, val | PANEL_UNLOCK_REGS);
>>>
>>> disable_pch_dp(dev_priv, pipe, PCH_DP_B);
>>> disable_pch_dp(dev_priv, pipe, PCH_DP_C);
>>
>> Ok interesting, that means one of the locked regs we're trying to write
>> later is the real culprit for this issue... those include the LVDS reg
>> and the panel timing regs. I'll see if I can figure out which one
>> might be the problem.
>
> Thanks a lot for your help.
>
> Perhaps this information is helpful: with the above change, a trace is
> generated during boot:
>
> ------------[ cut here ]------------
> WARNING: at drivers/gpu/drm/i915/intel_display.c:1020 ironlake_crtc_disable+0x65
> 4/0x124c()
> Hardware name: 08946MG
> PCH LVDS enabled on transcoder A, should be disabled
> Modules linked in:
> Pid: 1, comm: swapper Not tainted 3.0.0-rc3-00055-gada9c93-dirty #6
> Call Trace:
> [<ffffffff8103e052>] ? warn_slowpath_common+0x78/0x8c
> [<ffffffff8103e107>] ? warn_slowpath_fmt+0x45/0x4a
> [<ffffffff812d517a>] ? ironlake_crtc_disable+0x654/0x124c
> [<ffffffff812ea90d>] ? intel_panel_set_backlight+0x3e/0x2b7
> [<ffffffff812c55a7>] ? intel_crtc_dpms+0x38/0xfd
> [<ffffffff812c2d49>] ? intel_crtc_disable+0x1a/0x4f
> [<ffffffff8127c93b>] ? drm_helper_disable_unused_functions+0xd0/0xfb
> [<ffffffff812dbab9>] ? intel_modeset_init+0x1500/0x15c0
> [<ffffffff81297388>] ? i915_driver_load+0xc0d/0x13d9
> [<ffffffff812865d8>] ? drm_get_minor+0x22b/0x288
> [<ffffffff81288206>] ? drm_get_pci_dev+0x149/0x253
> [<ffffffff814d4fc2>] ? _raw_spin_lock_irqsave+0x16/0x34
> [<ffffffff812096c5>] ? local_pci_probe+0x49/0x95
> [<ffffffff81209aa9>] ? pci_device_probe+0xc4/0xf3
> [<ffffffff812fd902>] ? driver_sysfs_add+0x66/0x8d
> [<ffffffff812fdb90>] ? driver_probe_device+0xa8/0x138
> [<ffffffff812fdc6f>] ? __driver_attach+0x4f/0x6f
> [<ffffffff812fdc20>] ? driver_probe_device+0x138/0x138
> [<ffffffff812fce89>] ? bus_for_each_dev+0x47/0x72
> [<ffffffff812fd515>] ? bus_add_driver+0xae/0x1fe
> [<ffffffff817fe14d>] ? drm_core_init+0x121/0x121
> [<ffffffff812fe0f4>] ? driver_register+0x8d/0xf5
> [<ffffffff817fe14d>] ? drm_core_init+0x121/0x121
> [<ffffffff81209cff>] ? __pci_register_driver+0x50/0xbb
> [<ffffffff817fe14d>] ? drm_core_init+0x121/0x121
> [<ffffffff810002e5>] ? do_one_initcall+0x78/0x12b
> [<ffffffff817d9b3f>] ? kernel_init+0xa8/0x126
> [<ffffffff814db414>] ? kernel_thread_helper+0x4/0x10
> [<ffffffff817d9a97>] ? start_kernel+0x337/0x337
> [<ffffffff814db410>] ? gs_change+0xb/0xb
> ---[ end trace bb2314f7f28ba213 ]---

Some redundant information, but if I change one line at another place
in the i915 code (whithout the above modification) the result is more
satisfactory on my machine, because in that case the display even works
after I close and reopen the lid:

diff --git a/drivers/gpu/drm/i915/intel_bios.c b/drivers/gpu/drm/i915/intel_bios.c
index 927442a..ebb67ae 100644
--- a/drivers/gpu/drm/i915/intel_bios.c
+++ b/drivers/gpu/drm/i915/intel_bios.c
@@ -267,7 +267,7 @@ static int intel_bios_ssc_frequency(struct drm_device *dev,
case 4:
return alternate ? 100 : 96;
default:
- return alternate ? 100 : 120;
+ return alternate ? 120 : 100;
}
}

Dirk
--
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/