NetBSD-Bugs archive

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

Re: port-i386/49678: DRM errors with i386 i915drmkms on 82915GM (eeepc 900)



The following reply was made to PR port-i386/49678; it has been noted by GNATS.

From: Taylor R Campbell <riastradh%NetBSD.org@localhost>
To: mlh%goathill.org@localhost (MLH)
Cc: gnats-bugs%NetBSD.org@localhost, gnats-admin%netbsd.org@localhost, netbsd-bugs%netbsd.org@localhost,
	mlh%goathill.org@localhost
Subject: Re: port-i386/49678: DRM errors with i386 i915drmkms on 82915GM (eeepc 900)
Date: Sun, 5 Apr 2015 21:45:00 +0000

 This is a multi-part message in MIME format.
 --=_119vVBc/1Z6lXS2SVLFhP1c+Ic8tZqKu
 
    Date: Sun, 5 Apr 2015 16:20:12 -0400 (EDT)
    From: mlh%goathill.org@localhost (MLH)
 
    Taylor R Campbell wrote:
    >  Can you please CVS update to sys/dev/pci/agp_i810.c 1.118 and try
    >  again?
 
    No change that I can see.
 
 In that case, can you try the attached patch and send me the dmesg
 output?  You can revert the earlier one changing bus_space_map.
 
 --=_119vVBc/1Z6lXS2SVLFhP1c+Ic8tZqKu
 Content-Type: text/plain; charset="ISO-8859-1"; name="debug-vbios"
 Content-Transfer-Encoding: quoted-printable
 Content-Disposition: attachment; filename="debug-vbios.patch"
 
 Index: sys/external/bsd/drm2/include/linux/pci.h
 =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
 =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
 =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D
 RCS file: /cvsroot/src/sys/external/bsd/drm2/include/linux/pci.h,v
 retrieving revision 1.15
 diff -p -u -r1.15 pci.h
 --- sys/external/bsd/drm2/include/linux/pci.h	6 Mar 2015 01:43:07 -0000	1.15
 +++ sys/external/bsd/drm2/include/linux/pci.h	5 Apr 2015 21:44:22 -0000
 @@ -481,15 +481,21 @@ pci_map_rom_md(struct pci_dev *pdev)
  	bus_space_handle_t rom_bsh;
  	int error;
 =20
 -	if (PCI_CLASS(pdev->pd_pa.pa_class) !=3D PCI_CLASS_DISPLAY)
 +	if (PCI_CLASS(pdev->pd_pa.pa_class) !=3D PCI_CLASS_DISPLAY) {
 +		printf("pci_map_rom_md: not display class\n");
  		return ENXIO;
 -	if (PCI_SUBCLASS(pdev->pd_pa.pa_class) !=3D PCI_SUBCLASS_DISPLAY_VGA)
 +	}
 +	if (PCI_SUBCLASS(pdev->pd_pa.pa_class) !=3D PCI_SUBCLASS_DISPLAY_VGA) {
 +		printf("pci_map_rom_md: display class, not VGA subclass\n");
  		return ENXIO;
 +	}
  	/* XXX Check whether this is the primary VGA card?  */
  	error =3D bus_space_map(pdev->pd_pa.pa_memt, rom_base, rom_size,
  	    (BUS_SPACE_MAP_LINEAR | BUS_SPACE_MAP_PREFETCHABLE), &rom_bsh);
 -	if (error)
 +	if (error) {
 +		printf("pci_map_rom_md: failed to map 0x20000 @ 0xc0000\n");
  		return ENXIO;
 +	}
 =20
  	pdev->pd_rom_bst =3D pdev->pd_pa.pa_memt;
  	pdev->pd_rom_bsh =3D rom_bsh;
 @@ -513,13 +519,17 @@ pci_map_rom(struct pci_dev *pdev, size_t
  		(BUS_SPACE_MAP_PREFETCHABLE | BUS_SPACE_MAP_LINEAR),
  		&pdev->pd_rom_bst, &pdev->pd_rom_bsh, NULL, &pdev->pd_rom_size)
  	    !=3D 0 &&
 -	    pci_map_rom_md(pdev) !=3D 0)
 +	    pci_map_rom_md(pdev) !=3D 0) {
 +		printf("pci_map_rom: failed to map ROM BAR\n");
 +		printf("pci_map_rom: failed to map MD ROM\n");
  		return NULL;
 +	}
  	pdev->pd_kludges |=3D NBPCI_KLUDGE_MAP_ROM;
 =20
  	/* XXX This type is obviously wrong in general...  */
  	if (pci_find_rom(&pdev->pd_pa, pdev->pd_rom_bst, pdev->pd_rom_bsh,
  		pdev->pd_rom_size, PCI_ROM_CODE_TYPE_X86, &bsh, &size)) {
 +		printf("pci_map_rom: failed to find ROM\n");
  		pci_unmap_rom(pdev, NULL);
  		return NULL;
  	}
 Index: sys/kern/subr_extent.c
 =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
 =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
 =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D
 RCS file: /cvsroot/src/sys/kern/subr_extent.c,v
 retrieving revision 1.76
 diff -p -u -r1.76 subr_extent.c
 --- sys/kern/subr_extent.c	10 Jul 2014 21:13:52 -0000	1.76
 +++ sys/kern/subr_extent.c	5 Apr 2015 21:44:22 -0000
 @@ -600,6 +600,7 @@ extent_alloc_region(struct extent *ex, u
   * The allocated region is aligned to "alignment", which must be
   * a power of 2.
   */
 +#include <ddb/ddb.h>
  int
  extent_alloc_subregion1(struct extent *ex, u_long substart, u_long subend,
      u_long size, u_long alignment, u_long skew, u_long boundary,
 @@ -968,6 +969,12 @@ skip:
  	 */
  	extent_insert_and_optimize(ex, newstart, size, flags, last, myrp);
  	mutex_exit(&ex->ex_lock);
 +	if (newstart <=3D 0xc0000 && 0xc0000 - newstart < size) {
 +		printf("%s: extent allocing vga rom: [%lu, %lu)",
 +		    __func__, newstart, newstart + size);
 +		db_stack_trace_print((db_expr_t)(intptr_t)
 +		    __builtin_frame_address(0), true, 65536, "", printf);
 +	}
  	*result =3D newstart;
  	return (0);
  }
 
 --=_119vVBc/1Z6lXS2SVLFhP1c+Ic8tZqKu--
 


Home | Main Index | Thread Index | Old Index