This would be great, but... I have just tested the patches and it really messes up the system.
On the first boot I got a shell and was able to to a dmesg: ... [ 46.775935] [drm] Initialized drm 1.1.0 20060810 [ 46.926398] i915 0000:00:02.0: enabling device (0000 -> 0003) [ 46.926412] i915 0000:00:02.0: PCI INT A -> GSI 16 (level, low) -> IRQ 16 [ 46.926422] i915 0000:00:02.0: setting latency timer to 64 [ 46.932858] [drm] set up 31M of stolen space [ 46.933087] i915 0000:00:02.0: BAR 6: can't allocate resource (bogus alignment) [0x0-0x0] flags 0x0 [ 46.933093] [drm] failed to find VBIOS tables [ 46.978294] [drm] initialized overlay support [ 47.308831] Console: switching to colour frame buffer device 160x64 [ 47.308849] fb0: inteldrmfb frame buffer device [ 47.308853] registered panic notifier [ 47.308868] [drm] Initialized i915 1.6.0 20080730 for 0000:00:02.0 on minor 0 [ 47.323940] vgaarb: this pci device is not a vga device [ 47.355806] render error detected, EIR: 0x00000010 [ 47.355815] [drm:i915_handle_error] *ERROR* EIR stuck: 0x00000010, masking [ 47.355835] render error detected, EIR: 0x00000010 [ 48.112726] vgaarb: this pci device is not a vga device [ 48.568008] tap0: no IPv6 routers present [ 50.673130] lp0: using parport0 (interrupt-driven). [ 50.842153] [drm:i915_hangcheck_elapsed] *ERROR* Hangcheck timer elapsed... GPU hung [ 50.842166] render error detected, EIR: 0x00000000 [ 50.842200] [drm:i915_do_wait_request] *ERROR* i915_do_wait_request returns -5 (awaiting 1 at 0) [ 51.100509] ppdev: user-space parallel port driver [ 51.436065] EXT3-fs error (device sda2): ext3_lookup: deleted inode referenced: 157299 [ 51.436076] Aborting journal on device sda2. [ 51.436296] Remounting filesystem read-only ... On the second boot the computer hung altogether. Xorg seemed to initialise but ended up with this (last) line in the log file: (EE) intel(0): Detected a hung GPU, disabling acceleration. I have attached the log for completeness. So I believe for the older kernel there would be more to patch than this... I have attached the diff of the changes I have done so far - should be the two patches Chris had listed. Compared against the sources from: ii linux-source-2.6.32 2.6.32-38 Linux kernel source for version 2.6.32 with Debian patches Were the changes I did correct? Just in case I messed things up myself... Yours, Tempura. On Mon, 10 Oct 2011 21:06:27 +0200, Julien Cristau wrote: > On Sun, Oct 9, 2011 at 19:36:27 +0100, Chris Wilson wrote: > >> On Sun, 9 Oct 2011 14:44:30 +0200, Daniel Vetter <dan...@ffwll.ch> wrote: >>> On Sun, Oct 09, 2011 at 01:07:25PM +0200, Tempura San wrote: >>>> Here is the output of lspci -nn: >>>> >>>> 00:00.0 Host bridge [0600]: Intel Corporation 82865G/PE/P DRAM >>>> Controller/Host-Hub Interface [8086:2570] (rev 02) >>>> 00:02.0 Display controller [0380]: Intel Corporation 82865G Integrated >>>> Graphics Controller [8086:2572] (rev 02) >>> The issue seems to be that the igd isn't a VGA pci class device anymore >>> when used as secondary. The below (untested) patch should allow to still >>> bind the i915 driver. Please test how far that gets us. >> Note the old kernel, and probable lack of: >> >> commit 934f992c763ae1e5eefcce8af769c16444085df7 >> Author: Chris Wilson <ch...@chris-wilson.co.uk> >> Date: Thu Jan 20 13:09:12 2011 +0000 >> >> drm/i915: Recognise non-VGA display devices >> >> Starting with SandyBridge (though possible with earlier hacked BIOSes), >> the BIOS may initialise the IGFX as secondary to a discrete GPU. Prior, >> it would simply disable the integrated GPU. So we adjust our PCI class >> mask to match any DISPLAY_CLASS device. >> >> In such a configuration, the IGFX is not a primary VGA controller and >> so should not take part in VGA arbitration, and the error return from >> vga_client_register() is expected. >> >> Signed-off-by: Chris Wilson <ch...@chris-wilson.co.uk> >> Cc: sta...@kernel.org >> >> and >> >> commit 5fe49d86f9d01044abf687a8cd21edef636d58aa >> Author: Chris Wilson <ch...@chris-wilson.co.uk> >> Date: Tue Feb 1 19:43:02 2011 +0000 >> >> drm/i915: Only bind to function 0 of the PCI device >> >> Early chipsets (gen2/3) used function 1 as a placeholder for multi-head. >> We used to ignore these since they were not assigned to >> PCI_CLASS_DISPLAY_VGA. However with 934f992c7 we attempt to bind to all >> Intel PCI_CLASS_DISPLAY devices (and functions) to work in multi-gpu >> systems. This fails hard on gen2/3. >> >> Reported-by: Ferenc W??gner <wf...@niif.hu> >> Tested-by: Ferenc W??gner <wf...@niif.hu> >> Bugzilla: https://bugzilla.kernel.org/show_bug.cgi?id=28012 >> Signed-off-by: Chris Wilson <ch...@chris-wilson.co.uk> >> Cc: sta...@kernel.org > I'll try to get these included into a future squeeze kernel update. > Thanks. > > Cheers, > Julien
diff -uNr linux-source-2.6.32/drivers/gpu/drm/i915/i915_dma.c linux-source-2.6.32-i915/drivers/gpu/drm/i915/i915_dma.c --- linux-source-2.6.32/drivers/gpu/drm/i915/i915_dma.c 2011-10-02 01:46:54.000000000 +0200 +++ linux-source-2.6.32-i915/drivers/gpu/drm/i915/i915_dma.c 2011-10-09 21:55:14.000000000 +0200 @@ -1267,9 +1267,15 @@ if (ret) DRM_INFO("failed to find VBIOS tables\n"); - /* if we have > 1 VGA cards, then disable the radeon VGA resources */ - ret = vga_client_register(dev->pdev, dev, NULL, i915_vga_set_decode); - if (ret) + /* If we have > 1 VGA cards, then we need to arbitrate access + * to the common VGA resources. + * + * If we are a secondary display controller (!PCI_DISPLAY_CLASS_VGA), + * then we do not take part in VGA arbitration and the + * vga_client_register() fails with -ENODEV. + */ + ret = vga_client_register(dev->pdev, dev, NULL, i915_vga_set_decode); + if (ret && ret != -ENODEV) goto destroy_ringbuffer; /* IIR "flip pending" bit means done if this bit is set */ diff -uNr linux-source-2.6.32/drivers/gpu/drm/i915/i915_drv.c linux-source-2.6.32-i915/drivers/gpu/drm/i915/i915_drv.c --- linux-source-2.6.32/drivers/gpu/drm/i915/i915_drv.c 2011-10-02 01:46:49.000000000 +0200 +++ linux-source-2.6.32-i915/drivers/gpu/drm/i915/i915_drv.c 2011-10-09 21:59:58.000000000 +0200 @@ -52,7 +52,7 @@ #define INTEL_VGA_DEVICE(id, info) { \ .class = PCI_CLASS_DISPLAY_VGA << 8, \ - .class_mask = 0xffff00, \ + .class_mask = 0xff0000, \ .vendor = 0x8086, \ .device = id, \ .subvendor = PCI_ANY_ID, \ @@ -393,6 +393,14 @@ static int __devinit i915_pci_probe(struct pci_dev *pdev, const struct pci_device_id *ent) { + /* Only bind to function 0 of the device. Early generations + * used function 1 as a placeholder for multi-head. This causes + * us confusion instead, especially on the systems where both + * functions have the same PCI-ID! + */ + if (PCI_FUNC(pdev->devfn)) + return -ENODEV; + return drm_get_dev(pdev, ent, &driver); } diff -uNr linux-source-2.6.32/drivers/gpu/vga/vgaarb.c linux-source-2.6.32-i915/drivers/gpu/vga/vgaarb.c --- linux-source-2.6.32/drivers/gpu/vga/vgaarb.c 2011-10-02 01:46:46.000000000 +0200 +++ linux-source-2.6.32-i915/drivers/gpu/vga/vgaarb.c 2011-10-09 21:56:59.000000000 +0200 @@ -614,7 +614,7 @@ void (*irq_set_state)(void *cookie, bool state), unsigned int (*set_vga_decode)(void *cookie, bool decode)) { - int ret = -1; + int ret = -ENODEV; struct vga_device *vgadev; unsigned long flags;
Xorg.0.log.old
Description: application/trash
_______________________________________________ Intel-gfx mailing list Intel-gfx@lists.freedesktop.org http://lists.freedesktop.org/mailman/listinfo/intel-gfx