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)



   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.
Index: sys/external/bsd/drm2/include/linux/pci.h
===================================================================
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;
 
-	if (PCI_CLASS(pdev->pd_pa.pa_class) != PCI_CLASS_DISPLAY)
+	if (PCI_CLASS(pdev->pd_pa.pa_class) != PCI_CLASS_DISPLAY) {
+		printf("pci_map_rom_md: not display class\n");
 		return ENXIO;
-	if (PCI_SUBCLASS(pdev->pd_pa.pa_class) != PCI_SUBCLASS_DISPLAY_VGA)
+	}
+	if (PCI_SUBCLASS(pdev->pd_pa.pa_class) != 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 = 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;
+	}
 
 	pdev->pd_rom_bst = pdev->pd_pa.pa_memt;
 	pdev->pd_rom_bsh = 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)
 	    != 0 &&
-	    pci_map_rom_md(pdev) != 0)
+	    pci_map_rom_md(pdev) != 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 |= NBPCI_KLUDGE_MAP_ROM;
 
 	/* 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
===================================================================
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 <= 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 = newstart;
 	return (0);
 }


Home | Main Index | Thread Index | Old Index