* More questions and patches for 835GM/ns2501 DVO
@ 2013-11-03 16:55 Thomas Richter
2013-11-03 17:12 ` Daniel Vetter
0 siblings, 1 reply; 20+ messages in thread
From: Thomas Richter @ 2013-11-03 16:55 UTC (permalink / raw)
To: Daniel Vetter, intel-gfx
Hi Daniel, dear intel experts,
again trying to get the old Fujitsu laptop to work. The problem with the
latest drm-nightly built is that
the system again locks up - if the bios is configured to show an image
only on the internal display and
nothing on the external VGA. If the bios is configured to "shared
video", booting works fine.
This seems to be related to the problem that, apparently, the bios seems
to prefer to connect the internal
display to pipe B and not pipe A, and hence during bootstrap just
configuring the dpll for pipe A is not enough.
That being said, the following modifications for ns2501 will fix this:
struct ns2501_priv need to get a new field int pll_b. In enable_dvo(),
the setting for the dpll_b needs to be
saved, too, and installed, too:
I915_WRITE(_DPLL_A, 0xd0820000);
I915_WRITE(_DPLL_B, 0xd0820000);
It is absolutely unnecessary to overwrite the DVOC register, this is
configured fine. In "restore_dvo()", the dpll_b
configuration needs to be restored as well. The DVOC register need not
to be touched. In fact, the current
enable_dvo() has a bug in so far as it saves the wrong register.
However, what is more stunning is how this bug is triggered. Actually,
intel_display.c computes the dpll register
value correctly (as it seems), but __intel_set_mode() (around line 9356)
is a bit strange:
First, it disables the crtcs, then sets the mode, and the enables the
crtcs. Unfortunately, this cannot work with
with the ns2501 since a disabled PLL will block any communication with
with the DVO. I tried to move the "enable"
call above the intel_crtc_mode_set(), but this did not work either. I do
not know enough about the inner workings
of intel_display.c to fix this properly, but the problem seems to be
exactly that: An incorrectly configured DPLL
disables the communication with the DVO, hence the need for the workaround.
Last, a question: All I can get with the current intel driver is a
"shared display" between the internal and external
display. Is there any way (through xrandr) to get two different
configurations such that the external monitor is
using one configuration feed through pipe A, and the internal display is
feed through pipe B with another configuration?
And finally: As the internal display is only a 6 bit display, is there a
way to enable dithering on the 835GM to avoid the banding artifacts?
Greetings,
Thomas
^ permalink raw reply [flat|nested] 20+ messages in thread* Re: More questions and patches for 835GM/ns2501 DVO 2013-11-03 16:55 More questions and patches for 835GM/ns2501 DVO Thomas Richter @ 2013-11-03 17:12 ` Daniel Vetter 2013-11-03 17:13 ` Daniel Vetter [not found] ` <19544_1383498802_52768431_19544_2610_1_20131103171348.GB4167@phenom.ffwll.local> 0 siblings, 2 replies; 20+ messages in thread From: Daniel Vetter @ 2013-11-03 17:12 UTC (permalink / raw) To: Thomas Richter; +Cc: Daniel Vetter, intel-gfx On Sun, Nov 03, 2013 at 05:55:37PM +0100, Thomas Richter wrote: > Hi Daniel, dear intel experts, > > again trying to get the old Fujitsu laptop to work. The problem with > the latest drm-nightly built is that > the system again locks up - if the bios is configured to show an > image only on the internal display and > nothing on the external VGA. If the bios is configured to "shared > video", booting works fine. > > This seems to be related to the problem that, apparently, the bios > seems to prefer to connect the internal > display to pipe B and not pipe A, and hence during bootstrap just > configuring the dpll for pipe A is not enough. > > That being said, the following modifications for ns2501 will fix this: > > struct ns2501_priv need to get a new field int pll_b. In > enable_dvo(), the setting for the dpll_b needs to be > saved, too, and installed, too: > I915_WRITE(_DPLL_A, 0xd0820000); > I915_WRITE(_DPLL_B, 0xd0820000); > > It is absolutely unnecessary to overwrite the DVOC register, this is > configured fine. In "restore_dvo()", the dpll_b > configuration needs to be restored as well. The DVOC register need > not to be touched. In fact, the current > enable_dvo() has a bug in so far as it saves the wrong register. > > However, what is more stunning is how this bug is triggered. > Actually, intel_display.c computes the dpll register > value correctly (as it seems), but __intel_set_mode() (around line > 9356) is a bit strange: > > First, it disables the crtcs, then sets the mode, and the enables > the crtcs. Unfortunately, this cannot work with > with the ns2501 since a disabled PLL will block any communication > with with the DVO. I tried to move the "enable" > call above the intel_crtc_mode_set(), but this did not work either. > I do not know enough about the inner workings > of intel_display.c to fix this properly, but the problem seems to be > exactly that: An incorrectly configured DPLL > disables the communication with the DVO, hence the need for the workaround. Have you tried my patch to reorder the dvo sequence a bit? That /should/ get all these things right: http://www.spinics.net/lists/intel-gfx/msg34349.html > Last, a question: All I can get with the current intel driver is a > "shared display" between the internal and external > display. Is there any way (through xrandr) to get two different > configurations such that the external monitor is > using one configuration feed through pipe A, and the internal > display is feed through pipe B with another configuration? --above/below should achieve that, presuming there's not a different bug somewhere that prevents this from working correctly. > And finally: As the internal display is only a 6 bit display, is > there a way to enable dithering on the 835GM to avoid the banding > artifacts? Iirc we always send 8bit data over the dvo bus, so any dithering should be done in the dvo encoder. The built-in lvds encoder on i855gm and later has it's own dithering settting, and otherwise I'm not aware of any that would apply to gen2 graphics. Also: If you're running sna, have you checked that you indeed run X at 32bit depth? The default since a while is 15 bits. -Daniel -- Daniel Vetter Software Engineer, Intel Corporation +41 (0) 79 365 57 48 - http://blog.ffwll.ch ^ permalink raw reply [flat|nested] 20+ messages in thread
* Re: More questions and patches for 835GM/ns2501 DVO 2013-11-03 17:12 ` Daniel Vetter @ 2013-11-03 17:13 ` Daniel Vetter [not found] ` <19544_1383498802_52768431_19544_2610_1_20131103171348.GB4167@phenom.ffwll.local> 1 sibling, 0 replies; 20+ messages in thread From: Daniel Vetter @ 2013-11-03 17:13 UTC (permalink / raw) To: Thomas Richter; +Cc: Daniel Vetter, intel-gfx On Sun, Nov 03, 2013 at 06:12:08PM +0100, Daniel Vetter wrote: > On Sun, Nov 03, 2013 at 05:55:37PM +0100, Thomas Richter wrote: > > Hi Daniel, dear intel experts, > > > > again trying to get the old Fujitsu laptop to work. The problem with > > the latest drm-nightly built is that > > the system again locks up - if the bios is configured to show an > > image only on the internal display and > > nothing on the external VGA. If the bios is configured to "shared > > video", booting works fine. > > > > This seems to be related to the problem that, apparently, the bios > > seems to prefer to connect the internal > > display to pipe B and not pipe A, and hence during bootstrap just > > configuring the dpll for pipe A is not enough. > > > > That being said, the following modifications for ns2501 will fix this: > > > > struct ns2501_priv need to get a new field int pll_b. In > > enable_dvo(), the setting for the dpll_b needs to be > > saved, too, and installed, too: > > I915_WRITE(_DPLL_A, 0xd0820000); > > I915_WRITE(_DPLL_B, 0xd0820000); > > > > It is absolutely unnecessary to overwrite the DVOC register, this is > > configured fine. In "restore_dvo()", the dpll_b > > configuration needs to be restored as well. The DVOC register need > > not to be touched. In fact, the current > > enable_dvo() has a bug in so far as it saves the wrong register. > > > > However, what is more stunning is how this bug is triggered. > > Actually, intel_display.c computes the dpll register > > value correctly (as it seems), but __intel_set_mode() (around line > > 9356) is a bit strange: > > > > First, it disables the crtcs, then sets the mode, and the enables > > the crtcs. Unfortunately, this cannot work with > > with the ns2501 since a disabled PLL will block any communication > > with with the DVO. I tried to move the "enable" > > call above the intel_crtc_mode_set(), but this did not work either. > > I do not know enough about the inner workings > > of intel_display.c to fix this properly, but the problem seems to be > > exactly that: An incorrectly configured DPLL > > disables the communication with the DVO, hence the need for the workaround. > > Have you tried my patch to reorder the dvo sequence a bit? That /should/ > get all these things right: > > http://www.spinics.net/lists/intel-gfx/msg34349.html There's also a follow-up patch for you to test: http://www.spinics.net/lists/intel-gfx/msg34350.html That would prove that the first patch does indeed work. Note that patch 1 in this series is already merged. -Daniel -- Daniel Vetter Software Engineer, Intel Corporation +41 (0) 79 365 57 48 - http://blog.ffwll.ch ^ permalink raw reply [flat|nested] 20+ messages in thread
[parent not found: <19544_1383498802_52768431_19544_2610_1_20131103171348.GB4167@phenom.ffwll.local>]
* Re: More questions and patches for 835GM/ns2501 DVO [not found] ` <19544_1383498802_52768431_19544_2610_1_20131103171348.GB4167@phenom.ffwll.local> @ 2013-11-03 19:00 ` Thomas Richter 2013-11-03 21:18 ` Daniel Vetter [not found] ` <19544_1383513468_5276BD7B_19544_3653_1_20131103211814.GC4167@phenom.ffwll.local> 2013-11-03 19:39 ` More questions and patches for 835GM/ns2501 DVO Thomas Richter 1 sibling, 2 replies; 20+ messages in thread From: Thomas Richter @ 2013-11-03 19:00 UTC (permalink / raw) To: Daniel Vetter; +Cc: Daniel Vetter, intel-gfx On 03.11.2013 18:13, Daniel Vetter wrote: >> Have you tried my patch to reorder the dvo sequence a bit? That /should/ >> get all these things right: >> >> http://www.spinics.net/lists/intel-gfx/msg34349.html > There's also a follow-up patch for you to test: > > http://www.spinics.net/lists/intel-gfx/msg34350.html > > That would prove that the first patch does indeed work. Note that patch 1 > in this series is already merged. Thanks, I tried. Actually, this worked fairly (but not perfectly) well. I no longer get a "stuck DVO" as I did before, i.e. the "re-enable" logic is not triggered anymore. However, I do get (occasionally) a kernel-oops: ------------[ cut here ]------------ WARNING: CPU: 0 PID: 2311 at drivers/gpu/drm/i915/intel_display.c:1098 assert_cursor.constprop.68+0xba/0xc0 [i915]() cursor on pipe A assertion failure (expected off, current on) Modules linked in: cpufreq_stats binfmt_misc michael_mic arc4 ecb lib80211_crypt_tkip lib80211_crypt_ccmp fuse nfsd exportfs nfs_acl nfs lockd fscache sunrpc loop firewire_sbp2 hostap_cs hostap snd_intel8x0 snd_ac97_codec ac97_bus lib80211 snd_pcm i915 snd_page_alloc snd_seq snd_seq_device snd_timer psmouse snd pcmcia apanel input_polldev soundcore yenta_socket pcmcia_rsrc pcmcia_core lpc_ich i2c_i801 mfd_core pcspkr i2c_algo_bit rng_core serio_raw evdev drm_kms_helper drm fujitsu_laptop led_class intel_agp intel_gtt agpgart i2c_core video ac button hid_generic usbhid hid sg sr_mod cdrom firewire_ohci firewire_core crc_itu_t 8139too 8139cp mii uhci_hcd usbcore usb_common CPU: 0 PID: 2311 Comm: Xorg Tainted: G W 3.12.0-rc7+ #13 Hardware name: FUJITSU SIEMENS LIFEBOOK S Series/FJNB159, BIOS Version 1.06 07/02/2002 c12f8c44 c1033def f8ad3990 f6adfab0 00000907 f8ad25d8 0000044a f8a81ffa f8a81ffa f5ca8000 00000041 00000000 f5ca8000 c1033eb3 00000009 f6adfa98 f8ad3990 f6adfab0 f8a81ffa f8ad25d8 0000044a f8ad3990 00000041 f8adb9a0 Call Trace: [<c12f8c44>] ? dump_stack+0xa/0x13 [<c1033def>] ? warn_slowpath_common+0x7f/0xb0 [<f8a81ffa>] ? assert_cursor.constprop.68+0xba/0xc0 [i915] [<f8a81ffa>] ? assert_cursor.constprop.68+0xba/0xc0 [i915] [<c1033eb3>] ? warn_slowpath_fmt+0x33/0x40 [<f8a81ffa>] ? assert_cursor.constprop.68+0xba/0xc0 [i915] [<f8a83b90>] ? intel_disable_pipe+0x30/0xb0 [i915] [<f8a8491a>] ? i9xx_crtc_disable+0xca/0x2f0 [i915] [<f8a8b25e>] ? __intel_set_mode+0x7ae/0x13b0 [i915] [<f8a8e1f3>] ? intel_set_mode+0x23/0x40 [i915] [<f8a8e9bc>] ? intel_crtc_set_config+0x7ac/0x9d0 [i915] [<f802fe33>] ? drm_mode_set_config_internal+0x43/0xb0 [drm] [<f81386a5>] ? drm_fb_helper_set_par+0x45/0xac [drm_kms_helper] [<c11a7976>] ? fb_set_var+0x1a6/0x420 [<c10eec6e>] ? __find_get_block+0x9e/0x160 [<c11b56e0>] ? fbcon_blank+0x290/0x2d0 [<c1203848>] ? do_unblank_screen+0x98/0x1b0 [<c1201acd>] ? notify_update+0x1d/0x30 [<c11faa12>] ? complete_change_console+0x52/0xe0 [<c11fbba4>] ? vt_ioctl+0x1104/0x1220 [<f802a1d0>] ? drm_setmaster_ioctl+0xe0/0xe0 [drm] [<c11faaa0>] ? complete_change_console+0xe0/0xe0 [<c11f17da>] ? tty_ioctl+0x21a/0x9a0 [<c10adb12>] ? do_wp_page.isra.92+0x2a2/0x650 [<c10af428>] ? handle_mm_fault+0x318/0x610 [<c11f15c0>] ? no_tty+0x20/0x20 [<c10d66ac>] ? do_vfs_ioctl+0x7c/0x550 [<c102d221>] ? __do_page_fault+0x1b1/0x490 [<c10c7d17>] ? vfs_write+0x137/0x1b0 [<c10d6bc6>] ? SyS_ioctl+0x46/0x80 [<c12fc19e>] ? sysenter_do_call+0x12/0x26 ---[ end trace 85d231d1072e932a ]--- If this happens, I get a black screen with only a cursor on it. Switching to the console and back restores the screen. I will try how the patch performs with an external monitor on. BTW, there is a second issue related to this laptop: The vertical position of the boot console is sometimes off, and sometimes it is not visible at all. Sometimes it is too high (the first line is above the first line of the monitor) or too low (the first line is somewhere in the middle of the screen). Seems to me that some of the registers should only be written to at the vertical blank? Thanks, however! This is so far definitely an improvement. Will report back with the two-monitor setup. Greetings, Thomas ^ permalink raw reply [flat|nested] 20+ messages in thread
* Re: More questions and patches for 835GM/ns2501 DVO 2013-11-03 19:00 ` Thomas Richter @ 2013-11-03 21:18 ` Daniel Vetter 2013-11-06 10:34 ` Daniel Vetter [not found] ` <8785_1383734019_527A1B02_8785_7652_1_20131106103405.GH14082@phenom.ffwll.local> [not found] ` <19544_1383513468_5276BD7B_19544_3653_1_20131103211814.GC4167@phenom.ffwll.local> 1 sibling, 2 replies; 20+ messages in thread From: Daniel Vetter @ 2013-11-03 21:18 UTC (permalink / raw) To: Thomas Richter; +Cc: intel-gfx On Sun, Nov 3, 2013 at 8:00 PM, Thomas Richter <thor@math.tu-berlin.de> wrote: > On 03.11.2013 18:13, Daniel Vetter wrote: >>> >>> Have you tried my patch to reorder the dvo sequence a bit? That /should/ >>> get all these things right: >>> >>> http://www.spinics.net/lists/intel-gfx/msg34349.html >> >> There's also a follow-up patch for you to test: >> >> >> http://www.spinics.net/lists/intel-gfx/msg34350.html >> >> That would prove that the first patch does indeed work. Note that patch 1 >> in this series is already merged. > > Thanks, I tried. Actually, this worked fairly (but not perfectly) well. I no > longer get a "stuck DVO" as I did before, i.e. the "re-enable" logic is not > triggered anymore. However, I do get (occasionally) a kernel-oops: That's just a warning, not an oops ... > > ------------[ cut here ]------------ > WARNING: CPU: 0 PID: 2311 at drivers/gpu/drm/i915/intel_display.c:1098 > assert_cursor.constprop.68+0xba/0xc0 [i915]() > cursor on pipe A assertion failure (expected off, current on) > Modules linked in: cpufreq_stats binfmt_misc michael_mic arc4 ecb > lib80211_crypt_tkip lib80211_crypt_ccmp fuse nfsd exportfs nfs_acl nfs lockd > fscache sunrpc loop firewire_sbp2 hostap_cs hostap snd_intel8x0 > snd_ac97_codec ac97_bus lib80211 snd_pcm i915 snd_page_alloc snd_seq > snd_seq_device snd_timer psmouse snd pcmcia apanel input_polldev soundcore > yenta_socket pcmcia_rsrc pcmcia_core lpc_ich i2c_i801 mfd_core pcspkr > i2c_algo_bit rng_core serio_raw evdev drm_kms_helper drm fujitsu_laptop > led_class intel_agp intel_gtt agpgart i2c_core video ac button hid_generic > usbhid hid sg sr_mod cdrom firewire_ohci firewire_core crc_itu_t 8139too > 8139cp mii uhci_hcd usbcore usb_common > CPU: 0 PID: 2311 Comm: Xorg Tainted: G W 3.12.0-rc7+ #13 > Hardware name: FUJITSU SIEMENS LIFEBOOK S Series/FJNB159, BIOS Version 1.06 > 07/02/2002 > c12f8c44 c1033def f8ad3990 f6adfab0 00000907 f8ad25d8 0000044a f8a81ffa > f8a81ffa f5ca8000 00000041 00000000 f5ca8000 c1033eb3 00000009 f6adfa98 > f8ad3990 f6adfab0 f8a81ffa f8ad25d8 0000044a f8ad3990 00000041 f8adb9a0 > Call Trace: > [<c12f8c44>] ? dump_stack+0xa/0x13 > [<c1033def>] ? warn_slowpath_common+0x7f/0xb0 > [<f8a81ffa>] ? assert_cursor.constprop.68+0xba/0xc0 [i915] > [<f8a81ffa>] ? assert_cursor.constprop.68+0xba/0xc0 [i915] > [<c1033eb3>] ? warn_slowpath_fmt+0x33/0x40 > [<f8a81ffa>] ? assert_cursor.constprop.68+0xba/0xc0 [i915] > [<f8a83b90>] ? intel_disable_pipe+0x30/0xb0 [i915] > [<f8a8491a>] ? i9xx_crtc_disable+0xca/0x2f0 [i915] > [<f8a8b25e>] ? __intel_set_mode+0x7ae/0x13b0 [i915] > [<f8a8e1f3>] ? intel_set_mode+0x23/0x40 [i915] > [<f8a8e9bc>] ? intel_crtc_set_config+0x7ac/0x9d0 [i915] > [<f802fe33>] ? drm_mode_set_config_internal+0x43/0xb0 [drm] > [<f81386a5>] ? drm_fb_helper_set_par+0x45/0xac [drm_kms_helper] > [<c11a7976>] ? fb_set_var+0x1a6/0x420 > [<c10eec6e>] ? __find_get_block+0x9e/0x160 > [<c11b56e0>] ? fbcon_blank+0x290/0x2d0 > [<c1203848>] ? do_unblank_screen+0x98/0x1b0 > [<c1201acd>] ? notify_update+0x1d/0x30 > [<c11faa12>] ? complete_change_console+0x52/0xe0 > [<c11fbba4>] ? vt_ioctl+0x1104/0x1220 > [<f802a1d0>] ? drm_setmaster_ioctl+0xe0/0xe0 [drm] > [<c11faaa0>] ? complete_change_console+0xe0/0xe0 > [<c11f17da>] ? tty_ioctl+0x21a/0x9a0 > [<c10adb12>] ? do_wp_page.isra.92+0x2a2/0x650 > [<c10af428>] ? handle_mm_fault+0x318/0x610 > [<c11f15c0>] ? no_tty+0x20/0x20 > [<c10d66ac>] ? do_vfs_ioctl+0x7c/0x550 > [<c102d221>] ? __do_page_fault+0x1b1/0x490 > [<c10c7d17>] ? vfs_write+0x137/0x1b0 > [<c10d6bc6>] ? SyS_ioctl+0x46/0x80 > [<c12fc19e>] ? sysenter_do_call+0x12/0x26 > ---[ end trace 85d231d1072e932a ]--- > > If this happens, I get a black screen with only a cursor on it. Switching to > the console and back restores the screen. Hm, that would mean that the cursor is somehow stuck in the enabled state, despite that we've tried to disabled it very hard. Can you please try out the below patch? If this doesn't work please take not of the different WARNINGs you're hitting and whether it's always the same one with the same calltrace or something different. I think for now we should try to get the single monitor case working - I have a few theories for the dual-screen issues, but there's not much point working on them if the simple case doesn't work yet. Also I think I'll merge the two patches if they don't make things worse for you, imo it's the right approach and at least conceptually should be able to avoid all these retry loops. Thanks, Daniel diff --git a/drivers/gpu/drm/i915/intel_display.c b/drivers/gpu/drm/i915/intel_display.c index f34252d134b6..04d2699f51b4 100644 --- a/drivers/gpu/drm/i915/intel_display.c +++ b/drivers/gpu/drm/i915/intel_display.c @@ -7123,7 +7123,9 @@ static void i9xx_update_cursor(struct drm_crtc *crtc, u32 base) intel_crtc->cursor_visible = visible; } /* and commit changes on next vblank */ + POSTING_READ(CURCNTR(pipe)); I915_WRITE(CURBASE(pipe), base); + POSTING_READ(CURBASE(pipe)); } static void ivb_update_cursor(struct drm_crtc *crtc, u32 base) @@ -7152,7 +7154,9 @@ static void ivb_update_cursor(struct drm_crtc *crtc, u32 base) intel_crtc->cursor_visible = visible; } /* and commit changes on next vblank */ + POSTING_READ(CURCNTR_IVB(pipe)); I915_WRITE(CURBASE_IVB(pipe), base); + POSTING_READ(CURBASE_IVB(pipe)); } /* If no-part of the cursor is visible on the framebuffer, then the GPU may hang... */ -- Daniel Vetter Software Engineer, Intel Corporation +41 (0) 79 365 57 48 - http://blog.ffwll.ch ^ permalink raw reply related [flat|nested] 20+ messages in thread
* Re: More questions and patches for 835GM/ns2501 DVO 2013-11-03 21:18 ` Daniel Vetter @ 2013-11-06 10:34 ` Daniel Vetter 2013-11-15 17:33 ` Daniel Vetter [not found] ` <10422_1384536748_52865AAC_10422_4782_1_20131115173300.GZ22741@phenom.ffwll.local> [not found] ` <8785_1383734019_527A1B02_8785_7652_1_20131106103405.GH14082@phenom.ffwll.local> 1 sibling, 2 replies; 20+ messages in thread From: Daniel Vetter @ 2013-11-06 10:34 UTC (permalink / raw) To: Thomas Richter; +Cc: intel-gfx On Sun, Nov 03, 2013 at 10:18:14PM +0100, Daniel Vetter wrote: > > On Sun, Nov 3, 2013 at 8:00 PM, Thomas Richter <thor@math.tu-berlin.de> wrote: > > On 03.11.2013 18:13, Daniel Vetter wrote: > >>> > >>> Have you tried my patch to reorder the dvo sequence a bit? That /should/ > >>> get all these things right: > >>> > >>> http://www.spinics.net/lists/intel-gfx/msg34349.html > >> > >> There's also a follow-up patch for you to test: > >> > >> > >> http://www.spinics.net/lists/intel-gfx/msg34350.html > >> > >> That would prove that the first patch does indeed work. Note that patch 1 > >> in this series is already merged. > > > > Thanks, I tried. Actually, this worked fairly (but not perfectly) well. I no > > longer get a "stuck DVO" as I did before, i.e. the "re-enable" logic is not > > triggered anymore. However, I do get (occasionally) a kernel-oops: > > That's just a warning, not an oops ... > > > > > ------------[ cut here ]------------ > > WARNING: CPU: 0 PID: 2311 at drivers/gpu/drm/i915/intel_display.c:1098 > > assert_cursor.constprop.68+0xba/0xc0 [i915]() > > cursor on pipe A assertion failure (expected off, current on) > > Modules linked in: cpufreq_stats binfmt_misc michael_mic arc4 ecb > > lib80211_crypt_tkip lib80211_crypt_ccmp fuse nfsd exportfs nfs_acl nfs lockd > > fscache sunrpc loop firewire_sbp2 hostap_cs hostap snd_intel8x0 > > snd_ac97_codec ac97_bus lib80211 snd_pcm i915 snd_page_alloc snd_seq > > snd_seq_device snd_timer psmouse snd pcmcia apanel input_polldev soundcore > > yenta_socket pcmcia_rsrc pcmcia_core lpc_ich i2c_i801 mfd_core pcspkr > > i2c_algo_bit rng_core serio_raw evdev drm_kms_helper drm fujitsu_laptop > > led_class intel_agp intel_gtt agpgart i2c_core video ac button hid_generic > > usbhid hid sg sr_mod cdrom firewire_ohci firewire_core crc_itu_t 8139too > > 8139cp mii uhci_hcd usbcore usb_common > > CPU: 0 PID: 2311 Comm: Xorg Tainted: G W 3.12.0-rc7+ #13 > > Hardware name: FUJITSU SIEMENS LIFEBOOK S Series/FJNB159, BIOS Version 1.06 > > 07/02/2002 > > c12f8c44 c1033def f8ad3990 f6adfab0 00000907 f8ad25d8 0000044a f8a81ffa > > f8a81ffa f5ca8000 00000041 00000000 f5ca8000 c1033eb3 00000009 f6adfa98 > > f8ad3990 f6adfab0 f8a81ffa f8ad25d8 0000044a f8ad3990 00000041 f8adb9a0 > > Call Trace: > > [<c12f8c44>] ? dump_stack+0xa/0x13 > > [<c1033def>] ? warn_slowpath_common+0x7f/0xb0 > > [<f8a81ffa>] ? assert_cursor.constprop.68+0xba/0xc0 [i915] > > [<f8a81ffa>] ? assert_cursor.constprop.68+0xba/0xc0 [i915] > > [<c1033eb3>] ? warn_slowpath_fmt+0x33/0x40 > > [<f8a81ffa>] ? assert_cursor.constprop.68+0xba/0xc0 [i915] > > [<f8a83b90>] ? intel_disable_pipe+0x30/0xb0 [i915] > > [<f8a8491a>] ? i9xx_crtc_disable+0xca/0x2f0 [i915] > > [<f8a8b25e>] ? __intel_set_mode+0x7ae/0x13b0 [i915] > > [<f8a8e1f3>] ? intel_set_mode+0x23/0x40 [i915] > > [<f8a8e9bc>] ? intel_crtc_set_config+0x7ac/0x9d0 [i915] > > [<f802fe33>] ? drm_mode_set_config_internal+0x43/0xb0 [drm] > > [<f81386a5>] ? drm_fb_helper_set_par+0x45/0xac [drm_kms_helper] > > [<c11a7976>] ? fb_set_var+0x1a6/0x420 > > [<c10eec6e>] ? __find_get_block+0x9e/0x160 > > [<c11b56e0>] ? fbcon_blank+0x290/0x2d0 > > [<c1203848>] ? do_unblank_screen+0x98/0x1b0 > > [<c1201acd>] ? notify_update+0x1d/0x30 > > [<c11faa12>] ? complete_change_console+0x52/0xe0 > > [<c11fbba4>] ? vt_ioctl+0x1104/0x1220 > > [<f802a1d0>] ? drm_setmaster_ioctl+0xe0/0xe0 [drm] > > [<c11faaa0>] ? complete_change_console+0xe0/0xe0 > > [<c11f17da>] ? tty_ioctl+0x21a/0x9a0 > > [<c10adb12>] ? do_wp_page.isra.92+0x2a2/0x650 > > [<c10af428>] ? handle_mm_fault+0x318/0x610 > > [<c11f15c0>] ? no_tty+0x20/0x20 > > [<c10d66ac>] ? do_vfs_ioctl+0x7c/0x550 > > [<c102d221>] ? __do_page_fault+0x1b1/0x490 > > [<c10c7d17>] ? vfs_write+0x137/0x1b0 > > [<c10d6bc6>] ? SyS_ioctl+0x46/0x80 > > [<c12fc19e>] ? sysenter_do_call+0x12/0x26 > > ---[ end trace 85d231d1072e932a ]--- > > > > If this happens, I get a black screen with only a cursor on it. Switching to > > the console and back restores the screen. > > Hm, that would mean that the cursor is somehow stuck in the enabled state, > despite that we've tried to disabled it very hard. Can you please try out > the below patch? If this doesn't work please take not of the different > WARNINGs you're hitting and whether it's always the same one with the same > calltrace or something different. > > I think for now we should try to get the single monitor case working - I > have a few theories for the dual-screen issues, but there's not much point > working on them if the simple case doesn't work yet. > > Also I think I'll merge the two patches if they don't make things worse > for you, imo it's the right approach and at least conceptually should be > able to avoid all these retry loops. > > Thanks, Daniel > > diff --git a/drivers/gpu/drm/i915/intel_display.c b/drivers/gpu/drm/i915/intel_display.c > index f34252d134b6..04d2699f51b4 100644 > --- a/drivers/gpu/drm/i915/intel_display.c > +++ b/drivers/gpu/drm/i915/intel_display.c > @@ -7123,7 +7123,9 @@ static void i9xx_update_cursor(struct drm_crtc *crtc, u32 base) > intel_crtc->cursor_visible = visible; > } > /* and commit changes on next vblank */ > + POSTING_READ(CURCNTR(pipe)); > I915_WRITE(CURBASE(pipe), base); > + POSTING_READ(CURBASE(pipe)); > } > > static void ivb_update_cursor(struct drm_crtc *crtc, u32 base) > @@ -7152,7 +7154,9 @@ static void ivb_update_cursor(struct drm_crtc *crtc, u32 base) > intel_crtc->cursor_visible = visible; > } > /* and commit changes on next vblank */ > + POSTING_READ(CURCNTR_IVB(pipe)); > I915_WRITE(CURBASE_IVB(pipe), base); > + POSTING_READ(CURBASE_IVB(pipe)); > } To clarify: Do you need this patch to make the single-pipe mode work reliably? It's a bit unclear in your answer ... Thanks, Daniel -- Daniel Vetter Software Engineer, Intel Corporation +41 (0) 79 365 57 48 - http://blog.ffwll.ch ^ permalink raw reply [flat|nested] 20+ messages in thread
* Re: More questions and patches for 835GM/ns2501 DVO 2013-11-06 10:34 ` Daniel Vetter @ 2013-11-15 17:33 ` Daniel Vetter [not found] ` <10422_1384536748_52865AAC_10422_4782_1_20131115173300.GZ22741@phenom.ffwll.local> 1 sibling, 0 replies; 20+ messages in thread From: Daniel Vetter @ 2013-11-15 17:33 UTC (permalink / raw) To: Thomas Richter; +Cc: intel-gfx On Wed, Nov 06, 2013 at 11:34:05AM +0100, Daniel Vetter wrote: > On Sun, Nov 03, 2013 at 10:18:14PM +0100, Daniel Vetter wrote: > > Hm, that would mean that the cursor is somehow stuck in the enabled state, > > despite that we've tried to disabled it very hard. Can you please try out > > the below patch? If this doesn't work please take not of the different > > WARNINGs you're hitting and whether it's always the same one with the same > > calltrace or something different. > > > > I think for now we should try to get the single monitor case working - I > > have a few theories for the dual-screen issues, but there's not much point > > working on them if the simple case doesn't work yet. > > > > Also I think I'll merge the two patches if they don't make things worse > > for you, imo it's the right approach and at least conceptually should be > > able to avoid all these retry loops. > > > > Thanks, Daniel > > > > diff --git a/drivers/gpu/drm/i915/intel_display.c b/drivers/gpu/drm/i915/intel_display.c > > index f34252d134b6..04d2699f51b4 100644 > > --- a/drivers/gpu/drm/i915/intel_display.c > > +++ b/drivers/gpu/drm/i915/intel_display.c > > @@ -7123,7 +7123,9 @@ static void i9xx_update_cursor(struct drm_crtc *crtc, u32 base) > > intel_crtc->cursor_visible = visible; > > } > > /* and commit changes on next vblank */ > > + POSTING_READ(CURCNTR(pipe)); > > I915_WRITE(CURBASE(pipe), base); > > + POSTING_READ(CURBASE(pipe)); > > } > > > > static void ivb_update_cursor(struct drm_crtc *crtc, u32 base) > > @@ -7152,7 +7154,9 @@ static void ivb_update_cursor(struct drm_crtc *crtc, u32 base) > > intel_crtc->cursor_visible = visible; > > } > > /* and commit changes on next vblank */ > > + POSTING_READ(CURCNTR_IVB(pipe)); > > I915_WRITE(CURBASE_IVB(pipe), base); > > + POSTING_READ(CURBASE_IVB(pipe)); > > } > > To clarify: Do you need this patch to make the single-pipe mode work > reliably? It's a bit unclear in your answer ... To clarify my clarification question: Do you need the above quoted patch to make the cursor work better on your system? This is not about a WARN or the flicker or dual pipe (last time I've asked you kinda went on a tangent). I'm asking again since this patch for the cursor code is currently blocked from merging because I couldn't get a clear "this is needed, yes" from you. Thanks, Daniel -- Daniel Vetter Software Engineer, Intel Corporation +41 (0) 79 365 57 48 - http://blog.ffwll.ch ^ permalink raw reply [flat|nested] 20+ messages in thread
[parent not found: <10422_1384536748_52865AAC_10422_4782_1_20131115173300.GZ22741@phenom.ffwll.local>]
* Re: More questions and patches for 835GM/ns2501 DVO [not found] ` <10422_1384536748_52865AAC_10422_4782_1_20131115173300.GZ22741@phenom.ffwll.local> @ 2013-11-15 18:59 ` Thomas Richter 0 siblings, 0 replies; 20+ messages in thread From: Thomas Richter @ 2013-11-15 18:59 UTC (permalink / raw) To: Daniel Vetter; +Cc: intel-gfx On 15.11.2013 18:33, Daniel Vetter wrote: >> To clarify: Do you need this patch to make the single-pipe mode work >> reliably? It's a bit unclear in your answer ... > > To clarify my clarification question: Do you need the above quoted patch > to make the cursor work better on your system? Well, at least it avoided one kernel warning. Or rather, I haven't seen it since. But otherwise, the cursor works fine. I don't have any problems with the cursor whatsoever, it always appears. > This is not about a WARN or > the flicker or dual pipe (last time I've asked you kinda went on a > tangent). I'm asking again since this patch for the cursor code is > currently blocked from merging because I couldn't get a clear "this is > needed, yes" from you. It's hard to say whether it is needed, unfortunately. The kernel warning is not so easy to provoke, and there is no clear way to reproduce it. All I can say is that I haven't seen it since, and the patch has surely not made anything worse, so I would say go for it and include it. Greetings, Thomas ^ permalink raw reply [flat|nested] 20+ messages in thread
[parent not found: <8785_1383734019_527A1B02_8785_7652_1_20131106103405.GH14082@phenom.ffwll.local>]
* Re: More questions and patches for 835GM/ns2501 DVO [not found] ` <8785_1383734019_527A1B02_8785_7652_1_20131106103405.GH14082@phenom.ffwll.local> @ 2013-11-06 19:27 ` Thomas Richter 0 siblings, 0 replies; 20+ messages in thread From: Thomas Richter @ 2013-11-06 19:27 UTC (permalink / raw) To: Daniel Vetter; +Cc: Intel Graphics Development On 06.11.2013 11:34, Daniel Vetter wrote: >> } > > To clarify: Do you need this patch to make the single-pipe mode work > reliably? It's a bit unclear in your answer ... Well, from what I can tell, I haven't seen the above warning since, but it was neither easily reproducable. "Working reliable" is probably a bit too much. (-; No, the vertical position of the boot console is off, panning flickers, and the two-monitor case is close to non-working. But other than that, it works now regardless of whether the bios is set to internal or shared monitors. So I would guess it works as good as it currently can. (-: The harddisk of the R31 (the other laptop with the same dreadful chipset) died today, so I fished a "new old one" from our pile of junk, and re-installed Linux. It currently compiles the latest git, so please have some patience with a 1.2Ghz Celeron. Will be ready tomorrow, hopefully with more results for the "anti-flicker" patch. Anyhow. This patch is currently *only* tested for the linear framebuffer alignment, and most certainly not "right". I believe its some sort of memory alignment issue, and I need to dig a bit deeper what exactly happens there. Greetings, Thomas ^ permalink raw reply [flat|nested] 20+ messages in thread
[parent not found: <19544_1383513468_5276BD7B_19544_3653_1_20131103211814.GC4167@phenom.ffwll.local>]
* Re: More questions and patches for 835GM/ns2501 DVO [not found] ` <19544_1383513468_5276BD7B_19544_3653_1_20131103211814.GC4167@phenom.ffwll.local> @ 2013-11-03 23:09 ` Thomas Richter 2013-11-04 7:15 ` Daniel Vetter [not found] ` <19544_1383549334_52774996_19544_5502_1_CAKMK7uEPjjCsqYTpyO+Bes1eg5b8fVfGFkzQFtwDPxYNe4KwRw@mail.gmail.com> 2013-11-03 23:56 ` 16bpp and 8bpp uxa output broken Thomas Richter 1 sibling, 2 replies; 20+ messages in thread From: Thomas Richter @ 2013-11-03 23:09 UTC (permalink / raw) To: Daniel Vetter; +Cc: intel-gfx On 03.11.2013 22:18, Daniel Vetter wrote: > > Hm, that would mean that the cursor is somehow stuck in the enabled state, > despite that we've tried to disabled it very hard. Can you please try out > the below patch? If this doesn't work please take not of the different > WARNINGs you're hitting and whether it's always the same one with the same > calltrace or something different. > > I think for now we should try to get the single monitor case working - I > have a few theories for the dual-screen issues, but there's not much point > working on them if the simple case doesn't work yet. > > Also I think I'll merge the two patches if they don't make things worse > for you, imo it's the right approach and at least conceptually should be > able to avoid all these retry loops. Thanks for the patches. Tried quite a bit, and haven't seen the warning yet. Looks like the one-monitor case works quite fine now, except that the boot console is vertically "off", which is just annoying though not problematic. I also tried a lot with the two-monitor case and again went deeply into the DPLL setup logic. The differences I observed before are simply due to the initial resolution (800x600), in the final resolution, the DPLL settings are actually correct. What I get there is: --- Configuration found for regular display 1024x768: Nov 3 23:33:30 tyleet kernel: [ 9.122481] [drm:i9xx_find_best_dpll], clock.m1 = 21 Nov 3 23:33:30 tyleet kernel: [ 9.122483] [drm:i9xx_find_best_dpll], clock.m2 = 13 Nov 3 23:33:30 tyleet kernel: [ 9.122485] [drm:i9xx_find_best_dpll], clock.n = 4 Nov 3 23:33:30 tyleet kernel: [ 9.122488] [drm:i9xx_find_best_dpll], clock.p1 = 4 for 800x600: Nov 3 23:38:41 tyleet kernel: [ 368.725507] [drm:i9xx_find_best_dpll], clock.m1 = 19 Nov 3 23:38:41 tyleet kernel: [ 368.725514] [drm:i9xx_find_best_dpll], clock.m2 = 13 Nov 3 23:38:41 tyleet kernel: [ 368.725521] [drm:i9xx_find_best_dpll], clock.n = 4 Nov 3 23:38:41 tyleet kernel: [ 368.725528] [drm:i9xx_find_best_dpll], clock.p1 = 6 640 x 480: Nov 3 23:40:05 tyleet kernel: [ 452.965855] [drm:i9xx_find_best_dpll], clock.m1 = 20 Nov 3 23:40:05 tyleet kernel: [ 452.965862] [drm:i9xx_find_best_dpll], clock.m2 = 14 Nov 3 23:40:05 tyleet kernel: [ 452.965869] [drm:i9xx_find_best_dpll], clock.n = 3 Nov 3 23:40:05 tyleet kernel: [ 452.965876] [drm:i9xx_find_best_dpll], clock.p1 = 12 And even in the two-monitor case, the DPLL for DPLL_B is setup correctly. Thus, *that* does not seem the cause of the problem. What is different is the DVO setting: bit differences: In the two-monitor case, the internal DVOC register is 0xd000409c, in the one-monitor case it is: 0x90004084 Differences are: DVO bit 30 should be 0 is 1. DVO_PIPE_B_SELECT enabled DVO bit 4 should be 0 is 1. DVO_VSYNC_ACTIVE_HIGH DVO bit 3 should be 0 is 1. DVO_HSYNC_ACTIVE_HIGH Now, the bit 30 is clear, though I wonder why the sync signal is inverted. Anyhow, something else makes we wonder. The DVO-reactivation code *does* work (the DVO-settings do not block, though the DVO blocks afterwards), and the code is just: I915_WRITE(_DPLL_A, 0xd0820000); I915_WRITE(_DPLL_B, 0xd0820000); Thus, while the DPLL_B register is just overwritten by the same value, though DPLL_A changes. The fact that this actually unlocks the DVO means to me that actually bit 30 of the DVOC register *does not* work to re-assign the DVO to pipe B. The way how the system behaves is rather consistent with the hypothesis that the DVO is still assigned to pipe A???? Is there any other bit or setting that controls which DVO goes to which pipe? It looks like the pipe output control does not work correctly. Greetings, Thomas ^ permalink raw reply [flat|nested] 20+ messages in thread
* Re: More questions and patches for 835GM/ns2501 DVO 2013-11-03 23:09 ` Thomas Richter @ 2013-11-04 7:15 ` Daniel Vetter [not found] ` <19544_1383549334_52774996_19544_5502_1_CAKMK7uEPjjCsqYTpyO+Bes1eg5b8fVfGFkzQFtwDPxYNe4KwRw@mail.gmail.com> 1 sibling, 0 replies; 20+ messages in thread From: Daniel Vetter @ 2013-11-04 7:15 UTC (permalink / raw) To: Thomas Richter; +Cc: intel-gfx On Mon, Nov 4, 2013 at 12:09 AM, Thomas Richter <thor@math.tu-berlin.de> wrote: > On 03.11.2013 22:18, Daniel Vetter wrote: >> >> >> Hm, that would mean that the cursor is somehow stuck in the enabled state, >> despite that we've tried to disabled it very hard. Can you please try out >> the below patch? If this doesn't work please take not of the different >> WARNINGs you're hitting and whether it's always the same one with the same >> calltrace or something different. >> >> I think for now we should try to get the single monitor case working - I >> have a few theories for the dual-screen issues, but there's not much point >> working on them if the simple case doesn't work yet. >> >> Also I think I'll merge the two patches if they don't make things worse >> for you, imo it's the right approach and at least conceptually should be >> able to avoid all these retry loops. > > Thanks for the patches. Tried quite a bit, and haven't seen the warning yet. > Looks like the one-monitor > case works quite fine now, except that the boot console is vertically "off", > which is just annoying though > not problematic. Awesome. I'll try to merge these patches with cc: stable. > I also tried a lot with the two-monitor case and again went deeply into the > DPLL setup logic. > The differences I observed before are simply due to the initial resolution > (800x600), in the final > resolution, the DPLL settings are actually correct. What I get there is: I suspect that due to the pipe A quirk logic we actually get the setup sequence for the DPLLs completely wrong. This will require a bit more magic to make it work correctly ... But I have some ideas. -Daniel -- Daniel Vetter Software Engineer, Intel Corporation +41 (0) 79 365 57 48 - http://blog.ffwll.ch ^ permalink raw reply [flat|nested] 20+ messages in thread
[parent not found: <19544_1383549334_52774996_19544_5502_1_CAKMK7uEPjjCsqYTpyO+Bes1eg5b8fVfGFkzQFtwDPxYNe4KwRw@mail.gmail.com>]
* Re: More questions and patches for 835GM/ns2501 DVO [not found] ` <19544_1383549334_52774996_19544_5502_1_CAKMK7uEPjjCsqYTpyO+Bes1eg5b8fVfGFkzQFtwDPxYNe4KwRw@mail.gmail.com> @ 2013-11-04 11:57 ` Thomas Richter 2013-11-04 15:15 ` Daniel Vetter [not found] ` <19544_1383578084_5277B9E4_19544_9350_1_20131104151509.GF4167@phenom.ffwll.local> 0 siblings, 2 replies; 20+ messages in thread From: Thomas Richter @ 2013-11-04 11:57 UTC (permalink / raw) To: Daniel Vetter; +Cc: intel-gfx Hi Daniel, >> I also tried a lot with the two-monitor case and again went deeply into the >> DPLL setup logic. >> The differences I observed before are simply due to the initial resolution >> (800x600), in the final >> resolution, the DPLL settings are actually correct. What I get there is: > I suspect that due to the pipe A quirk logic we actually get the setup > sequence for the DPLLs completely wrong. This will require a bit more > magic to make it work correctly ... But I have some ideas. > -Daniel Well, maybe. The register contents that are listed in my mail are read out from the hardware exactly when the DVO gets stuck, actually right before it. From what I can see from there is that the PLL setup and DVO setup look actually ok (from what I can tell). What is also remarkable is that the DVO-reenable logic does succeed by writing the same value to the DPLL_A and DPLL_B registers, which is the proper value for a 1024x768 screen. However, the DPLL_B register value is correct, whereas the DPLL_A register contains values that are likely useful for the VGA output. Now, here is the miracle: The DVOC register indicates that the DVO gets its input from pipe B. However, writing the correct value into DPLL_A (!) (remember, DPLL_B is already set correctly) revives the DVO. Thus, I wonder how this can be. The only explanation I have is that the DVO is still fed by pipe A, and not by pipe B. Maybe there is something else that needs to be done to switch the DVO to pipe B. Anyhow, happy to take your ideas. Unfortunately, I will again not have this specific laptop available for some while. I do have an R31 for testing, though its display is connected via LVDS and not via a DVO. The chipset seems to be similar otherwise, though. Greetings, Thomas ^ permalink raw reply [flat|nested] 20+ messages in thread
* Re: More questions and patches for 835GM/ns2501 DVO 2013-11-04 11:57 ` Thomas Richter @ 2013-11-04 15:15 ` Daniel Vetter 2013-11-04 15:48 ` Ville Syrjälä [not found] ` <19544_1383578084_5277B9E4_19544_9350_1_20131104151509.GF4167@phenom.ffwll.local> 1 sibling, 1 reply; 20+ messages in thread From: Daniel Vetter @ 2013-11-04 15:15 UTC (permalink / raw) To: Thomas Richter; +Cc: intel-gfx On Mon, Nov 04, 2013 at 12:57:20PM +0100, Thomas Richter wrote: > Hi Daniel, > >>I also tried a lot with the two-monitor case and again went deeply into the > >>DPLL setup logic. > >>The differences I observed before are simply due to the initial resolution > >>(800x600), in the final > >>resolution, the DPLL settings are actually correct. What I get there is: > >I suspect that due to the pipe A quirk logic we actually get the setup > >sequence for the DPLLs completely wrong. This will require a bit more > >magic to make it work correctly ... But I have some ideas. > >-Daniel > Well, maybe. The register contents that are listed in my mail are > read out from the hardware exactly when the > DVO gets stuck, actually right before it. From what I can see from > there is that the PLL setup and DVO setup > look actually ok (from what I can tell). What is also remarkable is > that the DVO-reenable logic does succeed by > writing the same value to the DPLL_A and DPLL_B registers, which is > the proper value for a 1024x768 screen. However, > the DPLL_B register value is correct, whereas the DPLL_A register > contains values that are likely useful for the VGA > output. > > Now, here is the miracle: The DVOC register indicates that the DVO > gets its input from pipe B. However, writing the > correct value into DPLL_A (!) (remember, DPLL_B is already set > correctly) revives the DVO. > > Thus, I wonder how this can be. The only explanation I have is that > the DVO is still fed by pipe A, and not by pipe B. > Maybe there is something else that needs to be done to switch the > DVO to pipe B. That's actually my suspicion. Most of these registers here are double-buffered and only take effect if preconditions are right. Due to our pipe A quirk we never shut down pipe A, so the pll updates might not actually take effect at all (but the registers have the new values already). There's unfortunately no registers to get at the actual hw state, and only later hw generations have added at least a few bits to indicate whether the large transitions (on/off) have actually happened. The problem is that I don't yet have a clear idea how to do the pipe A quirk correctly :( -Daniel -- Daniel Vetter Software Engineer, Intel Corporation +41 (0) 79 365 57 48 - http://blog.ffwll.ch ^ permalink raw reply [flat|nested] 20+ messages in thread
* Re: More questions and patches for 835GM/ns2501 DVO 2013-11-04 15:15 ` Daniel Vetter @ 2013-11-04 15:48 ` Ville Syrjälä 2013-11-04 16:05 ` Ville Syrjälä 0 siblings, 1 reply; 20+ messages in thread From: Ville Syrjälä @ 2013-11-04 15:48 UTC (permalink / raw) To: Daniel Vetter; +Cc: intel-gfx On Mon, Nov 04, 2013 at 04:15:09PM +0100, Daniel Vetter wrote: > On Mon, Nov 04, 2013 at 12:57:20PM +0100, Thomas Richter wrote: > > Hi Daniel, > > >>I also tried a lot with the two-monitor case and again went deeply into the > > >>DPLL setup logic. > > >>The differences I observed before are simply due to the initial resolution > > >>(800x600), in the final > > >>resolution, the DPLL settings are actually correct. What I get there is: > > >I suspect that due to the pipe A quirk logic we actually get the setup > > >sequence for the DPLLs completely wrong. This will require a bit more > > >magic to make it work correctly ... But I have some ideas. > > >-Daniel > > Well, maybe. The register contents that are listed in my mail are > > read out from the hardware exactly when the > > DVO gets stuck, actually right before it. From what I can see from > > there is that the PLL setup and DVO setup > > look actually ok (from what I can tell). What is also remarkable is > > that the DVO-reenable logic does succeed by > > writing the same value to the DPLL_A and DPLL_B registers, which is > > the proper value for a 1024x768 screen. However, > > the DPLL_B register value is correct, whereas the DPLL_A register > > contains values that are likely useful for the VGA > > output. > > > > Now, here is the miracle: The DVOC register indicates that the DVO > > gets its input from pipe B. However, writing the > > correct value into DPLL_A (!) (remember, DPLL_B is already set > > correctly) revives the DVO. > > > > Thus, I wonder how this can be. The only explanation I have is that > > the DVO is still fed by pipe A, and not by pipe B. > > Maybe there is something else that needs to be done to switch the > > DVO to pipe B. > > That's actually my suspicion. Most of these registers here are > double-buffered and only take effect if preconditions are right. Due to > our pipe A quirk we never shut down pipe A, so the pll updates might not > actually take effect at all (but the registers have the new values > already). There's unfortunately no registers to get at the actual hw > state, and only later hw generations have added at least a few bits to > indicate whether the large transitions (on/off) have actually happened. > > The problem is that I don't yet have a clear idea how to do the pipe A > quirk correctly :( Could it be that we should only have the 2x DVO clock enable bit set in the correct DPLL register? diff --git a/drivers/gpu/drm/i915/intel_display.c b/drivers/gpu/drm/i915/intel_display.c index 8f40ae3..4b02890 100644 --- a/drivers/gpu/drm/i915/intel_display.c +++ b/drivers/gpu/drm/i915/intel_display.c @@ -1470,8 +1470,11 @@ static void i9xx_enable_pll(struct intel_crtc *crtc) static void i9xx_disable_pll(struct drm_i915_private *dev_priv, enum pipe pipe) { /* Don't disable pipe A or pipe A PLLs if needed */ - if (pipe == PIPE_A && (dev_priv->quirks & QUIRK_PIPEA_FORCE)) + if (pipe == PIPE_A && (dev_priv->quirks & QUIRK_PIPEA_FORCE)) { + /* disable 2x DVO clock output */ + I915_WRITE(DPLL(pipe), I915_READ(DPLL(pipe) & ~DPLL_2X_MODE)); return; + } /* Make sure the pipe isn't still relying on us */ assert_pipe_disabled(dev_priv, pipe); > -Daniel > -- > Daniel Vetter > Software Engineer, Intel Corporation > +41 (0) 79 365 57 48 - http://blog.ffwll.ch > _______________________________________________ > Intel-gfx mailing list > Intel-gfx@lists.freedesktop.org > http://lists.freedesktop.org/mailman/listinfo/intel-gfx -- Ville Syrjälä Intel OTC ^ permalink raw reply related [flat|nested] 20+ messages in thread
* Re: More questions and patches for 835GM/ns2501 DVO 2013-11-04 15:48 ` Ville Syrjälä @ 2013-11-04 16:05 ` Ville Syrjälä 0 siblings, 0 replies; 20+ messages in thread From: Ville Syrjälä @ 2013-11-04 16:05 UTC (permalink / raw) To: Daniel Vetter; +Cc: intel-gfx On Mon, Nov 04, 2013 at 05:48:16PM +0200, Ville Syrjälä wrote: > On Mon, Nov 04, 2013 at 04:15:09PM +0100, Daniel Vetter wrote: > > On Mon, Nov 04, 2013 at 12:57:20PM +0100, Thomas Richter wrote: > > > Hi Daniel, > > > >>I also tried a lot with the two-monitor case and again went deeply into the > > > >>DPLL setup logic. > > > >>The differences I observed before are simply due to the initial resolution > > > >>(800x600), in the final > > > >>resolution, the DPLL settings are actually correct. What I get there is: > > > >I suspect that due to the pipe A quirk logic we actually get the setup > > > >sequence for the DPLLs completely wrong. This will require a bit more > > > >magic to make it work correctly ... But I have some ideas. > > > >-Daniel > > > Well, maybe. The register contents that are listed in my mail are > > > read out from the hardware exactly when the > > > DVO gets stuck, actually right before it. From what I can see from > > > there is that the PLL setup and DVO setup > > > look actually ok (from what I can tell). What is also remarkable is > > > that the DVO-reenable logic does succeed by > > > writing the same value to the DPLL_A and DPLL_B registers, which is > > > the proper value for a 1024x768 screen. However, > > > the DPLL_B register value is correct, whereas the DPLL_A register > > > contains values that are likely useful for the VGA > > > output. > > > > > > Now, here is the miracle: The DVOC register indicates that the DVO > > > gets its input from pipe B. However, writing the > > > correct value into DPLL_A (!) (remember, DPLL_B is already set > > > correctly) revives the DVO. > > > > > > Thus, I wonder how this can be. The only explanation I have is that > > > the DVO is still fed by pipe A, and not by pipe B. > > > Maybe there is something else that needs to be done to switch the > > > DVO to pipe B. > > > > That's actually my suspicion. Most of these registers here are > > double-buffered and only take effect if preconditions are right. Due to > > our pipe A quirk we never shut down pipe A, so the pll updates might not > > actually take effect at all (but the registers have the new values > > already). There's unfortunately no registers to get at the actual hw > > state, and only later hw generations have added at least a few bits to > > indicate whether the large transitions (on/off) have actually happened. > > > > The problem is that I don't yet have a clear idea how to do the pipe A > > quirk correctly :( > > Could it be that we should only have the 2x DVO clock enable bit set > in the correct DPLL register? > > diff --git a/drivers/gpu/drm/i915/intel_display.c b/drivers/gpu/drm/i915/intel_display.c > index 8f40ae3..4b02890 100644 > --- a/drivers/gpu/drm/i915/intel_display.c > +++ b/drivers/gpu/drm/i915/intel_display.c > @@ -1470,8 +1470,11 @@ static void i9xx_enable_pll(struct intel_crtc *crtc) > static void i9xx_disable_pll(struct drm_i915_private *dev_priv, enum pipe pipe) > { > /* Don't disable pipe A or pipe A PLLs if needed */ > - if (pipe == PIPE_A && (dev_priv->quirks & QUIRK_PIPEA_FORCE)) > + if (pipe == PIPE_A && (dev_priv->quirks & QUIRK_PIPEA_FORCE)) { > + /* disable 2x DVO clock output */ > + I915_WRITE(DPLL(pipe), I915_READ(DPLL(pipe) & ~DPLL_2X_MODE)); And that should be ~DPLL_DVO_2X_MODE obviously. > return; > + } > > /* Make sure the pipe isn't still relying on us */ > assert_pipe_disabled(dev_priv, pipe); > > > > -Daniel > > -- > > Daniel Vetter > > Software Engineer, Intel Corporation > > +41 (0) 79 365 57 48 - http://blog.ffwll.ch > > _______________________________________________ > > Intel-gfx mailing list > > Intel-gfx@lists.freedesktop.org > > http://lists.freedesktop.org/mailman/listinfo/intel-gfx > > -- > Ville Syrjälä > Intel OTC > _______________________________________________ > Intel-gfx mailing list > Intel-gfx@lists.freedesktop.org > http://lists.freedesktop.org/mailman/listinfo/intel-gfx -- Ville Syrjälä Intel OTC ^ permalink raw reply [flat|nested] 20+ messages in thread
[parent not found: <19544_1383578084_5277B9E4_19544_9350_1_20131104151509.GF4167@phenom.ffwll.local>]
* Patches for i830 flicker on panning [not found] ` <19544_1383578084_5277B9E4_19544_9350_1_20131104151509.GF4167@phenom.ffwll.local> @ 2013-11-04 23:20 ` Thomas Richter 2013-11-05 7:07 ` Daniel Vetter 0 siblings, 1 reply; 20+ messages in thread From: Thomas Richter @ 2013-11-04 23:20 UTC (permalink / raw) To: Daniel Vetter; +Cc: intel-gfx Hi Daniel, dear intel experts, the following is a "solution" for the flicker on i830 panning. To remind you, when panning is enabled on an i830, the display shows an annoying 30Hz flicker on some "forbidden" positions. On such positions, half of the frames is black, and the other half shows a screen that is "ripped in half", with one half scrolled to the wrong position, and the other half displayed correctly, with a discontinuity in the middle. That is, every other frame is black, and the ones that are not black are "wrong". The patch is, arguably, ugly as hell, and creates a certain "yerkiness", though it does its job. One of the side effects this flicker causes is complete crashes and lockups with video overlays which are avoided by the patch. That is, if you play a video with xine, and then pan over a forbidden position, the machine crashes and comes to a complete stop. Sorry if the patch format isn't quite right, and the patch is not quite in a final state (not yet fully tested on all possible combinations of panning dimensions and display depths), but it's a start and "works good enough for me". For that, patch: i9xx_update_plane(...) in intel_display.c, if (INTEL_INFO(dev)->gen >= 4) { I915_MODIFY_DISPBASE(DSPSURF(plane), i915_gem_obj_ggtt_offset(obj) + intel_crtc->dspaddr_offset); I915_WRITE(DSPTILEOFF(plane), (y << 16) | x); I915_WRITE(DSPLINOFF(plane), linear_offset); + } else if (INTEL_INFO(dev)->gen == 2) { + int xflick = (x >> 4) & 0x03; + if (xflick == 3) { /* in forbidden column, probably a i830 bug */ + int xfix = 16 + (x & ~(0x3f)); + int fix_offset = y * fb->pitches[0] + xfix * (fb->bits_per_pixel / 8); + I915_WRITE(DSPADDR(plane), i915_gem_obj_ggtt_offset(obj) + fix_offset); + POSTING_READ(reg); + intel_wait_for_vblank(dev, intel_crtc->pipe); + } + I915_WRITE(DSPADDR(plane), i915_gem_obj_ggtt_offset(obj) + linear_offset); } else I915_WRITE(DSPADDR(plane), i915_gem_obj_ggtt_offset(obj) + linear_offset); POSTING_READ(reg); The trick is, as you see, first to display the one frame the display scrolled off *before* the forbidden column, and then scroll to the right position, going to the right. )-: *Why* that works is unclear to me. Don't ask, just observation. An improvement would be to check whether the x position did change, and if it did not, just avoid all the hack to allow smooth vertical scrolling. Still to be done. Maybe later the week if the above also works on the R31 (affected by the same problem). Greetings, Thomas ^ permalink raw reply [flat|nested] 20+ messages in thread
* Re: Patches for i830 flicker on panning 2013-11-04 23:20 ` Patches for i830 flicker on panning Thomas Richter @ 2013-11-05 7:07 ` Daniel Vetter 0 siblings, 0 replies; 20+ messages in thread From: Daniel Vetter @ 2013-11-05 7:07 UTC (permalink / raw) To: Thomas Richter; +Cc: intel-gfx On Tue, Nov 05, 2013 at 12:20:58AM +0100, Thomas Richter wrote: > Hi Daniel, dear intel experts, > > the following is a "solution" for the flicker on i830 panning. To > remind you, when panning is enabled on an i830, > the display shows an annoying 30Hz flicker on some "forbidden" > positions. On such positions, half of the frames > is black, and the other half shows a screen that is "ripped in > half", with one half scrolled to the wrong > position, and the other half displayed correctly, with a > discontinuity in the middle. > That is, every other frame is black, and the ones that are not black > are "wrong". > > The patch is, arguably, ugly as hell, and creates a certain > "yerkiness", though it does its job. One of the side > effects this flicker causes is complete crashes and lockups with > video overlays which are avoided by the patch. > That is, if you play a video with xine, and then pan over a > forbidden position, the machine crashes and comes > to a complete stop. > > Sorry if the patch format isn't quite right, and the patch is not > quite in a final state (not yet fully tested on all possible > combinations of panning dimensions and display depths), but it's a > start and "works good enough for me". Patch is pretty badly whitespace mangled please format it according to Documentation/SubmittingPatches (git format-patch preferred). Also I think we should conditionalize this on i830M only, I don't see any other reports. One thing to try out still: Does this still work if you tell the ddx to use a linear frontbuffer? -Daniel > > For that, patch: i9xx_update_plane(...) in intel_display.c, > > if (INTEL_INFO(dev)->gen >= 4) { > I915_MODIFY_DISPBASE(DSPSURF(plane), > i915_gem_obj_ggtt_offset(obj) + > intel_crtc->dspaddr_offset); > I915_WRITE(DSPTILEOFF(plane), (y << 16) | x); > I915_WRITE(DSPLINOFF(plane), linear_offset); > + } else if (INTEL_INFO(dev)->gen == 2) { > + int xflick = (x >> 4) & 0x03; > + if (xflick == 3) { /* in forbidden column, probably a > i830 bug */ > + int xfix = 16 + (x & ~(0x3f)); > + int fix_offset = y * fb->pitches[0] + xfix * > (fb->bits_per_pixel / 8); > + I915_WRITE(DSPADDR(plane), i915_gem_obj_ggtt_offset(obj) + > fix_offset); > + POSTING_READ(reg); > + intel_wait_for_vblank(dev, intel_crtc->pipe); > + } > + I915_WRITE(DSPADDR(plane), i915_gem_obj_ggtt_offset(obj) + > linear_offset); > } else > I915_WRITE(DSPADDR(plane), i915_gem_obj_ggtt_offset(obj) + > linear_offset); > POSTING_READ(reg); > > The trick is, as you see, first to display the one frame the display > scrolled off *before* the forbidden column, and > then scroll to the right position, going to the right. )-: > > *Why* that works is unclear to me. Don't ask, just observation. > > An improvement would be to check whether the x position did change, > and if it did not, just avoid all the hack to > allow smooth vertical scrolling. Still to be done. Maybe later the > week if the above also works on the R31 > (affected by the same problem). > > Greetings, > Thomas > -- Daniel Vetter Software Engineer, Intel Corporation +41 (0) 79 365 57 48 - http://blog.ffwll.ch ^ permalink raw reply [flat|nested] 20+ messages in thread
* 16bpp and 8bpp uxa output broken... [not found] ` <19544_1383513468_5276BD7B_19544_3653_1_20131103211814.GC4167@phenom.ffwll.local> 2013-11-03 23:09 ` Thomas Richter @ 2013-11-03 23:56 ` Thomas Richter 2013-11-04 7:20 ` Daniel Vetter 1 sibling, 1 reply; 20+ messages in thread From: Thomas Richter @ 2013-11-03 23:56 UTC (permalink / raw) To: Daniel Vetter; +Cc: intel-gfx Hi Daniel, dear intel experts, just another note: I just switched the default depth from 24 to 16 bit by adding a "DefaultDepth" into the screen section of X11. Strangely enough, that gives much *less* banding than the 24bpp output???? Anyhow, 16bpp breaks the gdm login, and 8bpp breaks almost everything. Strangely, if I switch from uxa to sna, gdm is fine and the graphics is much smoother (less banding) than with 24bpp output. Greetings, Thomas P.S.: Strangely enough, with the 24bpp output, I can clearly count 64 distinct grey levels corresponding to the 6bpp panel (I assume), with 16bpp output, I get a somewhat more irregular banding (probably because green has one bit more), though the desktop background is very smooth. The same image, when viewed by eog, shows banding. Thus, I suppose, that the desktop renderer applies some kind of dithering while eog does not. Wierd. ^ permalink raw reply [flat|nested] 20+ messages in thread
* Re: 16bpp and 8bpp uxa output broken... 2013-11-03 23:56 ` 16bpp and 8bpp uxa output broken Thomas Richter @ 2013-11-04 7:20 ` Daniel Vetter 0 siblings, 0 replies; 20+ messages in thread From: Daniel Vetter @ 2013-11-04 7:20 UTC (permalink / raw) To: Thomas Richter; +Cc: intel-gfx On Mon, Nov 4, 2013 at 12:56 AM, Thomas Richter <thor@math.tu-berlin.de> wrote: > > just another note: I just switched the default depth from 24 to 16 bit by > adding a "DefaultDepth" into > the screen section of X11. Strangely enough, that gives much *less* banding > than the 24bpp output???? That just means we dither down in sw/hw to 16 bit, instead of rendering at 24 and then doing no dithering at all. > Anyhow, 16bpp breaks the gdm login, and 8bpp breaks almost everything. > Strangely, if I switch from uxa > to sna, gdm is fine and the graphics is much smoother (less banding) than > with 24bpp output. Iirc SNA enables all the neat hw dithering options. It also works correctly at 16 bit, although you'll run into trouble with qt/kde stuff and with opengl apps. -Daniel -- Daniel Vetter Software Engineer, Intel Corporation +41 (0) 79 365 57 48 - http://blog.ffwll.ch ^ permalink raw reply [flat|nested] 20+ messages in thread
* Re: More questions and patches for 835GM/ns2501 DVO [not found] ` <19544_1383498802_52768431_19544_2610_1_20131103171348.GB4167@phenom.ffwll.local> 2013-11-03 19:00 ` Thomas Richter @ 2013-11-03 19:39 ` Thomas Richter 1 sibling, 0 replies; 20+ messages in thread From: Thomas Richter @ 2013-11-03 19:39 UTC (permalink / raw) To: Daniel Vetter; +Cc: Daniel Vetter, intel-gfx On 03.11.2013 18:13, Daniel Vetter wrote: >> >> Have you tried my patch to reorder the dvo sequence a bit? That /should/ >> get all these things right: >> >> http://www.spinics.net/lists/intel-gfx/msg34349.html > There's also a follow-up patch for you to test: > > http://www.spinics.net/lists/intel-gfx/msg34350.html > > That would prove that the first patch does indeed work. Note that patch 1 > in this series is already merged. Sorry, but using an external monitor is still not working correctly. When booting with an external monitor connected, I either get no image at all (bios = internal) or flickering on the external monitor and nothing internally (bios = shared). When connecting the external monitor after X has started, I can get a working image on the monitor, but not on the internal panel. The DVO locks up again. If I configure the internal panel, then reconfigure the VGA, I get a stable image. If I try to change the internal panel dimensions then, I get a flickering external screen. The DVO is locked up in either case. I get the following when switching internally from 800x600 to 1024x768 (just as an example): /* snip */ Nov 3 20:12:20 tyleet kernel: [ 1399.497881] [drm:drm_mode_setcrtc], [CRTC:4] Nov 3 20:12:20 tyleet kernel: [ 1399.497890] [drm:drm_framebuffer_reference], FB ID: 39 Nov 3 20:12:20 tyleet kernel: [ 1399.497907] [drm:drm_mode_setcrtc], [CONNECTOR:8:DVI-I-1] Nov 3 20:12:20 tyleet kernel: [ 1399.497916] [drm:intel_crtc_set_config], [CRTC:4] [FB:39] #connectors=1 (x y) (0 0) Nov 3 20:12:20 tyleet kernel: [ 1399.497928] [drm:intel_set_config_compute_mode_changes], modes are different, full mode set Nov 3 20:12:20 tyleet kernel: [ 1399.497935] [drm:drm_mode_debug_printmodeline], Modeline 16:"" 0 40000 800 840 968 1056 600 601 605 628 0x0 0x5 Nov 3 20:12:20 tyleet kernel: [ 1399.497948] [drm:drm_mode_debug_printmodeline], Modeline 16:"" 0 65000 1024 1048 1184 1344 768 771 777 806 0x0 0xa Nov 3 20:12:20 tyleet kernel: [ 1399.497960] [drm:intel_set_config_compute_mode_changes], computed changes for [CRTC:4], mode_changed=1, fb_changed=0 Nov 3 20:12:20 tyleet kernel: [ 1399.497970] [drm:intel_modeset_stage_output_state], [CONNECTOR:5:VGA-1] to [CRTC:3] Nov 3 20:12:20 tyleet kernel: [ 1399.497978] [drm:intel_modeset_stage_output_state], [CONNECTOR:8:DVI-I-1] to [CRTC:4] Nov 3 20:12:20 tyleet kernel: [ 1399.497991] [drm:intel_modeset_affected_pipes], set mode pipe masks: modeset: 2, prepare: 2, disable: 0 Nov 3 20:12:20 tyleet kernel: [ 1399.498008] [drm:connected_sink_compute_bpp], [CONNECTOR:8:DVI-I-1] checking for sink bpp constrains Nov 3 20:12:20 tyleet kernel: [ 1399.498020] [drm:intel_modeset_pipe_config], plane bpp: 24, pipe bpp: 24, dithering: 0 Nov 3 20:12:20 tyleet kernel: [ 1399.498028] [drm:intel_dump_pipe_config], [CRTC:4][modeset] config for pipe B Nov 3 20:12:20 tyleet kernel: [ 1399.498036] [drm:intel_dump_pipe_config], cpu_transcoder: B Nov 3 20:12:20 tyleet kernel: [ 1399.498042] [drm:intel_dump_pipe_config], pipe bpp: 24, dithering: 0 Nov 3 20:12:20 tyleet kernel: [ 1399.498049] [drm:intel_dump_pipe_config], fdi/pch: 0, lanes: 0, gmch_m: 0, gmch_n: 0, link_m: 0, link_n: 0, tu: 0 Nov 3 20:12:20 tyleet kernel: [ 1399.498058] [drm:intel_dump_pipe_config], dp: 0, gmch_m: 0, gmch_n: 0, link_m: 0, link_n: 0, tu: 0 Nov 3 20:12:20 tyleet kernel: [ 1399.498066] [drm:intel_dump_pipe_config], requested mode: Nov 3 20:12:20 tyleet kernel: [ 1399.498072] [drm:drm_mode_debug_printmodeline], Modeline 0:"" 0 65000 1024 1048 1184 1344 768 771 777 806 0x0 0xa Nov 3 20:12:20 tyleet kernel: [ 1399.498084] [drm:intel_dump_pipe_config], adjusted mode: Nov 3 20:12:20 tyleet kernel: [ 1399.498090] [drm:drm_mode_debug_printmodeline], Modeline 0:"" 0 65000 1024 1048 1184 1344 768 771 777 806 0x0 0xa Nov 3 20:12:20 tyleet kernel: [ 1399.498102] [drm:intel_dump_crtc_timings], crtc timings: 65000 1024 1048 1184 1344 768 771 777 806, type: 0x0 flags: 0xa Nov 3 20:12:20 tyleet kernel: [ 1399.498112] [drm:intel_dump_pipe_config], port clock: 65000 Nov 3 20:12:20 tyleet kernel: [ 1399.498118] [drm:intel_dump_pipe_config], pipe src size: 1024x768 Nov 3 20:12:20 tyleet kernel: [ 1399.498125] [drm:intel_dump_pipe_config], gmch pfit: control: 0x00000000, ratios: 0x00000000, lvds border: 0x00000000 Nov 3 20:12:20 tyleet kernel: [ 1399.498132] [drm:intel_dump_pipe_config], pch pfit: pos: 0x00000000, size: 0x00000000, disabled Nov 3 20:12:20 tyleet kernel: [ 1399.498140] [drm:intel_dump_pipe_config], ips: 0 Nov 3 20:12:20 tyleet kernel: [ 1399.498145] [drm:intel_dump_pipe_config], double wide: 0 Nov 3 20:12:20 tyleet kernel: [ 1399.498158] [drm:ns2501_dpms], ns2501_dpms: Trying set the dpms of the DVO to 0 Nov 3 20:12:20 tyleet kernel: [ 1399.498438] [drm:ns2501_writeb], Unable to write register 0x08 to i915 gmbus dpb:56 Nov 3 20:12:20 tyleet kernel: [ 1399.498703] [drm:ns2501_writeb], Unable to write register 0x34 to i915 gmbus dpb:56 Nov 3 20:12:20 tyleet kernel: [ 1399.498968] [drm:ns2501_writeb], Unable to write register 0x35 to i915 gmbus dpb:56 Nov 3 20:12:20 tyleet kernel: [ 1399.498976] [drm:enable_dvo], enable_dvo: Trying to re-enable the DVO Nov 3 20:12:20 tyleet kernel: [ 1399.498985] [drm:enable_dvo], DVOA ctrl 0x00000000 Nov 3 20:12:20 tyleet kernel: [ 1399.498991] [drm:enable_dvo], DVOB ctrl 0x80004084 Nov 3 20:12:20 tyleet kernel: [ 1399.499006] [drm:enable_dvo], DVOC ctrl 0xd000409c Nov 3 20:12:20 tyleet kernel: [ 1399.499013] [drm:enable_dvo], PLL A ctrl 0x90a00000 Nov 3 20:12:20 tyleet kernel: [ 1399.499021] [drm:enable_dvo], PLL B ctrl 0xd0840000 Nov 3 20:12:20 tyleet kernel: [ 1399.501050] [drm:drm_calc_vbltimestamp_from_scanoutpos], crtc 1 : v 5 p(0,111)@ 1399.501043 -> 1399.498113 [e 6 us, 0 rep] Nov 3 20:12:20 tyleet kernel: [ 1399.521076] [drm:i830_get_fifo_size], FIFO size - (0x00017e5f) A: 47 Nov 3 20:12:20 tyleet kernel: [ 1399.521103] [drm:intel_calculate_wm], FIFO entries required for mode: 99 Nov 3 20:12:20 tyleet kernel: [ 1399.521110] [drm:intel_calculate_wm], FIFO watermark level: -54 Nov 3 20:12:20 tyleet kernel: [ 1399.521116] [drm:i830_update_wm], Setting FIFO watermarks - A: 1 Nov 3 20:12:20 tyleet kernel: [ 1399.521139] [drm:drm_vblank_get], enabling vblank on crtc 1, ret: -22 Nov 3 20:12:20 tyleet kernel: [ 1399.529131] [drm:i8xx_update_pll], computed PLL value is 0xd0820000 Nov 3 20:12:20 tyleet kernel: [ 1399.529139] [drm:i8xx_update_pll], clock P1 is 4 Nov 3 20:12:20 tyleet kernel: [ 1399.529150] [drm:i8xx_update_pll], clock P2 is 4 Nov 3 20:12:20 tyleet kernel: [ 1399.529279] [drm:i9xx_update_plane], Writing base 02C00000 00000000 0 0 8192 Nov 3 20:12:20 tyleet kernel: [ 1399.529301] [drm:intel_crtc_mode_set], [ENCODER:7:None-7] set [MODE:0:] Nov 3 20:12:20 tyleet kernel: [ 1399.552060] [drm:ns2501_mode_set], ns2501_mode_set: set mode (hdisplay=1024,htotal=1344,vdisplay=768,vtotal=806). Nov 3 20:12:20 tyleet kernel: [ 1399.552081] [drm:ns2501_mode_set], ns2501_mode_set: switching to 1024x768 Nov 3 20:12:20 tyleet kernel: [ 1399.552375] [drm:ns2501_writeb], Unable to write register 0x37 to i915 gmbus dpb:56 Nov 3 20:12:20 tyleet kernel: [ 1399.552641] [drm:ns2501_writeb], Unable to write register 0x08 to i915 gmbus dpb:56 Nov 3 20:12:20 tyleet kernel: [ 1399.552650] [drm:enable_dvo], enable_dvo: Trying to re-enable the DVO Nov 3 20:12:20 tyleet kernel: [ 1399.552659] [drm:enable_dvo], DVOA ctrl 0x00000000 Nov 3 20:12:20 tyleet kernel: [ 1399.552665] [drm:enable_dvo], DVOB ctrl 0x80004084 Nov 3 20:12:20 tyleet kernel: [ 1399.552675] [drm:enable_dvo], DVOC ctrl 0xd0004084 Nov 3 20:12:20 tyleet kernel: [ 1399.552682] [drm:enable_dvo], PLL A ctrl 0x90a00000 Nov 3 20:12:20 tyleet kernel: [ 1399.552689] [drm:enable_dvo], PLL B ctrl 0xd0820000 Nov 3 20:12:20 tyleet kernel: [ 1399.552697] [drm:ns2501_mode_set], ns2501_mode_set: switching to 1024x768 Nov 3 20:12:20 tyleet kernel: [ 1399.554019] [drm:ns2501_dpms], ns2501_dpms: Trying set the dpms of the DVO to 1 Nov 3 20:12:20 tyleet kernel: [ 1399.554282] [drm:ns2501_writeb], Unable to write register 0x08 to i915 gmbus dpb:56 Nov 3 20:12:20 tyleet kernel: [ 1399.554546] [drm:ns2501_writeb], Unable to write register 0x34 to i915 gmbus dpb:56 Nov 3 20:12:20 tyleet kernel: [ 1399.554810] [drm:ns2501_writeb], Unable to write register 0x35 to i915 gmbus dpb:56 Nov 3 20:12:20 tyleet kernel: [ 1399.554817] [drm:enable_dvo], enable_dvo: Trying to re-enable the DVO Nov 3 20:12:20 tyleet kernel: [ 1399.554825] [drm:enable_dvo], DVOA ctrl 0x00000000 Nov 3 20:12:20 tyleet kernel: [ 1399.554831] [drm:enable_dvo], DVOB ctrl 0x80004084 Nov 3 20:12:20 tyleet kernel: [ 1399.554839] [drm:enable_dvo], DVOC ctrl 0xd0004084 Nov 3 20:12:20 tyleet kernel: [ 1399.554846] [drm:enable_dvo], PLL A ctrl 0x90a00000 Nov 3 20:12:20 tyleet kernel: [ 1399.554853] [drm:enable_dvo], PLL B ctrl 0xd0820000 Nov 3 20:12:20 tyleet kernel: [ 1399.558625] [drm:drm_calc_timestamping_constants], crtc 4: hwmode: htotal 1344, vtotal 806, vdisplay 768 Nov 3 20:12:20 tyleet kernel: [ 1399.558646] [drm:drm_calc_timestamping_constants], crtc 4: clock 65000 kHz framedur 16665600 linedur 20676, pixeldur 15 Nov 3 20:12:20 tyleet kernel: [ 1399.558673] [drm:intel_connector_check_state], [CONNECTOR:5:VGA-1] Nov 3 20:12:20 tyleet kernel: [ 1399.558943] [drm:ns2501_readb], Unable to read register 0x08 from i915 gmbus dpb:0x38. Nov 3 20:12:20 tyleet kernel: [ 1399.558955] [drm:check_encoder_state], [ENCODER:6:DAC-6] Nov 3 20:12:20 tyleet kernel: [ 1399.558964] [drm:check_encoder_state], [ENCODER:7:None-7] Nov 3 20:12:20 tyleet kernel: [ 1399.558972] [drm:check_crtc_state], [CRTC:3] Nov 3 20:12:20 tyleet kernel: [ 1399.559005] [drm:check_crtc_state], [CRTC:4] Nov 3 20:12:20 tyleet kernel: [ 1399.559027] [drm:drm_framebuffer_reference], FB ID: 39 Nov 3 20:12:20 tyleet kernel: [ 1399.559036] [drm:drm_framebuffer_unreference], FB ID: 39 Nov 3 20:12:20 tyleet kernel: [ 1399.559042] [drm:drm_framebuffer_reference], FB ID: 39 Nov 3 20:12:20 tyleet kernel: [ 1399.559047] [drm:drm_framebuffer_unreference], FB ID: 39 Nov 3 20:12:20 tyleet kernel: [ 1399.559059] [drm:drm_framebuffer_unreference], FB ID: 39 /* snip */ The drm:enable_dvo lines are from my current version of the patch and dump the corresponding i835 registers. Note the following: Assuming that the internal panel is feed by pipe B (I hope I assume right) then the PLL registers are off. They should be 0xd0820000, but the PLL for pipe B is configured to 0xd0840000. I'll check later what this bit precisely means. One way or another, the PLL configuration is not correct to feed the DVO, and hence I'll get a frozen DVO again. )-: Greetings, Thomas ^ permalink raw reply [flat|nested] 20+ messages in thread
end of thread, other threads:[~2013-11-15 19:00 UTC | newest]
Thread overview: 20+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2013-11-03 16:55 More questions and patches for 835GM/ns2501 DVO Thomas Richter
2013-11-03 17:12 ` Daniel Vetter
2013-11-03 17:13 ` Daniel Vetter
[not found] ` <19544_1383498802_52768431_19544_2610_1_20131103171348.GB4167@phenom.ffwll.local>
2013-11-03 19:00 ` Thomas Richter
2013-11-03 21:18 ` Daniel Vetter
2013-11-06 10:34 ` Daniel Vetter
2013-11-15 17:33 ` Daniel Vetter
[not found] ` <10422_1384536748_52865AAC_10422_4782_1_20131115173300.GZ22741@phenom.ffwll.local>
2013-11-15 18:59 ` Thomas Richter
[not found] ` <8785_1383734019_527A1B02_8785_7652_1_20131106103405.GH14082@phenom.ffwll.local>
2013-11-06 19:27 ` Thomas Richter
[not found] ` <19544_1383513468_5276BD7B_19544_3653_1_20131103211814.GC4167@phenom.ffwll.local>
2013-11-03 23:09 ` Thomas Richter
2013-11-04 7:15 ` Daniel Vetter
[not found] ` <19544_1383549334_52774996_19544_5502_1_CAKMK7uEPjjCsqYTpyO+Bes1eg5b8fVfGFkzQFtwDPxYNe4KwRw@mail.gmail.com>
2013-11-04 11:57 ` Thomas Richter
2013-11-04 15:15 ` Daniel Vetter
2013-11-04 15:48 ` Ville Syrjälä
2013-11-04 16:05 ` Ville Syrjälä
[not found] ` <19544_1383578084_5277B9E4_19544_9350_1_20131104151509.GF4167@phenom.ffwll.local>
2013-11-04 23:20 ` Patches for i830 flicker on panning Thomas Richter
2013-11-05 7:07 ` Daniel Vetter
2013-11-03 23:56 ` 16bpp and 8bpp uxa output broken Thomas Richter
2013-11-04 7:20 ` Daniel Vetter
2013-11-03 19:39 ` More questions and patches for 835GM/ns2501 DVO Thomas Richter
This is a public inbox, see mirroring instructions for how to clone and mirror all data and code used for this inbox